var Mouse = Class.create();
Object.extend(Mouse, {
	initiated: false,
	mousemove: new Object(),

	initialize: function(obj, e) {
		obj = obj ? obj : document;

		Mouse.mousemove[obj] = obj.onmousemove ? obj.onmousemove : null;
		obj.onmousemove = function(e) { Mouse.FindMousePosition(e, obj); };

		if (e) Mouse.FindMousePosition(e, obj);
	},

	stop: function(obj) {
		obj = obj ? obj : document;

		if (Mouse.mousemove[obj])	obj.onmousemove = Mouse.mousemove[obj];
		else						obj.onmousemove = null;
	},

	FindMousePosition: function(e, obj) {
		if (obj && Mouse.mousemove[obj]) { Mouse.mousemove[obj](e); }

		if (document.all) {
			if (obj) {
				var iebody = null;
				var element = obj;
				while (iebody == null && element.parentNode) {
					if (element.tagName.toLowerCase() == "body") {
						iebody = element;
					}
					element = element.parentNode;
				}
			} else {
				var iebody = document.getElementsByTagName("body");
				if (iebody.length) iebody = iebody[0];
				else iebody = null;
			}

			if (iebody) {
				e = e ? e : event;
				Mouse.x = e.clientX + iebody.scrollLeft;
				Mouse.y = e.clientY + iebody.scrollTop;
			}

			e = e ? e : event;
			Mouse.x = e.clientX;
			Mouse.y = e.clientY;
		} else {
			Mouse.x = e.pageX;
			Mouse.y = e.pageY;
		}  

		if (Mouse.x < 0) Mouse.x = 0;
		if (Mouse.y < 0) Mouse.y = 0;

		return [Mouse.x, Mouse.y];
	}
});