// Commonly used mouse functions with basic function stubs
//
// mouseMoveHandler(e) - define custom mouse move stuff
// mouseLeftClickHandler(e) - define left click actions
// mouseRightClickHandler(e) - define right click actions
// mouseUpHandler(e) - handle mouseup actions
// keyCustomHandler(key) - handle keypresses

function mouseInit() {
	if (document.all) {
		document.oncontextmenu = _handle_mouseClick;
		document.onmousemove = _handle_mouseMove;
		document.onmousedown = _handle_mouseClick;
		document.onmouseup = _handle_mouseUp;
		document.onkeypress = _handle_keyHandler;
	}
	else {
		if (window.addEventListener) {
			window.addEventListener('keypress', _handle_keyHandler, false);
			window.addEventListener('contextmenu', _handle_mouseClick, false);
			window.addEventListener('mousedown', _handle_mouseClick, false);
			window.addEventListener('mousemove', _handle_mouseMove, false);
			window.addEventListener('mouseup', _handle_mouseUp, false);
		}
		else {
			window.captureEvents(Event.KEYPRESS);
			window.captureEvents(Event.MOUSEMOVE);
			window.oncontextmenu = _handle_mouseClick;
			window.onmousemove = _handle_mouseMove;
			window.onmousedown = _handle_mouseClick;
			window.onmouseup = _handle_mouseUp;
			window.onkeypress = _handle_keyHandler;
		}
	}
}

var mouseX;
var mouseY;
var oldMouseX = 0;
var oldMouseY = 0;
function _handle_mouseMove(event) {
	if (document.all) {
		mouseX = window.event.clientX + document.documentElement.scrollLeft
		  + document.body.scrollLeft;
		mouseY = window.event.clientY + document.documentElement.scrollTop
		  + document.body.scrollTop;
	}
	else {
		mouseX = event.clientX + window.scrollX;
		mouseY = event.clientY + window.scrollY;
	}

	var ret;

	try {
		ret = mouseMoveHandler(event);
	} catch(e) {return true;}

	oldMouseX = mouseX;
	oldMouseY = mouseY;

	return ret;
}

function _handle_mouseClick(e) {
	var button;

	if (document.all) {e = window.event; button = window.event.button;}
				 else {button = e.which;}

	if (button == 1) {
		try {
			return mouseLeftClickHandler(e);
		} catch(e) {return true;}			
	}
	else {
		if (button == 2 || button == 3) {
			try {
				return mouseRightClickHandler(e);
			} catch(e) {return true;}
		}
	}
	return true;
}

function _handle_mouseUp(e) {
	try {
		return mouseUpHandler(e);
	} catch(e) {return true;}
}

function _handle_keyHandler(e) {
	var key;
	if (document.all) {key = window.event.keyCode;}
				 else {key = e.which;}

	try {
		return keyCustomHandler(key);
	} catch(e) {return true;}
}