// 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

var _mouseInitialized = false;
function mouseInit() {
	if (!_mouseInitialized) {
		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;
			}
		}
		_mouseInitialized = true;
	}
}

var mouseX = 0;
var mouseY = 0;
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 if (window.opera) {
		mouseX = event.pageX;
		mouseY = event.pageY;
	}
	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;}
}
