// Document Object Model Utility Functions - For Use in City Of Sydney Online Applications
// Ali Chamas (c) created 10-11-2006 dragonworxau@yahoo.com.au
// City of Sydney Council www.cityofsydney.nsw.gov.au
// Version History
//		AC 19/03/07 - moved functions into global static DomUtil object

// create the global static object
function DomUtil() {}

// keep track of the mouse position
DomUtil.mouseX = 0;
DomUtil.mouseY = 0;

// catch the mousemove event of the document and store the mouse position values
DomUtil.trackMousePos = function (evt) {
	if (document.body == null) return;
	if (evt.pageX || evt.pageY) {
		DomUtil.mouseX = evt.pageX;
		DomUtil.mouseY = evt.pageY;
	} else if (evt.clientX || evt.clientY) {
		DomUtil.mouseX = evt.clientX + document.body.scrollLeft
		+ document.documentElement.scrollLeft;
		DomUtil.mouseY = evt.clientY + document.body.scrollTop
		+ document.documentElement.scrollTop;
	}
}

// add an event to any DOM object
DomUtil.addEvent = function (elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}
}

// capture the mouse for use in other methods
DomUtil.addEvent(document, "mousemove", DomUtil.trackMousePos, false);

// find the left (x) of a DOM object
DomUtil.getLeft = function (obj) {
	var curleft = 0;
	if(obj.offsetParent) {
		while(1) {
			curleft += obj.offsetLeft;
			if (!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	} else if (obj.x) curleft += obj.x;
	return curleft;
}

// find the top (y) of a DOM object
DomUtil.getRight = function (obj) {
	var curtop = 0;
	if(obj.offsetParent) {
		while(1) {
			curtop += obj.offsetTop;
			if (!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	} else if (obj.y) curtop += obj.y;
	return curtop;
}

// return the mouse position relative to any DOM elements local bounds
DomUtil.getMouseOn = function (obj) {
	var x = findX(obj);
	var y = findY(obj);
	return {"x": DomUtil.mouseX - x, "y": DomUtil.mouseY - y};
}

// add a text span to the container dom
DomUtil.addText = function (containerId, textString, clearContainerBool) {
	if (clearContainerBool == true) clearContainer(containerId);
	var textNode = document.createTextNode(textString);
	var span = document.createElement("span");
	span.appendChild(textNode);
	document.getElementById(containerId).appendChild(span);
	document.getElementById(containerId).appendChild(document.createElement("br"));
}

// clear the containers dom
DomUtil.clearContainer = function (containerId) {
	var container = document.getElementById(containerId);
	while (container.childNodes.length > 0) {
		container.removeChild(container.childNodes[0]);
	}
}

// short-hand way to access element by ID
DomUtil.getId = function (elementId) {
	return document.getElementById(elementId);
}