if(!Array.prototype.indexOf){
	Array.prototype.indexOf=function(obj,fromIndex){
		if(fromIndex==null){
			fromIndex=0;
		}else if(fromIndex<0){
			fromIndex=Math.max(0,this.length+fromIndex);
		}
		for(var i=fromIndex;i<this.length;i++){
			if(this[i]===obj) return i;
		}
		return-1;
	};
}
if(!Array.prototype.lastIndexOf){
	Array.prototype.lastIndexOf=function(obj,fromIndex){
		if(fromIndex==null){
			fromIndex=this.length-1;
		}else if(fromIndex<0){
			fromIndex=Math.max(0,this.length+fromIndex);
		}
		for(var i=fromIndex;i>=0;i--){
			if(this[i]===obj) return i;
		}
		return-1;
	};
}
if(!Array.prototype.forEach){
	Array.prototype.forEach=function(f,obj){
		var l=this.length;
		for(var i=0;i<l;i++){
			f.call(obj,this[i],i,this);
		}
	};
}
if(!Array.prototype.filter){
	Array.prototype.filter=function(f,obj){
		var l=this.length;
		var res=[];
		for(var i=0;i<l;i++){
			if(f.call(obj,this[i],i,this)){
				res.push(this[i]);
			}
		}
		return res;
	};
}
if(!Array.prototype.map){
	Array.prototype.map=function(f,obj){
		var l=this.length;
		var res=[];
		for(var i=0;i<l;i++){
			res.push(f.call(obj,this[i],i,this));
		}
		return res;
	};
}
if(!Array.prototype.some){
	Array.prototype.some=function(f,obj){
		var l=this.length;
		for(var i=0;i<l;i++){
			if(f.call(obj,this[i],i,this)){return true;}
		}
		return false;
	};
}
if(!Array.prototype.every){
	Array.prototype.every=function(f,obj){
		var l=this.length;
		for(var i=0;i<l;i++){
			if(!f.call(obj,this[i],i,this)){return false;}
		}
		return true;
	};
}
Array.prototype.contains=function(obj){
	return this.indexOf(obj)!=-1;
};
Array.prototype.copy=function(obj){
	return this.concat();
};
Array.prototype.insertAt=function(obj,i){
	this.splice(i,0,obj);
};
Array.prototype.insertBefore=function(obj,obj2){
	var i=this.indexOf(obj2);
	if(i==-1)
		this.push(obj);
	else
		this.splice(i,0,obj);
};
Array.prototype.removeAt=function(i){
	this.splice(i,1);
};
Array.prototype.remove=function(obj){
	var i=this.indexOf(obj);
	if(i!=-1)
		this.splice(i,1);
};
TB={};
TB.common={
	getCookie:function(name){
		var value=document.cookie.match('(?:^|;)\\s*'+name+'=([^;]*)');
		return value?unescape(value[1]):'';
	},
	setCookie:function(name,value,expire,domain,path){
		value=escape(value);
		value+=(domain)?'; domain='+domain:'';
		value+=(path)?"; path="+path:'';
		if(expire){
			var date=new Date();
			date.setTime(date.getTime()+(expire*86400000));
			value+="; expires="+date.toGMTString();
		}
		document.cookie=name+"="+value;
	},
	removeCookie:function(name){
		setCookie(name,'',-1);
	},
	pickDocumentDomain:function(){
		var da=location.hostname.split('.'),len=da.length;
		var deep=arguments[0]||(len<3?0:1);
		if(deep>=len||len-deep<2)
			deep=len-2;
		return da.slice(deep).join('.')+(location.port?':'+location.port:'');
	},
	trim:function(str){
		return str.replace(/(^\s*)|(\s*$)/g,'');
	},
	escapeHTML:function(str){
		var div=document.createElement('div');
		var text=document.createTextNode(str);
		div.appendChild(text);
		return div.innerHTML;
	},
	unescapeHTML:function(str){
		var div=document.createElement('div');
		div.innerHTML=str.replace(/<\/?[^>]+>/gi,'');
		return div.childNodes[0]?div.childNodes[0].nodeValue:'';
	},
	toArray:function(list,start){
		var array=[];
		for(var i=start||0;i<list.length;i++){
			array[array.length]=list[i];
		}
		return array;
	},
	applyConfig:function(obj,config){
		if(obj&&config&&typeof config=='object'){
			for(var p in config){
				if(!YAHOO.lang.hasOwnProperty(obj,p)) obj[p]=config[p];
			}
		}
		return obj;
	}
};
TB.widget={};
TB.widget.SimpleScroll={};
TB.widget.SimpleMarquee={};
TB.widget.SimpleTab=new function(){
	var Y=YAHOO.util;
	var defConfig={
		eventType:'click',
		currentClass:'Current',
		tabClass:'',
		autoSwitchToFirst:true,
		stopEvent:true,
		delay:0.3
	};
	var getImmediateDescendants=function(p){
		var ret=[];
		if(!p)return ret;
		for(var i=0,c=p.childNodes;i<c.length;i++){
			if(c[i].nodeType==1) ret[ret.length]=c[i];
		}
		return ret;
	};
	this.decorate=function(container,config){
		container=Y.Dom.get(container);
		config=TB.common.applyConfig(config||{},defConfig);
		var tabPanels=getImmediateDescendants(container);
		var tab=tabPanels.shift(0);
		var tabTriggerBoxs=tab.getElementsByTagName('li');
		var tabTriggers,delayTimeId;
		if(config.tabClass){
			tabTriggers=Y.Dom.getElementsByClassName(config.tabClass,'*',container);
		}else{
			tabTriggers=TB.common.toArray(tab.getElementsByTagName('a'));
		}
		var onSwitchEvent=new Y.CustomEvent("onSwitch",null,false,Y.CustomEvent.FLAT);
		if(config.onSwitch){
			onSwitchEvent.subscribe(config.onSwitch);
		}
		var handler={
			switchTab:function(idx){
				Y.Dom.setStyle(tabPanels,'display','none');
				Y.Dom.removeClass(tabTriggerBoxs,config.currentClass);
				Y.Dom.addClass(tabTriggerBoxs[idx],config.currentClass);
				Y.Dom.setStyle(tabPanels[idx],'display','block');
			},
			subscribeOnSwitch:function(func){
				onSwitchEvent.subscribe(func);
			}
		}
		var focusHandler=function(ev){
			if(delayTimeId) cacelHandler();
			var idx=tabTriggers.indexOf(this);
			handler.switchTab(idx);
			onSwitchEvent.fire(idx);
			if(config.stopEvent) Y.Event.stopEvent(ev);
			return!config.stopEvent;
		}
		var delayHandler=function(){
			var target=this;
			delayTimeId=setTimeout(function(){
				focusHandler.call(target);
			},
			config.delay*10000);
			if(config.stopEvent) Y.Event.stopEvent(ev);
			return!config.stopEvent;
		}
		var cacelHandler=function(){
			clearTimeout(delayTimeId);
		}
		for(var i=0;i<tabTriggers.length;i++){
			Y.Event.on(tabTriggers[i],'focus',focusHandler);
			if(config.eventType=='mouse'){
				Y.Event.on(tabTriggers[i],'mouseover',config.delay?delayHandler:focusHandler);
				Y.Event.on(tabTriggers[i],'mouseout',cacelHandler);
			}else{
				Y.Event.on(tabTriggers[i],'click',focusHandler);
			}
		}
		Y.Dom.setStyle(tabPanels,'display','none');
		if(config.autoSwitchToFirst) handler.switchTab(0);
		return handler;
	}
};
(function(){
	var Y=YAHOO.util;
	TB.widget.Slide=function(container,config){
		this.init(container,config);
	}
	TB.widget.Slide.defConfig={
		slidesClass:'Slides',
		triggersClass:'SlideTriggers',
		currentClass:'Current',
		eventType:'click',
		autoPlayTimeout:5,
		disableAutoPlay:false
	};
	TB.widget.Slide.prototype={
		init:function(container,config){
			this.container=Y.Dom.get(container);
			this.config=TB.common.applyConfig(config||{},TB.widget.Slide.defConfig);
			try{
				this.slidesUL=Y.Dom.getElementsByClassName(this.config.slidesClass,'ul',this.container)[0];
				this.slides=this.slidesUL.getElementsByTagName('li');
			}catch(e){
				throw new Error("can't find slides!");
			}
			this.delayTimeId=null;
			this.autoPlayTimeId=null;
			this.curSlide=-1;
			this.sliding=false;
			this.pause=false;
			this.onSlide=new Y.CustomEvent("onSlide",this,false,Y.CustomEvent.FLAT);
			if(YAHOO.lang.isFunction(this.config.onSlide)){
				this.onSlide.subscribe(this.config.onSlide,this,true);
			}
			this.initSlides();
			this.initTriggers();
			if(this.slides.length>0) this.play(1);
			if(!this.config.disableAutoPlay){this.autoPlay();}
		},
		initTriggers:function(){
			var ul=document.createElement('ul');
			this.container.appendChild(ul);
			for(var i=0;i<this.slides.length;i++){
				var li=document.createElement('li');
				li.innerHTML=i+1;
				ul.appendChild(li);
			}
			ul.className=this.config.triggersClass;
			this.triggersUL=ul;
			if(this.config.eventType=='mouse'){
				Y.Event.on(this.triggersUL,'mouseover',this.mouseHandler,this,true);
				Y.Event.on(this.triggersUL,'mouseout',function(e){clearTimeout(this.delayTimeId);},this,true);
			}else{
				Y.Event.on(this.triggersUL,'click',this.clickHandler,this,true);
			}
		},
		initSlides:function(){
			Y.Event.on(this.slides,'mouseover',function(){this.pause=true;},this,true);
			Y.Event.on(this.slides,'mouseout',function(){this.pause=false;},this,true);
			Y.Dom.setStyle(this.slides,'display','none');
		},
		clickHandler:function(e){
			var t=YAHOO.util.Event.getTarget(e);
			var idx=parseInt(t.innerHTML);
			while(t!=this.container){
				if(t.nodeName.toUpperCase()=="LI"){
					if(!this.sliding){this.play(idx,true);}
					break;
				}else{
					t=t.parentNode;
				}
			}
		},
		mouseHandler:function(e){
			var t=Y.Event.getTarget(e);
			var idx=parseInt(t.innerHTML);
			while(t!=this.container){
				if(t.nodeName.toUpperCase()=="LI"){
					var self=this;
					this.delayTimeId=setTimeout(function(){self.play(idx,true);},(self.sliding?.5:.1)*1000);
					break;
				}else{
					t=t.parentNode;
				}
			}
		},
		play:function(n,flag){
			n=n-1;
			if(n==this.curSlide)return;
			if(this.curSlide==-1) this.curSlide=0;
			if(flag&&this.autoPlayTimeId) clearInterval(this.autoPlayTimeId);
			var triggersLis=this.triggersUL.getElementsByTagName('li');
			triggersLis[this.curSlide].className='';
			triggersLis[n].className=this.config.currentClass;this.slide(n);
			this.curSlide=n;
			if(flag&&!this.config.disableAutoPlay) this.autoPlay();
		},
		slide:function(n){
			this.sliding=true;
			Y.Dom.setStyle(this.slides[this.curSlide],'display','none');
			Y.Dom.setStyle(this.slides[n],'display','block');
			this.sliding=false;
			this.onSlide.fire(n);
		},
		autoPlay:function(){
			var self=this;
			var callback=function(){
				if(!self.pause&&!self.sliding){
					var n=(self.curSlide+1)%self.slides.length+1;
					self.play(n,false);
				}
			}
			this.autoPlayTimeId=setInterval(callback,this.config.autoPlayTimeout*1000);
		}
	}
	TB.widget.ScrollSlide=function(container,config){
		this.init(container,config);
	}
	YAHOO.extend(TB.widget.ScrollSlide,TB.widget.Slide,{
		initSlides:function(){
			TB.widget.ScrollSlide.superclass.initSlides.call(this);
			Y.Dom.setStyle(this.slides,'display','');
		},
		slide:function(n){
			var args={
				scroll:{by:[0,this.slidesUL.offsetHeight*(n-this.curSlide)]}
			};
			var anim=new Y.Scroll(this.slidesUL,args,.5,Y.Easing.easeOutStrong);
			anim.onComplete.subscribe(function(){this.sliding=false;this.onSlide.fire(n);},this,true);
			anim.animate();
			this.sliding=true;
		}
	});
})();
TB.widget.SimpleSlide=new function(){
	this.decoration=function(container,config){
		if(!container)return;
		config=config||{};
		if(config.effect=='scroll'){
			if(navigator.product&&navigator.product=='Gecko'){
				if(YAHOO.util.Dom.get(container).getElementsByTagName('iframe').length>0){
					new TB.widget.Slide(container,config);
					return;
				}
			}
			new TB.widget.ScrollSlide(container,config);
		}else{
			new TB.widget.Slide(container,config);
		}
	}
}