
Type.registerNamespace("CodeEffects.Installer.UI");
CodeEffects.Installer.UI.Crumb = function(tag,selected){
this.Tag = tag;
this.Selected = selected;};
CodeEffects.Installer.UI.Types = function(){
this.Demo = "0";
this.Standard = "1";
this.Enterprise = "2";
this.ReStandard = "3";
this.ReEnterprise = "4";
this.Transactions = "5";
this.Update = "6";};
CodeEffects.Installer.UI.Selection = function(type){
this.Type = type;
this.ID = null;};
CodeEffects.Installer.UI.Smoother = function(){
var elem,cur,lim,inc,p,sp,cb;
var t = null;
this.init = function(el,current,increment,limit,speed,increase,callback){
elem = el;cur = current;lim = limit;inc = increment;p = increase;sp = speed;
cb = callback;
start();}
var start = function(){try{t = window.setInterval(handler,sp);}catch(e){}}
var stop = function(){try{window.clearInterval(t);}catch(e){}t = null;}
var handler = function(){
stop();
inc++;
if(p){
cur += inc;
elem.style.height = cur+"px";
if(cur < lim)start();
else{
elem.style.height = lim+"px";
if(CodeEffects.Core.defined(cb))cb();}}
else{
cur -= inc;
if(cur < 0)cur = lim;
elem.style.height = cur+"px";
if(cur > lim)start();
else{
elem.style.height = lim+"px";
if(CodeEffects.Core.defined(cb))cb();}}}};
CodeEffects.Installer.UI.ErrorHandler = function(production){
this.soapError = function(e){
if(e.get_exceptionType){
switch(e.get_exceptionType()){
case "CodeEffects.Common.InvalidInputException":
alerter.warn(e.get_message());
break;
case "CodeEffects.Common.AccessDeniedException":
denied();
break;
case "CodeEffects.Common.SessionExpiredException":
window.location.href = "/errors/expired.htm";
break;
default:
if(production)window.location.href = "/errors/500.htm";
else alerter.error(e.get_message());
break;}}
else alerter.warn(e);}
this.deny = function(){denied();}
this.httpError = function(e){window.location.href = "/errors/404.htm";}
this.clientError = function(e){alerter.error(e);}
var denied = function(){window.location.href = "/errors/403.htm";}};
CodeEffects.Installer.UI.Loader = function(handler){
var divPage,s,l,method = null;
this.init = function(pageContainer,loaded){
divPage = pageContainer;
method = loaded;
s = new CodeEffects.Installer.UI.Smoother();}
this.load = function(address){
l = address;
var o = Sys.UI.DomElement.getBounds(divPage).height;
if(o > 0)divPage.style.height = o+"px";
divPage.innerHTML = "";
if(o > 0)s.init(divPage,o,2,20,10,false,begin);
else begin();}
this.finish = function(height,done){
var o = Sys.UI.DomElement.getBounds(divPage).height;
if(o > 0)s.init(divPage,o,2,height,10,height > o,done);
else{
if(height > 0)divPage.style.height = height + "px";
done();}}
var begin = function(){CodeEffects.Core.getSource(l,method,handler.httpError);}};
CodeEffects.Installer.UI.Event = function(name,context){
this.fire = function(arg){
var e = context.events[name];
if(CodeEffects.Core.defined(e) && e.length > 0)
for(var i in e)if(typeof(e[i].Callback)=="function")e[i].Callback(arg);}};
CodeEffects.Installer.UI.Context = function(){
this.progress = null;
this.handler = null;
this.messages = {};
this.events = {};
this.isProduction = true;
this.selection = null;
this.exitUrl = null;
this.ie6 = false;
function Subscription(method,id){
this.Callback = method;
this.Subscriber = id;}
this.convertMessages = function(pairs){
var arr = {};
for(var i in pairs)arr[pairs[i].ID] = pairs[i].Name;
return arr;}
this.subscribe = function(name,subscriber,callback){
if(!CodeEffects.Core.defined(this.events[name]))this.events[name] = [];
for(var i in this.events[name]){
if(this.events[name][i].Subscriber == subscriber){
Array.removeAt(this.events[name],i);
break;}}
this.events[name].push(new Subscription(callback,subscriber));}};
CodeEffects.Installer.UI.Buttons = function(context,frame,div){
var btnNext,btnBack,back = null,next = null;
this.init = function(){
div.innerHTML = "";
btnBack = document.createElement("SPAN");
btnBack.id = "spnPortBackNav";
CodeEffects.Core.write(btnBack,context.messages["l109"]);
div.appendChild(btnBack);
btnBack.style.display = "none";
btnNext= document.createElement("SPAN");
btnNext.id = "spnPortNextNav";
btnNext.style.marginLeft = "20px";
CodeEffects.Core.write(btnNext,context.messages["l108"]);
div.appendChild(btnNext);
btnNext.style.display = "none";}
this.setBack = function(callback){
back = callback;
btnBack.style.display = "";
doBack();}
this.setNext = function(callback){
next = callback;
btnNext.style.display = "";
doNext();}
this.disable = function(){
if(CodeEffects.Core.defined(back)){
btnBack.className = "bold verdana dimmedText";
btnBack.onclick = btnBack.onmouseover = btnBack.onmouseout = null;}
if(CodeEffects.Core.defined(next)){
btnNext.className = "bold verdana dimmedText";
btnNext.onclick = btnNext.onmouseover = btnNext.onmouseout = null;}}
this.enable = function(){
if(CodeEffects.Core.defined(back))doBack();
if(CodeEffects.Core.defined(next))doNext();}
var doBack = function(){
btnBack.className = "link bold verdana control";
btnBack.onclick = function(e){if(CodeEffects.Core.defined(back))back();}
btnBack.onmouseover = function(e){over(this);}
btnBack.onmouseout = function(e){out(this);}}
var doNext = function(){
btnNext.className = "link bold verdana control";
btnNext.onclick = function(e){if(CodeEffects.Core.defined(next))next();}
btnNext.onmouseover = function(e){over(this);}
btnNext.onmouseout = function(e){out(this);}}
var over = function(el){el.className = "link bold verdana dimmedText";}
var out = function(el){el.className = "link bold verdana control";}};
CodeEffects.Installer.UI.Port = function(){
var service,elements,context,links = {},loader = null,instanceLabels = null,instance = null,pageInstance = null;
var divPageTmpl,loading = false,globalId = 0,exit,selectedId;
this.init = function(production,ie6){
var div = $get("divPortLoading");
CodeEffects.Core.centerElement(div);
instance = this;
context = new CodeEffects.Installer.UI.Context();
context.isProduction = production;
context.ie6 = ie6;
CodeEffects.Core.registerLoadEvent(load);}
this.getLink = function(id){doLink(id);}
this.setCrumbs = function(crumbs){doCrumbs(crumbs);}
var load = function(){
elements = new CodeEffects.Core.Elements($get("divPortContent"),"ce");
divPageTmpl = $get("divPortHtmlTemp");
context.progress = new CodeEffects.Tools.Progress();
context.progress.init(elements.tdProgress,"greenBackground");
context.handler = new CodeEffects.Installer.UI.ErrorHandler(context.isProduction);
service = CodeEffects.Installer.Site.Common.Services.Soap.Port;
service.GetSettings(loaded,context.handler.soapError);}
var loaded = function(result){
context.messages = context.convertMessages(result.Messages);
CodeEffects.Core.globalize(elements.divContent,context.messages);
loader = new CodeEffects.Installer.UI.Loader(context.handler);
loader.init(elements.divPage,pageLoaded);
for(var i in result.Links){
links[result.Links[i].ID] = result.Links[i];
if(result.Links[i].Initial)selectedId = result.Links[i].ID;}
exit = result.Url;
elements.spnLogout.onclick = function(e){logout();}
loadPage();
$get("divPortLoading").style.display = "none";
elements.divContent.style.display = "";}
var doLink = function(id){if(loading)return;selectedId = id;loadPage();}
var doCrumbs = function(crumbs){
elements.divCrumbs.innerHTML = "";
var spn,prev = true,cl;
for(var i in crumbs){
var spn = addCrumb(context.messages[crumbs[i].Tag]);
cl = prev ? "crumb bold" : "dimmedText crumb bold";
if(crumbs[i].Selected){
prev = false;
spn.className = "bold green solidGreenBorder crumb";}
else spn.className = cl;
elements.divCrumbs.appendChild(spn);
if(i < crumbs.length-1){
spn = addCrumb(null);
spn.className = prev ? "crumb" : "dimmedText crumb";
elements.divCrumbs.appendChild(spn);}}}
var addCrumb = function(title){
var spn = document.createElement("SPAN");
spn.id = "spnPortCrumb"+globalId;
globalId++;
if(!CodeEffects.Core.defined(title))spn.innerHTML = "&#187;";
else CodeEffects.Core.write(spn,title);
return spn;}
var logout = function(){
context.progress.start(0);
service.Exit(loggedout,loggedout);}
var loggedout = function(result){
context.progress.stop();
window.location.href = exit;}
var loadPage = function(){
loading = true;
context.progress.start(2);
if(links[selectedId].Code.length > 0)
CodeEffects.Core.getCode(links[selectedId].Code,links[selectedId].Class,loadDom);
else loadDom();}
var loadDom = function(){
var w = Sys.UI.DomElement.getBounds(elements.divPage).width;
if(w > 0)divPageTmpl.style.width = w + "px";
else divPageTmpl.style.width = "640px";
loader.load(links[selectedId].Source);}
var pageLoaded = function(result){
divPageTmpl.innerHTML = result;
var sec = links[selectedId].UiNode;
if(sec.length > 0)service.GetLabels(sec,pageUiLoaded,context.handler.soapError);
else pageUiLoaded(null);}
var pageUiLoaded = function(result){
if(CodeEffects.Core.defined(result))instanceLabels = context.convertMessages(result);
else instanceLabels = null;
var h = Sys.UI.DomElement.getBounds(divPageTmpl).height;
loader.finish(h,loaderFinalized);}
var loaderFinalized = function(){
if(CodeEffects.Core.defined(pageInstance) && pageInstance.dispose)pageInstance.dispose();
var l = links[selectedId];
elements.divPage.innerHTML = divPageTmpl.innerHTML;
divPageTmpl.innerHTML = elements.divPage.style.height = "";
if(l.Class.length > 0){
pageInstance = eval("new "+l.Class+"(context,instance)");
context.subscribe(l.Class+".Initialized",elements.divContent.id,pageInitialized);
pageInstance.init(instanceLabels);}
else{
pageInstance = instanceLabels = null;
pageInitialized();}}
var pageInitialized = function(){
context.progress.stop();
loading = false;}};