Function.prototype.bind=function(object){var method=this;return function(){return method.apply(object,arguments);};};function EventBroadcaster(){this.x={};this.events=[];this.builtinEvts=[];}EventBroadcaster.prototype.getActionIdx=function(obj,evt,action,binding){if(obj && evt){var curel=this.events[obj][evt];if(curel){var len=curel.length;for(var i=len-1;i>=0;i--){if(curel[i].action==action && curel[i].binding==binding){return i;}}}else{return -1;}}return -1;};EventBroadcaster.prototype.addListener=function(evt,action,binding){obj=this;if(this.events[obj]){if(this.events[obj][evt]){if(this.getActionIdx(obj,evt,action,binding)==-1){var curevt=this.events[obj][evt];curevt[curevt.length]={action:action,binding:binding};}}else{this.events[obj][evt]=[];this.events[obj][evt][0]={action:action,binding:binding};}}else{this.events[obj]=[];this.events[obj][evt]=[];this.events[obj][evt][0]={action:action,binding:binding};}};EventBroadcaster.prototype.removeListener=function(obj,evt,action,binding){obj=this;if(this.events[obj]){if(this.events[obj][evt]){var idx=this.actionExists(obj,evt,action,binding);if(idx>=0){this.events[obj][evt].splice(idx,1);}}}};EventBroadcaster.prototype.fireEvent=function(evt,e,args){obj=this;if(!e){e=window.event;}if(obj && this.events){var evtel=this.events[obj];if(evtel){var curel=evtel[evt];if(curel){for(var act in curel){var action=curel[act].action;if(curel[act].binding){action=action.bind(curel[act].binding);}action(e,args);}}}}};