
var JsManager=new Object();Class.inherits(JsManager,{init:function(){this.files=new Hash();this.intervals=new Array();this.maxLoops=60;this.rootPath=''},setRootPath:function(pth){this.rootPath=pth;Log('JSMan-events',['Set Root: '+pth]);},addFile:function(src,functs,vars,id){var id=id;if(id){if(this.files[id]){this.files[id].addFuncts(functs);this.files[id].addVars(vars);}
else{this.files[id]=new JsLibraryFile(src,functs,vars);}}
else{var s=this.files.some(function(val,key){if(val.src==src){val.addFuncts(functs);val.addVars(vars);return true}},this);if(!s){id="js"+Math.floor(Math.random()*10000);this.files[id]=new JsLibraryFile(src,functs,vars)}}
Log('JSMan-events',['Add File'+_BR+' id: '+id+_BR+' src:'+src]);return id},loadByFunct:function(functName,run,params,obj){this.files.forEach(function(val,key){val.functions.forEach(function(v,k){if(functName==k){if(run){this.runOnLoad(v,functName,params,obj);}
this.loadById(key);return;}},this);},this);Log('JSMan-events',['Load By Function: '+functName]);},loadByVar:function(varName){this.files.forEach(function(val,key){val.vars.forEach(function(v,k){if(varName==k){this.loadById(key);return;}},this);},this);Log('JSMan-events',['Load By Variable: '+varName]);},loadJsSrc:function(src,id){document.getElementsByTagName("head")[0].appendChild($e("script",{type:"text/javascript",src:this.rootPath+src,id:'jslib_'+id}));Log('JSMan-events',['Load JS Src: '+src]);},loadBySrc:function(src,functs){if(functs!=null){this.addFile(src,functs);}
var s=this.files.some(function(val,key){if(val.src==src){if(!val.loaded){this.loadJsSrc(src,x);this.monitorSrcStatus(x);}
return true;}},this);if(!s){this.loadJsSrc(src);}
Log('JSMan-events',['Load By Src: '+src]);},loadById:function(id){if((this.files[id])&&(!this.files[id].loaded)){this.loadJsSrc(this.files[id].src,id);this.monitorSrcStatus(id);Log('JSMan-events',['Load By ID: '+id]);}},runOnLoad:function(id,funct,params,obj){this.files[id].runFunct=funct;this.files[id].runParams=params;this.files[id].runObj=obj;Log('JSMan-events',['Set Run on Load function: '+funct+_BR+'id: '+id]);},runExternalOnLoad:function(id,funct,params,obj){this.files[id].extFunct=funct;this.files[id].extParams=params;this.files[id].extobj=obj;Log('JSMan-events',['Set Run External on Load function: '+funct+_BR+'id: '+id]);},monitorSrcStatus:function(srcNum){var f=this.files[srcNum];f.functions.forEach(function(val,key,ar){if((!val)&&(checkFunction(key))){val=true;f.fCount++;if(key==f.runFunct){this.runFunction(f.runFunct,f.runParams,f.runObj);f.runFunct=null;f.runObj=null;f.runParams=null;}}},this);f.vars.forEach(function(val,key,ar){var pat1=/[\w](\.\w)+/gi;if(((!val)&&(isGlobalVar(key)))||((key.match(pat1))&&(isDefined(key)))){val=true;f.vCount++;}},this);if((f.fCount==f.addedFuncCount)&&(f.vCount==f.addedVarCount)){f.loaded=true;if(f.extFunct!=null){this.runFunction(f.extFunct,f.extParams,f.extObj);f.extFunct=null;f.extParams=null;f.extObj=null;}
clearInterval(this.intervals[srcNum]);}
else{f.checkCount++;if(this.intervals[srcNum]==null){var _t=this;this.intervals[srcNum]=setInterval(function(){_t.monitorSrcStatus(srcNum)},500);}}},runFunction:function(funct,params,obj){obj=obj||window;if(!isArray(params)){params=[params]}
if(checkFunction(funct)){if(isFunction(funct)){funct.apply(obj,params);}
else{obj[funct].apply(obj,params);}}
else{this.loadByFunct(true,funct,params,obj);}
Log('JSMan-events',['Run Function: '+funct]);}});var JsLibraryFile=Class.create();Class.inherits(JsLibraryFile.prototype,{init:function(jsSrc,functs,vars){this.src=jsSrc;this.fCount=0;this.addedFuncCount=0;this.vCount=0;this.addedVarCount=0;this.vars=new Hash();this.functions=new Hash();this.runFunct=null;this.runObj=null;this.runParams=null;this.checkCount=0;this.loaded=false;this.extFunct=null;this.extObj=null;this.extParams=null;this.addFuncts(functs);this.addVars(vars);},addFuncts:function(functs){if(isString(functs)){if(!this.hasFunct(functs)){this.functions[functs]=checkFunction(functs);if(this.functions[functs]){this.fCount++}
this.addedFuncCount++;}}
else if(isArray(functs)){funct.forEach(function(val,key){if(!this.hasFunct(functs[y])){this.functions[functs[y]]=checkFunction(functs[y]);if(this.functions[functs]){this.fCount++}
this.addedFuncCount++;}},this);}},addVars:function(v){if(isString(v)){if(!this.hasVars(v)){this.vars[v]=isGlobalVar(v);if(this.vars[v]){this.vCount++;}
this.addedVarCount++;}}
else if(isArray(v)){for(var y=0;y<v.length;y++){if(!this.hasVars(v[y])){this.vars[v[y]]=isGlobalVar(v[y]);this.addedVarCount++;}}}},hasFunct:function(funct){return this.functions.hasKey(funct)},hasVars:function(v){return this.vars.hasKey(v)},functIsLoaded:function(funct){return this.functions[funct]},varIsLoaded:function(v){return this.vars[v]}});JsManager.init();Logs.addLogType('JSMan-events',false,false,['Event']);