//
// QUOSA Information Manager
// Copyright © 2000-2008 QUOSA, Inc.
// All Rights Reserved.
//
var xMouseEvent_OnDown = 0;
var xMouseEvent_OnMove = 1;
var xMouseEvent_OnUp   = 2;

var xMouseEvents = {
	xOnMouseDown : new xObjectsCollection(),
	xOnMouseMove : new xObjectsCollection(),
	xOnMouseUp   : new xObjectsCollection(),
	xCursorX     : 0,
	xCursorY     : 0,
	
	xInitializeComponents : function () {
		document.onmousedown = function (event) {
			var x = xMouseEvents;
			for (xObjName in x.xOnMouseDown.xObjects) {
				var xHandler = x.xOnMouseDown.xObjects[xObjName];
				if (xHandler != null) xHandler();
			}
		};
		
		document.onmousemove = function (event) {
			var x = xMouseEvents; var xEvent = 
			(xIsDefined(event)) ? event : window.event;
			x.xCursorX = xEvent.clientX;
			x.xCursorY = xEvent.clientY;			
			for (xObjName in x.xOnMouseMove.xObjects) {
				var xHandler = x.xOnMouseMove.xObjects[xObjName];
				if (xHandler != null) xHandler(x.xCursorX, x.xCursorY);
			}
		};
		
		document.onmouseup = function (event) {
			var x = xMouseEvents;
			for (xObjName in x.xOnMouseUp.xObjects) {
				var xHandler = x.xOnMouseUp.xObjects[xObjName];
				if (xHandler != null) xHandler();
			}
		};		
	},
	
	xSubscribe : function (xEventId, xObjName, xHandler) {
		var x = xMouseEvents;
		if (xEventId == xMouseEvent_OnDown) {
			x.xOnMouseDown.xSetObjectByName(xObjName, xHandler);
		} else
		if (xEventId == xMouseEvent_OnMove) {
			x.xOnMouseMove.xSetObjectByName(xObjName, xHandler);
		} else
		if (xEventId == xMouseEvent_OnUp  ) {
			x.xOnMouseUp.xSetObjectByName  (xObjName, xHandler);
		}
	},
	
	xUnSubscribe : function (xEventId, xObjName) {
		var x = xMouseEvents;
		if (xEventId == xMouseEvent_OnDown) {
			x.xOnMouseDown.xSetObjectByName(xObjName, null);
		} else
		if (xEventId == xMouseEvent_OnMove) {
			x.xOnMouseMove.xSetObjectByName(xObjName, null);
		} else
		if (xEventId == xMouseEvent_OnUp  ) {
			x.xOnMouseUp.xSetObjectByName  (xObjName, null);
		}
	}
};
