/*********************************************************************/
/* mouse.js                                                          */
/* functions for managing/tracking mouse events                      */
/* (c) 2001-2005 Jon Gilkison, Interfacelab Inc.                     */
/*********************************************************************/

var mouseDowns=[];
var mouseMoves=[];
var mouseUps=[];

var cursorDrag=false;

function screenObject() {
	this.mouseX=0;
	this.mouseY=0;
}

var screenObj=new screenObject();

function initMouseEvents() {
	document.onmousedown = mouseDown;
	document.onmousemove = mouseMove;
	document.onmouseup = mouseUp;
	if (is.ns4) 
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
	else {
		
	}
}

function addMouseUp(func) {
	mouseUps[mouseUps.length]=func;
}

function addMouseDown(func) {
	mouseDowns[mouseDowns.length]=func;
}

function addMouseMove(func) {
	mouseMoves[mouseMoves.length]=func;
}

function mouseDown(e) {
	var x=y=0;
	
	if ((!is.ie && e.which!=1) || (is.ie && event.button!=1)) return true;
	if (is.ns) {
		x=e.pageX;
		y=e.pageY;
	} else if (is.opera) {
		x = event.x+window.pageXOffset;
		y = event.y+window.pageXOffset;
	} else {
		x = event.x+document.body.scrollLeft;
		y = event.y+document.body.scrollTop;
	}

	if (is.ns && e.target!=document) routeEvent(e);
	
	for (i=0; i<mouseDowns.length; i++)
		mouseDowns[i](x,y);

	return true;
}

function mouseMove(e) {
	if (is.ns) {
		x=e.pageX;
		y=e.pageY;
	} else if (is.opera) {
		x = event.x+window.pageXOffset;
		y = event.y+window.pageXOffset;
	} else {
		x = event.x+document.body.scrollLeft;
		y = event.y+document.body.scrollTop;
	}

	if ((is.ns4||is.ns5) && e.target!=document) routeEvent(e);
	
	if (is.ie)
		y=event.clientY;
		
//	status=y;
	
	screenObj.mouseX=x;
	screenObj.mouseY=y;
	
	if (is.ns && e.target!=document) routeEvent(e);

	for (i=0; i<mouseMoves.length; i++)
		mouseMoves[i](x,y);
		
	return (!cursorDrag);
}

function mouseUp(e) {
	if (is.ns) {
		x=e.pageX;
		y=e.pageY;
	} else if (is.opera) {
		x = event.x+window.pageXOffset;
		y = event.y+window.pageXOffset;
	} else {
		x = event.x+document.body.scrollLeft;
		y = event.y+document.body.scrollTop;
	}

	if ((is.ns4||is.ns5) && e.target!=document) routeEvent(e);

	if (is.ns && e.target!=document) routeEvent(e);

	for (i=0; i<mouseUps.length; i++)
		mouseUps[i](x,y);
	
	return true;
}

addLoadProc(initMouseEvents);