var Event_ToggledOnFlags = 0;
var Event_MouseMoveFunctions = '';
var Event_MouseUpFunctions = '';
var Event_MouseDownFunctions = '';

var mousex = 0, mousey = 0, mouseb = 0;
function Event_GenericMouseMove(eventdata) {
	var scrolldata;
	if (InIE) {
		scrolldata = MeMSOGetScrollPosition();
		mousex = event.clientX + scrolldata.x;
		mousey = event.clientY + scrolldata.y;

		mouseb = event.button;

	} else {
		mousex = parseInt(eventdata.pageX);
		mousey = parseInt(eventdata.pageY);

		if (eventdata.which == 2)
			mouseb = 1;
		else if (eventdata.which == 3)
			mouseb = 2;

	}

	eval(Event_MouseMoveFunctions);
}



function Event_GenericMouseDown(eventdata) {
	var scrolldata;
	if (InIE) {
		scrolldata = MeMSOGetScrollPosition();
		mousex = event.clientX + scrolldata.x;
		mousey = event.clientY + scrolldata.y;

		mouseb = event.button;

	} else {
		mousex = parseInt(eventdata.pageX);
		mousey = parseInt(eventdata.pageY);

		if (eventdata.which == 2)
			mouseb = 1;
		else if (eventdata.which == 3)
			mouseb = 2;

	}

	eval(Event_MouseDownFunctions);
}



function Event_GenericMouseUp(eventdata) {
	var scrolldata;
	if (InIE) {
		scrolldata = MeMSOGetScrollPosition();
		mousex = event.clientX + scrolldata.x;
		mousey = event.clientY + scrolldata.y;

		mouseb = event.button;

	} else {
		mousex = parseInt(eventdata.pageX);
		mousey = parseInt(eventdata.pageY);

		if (eventdata.which == 2)
			mouseb = 1;
		else if (eventdata.which == 3)
			mouseb = 2;

	}

	var eventlist = Event_MouseUpFunctions.split(";");
	//alert('Number of events: ' + eventlist.length);
	for (var q = 0; q < eventlist.length; q++) {
		if (eventlist[q] != '') {
			//alert(eval(eventlist[q] + ';'));
			if (!eval(eventlist[q] + ';'))
				return false;
		}
	}
}



function Event_AddHandler(EventType, HandlerToAppend) {
	switch (EventType) {
	case 'mousemove':
		Event_MouseMoveFunctions += HandlerToAppend;
		if (!(Event_ToggledOnFlags & 0x01)) {
			MeMSOAddEvent('mousemove', Event_GenericMouseMove);
			Event_ToggledOnFlags |= 0x01;
		}
		break;

	case 'mousedown':
		Event_MouseDownFunctions += HandlerToAppend;
		if (!(Event_ToggledOnFlags & 0x02)) {
			MeMSOAddEvent('mousedown', Event_GenericMouseDown);
			Event_ToggledOnFlags |= 0x02;
		}
		break;

	case 'mouseup':
		Event_MouseUpFunctions += HandlerToAppend;
		if (!(Event_ToggledOnFlags & 0x04)) {
			MeMSOAddEvent('mouseup', Event_GenericMouseUp);
			if (InIE)
				document.oncontextmenu = Event_GenericMouseUp;
			Event_ToggledOnFlags |= 0x04;
		}
		break;

	}
}


