function ModuleEntry(module){this.module=module;this.script=null;}function CallContext(fptr,modules){this.fptr=fptr;this.modules=modules;this.current=0;}function SystemLoader(){this._modules=[];}SystemLoader.extend({call:function(fptr,modules){var list=this._getMissedModules(modules);if(list.length>0){this._context=new CallContext(fptr,list);this._dlg=new LoaderDialog(list.length,this._onCancel.bind(this));this._dlg.show(true);this._loadResourceFiles(list);this._load();}else fptr();},_moduleLoaded:function(module){if(this._modules.indexOf(module)!=-1)return true;return sjcl.isScriptLoaded(module);},_getMissedModules:function(modules){var list=[];for(var i=0;i<modules.length;i++){if(modules[i]&&!this._moduleLoaded(modules[i]))list.push(new ModuleEntry(modules[i]));}return list;},_loadResourceFiles:function(list){var sb=new sjcl.StringBuilder(",");for(var i=0;i<list.length;i++)sb.write(list[i].module.substring(1)+".res");this._wr=new sjcl.net.WebRequest("/lib/ajax/LoadResourceFiles.php",this._onResourceFilesLoaded.bind(this),null,"POST","Files="+sb.toString());},_load:function(){var me=this._context.modules[this._context.current];me.script=document.createElement("SCRIPT");me.script.type="text/javascript";me.script.language="javascript";me.script.src=me.module;if(sjcl.browser.isIE)sjcl.event.add(me.script,"readystatechange",this._onLoad.bind(this));else sjcl.event.add(me.script,"load",this._onLoad.bind(this));sjcl.dom.head().appendChild(me.script);},_call:function(){if(this._resourcesLoaded&&this._context&&(this._context.current==this._context.modules.length)){this._dlg.close();this._context.fptr();this._dlg=this._context=null;}},_onResourceFilesLoaded:function(){if(this._wr.getText()){try{eval(this._wr.getText());}catch(ex){}}this._resourcesLoaded=true;this._wr=null;this._call();},_onLoad:function(){var me=this._context.modules[this._context.current];if(sjcl.browser.isIE&&!(me.script.readyState=="loaded"||me.script.readyState=="complete"))return;this._modules.add(me.module,true);this._dlg.progress();this._context.current++;if(this._context.current<this._context.modules.length)this._load();else this._call();},_onCancel:function(){this._dlg=this._context=null;}});function LoaderDialog(count,onCancel){this.count=count;this.onCancel=onCancel;this._current=0;this.dlg=g_WinManager.createWindow("Loader",getString("LOADING"));this.dlg.destroyOnHide=true;this.dlg.dialogButtons=sjcl.widget.DialogButtons.OkCancel;this.dlg.alignment="center";this.dlg.minimizeBox=false;this.dlg.controlBox=false;this.dlg.allowResize=false;this.dlg.clientHeight=60;this.dlg.onShow=this._onShow.bind(this);this.dlg.onCancel=this._onCancel.bind(this);return this;}LoaderDialog.inherits(sjcl.widget.Dialog);LoaderDialog.extend({progress:function(){this._progress.setValue(Math.round(++this._current/this.count*100));},_createHtml:function(){var div=document.createElement("DIV");var tbl=div.appendChild(document.createElement("TABLE"));var bdy=tbl.appendChild(document.createElement("TBODY"));var tr=bdy.appendChild(document.createElement("TR"));var td=tr.appendChild(document.createElement("TD"));td.innerHTML=getString("WAIT_LM");tr=bdy.appendChild(document.createElement("TR"));td=tr.appendChild(document.createElement("TD"));this._progress=new sjcl.widget.ProgressBar();this._progress.build(td);tbl.cellPadding="0px";tbl.cellSpacing="10px";tbl.className="W100";div.className="DlgMarginB";return div;},_onShow:function(){var frame=this.dlg.getContentCell();frame.appendChild(this._createHtml());this.dlg.showButton("Ok",false);},_onCancel:function(){if(this.onCancel)this.onCancel();}});var g_SysLoader=new SystemLoader();