
// JavaScript Document

GluedTools._DOM = {

	getBrowserType : function () {
		if (navigator.userAgent.indexOf("Opera")!=-1 && document.getElementById) { 
			return "OP";
		} else if (document.all) {
			return "IE";
		} else if (document.layers) { 
			return "NN";
		} else if (!document.all && document.getElementById) {
			return "MO";
		} else {
			return "IE";
		}
	},
	
	getElementByID : function (elementID) {
		if (document.layers) {
			// NN4+
			return document.layers[elementID];
		} else if (document.getElementById) {
			// NN6 + IE5+
			return document.getElementById(elementID);
		} else if (document.all) {
			// IE4
			return document.all[elementID];
		}
	},
	
	getElementsByTagName : function (elementTag) {
		if (document.layers) {
			// NN4+ - Find out about this one
			return null;
		} else if (document.getElementsByTagName) {
			// NN6 + IE5+
			return document.getElementsByTagName(elementID);
		} else if (document.all) {
			// IE4
			return document.all.tags(elementID);
		}
	},
	
	getElementsByClassName : function (className) {
		var foundElements = [];
		var regexp = new RegExp('\\b' + className + '\\b');
		var all_elements = document.all ? document.all : document.getElementsByTagName("*");
		for (var i = 0, j = all_elements.length; i < j; i++) {
			if (regexp.test( all_elements[i].className)) {
				foundElements.push(all_elements[i]);
			}
		}
		return foundElements;
	},
	
	setElementStyle : function (element, attribute, value) {
		if(document.layers) {
			element[attribute] = value;
		} else {
			if (attribute == 'opacity') {
				if (element.filters) {
					element.style.filter = 'alpha(opacity=' + value * 100 + ')';
				} else {
					element.style.opacity = value;
					element.style['-moz-opacity'] = value;
					element.style['-khtml-opacity'] = value;
				}
			} else {
				element.style[attribute] = value;
			}
		}
	},
	
	getElementStyle : function (element, attribute) {
		if(document.layers) {
			return element[attribute];
		} else {
			if (!element.style[attribute]) { 
				if (window.getComputedStyle) {
					this.setElementStyle(element, attribute, window.getComputedStyle(element, null)[attribute]); 
				} else {
					this.setElementStyle(element, attribute, element.currentStyle[attribute]); 
				}
			}
			return element.style[attribute];
		}
	},
	
	addEventListener : function (element, eventtype, callback, captures) {
		if (element.addEventListener) {
			element.addEventListener(eventtype, callback, captures);
		} else if (element.attachEvent) {
			element.attachEvent('on'+eventtype, callback, captures);
		} else {
			element['on'+eventtype] = callback;
		}
	},
	
	getElementPosition : function (element) {
		var position = new Array;
		if (document.getBoxObjectFor) {
			var box = document.getBoxObjectFor(element);
			position['left'] = box.x;
			position['width'] = box.width;
			position['top'] = box.y;
			position['height'] = box.height;
		} else if (element.getBoundingClientRect) {
			var box = element.getBoundingClientRect();
			position['left'] = box.left;
			position['width'] = box.right - box.left;
			position['top'] = box.top;
			position['height'] = box.bottom - box.top;
		} 
		return position;
	},
	
	pageX : function (pos) {
		if (document.all) {
			return document.body.scrollLeft + pos;
		} else {
			return window.pageXOffset + pos;
		}
	},

	pageY : function (pos) {
		if (document.all) {
			return document.body.scrollTop + pos;
		} else {
			return window.pageYOffset + pos;
		}
	},
	
	swapNodes : function (elementA, elementB) {
		var cloneA = elementA.cloneNode(true);
		elementB.parentNode.insertBefore(clonedA, elementB);
		elementA.parentNode.replaceNode(elementB, elementA);
		return true;
	},
	
	getViewportSize : function () {

		var windowSize = { width : 0, height : 0 };
		
		if (typeof window.innerWidth != 'undefined') {
			windowSize = { width : window.innerWidth, height : window.innerHeight };
		} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
			windowSize = { width : document.documentElement.clientWidth, height : document.documentElement.clientHeight };
		} else {
			windowSize = { width : document.getElementsByTagName('body')[0].clientWidth, height : document.getElementsByTagName('body')[0].clientHeight };
		}
		
		return windowSize;
	},
	
	cloneObject : function (object) {
		var clone = {}

		for (property in object) {
			if (typeof(object[property]) == "object") {
				clone[property] = new GluedTools._DOM.cloneObject(object[property]);
			} else {
				clone[property] = object[property];
			}
		}
		return clone;
	},
	
	checkElementOverlap : function (positionA, positionB) {
		var overlapFlag = true;
		
		if (positionA.top > (positionB.top + positionB.height) && (positionA.top + positionA.height) > (positionB.top + positionB.height)) { overlapFlag = false; }
		if (positionA.top < positionB.top && (positionA.top + positionA.height) < positionB.top) { overlapFlag = false; }

		if (positionA.left > (positionB.left + positionB.width) && (positionA.left + positionA.width) > (positionB.left + positionB.width)) { overlapFlag = false; }
		if (positionA.left < positionB.left && (positionA.left  + positionA.width) < positionB.left) { overlapFlag = false; }
		
		return overlapFlag;
	}

}
