var EventSource = function(type) { this.listeners = []; this.type = type; }; EventSource.prototype.addListener = function(listener, context) { if (listener instanceof Function) { listener = { handler: listener, context: context } } if (!listener.context) { listener.context = window; } this.listeners.push(listener); return listener; }; EventSource.prototype.removeListener = function(listener) { for (var i=0; i 1) { var inputs = { element: element, type: type, handler: handler, context: context, data: data, delay: delay, keyCode:keyCode } } else if (arguments[0] instanceof Object) { var inputs = arguments[0]; } else { var inputs = { type: arguments[0] } } var listener = { handler: inputs.handler, context: inputs.context, delay: inputs.delay, data: inputs.data, keyCode:inputs.keyCode }; if (this._isDomEventType(inputs.type)) { var e = this._addDOMEvent(inputs.type, listener, inputs.element); } else { var e = this._addCustomEvent(inputs.type, listener); } this.events.push(e); return e; }; EventManager.prototype._isDomEventType = function (type) { if (null == DOMEventSource.prototype._getBrowserEventName.apply({type: type})) { return false; } return true; }; EventManager.prototype._addDOMEvent = function(type, listener, element) { var e = new DOMEventSource(type); if (listener.handler) { e.addListener(listener); } if (element) { e.addElement(element); } return e; }; EventManager.prototype._addCustomEvent = function(type, listener) { var e = new EventSource(type); if (listener.handler) { e.addListener(listener); } return e; }; EventManager.prototype.remove = function(e /*element or event */, listener /*listener or eventType*/) { /* Method refactored, as it supports 'new' mode (remove the event+listener) and 'old' mode (remove the event from the element by eventType)*/ if (e instanceof EventSource) { this._removeEvent(e, listener); } else if (e.nodeName || e instanceof Array) { this._removeElement(e, listener); } }; EventManager.prototype._removeEvent = function(e, listener) { if (undefined == listener) { e.removeAll(); } else { e.removeListener(listener); } for (var i=0; i