// Adapted from Object.Event by Ryan Johnson (http://livepipe.net/projects/object_event/) Object.Event = { extend: function(object) { Object.extend(object, Object.Event.Methods); if(object.prototype) Object.extend(object.prototype, Object.Event.Methods); return object; } } Object.Event.Methods = { _objectEventSetup: function(event) { this._observers = this._observers || {}; this._observers[event] = this._observers[event] || []; }, observe: function(event, observer) { if(typeof(event) == 'string' && typeof(observer) != 'undefined') { this._objectEventSetup(event); if(!this._observers[event].include(observer)) this._observers[event].push(observer); } else { for(var e in event) this.observe(e,event[e]); } }, stopObserving: function(event, observer) { this._objectEventSetup(event); this._observers[event] = this._observers[event].without(observer); }, notify: function(event, args) { this._objectEventSetup(event); return this._observers[event].collect(function(observer) { observer.apply(observer, args) }.bind(this)); } }