// basics.js (c) 2007, asknet AG (rwm)
// error handling and debug utilities
// Version 2.0.07.02.19
// 2.1.07.02.19 rwm added asknet onresize handler
// 2.1.07.01.24 rwm add asknet.ui
// 2.1.06.12.13 rwm added asknet.messages, polished js syntax
// 2.1.06.09.29 rwm re-joined from basics_2
// 2.0.06.09.29 rwm asknet unonload handler
// 2.0.06.09.28 rwm basicOnload persistant to asknet.onload
// 2.0.06.09.04 rwm sysDesignWidth, sysAlertCheck:append, sysPrint:force output
// 2.0.06.07.19 rwm asknet onload handler
// 2.0.06.07.19 rwm derived from 1.1.06.06.20

// See doc-file for detailed information

// primary variables
var sysInit  = 1;
var sysDebug = 0;
var sysError = 0;
var sysForceLog = 1;
var sysTimeDelta = 1;
var sysCheckBrowserOn = 0;
var sysDesignWidth = 0;
  
var args = location.search.substr(1).split('&');
var i,n,subargs;

for ( i=0; i < args.length;i++) {
  subargs = args[i].split('=');
  if ( subargs[0] == 'debug' && subargs[1] !== '') {
    n = parseInt(subargs[1],10);
    if (n > 0 && n < 10) { sysDebug = n; }
  }
}

// secondary variables
var sysErrorText = '';
var sysDebugDiv = 0;
var sysPrevTime = new Date();
var sysIsOldBrowser = 0;

sysErrorInit();

// sysErrorInit --- Init sysErrorText -----------------------------------------
  function sysErrorInit() {
    sysError = 0;
    if (sysDebug) {
      sysErrorText = '<p style="font-family:monospace;font-size:12px;">';
    }
    else {
      sysErrorText = 'sysError=on&sctid=';
      if (typeof(sysSctId) != 'undefined') {
        sysErrorText += sysSctId; 
      }
      else {
        sysErrorText += 'unknown';
      }
    }

  }
  
// sysAlert --- Print alerts --------------------------------------------------
  function sysAlert(s) {
    sysPrint(0,s);
  }

// sysPrint --- Collect messages ----------------------------------------------
  function sysPrint(l,s) {
    var ss = ''+s;
    sysError++;   
    if (sysDebug)  { // write HTML
      if ( l <= sysDebug ) {
        if (l === 0) { sysErrorText += '<div style="color: #ff0000;">'; }
        sysErrorText += ss;
        if (l === 0) { sysErrorText += '</div>'; }
        sysErrorText += '<br>\n';
      }
    }
    else { // write in url style
      sysErrorText += '&e'+sysError+'='+ss;
    }
    sysAlertCheck(); // force output
  } 

//  sysAlertCheck --- Output messages, if any available -----------------------
  function sysAlertCheck() {
    if (!sysError) { return; }
	var s,t;
    var d = document;
    if (sysDebug) {
      if (!sysDebugDiv) {
        if (!document.body) { return; } // page not yet complete
        sysDebugDiv = document.createElement("div");
        sysDebugDiv.id = "sysDebugDiv";
        document.body.appendChild(sysDebugDiv);
        // document.write('<div id="sysDebugDiv"></div>');
        // sysDebugDiv = document.getElementById("sysDebugDiv");
      }
      sysErrorText += '</p>';
      t = document.createElement("div");
      t.innerHTML=sysErrorText;
      sysDebugDiv.appendChild(t);
    }
    else {
//    s = escape(sysErrorText.substr(0,999)); // NS47 hates encodeURI
      s = sysErrorText.substr(0,999).replace(/ /g,'%20');
      t = document.createElement("div");
      t.style.visibility="hidden";
      if (sysForceLog ) {
        t.innerHTML =  '<'+'img src="/pics/errdbg.gif?'+s+'" width="1" height="1" border="0">';
      } else {
        t.innerHTML =  '<'+'img src="/pics/dbg.gif?'+s+'" width="1" height="1" border="0">';
      }
      d.body.appendChild(t);
    }
    sysErrorInit();
  }

// sysTimestamp --- Print timestamp during debugging --------------------------
  function sysTimestamp(l,s) {
    if (sysDebug && l<=sysDebug) {
      var d = new Date();
      var now = new Date();
      if (sysTimeDelta) { d.setTime(now.getTime() - sysPrevTime.getTime()); }
      sysPrint(l,utFixLength(d.getMinutes(),2)+':'+utFixLength(d.getSeconds(),2)+':'+utFixLength(d.getMilliseconds(),3)+' '+s);
      sysPrevTime = now;
    }
  }

// sysCheckBrowser(v) --- Init sysCheckBrowserOn --------------------------------------
  function sysCheckBrowser(v) {
    sysCheckBrowserOn = v;
    sysIsOldBrowser = sysCheckBrowserOn ? !document.getElementById : false;
    if (sysDebug) { sysPrint(1,'sysCheckBrowser: sysIsOldBrowser='+sysIsOldBrowser); }
  }
 
// sysOldBrowser --- Check wether browser knows DOM ---------------------------------
  function sysOldBrowser() {
    return sysIsOldBrowser;
  }

// utFixLength --- Expand a number to fixed length string --------------------------

  function utFixLength(n,l) {
    var s = '';
    var t = 1;
    s = n;
    for (i=1;i<l;i++) {
      t = t*10;
      if (n<t) { s = '0'+s; }
    }
    return s;
  }
// basicOnload --- basic onload functions  --------------------------
function basicOnload() {
  sysAlertCheck();
}

// asknet object =====================================================================

var asknet = {};
asknet.messages = {};
asknet.ui = {};

// asknet onload handler =============================================================

asknet.onloadListeners = [];

asknet.addOnLoadListener= function (listener){
  asknet.onloadListeners[asknet.onloadListeners.length]=listener;
};
asknet.onload = function (){
  for (var i=0;i<asknet.onloadListeners.length;i++) {
    var func=asknet.onloadListeners[i];
    func.call();
  }
  // basicOnload is always the last one
  basicOnload();
};
window.onload = asknet.onload;

asknet.onunloadListeners = [];

asknet.addOnUnloadListener= function (listener){
  asknet.onunloadListeners[asknet.onunloadListeners.length]=listener;
};

asknet.resetOnUnloadListener= function (){
  asknet.onunloadListeners.length=0;
};

asknet.onunload = function (){
  for (var i=0;i<asknet.onunloadListeners.length;i++) {
    var func=asknet.onunloadListeners[i];
    func.call();
  }
};
window.onunload = asknet.onunload;

asknet.onresizeListeners = [];

asknet.addOnResizeListener= function (listener){
  asknet.onresizeListeners[asknet.onresizeListeners.length]=listener;
};

asknet.resetOnResizeListener= function (){
  asknet.onresizeListeners.length=0;
};

asknet.onresize = function (){
  for (var i=0;i<asknet.onresizeListeners.length;i++) {
    var func=asknet.onresizeListeners[i];
    func.call();
  }
};
window.onresize = asknet.onresize;