var EventManager = {
	Add: function (el, type, handler) {
		if(el.addEventListener) el.addEventListener(type, handler, false);
		else {
			if(!handler.$$GUID) handler.$$GUID = EventManager.Add.GUID++;
			if(!el.events) el.events = {};
			var handlers = el.events[type];
			if(!handlers) {
				handlers = el.events[type] = {};
				if(el["on" + type]) handlers[0] = el["on" + type];
				el["on" + type] = EventManager.Handle;
			}
			handlers[handler.$$GUID] = handler;
		}
	},
	Fire: function (el, type, shiftKey, ctrlKey) {
		if(el.dispatchEvent) {
			var e = document.createEvent("MouseEvents");
			e.initMouseEvent(type, true, true, window, 0, 0, 0, 0, 0, ctrlKey, false, shiftKey, false, 0, null);
			el.dispatchEvent(e);
		}
		else {
			var e = document.createEventObject();
			e.detail = 0;
			e.screenX = 0;
			e.screenY = 0;
			e.clientX = 0;
			e.clientY = 0;
			e.ctrlKey = ctrlKey;
			e.altKey = false;
			e.shiftKey = shiftKey;
			e.metaKey = false;
			e.button = 0;
			e.relatedTarget = null;
			el.fireEvent("on" + type, e);
		}
	},
	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;
	},
	Handle: function (e) {
		e = e || 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(event) === false) returnValue = false;
			}
		}
		if(this.$$handler) this.$$handler = null;
		return returnValue;
	},
	Remove: function (el, type, handler) {
		if(el.removeEventListener) el.removeEventListener(type, handler, false);
		else if(el.events && el.events[type] && handler.$$GUID) delete el.events[type][handler.$$GUID];
	},
	Stop: function (e) {
		if(e.preventDefault) e.preventDefault();
		else if(e.returnValue) e.returnValue = false;
	}
}

EventManager.Add.GUID = 1;