function $(id) {
	return document.getElementById(id);	
}

if(Array.prototype.push == null){
	Array.prototype.push = function(){
		for(var i = 0; i < arguments.length; i++){
			this[this.length] = arguments[i];
		};
		return this.length;
	};
};

/*	Event Cache uses an anonymous function to create a hidden scope chain.
	This is to prevent scoping issues. */
var EventCache = function(){
	var listEvents = [];
	
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler, bCapture){
			listEvents.push(arguments);
		},
	
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				
				/* From this point on we need the event names to be prefixed with 'on" */
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();


var addEvent;
if (document.addEventListener) {
	addEvent = function(obj, evType, fn, useCapture){
		if (typeof(useCapture) == "undefined") useCapture = false;
        obj.addEventListener(evType, fn, useCapture);
		EventCache.add(obj, evType, fn, useCapture);
		return true;    
	};
} else if (document.attachEvent) {    
	addEvent = function(obj, evType, fn, useCapture){
		if (typeof(useCapture) == "undefined") useCapture = false;
		var result = obj.attachEvent("on"+evType, fn);
		EventCache.add(obj, evType, fn, useCapture);
		return result;
	};
} else {    
	addEvent = new Function; // not supported}
};

var removeEvent;
if (document.removeEventListener) {
	removeEvent = function(obj, evType, fn, useCapture){
		if (typeof(useCapture) == "undefined") useCapture = false;
        obj.removeEventListener(evType, fn, useCapture);
		EventCache.add(obj, evType, fn, useCapture);
		return true;    
	};
} else if (document.detachEvent) {    
	removeEvent = function(obj, evType, fn, useCapture){
		if (typeof(useCapture) == "undefined") useCapture = false;
		var result = obj.detachEvent("on"+evType, fn);
		EventCache.add(obj, evType, fn, useCapture);
		return result;
	};
} else {    
	removeEvent = function(obj, evType, fn, useCapture) {
		obj["on"+evType] = null;
	};
};

var Class = {
  create: function() {
    return function() { 
      this.initialize.apply(this, arguments);
    }
  }
};

Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
};

Function.prototype.bind = function(object) {
  var __method = this;
  return function() {
    return __method.apply(object, arguments);
  }
};

document.getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();
  
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }
  
  return elements;
};

//-------------------------

if (!window.Element) {
  var Element = new Object();
}

Object.extend(Element, {
  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
  },

  hasClassName: function(element, className) {
    element = $(element);
    if (!element)
      return;
    var a = element.className.split(' ');
    for (var i = 0; i < a.length; i++) {
      if (a[i] == className)
        return true;
    }
    return false;
  },

  addClassName: function(element, className) {
    element = $(element);
    Element.removeClassName(element, className);
    element.className += ' ' + className;
  },
  
  removeClassName: function(element, className) {
    element = $(element);
    if (!element)
      return;
    var newClassName = '';
    var a = element.className.split(' ');
    for (var i = 0; i < a.length; i++) {
      if (a[i] != className) {
        if (i > 0)
          newClassName += ' ';
        newClassName += a[i];
      }
    }
    element.className = newClassName;
  },
  
  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    for (var i = 0; i < element.childNodes.length; i++) {
      var node = element.childNodes[i];
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) 
        Element.remove(node);
    }
  }
});

function getObjectProperties(elObj) {
	var o = elObj;
	var elPos = getObjectPosition(o);
	var objArr = new Array();
	objArr["x"] = elPos["x"];
	objArr["y"] = elPos["y"];
	objArr["h"] = o.offsetHeight;
	objArr["w"] = o.offsetWidth;
	return objArr;
};

function getObjectPosition(elObj) {
	var objRealPos = Position.get(elObj);
	var posArr = new Array();
	posArr["x"] = objRealPos["left"];
	posArr["y"] = objRealPos["top"];
	return posArr;
};

var Position =(function(){function resolveObject(s){if(document.getElementById && document.getElementById(s)!=null){return document.getElementById(s);}else if(document.all && document.all[s]!=null){return document.all[s];}else if(document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x){for(var i=0;i<document.anchors.length;i++){if(document.anchors[i].name==s){return document.anchors[i]}}}}var pos ={};
pos.set = function(o,left,top){if(typeof(o)=="string"){o = resolveObject(o);}if(o==null || !o.style){return false;}o.style.position = "absolute";if(typeof(left)=="object"){var pos = left;left = pos.left;top = pos.top;}o.style.left = left + "px";o.style.top = top + "px";return true;};
pos.get = function(o){var fixBrowserQuirks = true;if(typeof(o)=="string"){o = resolveObject(o);}if(o==null){return null;}var left = 0;var top = 0;var width = 0;var height = 0;var parentNode = null;var offsetParent = null;offsetParent = o.offsetParent;var originalObject = o;var el = o;while(el.parentNode!=null){el = el.parentNode;if(el.offsetParent==null){}else{var considerScroll = true;if(fixBrowserQuirks && window.opera){if(el==originalObject.parentNode || el.nodeName=="TR"){considerScroll = false;}}if(considerScroll){if(el.scrollTop && el.scrollTop>0){top -= el.scrollTop;}if(el.scrollLeft && el.scrollLeft>0){left -= el.scrollLeft;}}}if(el == offsetParent){left += o.offsetLeft;if(el.clientLeft && el.nodeName!="TABLE"){left += el.clientLeft;}top += o.offsetTop;if(el.clientTop && el.nodeName!="TABLE"){top += el.clientTop;}o = el;if(o.offsetParent==null){if(o.offsetLeft){left += o.offsetLeft;}if(o.offsetTop){top += o.offsetTop;}}offsetParent = o.offsetParent;}}if(originalObject.offsetWidth){width = originalObject.offsetWidth;}if(originalObject.offsetHeight){height = originalObject.offsetHeight;}return{'left':left, 'top':top, 'width':width, 'height':height};};
pos.getCenter = function(o){var c = this.get(o);if(c==null){return null;}c.left = c.left +(c.width/2);c.top = c.top +(c.height/2);return c;};return pos;})();


//END SYSTEM FUNCTIONS


function globalOnload() {
	if ($("loadingFrame") && $("loadingDiv")) {
		$("loadingFrame").style.display="none";
		$("loadingDiv").style.display="none";	
	}
	if ($("MainContentWrapper")) $("MainContentWrapper").style.visibility="visible";	

	var menuObj = document.getElementById("MenuContainer");
	var sideObj = document.getElementById("SideBarContainer");
	if (menuObj) {
		var links = menuObj.getElementsByTagName("a");
		var linkid;
		for (l=0;l<links.length;l++) {
			if (links[l].getAttribute("code") != null && location.href.toLowerCase().indexOf(links[l].getAttribute("code")) > -1) {
				links[l].style.color = "#BE451E";
				links[l].style.paddingLeft = "5px";
				links[l].style.fontSize = "14px";
				break;
			}
		}
	}
	if (sideObj) {
		var links = sideObj.getElementsByTagName("a");
		var linkid;
		for (l=0;l<links.length;l++) {
			if (links[l].getAttribute("href") != null && location.href.toLowerCase().indexOf(links[l].getAttribute("href")) > -1) {
				links[l].style.color = "#BE451E";
				break;
			}
		}
	}

	var dockArr = document.getElementsByClassName("dock");
	for (var d=0;d<dockArr.length;d++) {
		var id = dockArr[d].getAttribute("id");
		docItems[docItems.length] = new Array(id);
		fillBox(id);
	}

}

function globalResize() {
	reFillBoxes();
}

var docItems = new Array();
function fillBox(el,mode) {
	if (el == null) return;
	var elObj = $(el);
	var offset = 0;
	parObj = elObj.parentNode;
	if (mode == "BODY") parObj = document.body;
	var elPos = getObjectPosition(elObj);
	var newHeight = Math.max((parObj.offsetHeight-(parseInt(elObj.offsetTop)+0)),1);
	var newWidth = Math.max((parObj.offsetWidth-(parseInt(elObj.offsetLeft)+0)),1);
	//if (moz) newWidth = newWidth - 3;
	//window.status = "Parent Height: "+parObj.offsetHeight+" - New Height: "+newHeight;
	elObj.style.height = newHeight+"px";
	elObj.style.width = newWidth+"px";
};

function setupFiller(obj,mode) {
	docItems[docItems.length] = new Array(obj,mode);
	addEvent(window,"load",function(e) {turnOffPageScroll();fillBox(obj,mode);});
};

function reFillBoxes() {
	for (var d=0;d<docItems.length;d++) {
		fillBox(docItems[d][0],docItems[d][1]);	
	}
};

addEvent(window,"load",function() {globalOnload();});
addEvent(window,"resize",function() {globalResize();});