﻿(function($) {
	$.fn.loopedSlider = function(options){
		var defaults = {
			MstNavi : '',
			AppNavi : '',
			//----------------------------------
			LftSlides : '',
			RgtSlides : '',
			//----------------------------------
			autoStart: 0, // Set to positive number for auto start and interval time
			restart: 0, // Set to positive number for restart and restart time
			slidespeed: 300, // Speed of slide animation
			fadespeed: 300
		};
		
		var mstSliderInterVal = null;
		var interval=0;
		var restart=0;
		var mImageWidth = 487;
		
		var m_SlideType = 1;					//当前播放的类型 1:2
		var m_CurSliderFlag = "root";			//初始化，当前要播放的标签
		var m_PreSliderFlag = "";               //
		//-----------------------------------------------
		var o = $.extend(defaults, options);
		var IsOnSliding = false;		//幻灯是否播放中？
		//-----------------------------------------------
		var objMstNavi = $(o.MstNavi);			//不会变化
		var objLftSlider = $(o.LftSlides);		//不会变化
		var objRgtSlider = $(o.RgtSlides);		//不会变化
		
		var objAppNavi = null;
		//-----------------------------------------------
		//初始化左边播放区的元素位置、大小
		var m_LftSize = objLftSlider.children().size();
		var m_LftWidth = objLftSlider.children().outerWidth();	//元素的宽度
		objLftSlider.css({width:m_LftWidth});
		objLftSlider.children().each(function(){
			$(this).css({position:'absolute',left:0,display:'block'});
		});
		objLftSlider.children().fadeOut(0);
		objLftSlider.children().eq(0).fadeIn(0);
		
		AppNaviChg(objLftSlider.children().eq(0).attr("flag"));
		//-----------------------------------------------
		//初始化右边播放区的元素位置、大小
		var m_RgtWidth = objRgtSlider.children().outerWidth();	// 元素的宽度
		var m_RgtSize = objRgtSlider.children().size();			//s : 有多少个元素
		objRgtSlider.css({width:m_RgtWidth});
		objRgtSlider.children().each(function(){
			$(this).css({position:'absolute',left:mImageWidth,display:'block'});
		});
		//objRgtSlider.children().fadeOut(0);
		//objRgtSlider.children().eq(0).fadeIn(0);
		objRgtSlider.children().eq(0).css({left:0});
		//------------------------------------------------
		//初始化主导航区的相关信息
		var intTmpRel = 0;
		var sFlag = "";
		objMstNavi.each(function(){
			intTmpRel=intTmpRel+1;
			$(this).attr('rel',intTmpRel);
			sFlag = $(this).attr('flag');
		});
		//===================================================================================================================
		//===================================================================================================================
		//===================================================================================================================
		
		this.each(function(){
			autoStart();
		});
		
		
		function autoStart(){
		    clearInterval(mstSliderInterVal);
		    if (o.autoStart) {
				mstSliderInterVal = setInterval(function(){if(IsOnSliding===false) animate('next');}, o.autoStart);
			};
		};
		
		
		function reStart() {
			if (o.restart) {
				clearInterval(mstSliderInterVal);
				clearTimeout(restart);
				restart = setTimeout(function() {
					mstSliderInterVal = setInterval(function(){
						animate('next');
					},o.autoStart);
				},o.restart);
			} else {
				autoStart();
			}
		};
		
		//===================================================================================================================
		//===================================================================================================================
		//===================================================================================================================
		objMstNavi.click(function(){
			m_SlideType = 2;
			//---------------------------------------
			if (!$(this).hasClass("on") && IsOnSliding===false) {
				objMstNavi.parent().attr("cur",$(this).attr('rel'));
				chgSlider($(this).attr('flag'));
				setMstNaviState();
				//-------------------------------------
				animate('fade');
				//-------------------------------------
				reStart();
				//-------------------------------------
			};
			return false;
		});
		//===================================================================
		//设置显示主导航的状态
		function setMstNaviState(){
			var obj = objMstNavi.parent();
			var intCur = parseInt(obj.attr("cur"));
			var intSize = parseInt(obj.attr("size"));
			
			if (intCur==intSize) clearInterval(mstSliderInterVal);
			
			if (intCur===intSize+1)
				intCur = 1;
			if (intCur===0)
				intCur = intSize;
			//----------------------------------------------------------------------------------------
			objMstNavi.siblings().removeClass('on');
			objMstNavi.eq(intCur-1).addClass("on");
		};
		//===================================================================
		function AppNaviChg(sFlag){
			objAppNavi = $(o.AppNavi + "_" + sFlag + " li");
			var intTmpRel = 0;
			objAppNavi.each(function(){
				intTmpRel = intTmpRel+1;
				$(this).attr('rel',intTmpRel);
				objAppNavi.eq(0).addClass("on");
			});
			
			objAppNavi.click(function(){
				m_SlideType = 2;
				m_CurSliderFlag = sFlag;
				
				if (!$(this).hasClass('on') && IsOnSliding===false) {
					objAppNavi.parent().attr("cur",$(this).attr('rel'));
					setNaviState(objAppNavi.parent());
					//-------------------------------------
					animate('fade');
					//-------------------------------------
					clearInterval(mstSliderInterVal);
				};
				return false;
			});
			
		};
		//===================================================================
		///改变播放的幻灯片组
		function chgSlider(sFlag){
			m_CurSliderFlag = sFlag;
			//------------------------
			AppNaviChg(sFlag);
		};
		//=========================================================================
		function setNaviState(objNavi){
			var intCur = parseInt(objNavi.attr("cur"));
			var intSize = parseInt(objNavi.attr("size"));
			
			if (intCur==intSize) {
			    clearInterval(mstSliderInterVal);
			};
			
			if (intCur===intSize+1)
				intCur = 1;
			if (intCur===0)
				intCur = intSize;
			//----------------------------------------------------------------------------------------
			objNavi.children().removeClass('on');
			objNavi.children(":eq("+(intCur-1)+")").addClass("on");
		};
		
		
		
		
		
		///播放图片。
		function animate(dir){	
			IsOnSliding = true;
			//---------------------------
			var objNavi;
			if (m_SlideType==1){
				objNavi = objMstNavi.parent();
			} else {
				objNavi = objAppNavi.parent();
			};
			var intCur = parseInt(objNavi.attr("cur"));
			var intPre = intCur;
			var intSize = parseInt(objNavi.attr("size"));
			//---------------------------
			switch(dir){
				case 'next':
					intCur = intCur+1;
					if (intCur===intSize+1) intCur=1;
					break; 
				case 'prev':
					intCur = intCur-1; 
					if (intCur===0) intCur = intSize;
					break;
				case 'fade':
					intCur = [intCur]*1;
					break; 
				default:
					break;
			}
		    //====================================================================
		    objNavi.attr('cur',intCur);
		    setNaviState(objNavi); 
		    //====================================================================
		    m_PreSliderFlag
		    var objSlider = objRgtSlider.children().filter("[flag='"+m_CurSliderFlag+"']");
		    var objCur = null;
		    var objOth = null;
		    var sGID = "";
		    var strFlag = "";
		    
		    objCur = objSlider.filter("[rel='"+intCur+"']");
		    strFlag = objCur.attr("flag");
		    sGID = objCur.attr("gid");
		    objOth = objRgtSlider.children().not("[gid='"+sGID+"']");
		    if (objSlider.length>1 || m_CurSliderFlag!=m_PreSliderFlag){
                objCur.css({"z-index":3});
                objOth.css({"z-index":2});
                objCur.animate({left:0,opacity:1},o.fadespeed,function(){
                    objOth.animate({left:mImageWidth,opacity:0},1,function(){IsOnSliding=false;});
                });
            } else {
                IsOnSliding=false;
            };
	        //====================================================================
		    if (m_SlideType==1 ||  m_PreSliderFlag!=strFlag){
                objLftSlider.children().fadeOut(o.slidespeed);
                if (strFlag=="root")
                    objLftSlider.children().eq(intCur-1).fadeIn(o.fadespeed);
                else
                    objLftSlider.children().filter("[flag='"+strFlag+"']").fadeIn(o.fadespeed);
			    //---------------------------------------------------------
			    AppNaviChg(strFlag);
		    }
		    //====================================================================
		    m_PreSliderFlag = m_CurSliderFlag;
		};
	};
})(jQuery);
