﻿var EventManager = {
	Add: function (element, type, handler) {
		if(element.addEventListener) { element.addEventListener(type, handler, false); }
		else {
			if(!handler.$$GUID) { handler.$$GUID = EventManager.Add.GUID++; }
			if(!element.events) { element.events = {}; }
			var handlers = element.events[type];
			if(!handlers) {
				handlers = element.events[type] = {};
				if(element["on" + type]) { handlers[0] = element["on" + type]; }
				element["on" + type] = EventManager.Handle;
			}
			handlers[handler.$$GUID] = handler;
		}
	},
	Remove: function (element, type, handler) {
		if(element.removeEventListener) { element.removeEventListener(type, handler, false); }
		else if(element.events && element.events[type] && handler.$$GUID) { delete element.events[type][handler.$$GUID]; }
	},
	Handle: function (e) {
		e = event || EventManager.Fix(window.event);
		var returnValue = true;
		var handlers = this.events[e.type];	
		for (var i in handlers) {
			if(!Object.prototype[i]) {
				this.$$handler = handlers[i];
				if(this.$$handler(e) === false) { returnValue = false; }
			}
		}	
		if(this.$$handler) { this.$$handler = null; }
		return returnValue;
	},
	Fix: function (e) {
		EventManager.Fix.preventDefault = function() { this.returnValue = false; }
		EventManager.Fix.stopPropagation = function() { this.cancelBubble = true; }
		e.preventDefault = EventManager.Fix.preventDefault;
		e.stopPropagation = EventManager.Fix.stopPropagation;
		return e;
	}
}

EventManager.Add.GUID = 1;