Event.Publisher=Class.create();Object.extend(Event.Publisher,{_ls_event_targets:null,_event_source_id:null,_fl_trace_events:false,getEventSourceId:function(){if(typeof this._event_source_id=="function"){return this._event_source_id()}else{return this._event_source_id}},getEventTarget:function(a){if(!this._ls_event_targets){this._ls_event_targets=new Array()}if(!this._ls_event_targets[a]){document.body.appendChild(this._ls_event_targets[a]=document.createElement("A"))}return this._ls_event_targets[a]},addEventListener:function(e,c,a){var b=this.getEventTarget(e);Event.observe(b,"click",c,a);if(this._fl_trace_events){var d={publisher:this.getEventSourceId(),event_name:e,listener:c,capturing:a,event_source_proxy:b};this.dispatchEvent("eventListenerAdded",d,true,true)}},removeEventListener:function(e,c,a){var b=this.getEventTarget(e);Event.stopObserving(b,"click",c,a);if(this._fl_trace_events){var d={publisher:this.getEventSourceId(),event_name:e,listener:c,capturing:a,event_source_proxy:b};this.dispatchEvent("eventListenerRemoved",d,true,true)}},dispatchEvent:function(g,f,c,b){var d=this.getEventTarget(g);var a={event_name:g,event_target:this,data:f?f:null};if(!c){c=false}if(!b){b=false}var e=Event.create(a,c,b,true,d);if(this._fl_trace_events){if(g.match(/event(?:ListenerAdded|ListenerRemoved|Dispatched|Received)/)){return}var f={publisher:this.getEventSourceId(),event_name:g,event_data:a,can_bubble:c,cancelable:b,event_source_proxy:d,result:e};this.dispatchEvent("eventDispatched",f,true,true)}},toggleEventsTrace:function(){var a=Event.Tracer.findTracer();if(!a||!this._fl_trace_events){this._fl_trace_events=true;a=Event.Tracer.startTrace();a.registerPublisher(this)}else{this._fl_trace_events=false;if(a){a.unregisterPublisher(this)}}return this._fl_trace_events},isEventsTraceActive:function(){return this._fl_trace_events}});Event.Listener=Class.create();Object.extend(Event.Listener,{_listens:null,getEventHandlerName:function(b){var a=b.split(/[ _]/).join("-").camelize();return"on"+a.charAt(0).toUpperCase()+a.substr(1)},listenForEvent:function(c,f,e,b){if(!b){b=this.getEventHandlerName(f)}if(!this._listens){this._listens=new Array()}var d=this[b];if(typeof(b)=="function"){d=b}var a=d.bindAsEventListener(this);this._listens.push([c,f,e,b,a]);c.addEventListener(f,a,e)},stopListeningForEvent:function(c,f,d,b){if(!this._listens){return false}if(!b){b=this.getEventHandlerName(f)}var e=-1;var a=this._listens.detect(function(h,g){if((h[0]==c)&&(h[1]==f)&&(h[2]==d)&&(h[3]==b)){e=g;return true}});if(e>=0){this._listens.splice(e,1);c.removeEventListener(f,a[4],d);return true}return false}});Object.extend(Event,{create:function(d,c,b,a,f){var e;if(document.createEvent){if(!c){c=false}if(!b){b=false}if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){e=document.createEvent("HTMLEvents");e.initEvent("click",c,b)}else{e=document.createEvent("MouseEvents");e.initMouseEvent("click",c,b,window,0,0,0,0,0,false,false,false,false,0,null)}}else{e=document.createEventObject();e.event_type="onclick"}e.event_data=d;if(a){Event.dispatch(f,e)}return e},dispatch:function(b,a){if(document.createEvent){return b.dispatchEvent(a)}else{return b.fireEvent((typeof(a.event_type)!="undefined")?a.event_type:"onclick",a)}}});