var mx_root=this;
var mx_undef=function(name,obj){if(!obj){obj=mx_root
}return(typeof obj[name]==="undefined")
};
var mx_mkns=function(ns){var names=ns.split(/\./);
var obj=mx_root;
var i;
for(i=0;
i<names.length;
i=i+1){if(mx_undef(names[i],obj)){obj[names[i]]={}
}obj=obj[names[i]]
}return obj
};
var mx_mkmodule=function(module,constructor){var i=module.lastIndexOf(".");
var ns=mx_mkns(module.substring(0,i));
module=module.substring(i+1);
if(mx_undef(module,ns)){ns[module]=constructor
}return new ns[module]()
};
mx_mkns("mx.env");
mx_mkns("mx.utils");
mx_mkns("mx.http");
mx_mkns("mx.engine");
var mx_isIE=function(){return !(mx_undef("ActiveXObject",window))
};
mx.utils.Utils=function(){var debugLoggingOn=false;
var logger;
var webContextRoot=".";
this.parseInt=function(s){var n=parseInt(s,10);
if(isNaN(n)){throw new Error("'"+s+"' is not an integer.")
}return n
};
this.getFormElement=function(formName,elemName){var form=document.forms[formName];
var elem;
if(form){elem=form[elemName];
if(elem){return elem
}}throw new Error("No such element '"+elemName+"' for form '"+formName+"'")
};
this.assert=function(bool,msg){if(!bool){alert("ASSERT ERROR: "+msg)
}};
this.getXSLTemplate=function(xslFileName){var xslTemplate=null;
var xsl;
if(mx_isIE()){xsl=new ActiveXObject(this.getActiveXName("FreeThreadedDOMDocument"));
xsl.async=false;
xsl.load(xslFileName);
if(xsl.readyState!==4){alert("Document not ready")
}else{if(!xsl.documentElement){alert("Failed to load XML document ("+xslFileName+")")
}else{xslTemplate=new ActiveXObject(this.getActiveXName("XSLTemplate"));
xslTemplate.stylesheet=xsl
}}}else{xslTemplate=this.XML("url("+xslFileName+")")
}return xslTemplate
};
this.transform=function(xml,xsl,params){var result="";
var processor;
var newDoc;
var i;
if(mx_isIE()){processor=xsl.createProcessor();
processor.input=xml;
if(params){for(i=0;
i<params.length;
i=i+1){processor.addParameter(params[i][0],params[i][1])
}}processor.transform();
result=processor.output
}else{processor=new XSLTProcessor();
processor.importStylesheet(xsl);
if(params){for(i=0;
i<params.length;
i=i+1){processor.setParameter(null,params[i][0],params[i][1])
}}newDoc=processor.transformToDocument(xml);
result=this.xmlToString(newDoc)
}return result
};
this.setWebContextRoot=function(path){webContextRoot=path
};
this.getApplicationUrl=function(url){return webContextRoot+"/"+url
};
this.getServiceUrl=function(service){return this.getApplicationUrl("service/"+service)
};
this.getCommonImageUrl=function(image){return this.getApplicationUrl("common/images/"+image)
};
this.getViewUrl=function(nViewId){var sUrl=mxutils.getApplicationUrl("index.html");
sUrl=sUrl+"?id="+nViewId;
return sUrl
};
this.addCssLink=function(id,cssURL){var existingLink=document.getElementById(id);
var head;
var newCssLink;
if(!existingLink){head=document.getElementsByTagName("head")[0];
newCssLink=document.createElement("link");
newCssLink.setAttribute("id",id);
newCssLink.setAttribute("href",cssURL);
newCssLink.setAttribute("rel","stylesheet");
newCssLink.setAttribute("type","text/css");
head.appendChild(newCssLink);
return true
}return false
};
this.getPageParam=function(name){var url;
var pos;
var qryString;
var p;
var params,param,pair;
var pname,pvalue;
if(!this.pageParams){url=document.location.href;
this.pageParams={};
pos=url.indexOf("?");
if(pos>-1){qryString=url.substring(pos+1);
params=qryString.split("&");
for(p=0;
p<params.length;
p=p+1){param=params[p];
pair=param.split("=");
if(pair.length>0){pname=pair[0];
pvalue="";
if(pair.length>1){pvalue=unescape(pair[1].replace(/\+/g," "))
}this.pageParams[pname]=pvalue
}}}}return this.pageParams[name]
};
var initLog=function(){if(logger===undefined){debugLoggingOn=false;
logger=mxEngine.requireModule("logConsole/logConsole.js");
debugLoggingOn=true;
logger.activate()
}};
this.enableLogDebug=function(enabled){debugLoggingOn=enabled;
if(debugLoggingOn){initLog()
}if(debugLoggingOn&&logger){logger.show()
}if(!debugLoggingOn&&logger){logger.hide()
}};
this.logDebug=function(msg,clear){if(debugLoggingOn){initLog();
if(clear){logger.clear()
}logger.log(msg)
}};
this.getActiveXName=function(suffix){if(mx_undef("activeXNames",this)){this.activeXNames={}
}var name=this.activeXNames[suffix];
var prefixes;
var i;
var tryname;
var o;
if(!name){prefixes=["MSXML4","MSXML3","MSXML2","MSXML","Microsoft"];
for(i=0;
i<prefixes.length&&!name;
i=i+1){try{tryname=prefixes[i]+"."+suffix;
o=new ActiveXObject(tryname);
name=tryname
}catch(ex){}}if(!name){throw new Error("Could not find a ActiveX Object for suffix: "+suffix)
}else{this.activeXNames[suffix]=name
}}return name
};
this.XML=function(str){return(new this.XMLDOM(str)).getXML()
};
this.xmlToString=function(node){var s="";
var ser;
if(node){if(mx_isIE()&&node.xml){s=node.xml
}else{ser=new XMLSerializer();
s=ser.serializeToString(node)
}}return s
};
this.select=function(node,xpath){var list=[];
var nodes;
var i;
var doc;
var nthNode;
if(node){if(mx_isIE()){nodes=node.selectNodes(xpath);
if(nodes){for(i=0;
i<nodes.length;
i=i+1){list.push(nodes[i])
}}}else{doc=node.ownerDocument;
nodes=doc.evaluate(xpath,node,null,XPathResult.ANY_TYPE,null);
if(nodes){nthNode=nodes.iterateNext();
while(nthNode){list.push(nthNode);
nthNode=nodes.iterateNext()
}}}}return list
};
this.selectSingle=function(node,xpath){var result=null;
var doc;
var nodes;
if(node){if(mx_isIE()&&node.xml){result=node.selectSingleNode(xpath)
}else{doc=node.ownerDocument;
this.assert(doc,"selectSingle() : No owner doc on node. Probably not an XML node.");
if(doc){nodes=doc.evaluate(xpath,node,null,XPathResult.ANY_TYPE,null);
if(nodes){result=nodes.iterateNext()
}}}}return result
};
this.xmlValue=function(node){var value="";
var nodes;
var i;
var child;
if(node){nodes=node.childNodes;
for(i=0;
i<nodes.length;
i=i+1){child=nodes[i];
if(child.nodeType===3||child.nodeType===4){value+=child.data
}}}return value
};
this.XMLDOM=function(str){var parser;
if(mx_isIE()){this.island=new ActiveXObject(mxutils.getActiveXName("DOMDocument"));
this.island.setProperty("SelectionLanguage","XPath");
this.island.async=false;
if(str){if(str.substring(0,4)==="url("&&str.substring(str.length-1)===")"){this.url=str.substring(4,str.length-1);
this.island.load(this.url)
}else{this.island.loadXML(str)
}}}else{if(str){if(str.substring(0,4)==="url("&&str.substring(str.length-1)===")"){this.url=str.substring(4,str.length-1);
this.island=document.implementation.createDocument("","xsldoc",null);
this.island.async=false;
this.island.load(this.url)
}else{parser=new DOMParser();
this.island=parser.parseFromString(str,"text/xml")
}}}};
this.XMLDOM.prototype.getXML=function(){var errorMsg;
var node;
if(this.island.parseError){if(this.island.parseError!=0){errorMsg="XML island: "+this.url+"\n\n"+this.island.parseError.reason+"\nat char: "+this.island.parseError.linepos+" in line: "+this.island.parseError.line+" near:\n"+this.island.parseError.srcText+"\n"
}}else{if(!this.island.documentElement){errorMsg="No document after parse"
}else{node=this.island.documentElement;
if(node.nodeName==="parsererror"){errorMsg="XML Parse error occured"
}}}if(errorMsg){throw new Error(errorMsg)
}return this.island.documentElement
};
this.toDate=function(dateString){var date=undefined;
var dateParts;
var mon;
var day;
var year;
if(dateString){dateParts=dateString.split("-");
if(dateParts.length===3){year=dateParts[0];
if(year.length===4){mon=dateParts[1];
day=dateParts[2];
if(mon.length===2){if(mon.indexOf("0")===0){mon=mon.substring(1)
}}if(day.length===2){if(day.indexOf("0")===0){day=day.substring(1)
}}date=new Date();
date.setDate(day);
date.setMonth((parseInt(mon,10)-1));
date.setYear(year)
}}}if(!date){throw new Error("Could not interpret one of your date values. Please use the format YYYY-MM-DD")
}else{return date
}};
this.formatDate=function(dateToFormat,formatString){var d=dateToFormat||new Date();
var f=formatString||"YYYY-MM-DD";
if(f!=="YYYY-MM-DD"&&f!=="YYYY-MM-DD hh:mm:ss.mmm"){throw new Error("Unsupported formatString '"+f+"' not allowed.")
}var pad=function(n){return(n>9)?""+n:"0"+n
};
var padTwo=function(n){var s;
s=(n<100)?"0"+n:""+n;
s=(n<10)?"00"+n:""+n;
return s
};
var sDate;
var sTime;
var sYYYY;
var sMM;
var sDD;
var shh;
var smm;
var sss;
var sMili;
var nMM;
var nDD;
var nhh;
var nmm;
var nss;
var nMili;
sYYYY=""+d.getFullYear();
nMM=d.getMonth()+1;
sMM=pad(nMM);
nDD=d.getDate();
sDD=pad(nDD);
sDate=sYYYY+"-"+sMM+"-"+sDD;
if(f==="YYYY-MM-DD hh:mm:ss.mmm"){nhh=d.getHours();
shh=pad(nhh);
nmm=d.getMinutes();
smm=pad(nmm);
nss=d.getSeconds();
sss=pad(nss);
nMili=d.getMilliseconds();
sMili=padTwo(nMili);
sTime=" "+shh+":"+smm+":"+sss+"."+sMili
}else{sTime=""
}return sDate+sTime
};
var oIllegalCharRegexps={ALPHA_NUM:/[^a-zA-Z0-9]/,ALPHA_NUM_SPACE:/[^a-zA-Z0-9 ]/,NO_XML_SPECIAL:/[\'\"\>\<\&]/};
this.validate=function(sToValidate,sValidationType){var re=oIllegalCharRegexps[sValidationType]||oIllegalCharRegexps.ALPHA_NUM;
return !re.test(sToValidate)
};
this.signProtectedURLs=function(htmlContent,nAuthorizationId){var urlPattern="mx.protectedURL[";
var moreLinks=true;
var newContent="";
var remaining=htmlContent;
var pos;
var sTmpUrl;
while(moreLinks){pos=remaining.indexOf(urlPattern);
if(pos>-1){newContent+=remaining.substring(0,pos);
remaining=remaining.substring(pos+urlPattern.length);
pos=remaining.indexOf("]");
sTmpUrl=remaining.substring(0,pos);
newContent+=mxEngine.appendPageParam(sTmpUrl,"authorizationId",nAuthorizationId);
remaining=remaining.substring(pos+1)
}else{moreLinks=false
}}newContent+=remaining;
return newContent
}
};
var mxutils=new mx.utils.Utils();
mx.env.setClientProperty=function(name,value){this.setCookie(name,value)
};
mx.env.getClientProperty=function(name){return this.getCookie(name)
};
mx.env.clearClientProperty=function(name){this.deleteCookie(name)
};
mx.env.clearClientProperties=function(){document.cookie=""
};
mx.env.setCookie=function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+path:"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");
document.cookie=curCookie
};
mx.env.getCookie=function(name){var dc=document.cookie;
var prefix=name+"=";
var begin=dc.indexOf("; "+prefix);
if(begin===-1){begin=dc.indexOf(prefix);
if(begin!==0){return null
}}else{begin+=2
}var end=document.cookie.indexOf(";",begin);
if(end===-1){end=dc.length
}return unescape(dc.substring(begin+prefix.length,end))
};
mx.env.deleteCookie=function(name,path,domain){if(this.getCookie(name)){document.cookie=name+"="+((path)?"; path="+path:"")+((domain)?"; domain="+domain:"")+"; expires=Thu, 01-Jan-70 00:00:01 GMT"
}};
mx.http.redirectSymbol="@@REDIRECT@@";
mx.http.HTTP=function(baseURL,callback){this.logIO=true;
this.baseURL=baseURL;
this.userName=undefined;
this.userToken=undefined;
this.userPassword=undefined;
if(callback){if(mx_undef("onError",callback)){throw new Error("No onError() function for HTTP callback object")
}if(mx_undef("onContent",callback)){throw new Error("No onContent() function for HTTP callback object")
}if(mx_undef("onXMLContent",callback)){throw new Error("No onXMLContent() function for HTTP callback object")
}this.callback=callback
}this.setUser=function(sUserName,sPassword){this.userName=sUserName;
this.userPassword=sPassword
};
this.get=function(path,async,callbackId,resultAsXML){var url=this.baseURL+path;
var httpObj;
try{httpObj=this.prepareHttp("GET",url,async);
if(this.callback){this.configCallback(httpObj,callbackId,resultAsXML)
}httpObj.send(null)
}catch(e){throw new Error("Error sending HTTP request @ "+url)
}var result=null;
if(!this.callback){result=this.getResponseData(httpObj)
}return result
};
this.postXML=function(request,async,callbackId){if(!request.nodeName){throw new Error("The mx.http.HTTP.postXML() was passed a non-xml argument")
}var xml=mxutils.xmlToString(request);
if(this.logIO){mxutils.logDebug("[http] postXML() request : "+xml)
}var httpObj;
try{httpObj=this.prepareHttp("POST",this.baseURL,async);
if(this.callback){this.configCallback(httpObj,callbackId,true)
}httpObj.send(xml)
}catch(e){throw new Error("Could not connect to server @ "+this.baseURL)
}var resultNode=null;
var resultData;
if(!this.callback){this.checkRedirect(httpObj.getResponseHeader("Location"));
resultData=this.getResponseData(httpObj);
if(this.logIO){mxutils.logDebug("[http] postXML() response : "+resultData)
}resultNode=mxutils.XML(resultData);
this.checkRedirect(resultNode.getAttribute("redirectURL"))
}return resultNode
};
this.prepareHttp=function(method,url,async){var httpObject=this.newXmlHttp();
httpObject.open(method,url,(async===undefined?false:async));
httpObject.setRequestHeader("mxweb-agent","1.0");
var basicAuth;
if(this.userToken){httpObject.setRequestHeader("MX-AuthenticationToken",this.userToken)
}else{if(this.userName&&this.userPassword){basicAuth="Basic "+this.userName+":"+this.userPassword;
httpObject.setRequestHeader("MX-Authorization",basicAuth)
}}return httpObject
};
this.configCallback=function(httpObj,callbackId,resultAsXML){var c=this.callback;
var h=this;
var cid=callbackId;
var xml=resultAsXML;
if(xml===undefined){xml=false
}var data;
httpObj.onreadystatechange=function(){if(httpObj.readyState===4){try{data=h.getResponseData(httpObj);
if(resultAsXML){c.onXMLContent(mxutils.XML(data),cid)
}else{c.onContent(data,cid)
}}catch(e){c.onError("HTTP call failed ",cid)
}}}
};
this.getXML=function(path,async,callbackId){var bIsXml=true;
var content=this.get(path,async,callbackId,bIsXml);
if(!async){return mxutils.XML(content)
}};
this.getResponseData=function(httpObj){var status=httpObj.status;
if(status!==200&&status!==0){throw new Error("HTTP ("+status+") "+httpObj.statusText)
}return httpObj.responseText
};
this.checkRedirect=function(url){var e;
if(url&&url.length>0){alert("REDIRECTING to "+url);
document.location=url;
e={message:mx.http.redirectSymbol};
throw e
}};
this.newXmlHttp=function(){var httpObject=null;
try{if(mx_isIE()){httpObject=new ActiveXObject(mxutils.getActiveXName("XmlHTTP"))
}else{httpObject=new XMLHttpRequest()
}}catch(e){}if(!httpObject){alert("Your browser does not support XmlHttp objects")
}return httpObject
}
};
mx.engine.userCredential=null;
mx.engine.Engine=function(homeLocation){if(!homeLocation){homeLocation="engine"
}this.homeLocation=mxutils.getApplicationUrl(homeLocation);
this.modules=[];
this.init=function(){};
this.loginUser=function(sUserId,sPassword){mxutils.logDebug("[mxweb] loginUser("+sUserId+", "+sPassword+")");
var oUserAdminMod=this.requireModule("services/userAdmin-svc.js");
var xAuthResult=oUserAdminMod.login(sUserId,sPassword);
mx.engine.userCredential={userName:xAuthResult.getAttribute("userLabel")}
};
this.logoutUser=function(){var oUserAdminMod=this.requireModule("services/userAdmin-svc.js");
oUserAdminMod.logout();
mx.engine.userCredential=null
};
this.getUser=function(){return mx.engine.userCredential
};
this.appendPageParam=function(sUrl,sKey,sValue){var sNewUrl;
sNewUrl=sUrl+(sUrl.indexOf("?")===-1?"?":"&")+sKey+"="+sValue;
return sNewUrl
};
this.signForm=function(form){mxutils.logDebug("[mxweb] signForm: doing nothing")
};
this.ModuleContext=function(name,homeURI,viewBinding){this.name=name;
this.homeURI=homeURI;
this.viewBinding=viewBinding;
this.cache=[];
this.cacheXSLEnabled=true
};
this.ModuleContext.prototype.cachePut=function(type,key,obj){var c=this.cache[type];
if(!c){c=this.cache[type]=[]
}c[key]=obj
};
this.ModuleContext.prototype.cacheGet=function(type,key){var obj;
var c=this.cache[type];
if(c){obj=c[key]
}return obj
};
this.ModuleContext.prototype.getCachedXSL=function(path){var s=this.cacheGet("xsl",path);
var url;
if(!s){url=this.homeURI+path;
s=mxutils.getXSLTemplate(url);
if(this.cacheXSLEnabled){this.cachePut("xsl",path,s)
}}return s
};
this.ModuleContext.prototype.loadXML=function(uri){var path=this.homeURI+uri;
return mxutils.XML("url("+path+")")
};
this.ModuleContext.prototype.prepare=function(data){mxutils.logDebug("[mxweb] prepare: doing nothing");
return data
};
this.ModuleContext.prototype.loadContent=function(uri){var httpObj=new mx.http.HTTP(this.homeURI);
return httpObj.get(uri)
};
this.loadModule=function(uri,viewBinding){var mod=this.modules[uri];
if(mod){return mod
}var content;
var http;
var url;
var moduleName;
var modCtx;
try{url=this.homeLocation+"/modules/"+uri;
mxutils.logDebug("[engine] downloading module from "+url);
http=new mx.http.HTTP("");
content=http.get(url);
mod=eval(content);
if(!mod){alert("no module returned from eval.")
}else{if(mx_undef("getName",mod)){alert("module '"+uri+"' does not implement getName() interface.")
}else{this.modules[uri]=mod;
moduleName=mod.getName();
mx_root[moduleName]=mod;
if(!mx_undef("init",mod)){mxutils.logDebug("[engine] initializing module ..");
modCtx=this.createContext(moduleName,url,viewBinding);
mod.init(modCtx)
}mxutils.logDebug("[engine] loaded module successfully")
}}}catch(e){alert("Could not load module : '"+uri+"' reason : "+e.message);
throw e
}return mod
};
this.createContext=function(moduleName,url,viewBinding){var modHomeURI=url.substring(0,url.lastIndexOf("/")+1);
var ctx=new this.ModuleContext(moduleName,modHomeURI,viewBinding);
ctx.engine=this;
return ctx
};
this.unloadModules=function(){var module;
var moduleURI;
for(moduleURI in this.modules){module=this.modules[moduleURI];
this.unloadModule(module.getName())
}this.modules=[]
};
this.unloadModule=function(moduleName){var moduleObj=mx_root[moduleName];
if(moduleObj){if(!mx_undef("close",moduleObj)){moduleObj.close()
}}mx_root[moduleName]=undefined
};
this.requireModule=function(uri,viewBinding){return this.loadModule(uri,viewBinding)
};
this.getModule=function(name){var mod=mx_root[name];
if(!mod){throw new Error("The module '"+name+"' was requested, but it has not been loaded")
}}
};