/* note:
* javascript is the weakest, flimsiest, and overall crappiest thing ever invented.
* if you are lucky enough to get it work, it won't work in other browsers.
* it is retarded.  no one follows the standards.
* debugging?  forget it.
*
*  File contains:
	1)  dragging for popup
	3)  expansion divs (aka "sliders")
	4)  checkall function (takes any element, not just form)

	All functions work on both IE and FireFox
*/

window.onload = function init(){
	//canvases, drag+drop
	if (typeof(canvasLibLoaded)!="undefined") initCanvases();
	if (typeof(dragDropLibLoaded)!="undefined") initDragDrop();
}

function go() {
	void(0);
}

function clone (deep) {
  var objectClone = new this.constructor();
  for (var property in this)
    if (!deep)
      objectClone[property] = this[property];
    else if (typeof this[property] == 'object')
      objectClone[property] = this[property].clone(deep);
    else
      objectClone[property] = this[property];
  return objectClone;
}
////////CROSS BROWSER EVENT HANDLING///////////
function getEvent(e){return e ? e : window.event;}
function getSource(e){return e.target ? e.target : e.srcElement;}
function getPageX(e){
	var body = (document.compatMode && document.compatMode!="BackCompat") ? document.documentElement : document.body;
	return document.all ? e.clientX + body.scrollLeft : e.pageX
}
function getPageY(e){
	var body = (document.compatMode && document.compatMode!="BackCompat") ? document.documentElement : document.body;
	return document.all ? e.clientY + body.scrollTop : e.pageY
}
function getEventX(e){
	return e.offsetX ? e.offsetX : e.layerX;
}
function getEventY(e){
	return e.offsetY ? e.offsetY : e.layerY;
}
function addEvent(element, event, func){
	if (document.addEventListener) element.addEventListener(event, func, false);
	else element.attachEvent('on'+event, func);
}
function removeEvent(element, event, func){
	if (document.removeEventListener) element.removeEventListener(event, func, false);
	else element.detachEvent('on'+event, func);
}
function getPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft
			obj = obj.offsetParent;}}
	else if (obj.x) curleft += obj.x;
	return curleft;
}
function getPosY(obj){
	var curtop = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curtop += obj.offsetTop
			obj = obj.offsetParent;}}
	else if (obj.y) curtop += obj.y;
	return curtop;
}


//////////CONVENIENCE METHODS//////////////////
function get(id){return document.getElementById(id);}
function getBody(){return document.getElementsByTagName('body')[0];}
function getElementsByClassName(reClsName, parent){
	if (!parent) parent = document;
    var children = parent.all ? parent.all : parent.getElementsByTagName("*");
    var results = new Array();
    var l = children.length;
    for(var i=0; i<l; i++) {
    	var child = children[i];
    	if (child.className && reClsName.test(child.className)) results.push(child);
    }
    return (results);
}
function returnElementsWithAttrib(elements, attribName, attribVal, exclude){
	var a = new Array();
	for (var i=0; i<elements.length; i++){
		var e = elements[i];
		if(e != exclude && e.getAttribute(attribName) && (new RegExp("\\b"+attribVal+"\\b")).test(e.getAttribute(attribName))) a[a.length] = elements[i];
	}
	return a;
}
function getFirstParentWithClass(element, reClsName){
	if (element.tagName.toLowerCase()=="body") return false;
	if (element.className && reClsName.test(element.className)) return element;
	else return getFirstParentWithClass(element.parentNode, reClsName);
}
function getFirstChild(obj){
	return obj.firstChild.nodeType == 1 ? obj.firstChild : obj.childNodes[1];
}
function appendClass(obj, clsName){ obj.className += ' ' + clsName; }
function removeClass(obj, clsName){ obj.className = obj.className.replace(new RegExp("\\b"+clsName+"\\b","g"),''); }

////////////MISC////////////////
function doesOverLap(item1, item2){
	var i1l = getPosX(item1);
	var i1r = i1l+item1.offsetWidth;
	var i1t = getPosY(item1);
	var i1b = i1t + item1.offsetHeight;

	var i2l = getPosX(item2);
	var i2r = i2l+item2.offsetWidth;
	var i2t = getPosY(item2);
	var i2b = i2t + item2.offsetHeight;

	return (i1r > i2l && i1l < i2r && i1b > i2t && i1t < i2b);
}


function goTo(url) { window.location = url; }