﻿var MagicSwitch = function(sEvent,sEventHandle,bStopEvent,sDir,iSpeed,rndFilter){//参数1:切换方式;参数2:触发切换的事件;参数3:是否阻止Event;参数4:滚动方向;参数5:滚动速度;参数6：随机切换滤镜
	this.btn = [];
	this.content = [];
	this.scrollbox = null;
	this.nowIndex = 0;
	this.sEvent = sEvent||'switch';//switch:默认切换效果;scroll滚动切换效果
	this.fEvent = (this.sEvent=='scroll')?'scroll':'show';
	this.sEventHandle = (sEventHandle==null)?'click':sEventHandle;
	this.bStopEvent = (bStopEvent==null)?true:bStopEvent;
	this.dir = sDir||'up';
	this.speed = iSpeed||1;
	this.rndFilter = rndFilter||false;
	this.timer = null;
};
MagicSwitch.prototype = {
	addSw:function(dBtn,dContent){
		if(dBtn && dContent){
			var iLength = this.btn.length;
			(iLength>0) && (dContent.style.display='none',1) || (dBtn.className='on');
			with({i:iLength}){
				dBtn['on'+this.sEventHandle] = this[this.fEvent].bind(this,i);
				if(this.bStopEvent&&this.sEventHandle!='click'){dBtn.onclick = function(e){e = e||window.event;easyUI.stopEvent(e);}}
			}
			this.btn.push(dBtn);
			this.content.push(dContent);
		}
	},
	playFilter:function(dobj){
		if(!dobj||!dobj.filters||!dobj.filters.length){return false;}
		if(this.rndFilter){dobj.style.filter = 'progid:DXImageTransform.Microsoft.RevealTrans(DURATION=2, TRANSITION=23)';dobj.filters[0].transition=23;}//随机切换滤镜开启
		dobj.filters[0].apply();
		dobj.filters[0].Play();
	},
	doscroll:function(indexA,indexB){//元素滚动
		if(!indexA&&!indexB){return false;}
		var speed = this.speed,dir = this.dir,domA = this.content[indexA],domB = this.content[indexB],domP = this.scrollbox;
		this.btn[indexA].className='';
		this.btn[indexB].className='on';
		this.nowIndex = indexB;
		var iw = parseInt(domP.offsetWidth,10),ih = parseInt(domP.offsetHeight,10);
		if(dir=='up'&&indexA>indexB){dir = 'down';}
		if(dir=='left'&&indexA>indexB){dir = 'right';}
		switch(dir){
			case 'up':
			case 'down':
				domB.style.display = '';
				if(dir=='down'){domP.scrollTop = ih;speed = -speed;}
				!function(){
					if(ih<speed){
						domA.style.display = 'none';
						domP.scrollTop = 0;
						return false;
					}
					domP.scrollTop += speed;
					ih -= Math.abs(speed);
					window.setTimeout(arguments.callee,1);
				}();
				break;
			case 'left':
			case 'right':
				domB.style.display = '';
				if(dir=='right'){domP.scrollLeft = iw;speed = -speed;}
				!function(){
					if(iw<speed){
						domA.style.display = 'none';
						domP.scrollLeft = 0;
						return false;
					}
					domP.scrollLeft += speed;
					iw -= Math.abs(speed);
					window.setTimeout(arguments.callee,1);
				}();
				break;
			default:break;
		}
	},
	scroll:function(iIndex,e){//滚动切换
		e = e||window.event;
		if(e&&e.type=='click'){easyUI.stopEvent(e);}
		var nowIndex = this.nowIndex,btnl = this.btn.length;
		if(nowIndex==iIndex){return false;}
		if(iIndex<0 || iIndex>=btnl){return false;}
		if(!this.scrollbox){
			this.scrollbox = this.content[nowIndex].parentNode;
			var domP = this.scrollbox;
			var iw = parseInt(domP.offsetWidth,10);
			if(/msie6/i.test(navigator.appVersion.replace(/\s/g,''))){
				var ih = parseInt(domP.currentStyle.height,10);
				domP.style.width = iw+'px';
				domP.style.height = ih+'px';
			}
			domP.style.overflow = 'hidden';
			if(this.dir=='left'||this.dir=='right'){
				var dFragm = document.createDocumentFragment();
				var dbox = document.createElement('div');
				dFragm.appendChild(dbox);
				dbox.style.cssText = 'width:'+iw*this.btn.length+'px;overflow:hidden;zoom:1;';
				for(var i=0;i<btnl;i++){
					this.content[i].style.cssFloat = 'left';
					this.content[i].style.styleFloat = 'left';
					dbox.appendChild(this.content[i]);
				}
				domP.innerHTML = '';
				domP.appendChild(dFragm);
			}
		}
		if(nowIndex<iIndex){
			for(var i=nowIndex;i<iIndex;i++){
				this.doscroll(i,i+1);
			}
		}
		if(nowIndex>iIndex){
			for(var i=nowIndex;i>iIndex;i--){
				this.doscroll(i,i-1);
			}
		}
	},
	show:function(iIndex,e){//直接切换
		e = e||window.event;
		if(e&&e.type=='click'){easyUI.stopEvent(e);}
		var nowIndex = this.nowIndex;
		if(nowIndex!=iIndex) this.btn[nowIndex].className='';this.content[nowIndex].style.display='none';
		if(iIndex>-1 && iIndex<this.btn.length) this.btn[iIndex].className='on';this.playFilter(this.content[iIndex]);this.content[iIndex].style.display='';
		this.nowIndex = iIndex;
	},
	autoPlay:function(iSpeed){//自动切换
		var os = this,tsl = this.btn.length;
		var ias = function(){
			var ni = (os.nowIndex >= tsl-1)?0:os.nowIndex+1;
			os[os.fEvent](ni);
			os.timer = window.setTimeout(arguments.callee,iSpeed);
		};
		var wct = function(){window.clearTimeout(os.timer);};
		var wst = function(){os.timer = window.setTimeout(ias,iSpeed);};
		var wcst = function(){window.clearTimeout(os.timer);os.timer = window.setTimeout(ias,iSpeed);};
		for(var i=0;i<tsl;i++){
			if(document.attachEvent){
				if(this.sEventHandle!='mouseover'){
					this.btn[i].attachEvent('on'+this.sEventHandle,wcst);
				}else{
					this.btn[i].attachEvent('on'+this.sEventHandle,wct);
					this.btn[i].attachEvent('onmouseout',wst);
				}
			}else{
				if(this.sEventHandle!='mouseover'){
					this.btn[i].addEventListener(this.sEventHandle,wcst,true);
				}else{
					this.btn[i].addEventListener(this.sEventHandle,wct,true);
					this.btn[i].addEventListener('mouseout',wst,true);
				}
			}
		}
		this.timer = window.setTimeout(ias,iSpeed);
	}
};
