﻿/*
	Copyright (C) 2005 Ekina Ltd. All Rights Reserved.
		
	Contains objects and methods to handle cross browser event handling.
	
	Usage:
		
		EventManager.register(element, event, handler);		
		EventManager.unregister(element, event, handler);
		
		element:	The element to attach the event to, this can be
					a standard HTML DOM Element, document or window.
					
		event:		The name of the event to register, for example: "onclick".
		
		handler:	A function pointer to the method which will handle
					the event. The first argument of the method will be
					the browsers Event object.
		
	
	Example:
		
		EventManager.register(document, "onclick", myhandler);
		or
		EventManager.unregister(document, "onclick", myhandler);
*/
if (!C9DFA415_3966_4f69_A071_1B8C3960D563) {

	var EventManager = new Object();
	var EM = EventManager;

	EventManager._eventElements = new Object();

	EventManager.register = function (element, eventName, handler) {
		eventName = EM._normalizeEvent(eventName);
		var evt = EM._findEventStruct(element, eventName, handler);
		if(evt > -1) return;
		EM._eventElements[eventName].push({element : element, handler : handler});
		EM._registerEvent(element, eventName, handler);
	}

	EventManager.unregister = function (element, eventName, handler) {
		eventName = EM._normalizeEvent(eventName);
		var evt = EM._findEventStruct(element, eventName, handler);
		if(evt == -1) return;
		EM._eventElements[eventName].splice(evt, 1);
		EM._unregisterEvent(element, eventName, handler);
	}

	EventManager._findEventStruct = function (element, eventName, handler) {
		var evt = EM._eventElements[eventName];
		if (!evt) {
			EM._eventElements[eventName] = new Array();
			return -1;
		}
		for (var i = 0; i < evt.length; i++)
			if (evt[i].element == element && evt[i].handler == handler)
				return i;
		return -1;
	}

	EventManager._normalizeEvent = function (eventName) {
		eventName = eventName.toLowerCase();
		if (document.addEventListener) // W3C
			return eventName.substring(0, 2) == "on" ? eventName.substring(2) : eventName;
		else if (document.attachEvent) // MSIE
			return eventName.substring(0, 2) == "on" ? eventName : "on" + eventName;
		else
			alert("Cannot normalize event - unknown DOM");
		return "";
	}

	EventManager._registerEvent = function (element, eventName, handler) {
		if (element.addEventListener) // W3C - eventName is handled in _normalizeEvent
			element.addEventListener(eventName, handler, false);
		else if (element.attachEvent) // MSIE
			element.attachEvent(eventName, handler);   
		else
			alert("Error registering event - Cannot register event \"" + eventName + "\" for the passed element");
	}

	EventManager._unregisterEvent = function (element, eventName, handler) {
		if (element.removeEventListener) // W3C - eventName is handled in _normalizeEvent
			element.removeEventListener(eventName, handler, false);
		else if (element.detachEvent) // MSIE
			element.detachEvent(eventName, handler);   
		else
			alert("Error unregistering event - Cannot unregister event \"" + eventName + "\" for the passed element");
	}
	
	EventManager.getMouseEventStruct = function(e){
		if(!e) e = window.event;
		var struct = {
			srcEl: e.srcElement ? e.srcElement : e.target,
			
			x : e.clientX ? e.clientX : e.pageX,
			y : e.clientY ? e.clientY : e.pageY,
			button : e.button
			
		};
		//Mouse.x = struct.e.x;
		//Mouse.y = struct.e.y;
		return struct;
	};

	EventManager.getKeyEventStruct = function(e){
		if(!e) e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		return {
			code:code, 
			srcEl: e.srcElement ? e.srcElement : e.target
			};
	};
	
	var C9DFA415_3966_4f69_A071_1B8C3960D563 = true;
}