
	//
	// Simple function to register event handlers on multiple platforms.
	//
	function RegisterHandler(object, event, handler)
	{
		if (object.addEventListener)
		{
			object.addEventListener(event, handler, false);
		}
		else if (object.attachEvent)
		{
			object.attachEvent('on' + event, handler);
		}
	}
	
	//
	// Gets the absolute position of an element on the y-axis.
	//
	function GetAbsoluteTop(element)
	{
		var top = element.offsetTop;
		var parent = element.offsetParent;
		
		while (parent != null) {
			top += parent.offsetTop;
			parent = parent.offsetParent;
		}
		return top;
	}
	
	//
	// Retrieves an array of child elements from a parent based on their class name.
	//
	// Shamelessly stolen from Robert Nyman:
	// http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
	//
	function getElementsByClassName(className, tag, elm){
		var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
		var tag = tag || "*";
		var elm = elm || document;
		var elements = (tag == "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag);
		var returnElements = [];
		var current;
		var length = elements.length;
		for(var i=0; i<length; i++){
			current = elements[i];
			if(testClass.test(current.className)){
				returnElements.push(current);
			}
		}
		return returnElements;
	}
	
	//
	// Gets the active style of an element.
	//
	// Shamelessly stolen from Robert Nyman:
	// http://www.robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/
	//
	function getStyle(oElm, strCssRule, forceNumber)
	{
		var strValue = "";
		if (document.defaultView && document.defaultView.getComputedStyle)
		{
			strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
		}
		else if (oElm.currentStyle)
		{
			strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1) { return p1.toUpperCase(); });
			strValue = oElm.currentStyle[strCssRule];
		}
		
		if (forceNumber)
		{
			strValue = parseInt(strValue);
			strValue = (isNaN(strValue) ? 0 : strValue);
		}
		return strValue;
	}
