FP.Events = function(obj, el){ this.events = {}; if(!el){ this.el = document.createElement('div'); }else{ this.el = el; } obj.createEvent = this.createEvent; obj.tell = this.tell; obj.listen = this.listen; obj.deafen = this.deafen; return this; } FP.Events.prototype.createEvent = function(evt){ var e = new CustomEvent(evt); this.events[evt] = e; return e; } FP.Events.prototype.tell = function(evt, msg){ var e; if(!this.events[evt]){ console.warn("No event:", evt, "defined yet, creating."); e = this.createEvent(evt) }else{ e = this.events[evt]; } if(msg) e.msg = msg; this.el.dispatchEvent(e); } FP.Events.prototype.listen = function(evt, func, bindto){ if(!this.events[evt]){ console.warn("No event:", evt, "defined yet, creating."); this.createEvent(evt); return; } if(bindto){ this.el.addEventListener(evt, func.bind(bindto), false); }else{ this.el.addEventListener(evt, func, false); } } FP.Events.prototype.deafen = function(evt, func){ this.el.removeEventListener(evt, func, false); }