// JavaScript Document

// DOMElement allows more IE functionality
/*
var DOMElement =
    {
    	extend: function(name,fn)
    	{
    		if(!document.all)
    			eval("HTMLElement.prototype." + name + " = fn");
    		else
    		{
    			//
    			//	IE doesn't allow access to HTMLElement
    			//	so we need to override
    			//	*document.createElement
    			//	*document.getElementById
    			//	*document.getElementsByTagName
    			//

    			//take a copy of
    			//document.createElement
    			var _createElement = document.createElement;

    			//override document.createElement
    			document.createElement = function(tag)
    			{
    				var _elem = _createElement(tag);
    				eval("_elem." + name + " = fn");
    				return _elem;
    			}

    			//take copy of
    			//document.getElementById
    			var _getElementById = document.getElementById;

    			//override document.getElementById
    			document.getElementById = function(id)
    			{
    				var _elem = _getElementById(id);
    				eval("_elem." + name + " = fn");
    				return _elem;
    			}

    			//take copy of
    			//document.getElementsByTagName
    			var _getElementsByTagName = document.getElementsByTagName;

    			//override document.getElementsByTagName
    			document.getElementsByTagName = function(tag)
    			{
    				var _arr = _getElementsByTagName(tag);
    				for(var _elem=0;_elem<_arr.length;_elem++)
    					eval("_arr[_elem]." + name + " = fn");
    				return _arr;
    			}
    		}
    	}
    };*/
var onloadArray = new Array();
// development only >
var log;
onloadArray.push(function(){
    log = document.getElementById('secondaryContent');
});
// development only <
/*
DOMElement.extend("isClass",function(c)
{
  var classNames = this.className.split(' ');
  for (var i = 0; i < classNames.length; i++)
  {
    if (classNames[i] == c)
      return true;
  }
  return false;
});
DOMElement.extend("addClass",function(c)
{
  if (this.isClass(c))
    return;
  var classNameString = this.className;
  classNameString += ' '+c;
  this.className = classNameString;
});
DOMElement.extend("remClass",function(c)
{
  var classNames = this.className.split(' ');
  var classNameString = '';
  for (var i = 0; i < classNames.length; i++)
  {
    if (classNames[i] != c)
      classNameString += classNames[i];
  }
  this.className = classNameString;
});
DOMElement.extend("removeChildren",function(text)
{
  while (this.childNodes.length > 0)
      this.removeChild(this.firstChild);
});
DOMElement.extend("appendText",function(text)
{
  var textNode = document.createTextNode(text);
  this.appendChild(textNode);
});
*/

function isClass(node, c)
{
  var classNames = node.className.split(' ');
  for (var i = 0; i < classNames.length; i++)
  {
    if (classNames[i] == c)
      return true;
  }
  return false;
}
function addClass(node, c)
{
  if (isClass(node, c))
    return;
  var classNameString = node.className;
  classNameString += ' '+c;
  node.className = classNameString;
}
function remClass(node, c)
{
  var classNames = node.className.split(' ');
  var classNameString = '';
  for (var i = 0; i < classNames.length; i++)
  {
    if (classNames[i] != c)
      classNameString += classNames[i];
  }
  node.className = classNameString;
}
function removeChildren(node)
{
  while (node.childNodes.length > 0)
    node.removeChild(node.firstChild);
}
function appendText(node, text)
{
  var textNode = document.createTextNode(text);
  node.appendChild(textNode);  
}
function getFullOffsetLeft(node)
{
  var offset = 0;

  while (node.offsetParent != null)
  {
    offset += node.offsetLeft;
    node = node.offsetParent;
  }

  return offset;
}
function getFullOffsetTop(node)
{
  var offset = 0;
  while (node.offsetParent != null)
  {
    offset += node.offsetTop;
    node = node.offsetParent;
  }

  return offset;
}
function getRadioValue(formNode, radioName)
{
    for (var i = 0; i < formNode[radioName].length; i++)
    {
        if (formNode[radioName][i].checked)
            return formNode[radioName][i].value;
    }
    return false;
}
try
{
function AJAXHandler()
{
    this.requestsCount = 0;
    this.onWorking = function(){}
    this.onFinishedWorking = function(){}
    this.requestQue = new Array();
    this.working = false;
    this.onException = function(err)
    {
        alert(err);
    }
    if (window.ActiveXObject)
    {
        try
        {
            this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    else
    {
        this.xmlhttp = new XMLHttpRequest();
    }
}
AJAXHandler.prototype.addRequest = function(request)
{
    request.id = this.requestsCount++;
    this.requestQue.push(request);
    this.checkQue();
}
AJAXHandler.prototype.checkQue = function()
{
    if (this.working === false)
        this.processRequests();
}
AJAXHandler.prototype.processRequests = function()
{
    // This method should only be called by itself and checkQue
    if (this.requestQue.length === 0)
    {
        this.working = false;
        return;
    }
    this.working = true;
    var handler = this;
    // TODO add priority selection
    var request = this.requestQue.shift();
    this.xmlhttp.open(request.type, request.url);
    if (request.type === 'POST')
        this.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    var xmlhttp = this.xmlhttp;
    var ajax = this;
    this.xmlhttp.onreadystatechange = function()
    {
        try
        {
            if (xmlhttp.readyState == 4)
            {
                if (xmlhttp.status == 200)
                {
                  if (ajax.requestQue.length === 0)
                  {
                    ajax.working = false;
                    request.onSuccess();
                  }
                  else
                  {
                    request.onSuccess();
                    handler.processRequests();
                  }
                }
                else
                {
                  if (ajax.requestQue.length === 0)
                  {
                    ajax.working = false;
                    request.onFailure();
                  }
                  else
                  {
                    request.onFailure();
                    handler.processRequests();
                  }
                }
           }
       }
       catch (err)
       {
           ajax.onException(err);
       }
   }
   this.xmlhttp.send(request.sendData);
}


function AJAXRequest(url, type, onSuccess, onFail, sendData, priority)
{
    this.url = url;
    if (!type)
        this.type = "GET";
    else
        this.type = type;
    if (!onSuccess)
        this.onSuccess = function(){}
    else
        this.onSuccess = onSuccess;
    if (!onFail)
        this.onFailure = function(){}
    else
        this.onFailure = onFail;
    if (!sendData)
        this.sendData = null;
    else
        this.sendData = sendData;
    if (!priority)
        this.priority = 0;
    else
        this.priority = priority;
}
}
catch (err)
{
    alert(err);
}

