/***** * * EventTarget.es * * Authors: Kevin Lindsey, Antoine Quint * *****/ EventTarget.VERSION = 0.1; function EventTarget() { if (arguments.length == 0) { this.Init(); } }; EventTarget.prototype.Init = function() { this._EventListeners = {}; }; EventTarget.prototype.handleEvent = function(e) { var handler = 'On' + e.type; if ( this[handler] == null ) { alert("Unsupported type: " + e.type); } this[handler](e); }; EventTarget.prototype.AddEventListener = function(type, listener, useCapture) { var listeners = this._EventListeners[type]; if ( listeners == null ) { listeners = []; this._EventListeners[type] = listeners; } listeners.push(listener); }; EventTarget.prototype.RemoveEventListener = function(type, listener, useCapture) { var listeners = this._EventListeners[type]; if ( listeners != null ) { for ( var i = 0; i < listeners.length; i++ ) { if ( listeners[i] === listener ) { listeners.splice(i, 1); break; } } } }; EventTarget.prototype.DispatchEvent = function(evt) { var listeners = this._EventListeners[evt.type]; if ( listeners != null ) { for ( var i = listeners.length - 1; i >= 0; i-- ) { var listener = listeners[i]; switch ( typeof(listener) ) { case "function": listener(evt); break; case "object": listener.handleEvent(evt); break; case "string": eval(listener); break; default: throw new Error( "Unrecognized event listener type: " + typeof(listener) ); }; } } }; EventTarget.prototype.HasListener = function(type) { return this._EventListeners[type] != null; };