function isIE() {
	return !window.addEventListener;
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	
	return [curleft,curtop];
}

function hitTest(x, y, object, showOutput) {
	var coords = findPos(object);
	if (isIE()) {
		x--;
		y--;
	}

	//document.getElementById("output").innerHTML = y + " " + coords[1] + " " + (coords[1] + object.offsetHeight);
	//document.getElementById("pointer").style.top = y;
	//document.getElementById("pointer").style.left = x - 55;
	return x > coords[0] &&
		x < coords[0] + object.offsetWidth &&
		y > coords[1] &&
		y < coords[1] + object.offsetHeight;
}

function hitTestFixedCoords(curPosition, objPositionDimension) {
	var x = curPosition[0];
	var y = curPosition[1];

	var objX = objPositionDimension[0];
	var objY = objPositionDimension[1];
	
	var objWidth = objPositionDimension[2];
	var objHeight = objPositionDimension[3];

	return x >= objX &&
		x <= objX + objWidth &&
		y >= objY &&
		y <= objY + objHeight;
}

function addHandler(element, type, callback) {
	if (window.addEventListener) {
		element.addEventListener(type, callback, false);
	} else {
		element.attachEvent("on" + type, callback);
	}
}

function removeHandler(element, type, callback) {
	if (window.removeEventListener) {
		element.removeEventListener(type, callback, false);
	} else {
		element.detachEvent("on" + type, callback);
	}
}

function createClosure(object, functionRef, parameters) {
	return function() { functionRef.call(object, parameters); };
}

function getElem(elementID) {
	return document.getElementById(elementID);
}
