/*                                                                                                                                                      Copyright (c) 2006, Yahoo! Inc. All rights reserved.                                                                                                    Code licensed under the BSD License:                                                                                                                    http://developer.yahoo.net/yui/license.txt                                                                                                              version: 0.11.0                                                                                                                                         */ 
YAHOO.util.CustomEvent=function(_1,_2,_3){
	this.type=_1;
	this.scope=_2||window;
	this.silent=_3;
	this.subscribers=[];
	if(YAHOO.util.Event){
		YAHOO.util.Event.regCE(this);
	}
	if(!this.silent){}
};

YAHOO.util.CustomEvent.prototype={
	subscribe:function(fn,_5,_6){
		this.subscribers.push(new YAHOO.util.Subscriber(fn,_5,_6));
	}
	,unsubscribe:function(fn,_7){
		var _8=false;
		for(var i=0,len=this.subscribers.length;i<len;++i){
			var s=this.subscribers[i];
			if(s&&s.contains(fn,_7)){
				this._delete(i);
				_8=true;
			}
		}
		return _8;
	}
	,fire:function(){
		var len=this.subscribers.length;
		var _12=[];
		for(var i=0;i<arguments.length;++i){
			_12.push(arguments[i]);
		}
		if(!this.silent){}
		for(i=0;i<len;++i){
			var s=this.subscribers[i];
			if(s){
				if(!this.silent){}
				var _13=(s.override)?s.obj:this.scope;
				s.fn.call(_13,this.type,_12,s.obj);
			}
		}
	}
	,unsubscribeAll:function(){
		for(var i=0,len=this.subscribers.length;i<len;++i){
			this._delete(i);
		}
	}
	,_delete:function(_14){
		var s=this.subscribers[_14];
		if(s){
			delete s.fn;
			delete s.obj;
		}
		delete this.subscribers[_14];
	}
	,toString:function(){
		return "CustomEvent: "+"'"+this.type+"', "+"scope: "+this.scope;
	}
};

YAHOO.util.Subscriber=function(fn,obj,_16){
	this.fn=fn;
	this.obj=obj||null;
	this.override=(_16);
};

YAHOO.util.Subscriber.prototype.contains=function(fn,obj){
	return (this.fn==fn&&this.obj==obj);
};

YAHOO.util.Subscriber.prototype.toString=function(){
	return "Subscriber { obj: "+(this.obj||"")+", override: "+(this.override||"no")+" }";
};

if(!YAHOO.util.Event){
	YAHOO.util.Event=function(){
		var _17=false;
		var _18=[];
		var _19=[];
		var _20=[];
		var _21=[];
		var _22=[];
		var _23=[];
		var _24=0;
		var _25=[];
		var _26=[];
		var _27=0;
		return {
			POLL_RETRYS:200,
			POLL_INTERVAL:50,
			EL:0,
			TYPE:1,
			FN:2,
			WFN:3,
			SCOPE:3,
			ADJ_SCOPE:4,
			isSafari:(/Safari|Konqueror|KHTML/gi).test(navigator.userAgent),
			isIE:(!this.isSafari&&!navigator.userAgent.match(/opera/gi)&&navigator.userAgent.match(/msie/gi)),
			addDelayedListener:function(el,_29,fn,_30,_31){
				_19[_19.length]=[el,_29,fn,_30,_31];
				if(_17){
					_24=this.POLL_RETRYS;
					this.startTimeout(0);
				}
		}
	,startTimeout:function(_32){
		var i=(_32||_32===0)?_32:this.POLL_INTERVAL;
		var _33=this;
		var _34=function(){
			_33._tryPreloadAttach();
		};
		this.timeout=setTimeout(_34,i);
	}
	,onAvailable:function(_35,_36,_37,_38){
		_25.push({id:_35,fn:_36,obj:_37,override:_38});
		_24=this.POLL_RETRYS;
		this.startTimeout(0);
	}
	,addListener:function(el,_39,fn,_40,_41){
		if(!fn||!fn.call){
			return false;
		}
		if(this._isValidCollection(el)){
			var ok=true;
			for(var i=0,len=el.length;i<len;++i){
				ok=(this.on(el[i],_39,fn,_40,_41)&&ok);
			}
			return ok;
		}else{
			if(typeof el=="string"){
				var oEl=this.getEl(el);
				if(_17&&oEl){
					el=oEl;
				}else{
					this.addDelayedListener(el,_39,fn,_40,_41);
					return true;
				}
			}
		}
		if(!el){
			return false;
		}
		if("unload"==_39&&_40!==this){
			_20[_20.length]=[el,_39,fn,_40,_41];
			return true;
		}
		var _44=(_41)?_40:el;
		var _45=function(e){
			return fn.call(_44,YAHOO.util.Event.getEvent(e),_40);
	};
	var li=[el,_39,fn,_45,_44];
	var _48=_18.length;_18[_48]=li;
	if(this.useLegacyEvent(el,_39)){
		var _49=this.getLegacyIndex(el,_39);
		if(_49==-1){
			_49=_22.length;
			_26[el.id+_39]=_49;
			_22[_49]=[el,_39,el["on"+_39]];
			_23[_49]=[];
			el["on"+_39]=function(e){
				YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(e),_49);
			};
		}
		_23[_49].push(_48);
	}else{
		if(el.addEventListener){
			el.addEventListener(_39,_45,false);
		}else{
			if(el.attachEvent){
				el.attachEvent("on"+_39,_45);
			}
		}
	}
	return true;
}

,fireLegacyEvent:function(e,_50){
	var ok=true;
	var le=_23[_50];
	for(var i=0,len=le.length;i<len;++i){
		var _52=le[i];
		if(_52){
			var li=_18[_52];
			if(li&&li[this.WFN]){
				var _53=li[this.ADJ_SCOPE];
				var ret=li[this.WFN].call(_53,e);
				ok=(ok&&ret);
			}else{
				delete le[i];
			}
		}
	}
	return ok;
}

,getLegacyIndex:function(el,_55){
	var key=this.generateId(el)+_55;
	if(typeof _26[key]=="undefined"){
		return -1;
	}else{
		return _26[key];
	}
}

,useLegacyEvent:function(el,_57){
	if(!el.addEventListener&&!el.attachEvent){
		return true;
	}else{
		if(this.isSafari){
			if("click"==_57||"dblclick"==_57){
				return true;
			}
		}
	}
	return false;
}

,removeListener:function(el,_58,fn,_59){
	if(!fn||!fn.call){
		return false;
	}
	if(typeof el=="string"){
		el=this.getEl(el);
	}else{
		if(this._isValidCollection(el)){
			var ok=true;
			for(var i=0,len=el.length;i<len;++i){
				ok=(this.removeListener(el[i],_58,fn)&&ok);
			}
			return ok;
		}
	}
	if("unload"==_58){
		for(i=0,len=_20.length;i<len;i++){
			var li=_20[i];
			if(li&&li[0]==el&&li[1]==_58&&li[2]==fn){
				delete _20[i];
				return true;
			}
		}
		return false;
	}
	var _60=null;
	if("undefined"==typeof _59){
		_59=this._getCacheIndex(el,_58,fn);
	}
	if(_59>=0){
		_60=_18[_59];
	}
	if(!el||!_60){
		return false;
	}
	if(el.removeEventListener){
		el.removeEventListener(_58,_60[this.WFN],false);
	}else{
		if(el.detachEvent){
			el.detachEvent("on"+_58,_60[this.WFN]);
		}
	}
	delete _18[_59][this.WFN];
	delete _18[_59][this.FN];
	delete _18[_59];
	return true;
}

,getTarget:function(ev,_62){
	var t=ev.target||ev.srcElement;
	return this.resolveTextNode(t);
}

,resolveTextNode:function(_64){
	if(_64&&_64.nodeName&&"#TEXT"==_64.nodeName.toUpperCase()){
		return _64.parentNode;
	}else{
		return _64;
	}
}

,getPageX:function(ev){
	var x=ev.pageX;
	if(!x&&0!==x){
		x=ev.clientX||0;
		if(this.isIE){
			x+=this._getScrollLeft();
		}
	}
	return x;
}

,getPageY:function(ev){
	var y=ev.pageY;
	if(!y&&0!==y){
		y=ev.clientY||0;
		if(this.isIE){
			y+=this._getScrollTop();
		}
	}
	return y;
}

,getXY:function(ev){
	return [this.getPageX(ev),this.getPageY(ev)];
}

,getRelatedTarget:function(ev){
	var t=ev.relatedTarget;
	if(!t){
		if(ev.type=="mouseout"){
			t=ev.toElement;
		}else{
			if(ev.type=="mouseover"){
				t=ev.fromElement;
			}
		}
	}
	return this.resolveTextNode(t);
}

,getTime:function(ev){
	if(!ev.time){
		var t=new Date().getTime();
		try{
			ev.time=t;
		}catch(e){
			return t;
		}
	}
	return ev.time;
}

,stopEvent:function(ev){
	this.stopPropagation(ev);
	this.preventDefault(ev);
}

,stopPropagation:function(ev){
	if(ev.stopPropagation){
		ev.stopPropagation();
	}else{
		ev.cancelBubble=true;
	}
}

,preventDefault:function(ev){
	if(ev.preventDefault){
		ev.preventDefault();
	}else{
		ev.returnValue=false;
	}
}

,getEvent:function(e){
	var ev=e||window.event;
	if(!ev){
		var c=this.getEvent.caller;
		while(c){
			ev=c.arguments[0];
			if(ev&&Event==ev.constructor){
				break;
			}
			c=c.caller;
		}
	}
	return ev;
}

,getCharCode:function(ev){
	return ev.charCode||((ev.type=="keypress")?ev.keyCode:0);
}

,_getCacheIndex:function(el,_68,fn){
	for(var i=0,len=_18.length;i<len;++i){
		var li=_18[i];
		if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==_68){
			return i;
		}
	}
	return -1;
}

,generateId:function(el){
	var id=el.id;
	if(!id){
		id="yuievtautoid-"+_27;
		++_27;
		el.id=id;
	}
	return id;
}

,_isValidCollection:function(o){
	return (o&&o.length&&typeof o!="string"&&!o.tagName&&!o.alert&&typeof o[0]!="undefined");
}

,elCache:{}

,getEl:function(id){
	return document.getElementById(id);
}

,clearCache:function(){}

,regCE:function(ce){
	_21.push(ce);
}

,_load:function(e){
	_17=true;
}

,_tryPreloadAttach:function(){
	if(this.locked){
		return false;
	}
	this.locked=true;
	var _72=!_17;
	if(!_72){
		_72=(_24>0);
	}
	var _73=[];
	for(var i=0,len=_19.length;i<len;++i){
		var d=_19[i];
		if(d){
			var el=this.getEl(d[this.EL]);
			if(el){
				this.on(el,d[this.TYPE],d[this.FN],d[this.SCOPE],d[this.ADJ_SCOPE]);
				delete _19[i];
			}else{
				_73.push(d);
			}
		}
	}
	_19=_73;
	var _75=[];
	for(i=0,len=_25.length;i<len;++i){
		var _76=_25[i];
		if(_76){
			el=this.getEl(_76.id);
			if(el){
				var _77=(_76.override)?_76.obj:el;_76.fn.call(_77,_76.obj);
				delete _25[i];
			}else{
				_75.push(_76);
			}
		}
	}
	_24=(_73.length===0&&_75.length===0)?0:_24-1;
	if(_72){
		this.startTimeout();
	}
	this.locked=false;
	return true;
}

,purgeElement:function(el,_78,_79){
	var _80=this.getListeners(el,_79);
	if(_80){
		for(var i=0,len=_80.length;i<len;++i){
			var l=_80[i];
			this.removeListener(el,l.type,l.fn,l.index);
		}
	}
	if(_78&&el&&el.childNodes){
		for(i=0,len=el.childNodes.length;i<len;++i){
			this.purgeElement(el.childNodes[i],_78,_79);
		}
	}
}

,getListeners:function(el,_82){
	var _83=[];
	if(_18&&_18.length>0){
		for(var i=0,len=_18.length;i<len;++i){
			var l=_18[i];
			if(l&&l[this.EL]===el&&(!_82||_82===l[this.TYPE])){
				_83.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.SCOPE],adjust:l[this.ADJ_SCOPE],index:i});
			}
		}
	}
	return (_83.length)?_83:null;
}

,_unload:function(e,me){
	for(var i=0,len=_20.length;i<len;++i){
		var l=_20[i];
		if(l){
			var _85=(l[this.ADJ_SCOPE])?l[this.SCOPE]:window;
			l[this.FN].call(_85,this.getEvent(e),l[this.SCOPE]);
		}
	}
	if(_18&&_18.length>0){
		for(i=0,len=_18.length;i<len;++i){
			l=_18[i];
			if(l){
				this.removeListener(l[this.EL],l[this.TYPE],l[this.FN],i);
			}
		}
		this.clearCache();
		}
		for(i=0,len=_21.length;i<len;++i){
			_21[i].unsubscribeAll();
			delete _21[i];
		}
		for(i=0,len=_22.length;i<len;++i){
			delete _22[i][0];
			delete _22[i];
		}
	}
	,_getScrollLeft:function(){
		return this._getScroll()[1];
	}
	
	,_getScrollTop:function(){
		return this._getScroll()[0];
	}
	
	,_getScroll:function(){
		var dd=document.documentElement;db=document.body;
		if(dd&&dd.scrollTop){
			return [dd.scrollTop,dd.scrollLeft];
		}else{
			if(db){
				return [db.scrollTop,db.scrollLeft];
			}else{
				return [0,0];
			}
		}
	}
};
}();
YAHOO.util.Event.on=YAHOO.util.Event.addListener;
if(document&&document.body){
	YAHOO.util.Event._load();
}else{
	YAHOO.util.Event.on(window,"load",YAHOO.util.Event._load,YAHOO.util.Event,true);
}
YAHOO.util.Event.on(window,"unload",YAHOO.util.Event._unload,YAHOO.util.Event,true);
YAHOO.util.Event._tryPreloadAttach();
}