var dom = Boolean(window.addEventListener);

function getEvent(e)
{
	var obj = e;
	if ( !dom )
	{
		obj.e = e;
		obj.layerX = e.offsetX;
		obj.layerY = e.offsetY;
		obj.target = e.srcElement;
		obj.stopPropagation = function() { event.cancelBubble = true; }
		obj.preventDefault = function() { event.returnValue = false; }
		
		if ( event.keyCode )
			obj.which = event.keyCode;
	}
	return( obj );
}

if ( typeof 'get_event' != 'function' )
	var get_event = getEvent;

function getElementsByClassName(className, node)
{
	var children = null, returnArr = [], i;
	var regexp = new RegExp("(^|\\s)"+ className +"(\\s|$)", "g");
	
	if ( node == undefined ) node = document.body;
	else if ( typeof node != "object" ) return([]);
	else if ( regexp.test(node.className) )
		returnArr[returnArr.length] = node;
	
	children = ( node.children ) ? node.children : node.childNodes;
	for (i = 0; i < children.length; i++)
	{
		returnArr = returnArr.concat(
				getElementsByClassName( className, children[i] )
		);
	}
	
	return(returnArr);
}

function getNodeInfo(node)
{
	var xPos = 0, yPos = 0, width = 0, height = 0, srcNode = node, style;
	
	while ( node.nodeType == 1 )
	{
		style = ( dom ) ? document.defaultView.getComputedStyle(node, null) : node.currentStyle;
		if ( style.position != "absolute" )
		{
			if ( style.position == "relative" )
				break;
			
			xPos += node.offsetLeft;
			yPos += node.offsetTop;
		}
		if ( node.offsetParent )
			node = node.offsetParent;
		else break;
	}
	
	if (typeof srcNode.offsetWidth != "undefined")
	{
		width = srcNode.offsetWidth;
		height = srcNode.offsetHeight;
	} else if (typeof srcNode.width != "undefined") {
		width = srcNode.width;
		height = srcNode.height;
	}
	
	return( { x : xPos , y : yPos , w : width , h : height } );
}

function getChildElement( parent , offset )
{
	// offset starts at 1 instead of 0
	var i, count = 0, len = parent.childNodes.length;
	
	for ( i = 0; i < len; i++ )
		if ( parent.childNodes[i].nodeType == 1 && ++count == offset )
			return( parent.childNodes[i] );
	
	return( null );
}