var __isFireFox = navigator.userAgent.match(/gecko/i);

function getElementAbsolutePosition (element)
{
	var res = new Object();
	
	res.x = 0;
	res.y = 0;
	
	if (element !== null)
	{
		res.x = element.offsetLeft; 
		res.y = element.offsetTop; 
    	
		var offsetParent = element.offsetParent;
		var parentNode   = element.parentNode;

		while (offsetParent !== null)
		{
			res.x += offsetParent.offsetLeft;
			res.y += offsetParent.offsetTop;

			if (offsetParent != document.body && offsetParent != document.documentElement)
			{
				res.x -= offsetParent.scrollLeft;
				res.y -= offsetParent.scrollTop;
			}
			//next lines are necessary to support FireFox problem with offsetParent
			if (__isFireFox)
			{
				while (offsetParent != parentNode && parentNode !== null)
				{
					res.x -= parentNode.scrollLeft;
					res.y -= parentNode.scrollTop;
					
					parentNode = parentNode.parentNode;
				}    
			}
			
			parentNode   = offsetParent.parentNode;
			offsetParent = offsetParent.offsetParent;
		}
	}
	
    return(res);
}

var mousePosition      = new Object();
var mouseEventHandlers = new Array ();

function registerMouseEventHandler (mouseEventHandler)
{
	mouseEventHandlers.push(mouseEventHandler);
}

function getMousePosition ()
{
	return(mousePosition);
}

function handleMouseMoveEvent (e)
{
	var x = 0;
	var y = 0;
	
	if (!e)
		e = window.event;
	
	if (e.pageX || e.pageY)
	{		
		x = e.pageX;	
		y = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;		
		y = e.clientY + document.body.scrollTop  + document.documentElement.scrollTop;	
	}

	mousePosition.x = x;
	mousePosition.y = y;
	
	for(var i = 0; i < mouseEventHandlers.length; ++i)
		mouseEventHandlers[i].handleEvent(x, y);
}

document.onmousemove = handleMouseMoveEvent;
