if (!Number.prototype.toFixed) {
  Number.prototype.toFixed = function (x) {
    return Math.round(this * Math.pow(10, x));
  }
}

function getRealX (eElement)
{
   if (!eElement && this)                    // if argument is invalid
   {                                         // (not specified, is null or is 0)
      eElement = this;                       // and function is a method
   }                                         // identify the element as the method owner
 
   var DL_bIE = document.all ? true : false; // initialize var to identify IE
                                     
   var nLeftPos = eElement.offsetLeft;       // initialize var to store calculations 
   var eParElement = eElement.offsetParent;  // identify first offset parent element                            

   while (eParElement != null)                 
   {                                         // move up through element hierarchy
      if(DL_bIE)
      {
         if(eParElement.tagName == "TD")     // if parent a table cell, then...
         {
            nLeftPos += eParElement.clientLeft; // append cell border width to calcs
         }
      }

      nLeftPos += eParElement.offsetLeft;    // append left offset of parent
      eParElement = eParElement.offsetParent; // and move up the element hierarchy
   }                                         // until no more offset parents exist
   return nLeftPos;                          // return the number calculated
}
    
function getRealY (eElement)
{
   if (!eElement && this)                    // if argument is invalid
   {                                         // (not specified, is null or is 0)
      eElement = this;                       // and function is a method
   }                                         // identify the element as the method owner

   var DL_bIE = document.all ? true : false; // initialize var to identify IE
                                     
   var nTopPos = eElement.offsetTop;       // initialize var to store calculations 
   var eParElement = eElement.offsetParent;  // identify first offset parent element                            

   while (eParElement != null)                 
   {                                         // move up through element hierarchy
      if(DL_bIE)
      {
         if(eParElement.tagName == "TD")     // if parent a table cell, then...
         {
            nTopPos += eParElement.clientTop; // append cell border width to calcs
         }
      }

      nTopPos += eParElement.offsetTop;    // append top offset of parent
      eParElement = eParElement.offsetParent; // and move up the element hierarchy
   }                                         // until no more offset parents exist
   return nTopPos;                          // return the number calculated
}

if(document.all && !document.getElementById) {
  document.getElementById = function(id) {
    return document.all[id];
  }
}

function Dump(d,l) {
    if (l == null) l = 1;
    var s = '';
    if (typeof(d) == "object") {
        s += typeof(d) + " {\n";
        for (var k in d) {
            for (var i=0; i<l; i++) s += "  ";
            s += k+": " + Dump(d[k],l+1);
        }
        for (var i=0; i<l-1; i++) s += "  ";
        s += "}\n"
    } else {
        s += "" + d + "\n";
    }
    return s;
}

var _lookupTable = new Array();

function $(id) {
  if (_lookupTable[id] == undefined) {
    _lookupTable[id] = document.getElementById(id);
  }
  return _lookupTable[id];
}

function realignFooter() {
  if ($('footer') && $('footer').style) {
    if (document.documentElement.clientHeight < document.documentElement.scrollHeight) {
    	$('footer').style.position = 'relative';
    } else {
    	$('footer').style.position = 'absolute';
	    $('footer').style.left = 0;
    	$('footer').style.bottom = 0;
    }
  }
}

function getAjax() {
  var retval = null;
  try {retval = new XMLHttpRequest() } catch(e1) {
    try {retval = new ActiveXObject("Microsoft.XMLHTTP") } catch(e2) {
      try {retval = new ActiveXObject("Msxml2.XMLHTTP") } catch(e3) {}
    }
  }
  
  return retval;
}

function spacify(number)
{
  var intpart = Math.abs(number).toFixed(0).toString();
  var len = intpart.length;
  if (len > 3) {
    var processed = intpart;
    for(var i = len - 3; i > 0; i -= 3) {
      processed = processed.substr(0, i) + ' ' + processed.substr(i, len - i);
      len++;     
    }
    number = number.toString().replace(intpart, processed);    
  }
  
  return number;   
}