onerror=handleJavascriptError;
var includedScripts = new Array();

if(debugging)
  include_once('js/includes.js');
else
  include_once('js/includes.compressed.js');

document.oncontextmenu = function(event)
{
  if(Prototype.Browser.IE)
    event = window.event;
  var ctl = getControlFromEvent(event);
  if(ctl == null) return true;
  if(!ctl.control.properties.enabled) return false;
  if(ctl.control.canSelect === true)
    return true;
  if(ctl.control.canSelect === false)
    return false;
  for(i in ctl.control.canSelect)
    if(ctl.subelement != undefined && ctl.subelement.substr(0, ctl.control.canSelect[i].length) == ctl.control.canSelect[i])
      return true;
  return false;
}

window.onload = function()
{
  document.onselectstart = function(event)
  {
    if(Prototype.Browser.IE)
      event = window.event;
    var ctl = getControlFromEvent(event);
    if(ctl == null) return true;
  if(!ctl.control.properties.enabled) return false;
    if(ctl.control.canSelect === true)
      return true;
    if(ctl.control.canSelect === false)
      return false;
    for(i in ctl.control.canSelect)
      if(ctl.subelement.substr(0, ctl.control.canSelect[i].length) == ctl.control.canSelect[i])
        return true;
    return false;
  } // ie
  document.onmousedown = function(event)
  {
    var ctl = getControlFromEvent(event);
    if(ctl == null) return true;
    if(!ctl.control.properties.enabled) return false;
    if(ctl.control.canSelect === true)
      return true;
    if(ctl.control.canSelect === false)
      return false;
    for(i in ctl.control.canSelect)
      if(ctl.subelement != undefined && ctl.subelement.substr(0, ctl.control.canSelect[i].length) == ctl.control.canSelect[i])
        return true;
    return false;
  } // mozilla

}

var proc = new Array();
var nullControls = new Object();
var TaskBar = null;

function handleJavascriptError(msg, url, line)
{
  trace("<font color=red>Javascript Error</font><br />\nFile: " + url + "<br />\nLine: " + line + "<br />\nMessage: " + msg);
  return true;
}

function stacktrace2()
{
var callObj = arguments.callee;
var callName = callObj.name;
var callChain = [callName];

  while ('string' == typeof callName)
  {
    if ( (callObj = callObj.caller) )
    {
      callName = callObj.name;
      callChain.push(callName);
    }
    else
    {
      callName = null;
    }
  }
  callChain.reverse();
  return callChain.toString();

}
function stacktrace()
{
  re = /function\W+([\w-]+)/i;
  var f = arguments.callee;
  var s = "";
  while (f)
  {
    s += (re.exec(f))[1] + '(';
    for (i = 0; i < f.arguments.length - 1; i++)
    {
      s += "'" + f.arguments[i] + "', ";
    }
    if (arguments.length > 0)
    {
      s += "'" + f.arguments[i] + "'";
    }
    s += "); ";
    f = f.arguments.callee.caller;
  }
  return s;
}

//error handler mechanism
//var errWindow = null;
function trace(txt)
{
  if(!debugging) return;
  if($("all") == undefined)
  {
    alert(txt.unescapeHTML());
    return;
  }
  var errWindow = nullControls.errWindow;
  if(errWindow == undefined)
  {
    var size = ui.getDesktopSize();
    var errWindow = new ctlWindow(null, null, "errWindow", "ctlWindow", {left: 800 + "px", top: 40 + "px"/*size.height - 200 + "px"*/, width: 300 + "px", height: 200 + "px"}, [], {icon: iconset + '16/bug.png', title: "Debugging Window", minheight: 200, minwidth: 200});
    errWindow.canSelect = ["contents"];
    $(errWindow.cid + "_contents").style.overflow = "auto";
  }

  var myctl = document.createElement('DIV');
  myctl.innerHTML = txt + "<hr />";
  errWindow.addHTML(myctl);
  $(errWindow.cid + "_contents").scrollTop = $(errWindow.cid + "_contents").scrollHeight;
}

function include_once(jsFile, type)
{
  type = (type == undefined) ? "js" : type;
  var pos = false;
  for(var i = 0; i < includedScripts.length; i++)
    if(includedScripts[i] == jsFile)
    {
      pos = i;
      break;
    }
  if(pos == false)
  {
    includedScripts.push(jsFile);
    if(type == "js")
      document.write('<script language="javascript" type="text/javascript" src="' + jsFile + '"></script>');
    else
    {
      var fileref=document.createElement("link");
      fileref.setAttribute("rel", "stylesheet");
      fileref.setAttribute("type", "text/css");
      fileref.setAttribute("href", jsFile);
      if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
  }
}

