/* Version: 1.1.0.2 LastUpdate: 2009/08/12 License: MIT-style license. Copyright (c) 2008-2009 zenbo (zenbo.jp) */
var EventDispatchable={};(function(a){var g=this;function d(l){for(var k in e){l[k]=e[k]}}var e={addListener:function(k,p,o,l){if(!(p instanceof Function)){var q=new TypeError("listener is not a function");q.listener=p;throw q}if(k instanceof Array){for(var m=0;m<k.length;m++){this.addListener(k[m],p,o,l)}}else{var n=this.getListenerCollection(k,true);n.add(new i(p,o,l))}},addListenerOnce:function(l,q,p,m){if(!(q instanceof Function)){var r=new TypeError("listener is not a function");r.listener=q;throw r}if(l instanceof Array){for(var n=0;n<l.length;n++){this.addListenerOnce(l[n],q,p,m)}}else{var o=this.getListenerCollection(l,true);var k=new i(function(s){new i(q,p,m).fire(s);o.remove(k)},this);o.add(k)}},removeListener:function(k,p,o,l){if(k instanceof Array){for(var m=0;m<k.length;m++){this.removeListener(k[m],p,o,l)}}else{var n=this.getListenerCollection(k);if(n){n.remove(new i(p,o,l))}}},fireEvent:function(l,k){if(l instanceof Array){for(var m=0;m<l.length;m++){this.fireEvent(l[m],k)}}else{var n=this.getListenerCollection(l);if(n){n.fire(k,this)}}},getListenerCollection:function(l,k){this.eventContainer=this.eventContainer||new j();if((k)&&(!this.eventContainer.has(l))){this.eventContainer.set(l,new b(l))}return this.eventContainer.has(l)?this.eventContainer.get(l):null},getEventNames:function(){var l=new j();if(this.eventContainer){this.eventContainer.each(function(m,n,o){l.set(m,true)},this)}for(var k in this){if((this[k])&&(this[k].isEventProperty)){l.set(k,true)}}return l.getKeys()}};function f(n,q,k,m){q=q||"Start";k=k||"End";for(var l in n){if(o(n,l,m)){continue}n[l]=p(n[l],l,q,k)}function p(t,u,v,r){var s=function(){this.fireEvent(u+v,{"arguments":arguments});var w=t.apply(this,arguments);this.fireEvent(u+r,{"arguments":arguments});return w};s.former=t;return s}function o(v,t,u){if(typeof v[t]!="function"){return true}if(v[t].former){return true}var w=false;for(var r in e){if(t==r){w=true;break}}if(w){return true}var w=false;if(u){for(var s=0;s<u.length;s++){if(t==u[s]){w=true;break}}}if(w){return true}return false}}function c(m,n){for(var l=0;l<n.length;l++){var k=n[l];m[k]=new h(m,k)}}function h(){this.initialize.apply(this,arguments)}h.prototype={initialize:function(l,k){this.parent=l;this.eventName=k;this.isEventProperty=true},add:function(m,l,k){this.parent.addListener(this.eventName,m,l,k)},addOnce:function(m,l,k){this.parent.addListenerOnce(this.eventName,m,l,k)},remove:function(m,l,k){this.parent.removeListener(this.eventName,m,l,k)},fire:function(k){this.parent.fireEvent(this.eventName,k)},clear:function(){this.parent.getListenerCollection(this.eventName).clear()},getLength:function(){return this.parent.getListenerCollection(this.eventName).getLength()}};function b(){this.initialize.apply(this,arguments)}b.prototype={initialize:function(k){this.eventName=k;this.bindingListeners=[]},add:function(l){var k=this.getListenerIndex(l);if(k==this.LISTENER_IS_NOT_FOUND){this.bindingListeners.push(l)}},remove:function(l){var k=this.getListenerIndex(l);if(k!=this.LISTENER_IS_NOT_FOUND){this.bindingListeners.splice(k,1)}},fire:function(k,n){k=k||{};k.eventName=this.eventName;k.sender=n;var m=[];for(var l=0;l<this.bindingListeners.length;l++){m.push(this.bindingListeners[l])}for(var l=0;l<m.length;l++){m[l].fire(k)}},clear:function(){this.bindingListeners.length=0},getListenerIndex:function(l){for(var k=0;k<this.bindingListeners.length;k++){if(this.bindingListeners[k].equals(l)){return k}}return this.LISTENER_IS_NOT_FOUND},getLength:function(){return this.bindingListeners.length},LISTENER_IS_NOT_FOUND:-1};function i(){this.initialize.apply(this,arguments)}i.prototype={initialize:function(m,l,k){this.listener=m;this.scope=l;this.args=k},fire:function(k){this.listener.apply(this.scope,[k].concat(this.args||[]))},equals:function(k){return((this.listener==k.listener)&&(this.scope==k.scope)&&(this.args==k.args))}};function j(){this.initialize.apply(this,arguments)}j.prototype={initialize:function(k){this.prefix=".";this.container={};if(k){for(var l in k){this.set(l,k[l])}}},get:function(k){return this.container[this.encodeKey(k)]},set:function(k,l){this.container[this.encodeKey(k)]=l;return this},has:function(k){return(this.encodeKey(k) in this.container)},del:function(k){delete this.container[this.encodeKey(k)];return this},clear:function(){this.container={};return this},getKeys:function(){var k=[];this.each(function(l,m,n){k.push(l)});return k},getValues:function(){var k=[];this.each(function(l,m,n){k.push(m)});return k},each:function(m,l){for(var n in this.container){if(n.substring(0,this.prefix.length)==this.prefix){var k=m.apply(l,[this.decodeKey(n),this.container[n],this]);if(k===false){break}}}},encodeKey:function(k){return this.prefix+k},decodeKey:function(k){return k.substring(this.prefix.length)}};a.includeTo=d;a.methodHook=f;a.setEventProperties=c})(EventDispatchable);
