/*===================================================* * * * Event Model * * * * * * USAGE: * * * * Event.bind(class, event, name, function); * * * * This binds an event function to the system * * * * Event.unbind(class, event, name); * * * * This unbinds an event function from the * * system * * * * Event.change(class, event, name, function); * * * * This changes the function run * * * * Event.trigger(class, event, [args]); * * * * This calls all the functions registered to the * * event in the order registered. * * * **===================================================*/ var Event = window.Event = { events: { // storage var. }, trigger: function(klass, name, arg){ if(this.events[klass]){ if(this.events[klass][name]){ for(var i in this.events[klass][name]){ this.events[klass][name][i](arg); } } } }, bind: function(klass, event, name, fn){ if(!this.events[klass]){ this.events[klass] = {}; } if(!this.events[klass][event]){ this.events[klass][event] = {}; } if(!this.events[klass][event][name]){ this.events[klass][event][name] = fn; } }, unbind: function(klass, event, name){ if(this.events[klass]){ if(this.events[klass][event]){ if(this.events[klass][event][name]){ delete this.events[klass][event][name] } if(this.events[klass][event].length == 0){ delete this.events[klass][event]; } if(this.events[klass].length == 0){ delete this.events[klass]; } } } }, change: function(klass, event, name, fn){ if(this.events[klass] && this.events[klass][event] && this.events[klass][event][name]){ this.events[klass][event][name] = fn; }else{ this.bind(klass, event, name, fn); } } };