/**
 * @namespace DGR
 * @description wijzig appRoot als alles klaar is
 */
window.onerror = function(msg,url,l){
	if (msg) {
		defaultStatus += msg + ' line: ' + l;
	}
	return true;
}

appStore = new (function (){
	var x=this;
	x.debugMode = true;
    x.namespace = 'DGR';
    x.appRoot   = '/nw2009/js/'; //aanpassen later
    x.localRoot = true;
    x.version   = '1.17-' + 
	                (x.debugMode ? 
	                  Number(new Date()) : 
					   '');
	return x;
  })();  


  defaultStatus = 'page laden ...';
  window.onload = function(){
     window[appStore.namespace]
  			= new Lib(['main']);
     }


/* ------------- onder deze regel bij voorkeur niets bewerken ------------- */

function Lib(aModules){
  var libx = this
      , oLoad = arguments[1] || null
	  , currTime = new Date()
      , jsPath = ((appStore||{}).appRoot || '/')+''
	  , timeElapsed;

/*
 *  --- variabele definitie einde ---
 */


/*
 *  --- properties definitie start ---
 */
libx.loadWait   = waitFor; 
libx.toString   = function(){
                      return appStore.namespace + ' loaded';
                  };
libx.appCache   = {
				   	d       : document,
				   	w       : window,
					isIe6   : navigator.appName.match(/internet expl/i) &&
               				  parseFloat((navigator.appVersion).split(/MSIE|,/i)[1]) < 7,
	                isOpera : window.opera || null,
					isIe7   : navigator.appName.match(/internet expl/i) &&
               				   parseFloat((navigator.appVersion).split(/MSIE|,/i)[1]) > 6,
					isIe    : (document.all && !window.opera) || null
				   };
libx.pageonload = function(){
					var revbox = document.getElementById('debug');
                    if (revbox){
                    timeElapsed = new Date()-currTime;
				 	 revbox.innerHTML += 
					  'verwerkingstijd javascript (client): ' + (timeElapsed)
		 				 + ' ms ('+(timeElapsed/1000)+' sec)';
                    }
   				  };
/*
 *  --- properties definitie eind ---
 */

/*
 *  --- MAIN ---
 */
loadModuleDefinitions();
//handle(window,'load',libx.pageonload);

/* 
 * --- functie definitie start ---
 */

/** @id waitFor */
function waitFor(what,action){
         var counter = 0; //max 3 sec
    	 function chkwhat() {
           var tst = what instanceof Function ? what() : libx[what];
      	   if (!tst && counter<5000) {
          		counter += 10;
          		setTimeout(chkwhat,10);
      	   } else {
	  	   if (counter >= 5000) {
		   		defaultStatus += ' Module ' + what + ' may not be loaded ...';
				clearTimeout(0);
				return true;
	       }
           clearTimeout(0);
         return action();
        }
       }
       chkwhat();
      }

/** @id modulesOnloadLoader */
function modulesOnloadLoader(){
        for (var l in libx.oModules) {
            if (libx[l] && libx[l].onLoad && !libx[l].onloadDone) { 
                libx[l].onLoad();
                libx[l].onloadDone = true;
				defaultStatus += l;
            }
        }
      };
	  
/** @id loadModuleDefinitions */
function loadModuleDefinitions(){
	 	/** @id chainOn */
	    function chainOn(){
	      waitFor(function(){return libx.oModules;},
		        function(){
	             loadChain(aModules); 
				 return true;
				}
	     );
        }
       includeScript(jsPath+'modef.js', 'modef');
	   chainOn();
    }

/** @id includeScript */
function includeScript(sSrc, sId, oCallback){
       var oScript  = document.createElement('script')
           ,bAct    = oScript.readyState && !libx.appCache.w.opera
           ,sAct    = bAct ? 'onreadystatechange' : 'onload';
       oScript.src  = sSrc+"?version="+((appStore||{}).version || 'unversioned');
       oScript.type = 'text/javascript';

        if (sId) {
         oScript.id = sId;
        }
		/*
		 * als body al geladen is wordt scriptmodule aan body
		 * toegevoegd, anders aan header, 1 van beide werkt altijd
		 */
        try {document.body.appendChild(oScript);}
        catch(e){document.getElementsByTagName('head')[0]
	          .appendChild(oScript);}
              
        /* RK callback eigenlijk niet nodig, maar kan ook geen kwaad 
         * werkt in elk geval niet in opera
         */
        if (oCallback) {
         oScript[sAct] = function(e){
           e = e || event;
           if (!bAct) {
             oCallback();
           } else if (
	       e && String(oScript.readyState)
	        .match(/loaded|complete/i)) {
             oCallback();
           }
        };
      }
    }
	
/** @id handle */
function handle(obj,etype,fn,bubble) {
      var objTst = String(obj).match(/object/i) || ((obj || {}).nodeName && obj.nodeName.match(/a/i));
      if (!objTst) { defaultStatus += ' handler loading failed (no obj)'; return true; }
       if (obj.attachEvent){
        if (bubble && bubble === false) {
         fn = function(e) {
              e = !e ? window.event : e;
              e.cancelBubble = true;
              fn(e);
             };
        }
         obj.attachEvent('on' +etype,fn);
        } else {
         obj.addEventListener(etype,fn,(!bubble?true:bubble));
        }
     }


/** @id loadChain */
function loadChain(aLoad){
    if (!libx.oModules || !aLoad) {
      return true;
    }
      for (var i = 0; i < aLoad.length; i++) {
          var thisMod = aLoad[i]
              ,oMod   = libx.oModules[thisMod];
        if (oMod && !oMod.loaded) {
		  if (oMod.includes) {
		  	for (var j=0;j<oMod.includes.length;j++) {
				if (!oMod.includes[j].loaded){
					loadThisModule(oMod.includes[j],1);
				}
			}
		  }
          loadThisModule(thisMod,1);
        }
      }
     return 1;
}

/** @id loadThisModule */	  
function loadThisModule(module){
        if (!module || !libx.oModules) {
            return true;
        }
        var thisMod = libx.oModules[module];
        if (thisMod && !thisMod.loaded) {
			includeScript((!thisMod.id.match(/^main$|^modef$/i) || !appStore.localroot ? jsPath : '') + thisMod.src, thisMod.id);
			thisMod.loaded = true;
		}
    }

/* 
 * --- functie definitie einde ---
 */
 
}