
/* *******************************************
*	Copyright © 2002-2009 ExpoCharger International, Inc. All rights reserved
* ****************************************** */


//depends on nothing

var currentMousePoint = null;
var mouseMoveListeners = {};

function initMousetrack(){
	document.onmousemove = mouseMoved;
}

function getItemPosition(item){
	var left = item.offsetLeft;
	var top = item.offsetTop;
	return {x:left, y:top};
}
function getMouseOffset(item, ev){
	ev = ev || window.event;

	var itemPos = getItemPosition(item);
	var mousePos = getMousePosition(ev);
	return {x:mousePos.x - itemPos.x, y:mousePos.y - itemPos.y};
}
function getMousePosition(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}

	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}
function mouseMoved(ev){
	ev = ev || window.event;
	currentMousePoint = getMousePosition(ev);
	for(var id in mouseMoveListeners){
		if(id) mouseMoveListeners[id](ev);
	}		
	return false;
}

var __nextMmListenerId = 1;
function registerMouseMoveListener(handler){	
	if(document.onmousemove != mouseMoved){
		//start handling mousemove
		//incorporate pre-existing mm handler if any
		if(document.onmousemove){
			document.onmousemove.$$listenerId = __nextMmListenerId++;
			mouseMoveListeners[document.onmousemove.$$listenerId] = document.onmousemove;
		}
		document.onmousemove = mouseMoved;
	}
	handler.$$listenerId = __nextMmListenerId++;
	mouseMoveListeners[handler.$$listenerId] = handler;
	return handler.$$listenerId;
}
function unRegisterMouseMoveListener(id){
	if(mouseMoveListeners[id]){
		//mouseMoveListeners[id] = null;
		delete mouseMoveListeners[id];
	}
}

