//global variables:
/***************************
 * auth
 * fm
 * ui
 ***************************/
window["show"]=function(obj){
  var output="";
  for(var i in obj){
    output+=i+": "+obj[i]+"\n";
  }
  alert(output);
}
///system conf
if(window['__SYSTEM_JS_VARIABLE_NAME']==null) window['__SYSTEM_JS_VARIABLE_NAME']="nomo";
  
if (!window[__SYSTEM_JS_VARIABLE_NAME]) {
  window[__SYSTEM_JS_VARIABLE_NAME] = {name:'presystem'};
}

if (!window[__SYSTEM_JS_VARIABLE_NAME]['base']){
  window[__SYSTEM_JS_VARIABLE_NAME]['base']=new function(){  
    var me=this;
    var name="preClass";me.toString=function(){return name};
    me.iAmTheLoader=false;
    me.classes=new Array();
    me.classes.skin=new Array();
    me.classes.ui=new Array();
    me.classes.resources=new Array();
    me.classes.resources.webui=new Array();
    me.mode=null;
    me.path='./'; if(typeof(NOMO_ENGINE_BASEPATH)=="string") {me.path=NOMO_ENGINE_BASEPATH};
    me.includes=[];
    if(typeof(NOMO_ENGINE_INCLUDES)=="object" && typeof(NOMO_ENGINE_INCLUDES.length)=="number" ) {me.includes=NOMO_ENGINE_INCLUDES};
    me.ver='000000';
    
    //config
    me.config={
      'interfaceUrl':'/admin/interface.php',
      'aadd':'aaa',
      'name':'nomo'
    }
    
    me.init=function(){
      me.addEvent(window,'load',me.checkReadyState,false);  
      me.addEvent(window,'unload',me.onUnLoad,false);
      var _system=me.searchSystem(self);
      if (_system==null){       
        window[__SYSTEM_JS_VARIABLE_NAME].ReadyState=1;
        
        var scripts = document.getElementsByTagName("script");
        for (var i=0; i<scripts.length; i++) {
          if (scripts.item(i).src && scripts.item(i).src.match(/engine\.js(|\?.*)$/)) {
            me.path = scripts.item(i).src.replace(/engine\.js(|\?.*)$/,'');
            var index=scripts.item(i).src.lastIndexOf("mode=");
            if(index>-1){
              me.mode=scripts.item(i).src.substr(index+5);
              if(me.mode.indexOf("&")>-1)
                me.mode=me.mode.substr(0,me.mode.indexOf("&"));
            }
            index=scripts.item(i).src.lastIndexOf("ver=");
            if(index>-1){
              me.ver=scripts.item(i).src.substr(index+4);
              if(me.ver.indexOf("&")>-1)
                me.ver=me.ver.substr(0,me.ver.indexOf("&"));
            }
            break;
          }
        }
        
        var params="?ver="+me.ver;
        if(me.mode=="debug"){
          params+="&rnd="+Math.random();
          //compress js files
          //me.includeJavaScript(me.path + 'js/all.js.php?create=1&nooutput=1&skin='+me.debug+'&rnd='+Math.random());
        }
        
        {
          me.includeJavaScript(me.path + 'extras/functions.js'+params);
          me.includeJavaScript(me.path + 'extras/json2.js'+params);
          me.includeJavaScript(me.path + 'extras/xmlextras.js'+params);
          me.includeJavaScript(me.path + 'classes/ajax.class.js'+params);
          me.includeJavaScript(me.path + 'classes/event.class.js'+params);
          me.includeJavaScript(me.path + 'classes/system.class.js'+params);  
          me.includeJavaScript(me.path + 'classes/usersession.class.js'+params);
          me.includeJavaScript(me.path + 'classes/utils.class.js'+params);
          
          for(var i=0;i<me.includes.length;i++){
            me.includeJavaScript(me.path + 'classes/resources/'+me.includes[i]+params);
          }              
        }
        me.iAmTheLoader=true;
      }else{
        window[__SYSTEM_JS_VARIABLE_NAME]=_system;
        if(typeof(console)!="undefined"  && me.mode=="debug") 
          console.log("set: "+window[__SYSTEM_JS_VARIABLE_NAME].createdAt+window.location);
      }
 
      if(!window[__SYSTEM_JS_VARIABLE_NAME]['frames']) window[__SYSTEM_JS_VARIABLE_NAME]['frames']=new Array();
      window[__SYSTEM_JS_VARIABLE_NAME]['frames'].push({'winref':window,'baseref':me});
    }
    
    me._log=function(msg){
      if(typeof(console)!="undefined" && me.mode=="debug") 
        console.log(msg);
    }
    
    me.onUnLoad=function(){
      var frms=window[__SYSTEM_JS_VARIABLE_NAME]['frames'];
      for(var i=0;i<frms.length;i++){
        if(frms[i].winref==window) {
          if(typeof(window[__SYSTEM_JS_VARIABLE_NAME].onUnLoad)=="function")
            window[__SYSTEM_JS_VARIABLE_NAME].onUnLoad(window);
          frms.splice(i,1);
          i--;
        }
      }
    }
    
    /*me.getDocumentByFrame=function(oFrame){
      var oDoc = (oFrame.contentWindow || oFrame.contentDocument);
      if (oDoc.document) oDoc = oDoc.document;
      return oDoc;
    } */
    
    me.checkReadyState=function(evt){
      var calltype="inner";
      if (!evt) var evt = window.event;
      if(evt && evt.type) calltype=evt.type.toString(); 	
      
      if(window==this && me.iAmTheLoader && window[__SYSTEM_JS_VARIABLE_NAME].ReadyState<3){
        
        var frames=window[__SYSTEM_JS_VARIABLE_NAME]['frames'];
        //window[__SYSTEM_JS_VARIABLE_NAME].prototype = new window[__SYSTEM_JS_VARIABLE_NAME].base.classes.System(me);
        var setOnLoadCallBack=window[__SYSTEM_JS_VARIABLE_NAME].setOnLoadCallBack;
        window[__SYSTEM_JS_VARIABLE_NAME] = new window[__SYSTEM_JS_VARIABLE_NAME].base.classes.System(me);
        window[__SYSTEM_JS_VARIABLE_NAME]['frames']=frames;
        window[__SYSTEM_JS_VARIABLE_NAME]['setOnLoadCallBack']=setOnLoadCallBack;
        window[__SYSTEM_JS_VARIABLE_NAME].ReadyState=3;
        window[__SYSTEM_JS_VARIABLE_NAME].window=window;
        window[__SYSTEM_JS_VARIABLE_NAME].document=document;
        window[__SYSTEM_JS_VARIABLE_NAME].createdAt=Math.random();
        var frames=window[__SYSTEM_JS_VARIABLE_NAME]['frames'];
        for(var i=0; i<frames.length;i++){
          if(frames[i].winref!=window){
            if(typeof(console)!="undefined"  && me.mode=="debug") 
              console.log(i+": "+frames[i].winref.location+" - "+window.location);
            frames[i].winref[__SYSTEM_JS_VARIABLE_NAME]=window[__SYSTEM_JS_VARIABLE_NAME];
          }
        }
      }
      
      var frames=window[__SYSTEM_JS_VARIABLE_NAME]['frames'];
      for(var i=0; i<frames.length;i++){
        if(frames[i].winref==window){
          if(calltype=="load"){
            frames[i].ReadyState="loaded";
            if(typeof(console)!="undefined"  && me.mode=="debug") 
              console.log("loaded: "+frames[i].winref.location);
              
          }
        }
        
        if(window[__SYSTEM_JS_VARIABLE_NAME].ReadyState>2){// && cb['ReadyState']=="loaded"){
          if(frames[i].cbs){
            for(var j=0;j<frames[i].cbs.length;j++){
              if(!frames[i].cbs[j].executed && frames[i].ReadyState=="loaded"){
                if(typeof(console)!="undefined"  && me.mode=="debug") 
                  console.log("call "+frames[i].winref.location+" - "+window[__SYSTEM_JS_VARIABLE_NAME].createdAt);
                //alert(frames[i].winref.nomo);
                frames[i].cbs[j].executed=true;
                frames[i].cbs[j].fn.call(frames[i].winref,window[__SYSTEM_JS_VARIABLE_NAME]);
              }
            }            
          }
        }
      } 
    } 
    
    me.addEvent=function(elm, evType, fn, useCapture) {
      if (elm.addEventListener) {
        elm.addEventListener(evType, fn, useCapture);
        return true;
      }else if (elm.attachEvent) {
        var r = elm.attachEvent('on' + evType, fn);
        return r;
      }else {
        elm['on' + evType] = fn;
      }
    }
    
    me.include=function(_params){
      if(!_params) _params="";
      if(typeof(_params)=="string");
        _params={"name":_params}
       
      var classPath=_params.name.split("/");
      
      
      me.includeJavaScript(me.path + "classes/resources/" +_params.name);
    }
    
    me.includeJavaScript =function(jsFile,doc){
      if(!doc) doc=document;
      doc.write('<script type="text/javascript" src="' + jsFile + '"></script>');
    }			   
        
    me.searchSystem=function (frm){
      //if frm's doc is not in our server, break immediately
      try{
        frm[__SYSTEM_JS_VARIABLE_NAME];
      }catch (e){
        return null;
      }
      
      if (frm[__SYSTEM_JS_VARIABLE_NAME] && frm[__SYSTEM_JS_VARIABLE_NAME].ReadyState){
        return frm[__SYSTEM_JS_VARIABLE_NAME];
      }else{
        if (frm==frm.top){
          return null;
        }
        return me.searchSystem(frm.parent);
      }
    }
    me.init();  
  }
  
  window[__SYSTEM_JS_VARIABLE_NAME].setOnLoadCallBack=function(fn){  
    var frames=window[__SYSTEM_JS_VARIABLE_NAME]['frames'];
    for(var i=0; i<frames.length;i++){
      if(frames[i].winref==window){
        if(!frames[i].cbs) frames[i].cbs=[];
        frames[i].cbs.push({"fn":fn,"executed":false});
        //frames[i].cb={"fn":fn,"executed":false};
      }
    }
    window[__SYSTEM_JS_VARIABLE_NAME]['base'].checkReadyState();
  }
}


