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*1000);
			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',tipClass:'SlideTip',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.initTip();
			this.initSlides();
			this.initTriggers();
			if(this.slides.length>0)
			this.play(1);
			if(!this.config.disableAutoPlay) {
				this.autoPlay();
			}
		},initTip:function(){
			var tip = document.createElement('div');
			tip.className = this.config.tipClass;
			this.container.appendChild(tip);
			this.tip = tip;
		},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);
			var sa = this.slides[n].getElementsByTagName('a')[0];
			if(sa.title !== ''){
				this.tip.innerHTML = ('<div class="bg"></div><div class="front"><a href="' + sa.href + '" target="' + sa.target + '">' + sa.title + '</a></div>');
			}else{
				this.tip.innerHTML = '';
			}
			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);
		}
	}
}
