/**
 * 使用方式：
 * 	jq(function(){
 *		jq('#sliderDemo').mokoSlider(); 
 *	});
 *
 *
 */

(function(jq){

	jq.fn.mokoSlider = function(options){
		//定义常量
		var settings = jq.extend({
            speed: 800,		//速度
			width: 1180,		//移动步长
			interval:5000,	//切换时间
			controller:true	//是否显示控制器
        },options);
		
		//控制器
		var Ctrl2 = function(jqthis,callback){
			var count = jqthis.find('li').size();
			if(count <= 1)
				return ;
			var html = '<div class="point-ctrl">\
						<a class="left-point" href="javascript:void(0)" hidefocus="true"></a>\
						<a class="right-point" href="javascript:void(0)" hidefocus="true"></a>\
						</div>';
			var jqpointCtrl = jq(html);
			jqpointCtrl.find('.left-point').click(function(){
				callback.call(this,'left');
			});
			jqpointCtrl.find('.right-point').click(function(){
				callback.call(this,'right');
			});
			jqpointCtrl.appendTo(jqthis);
			
		};
		//控制器
		var Ctrl= function(jqthis,callback){
			var count = jqthis.find('ul li').size();
			var jqcontroller = jq('<p>',{'class':'controller'});
			if(count <= 1)
				return ;
			//创建对应个数的span标签
			for(var a=0;a < count; a++){
				jq('<a/>',{ 'hidefocus':'true','href':'javascript:void(0);','text':'●'}).click(callback).appendTo(jqcontroller);
			}
			//设置默认第一个选中
			jqcontroller.children(':first').addClass('moko-slider-on');
			//添加到slider中
			jqcontroller.appendTo(jqthis);
			//对外调用的更新选中
			this.update = function(index){
				jqcontroller.find(':eq('+index+')').addClass('moko-slider-on').siblings().removeClass('moko-slider-on');
			}
			return this;
		};
		
		this.each(function() {
			var jqthis = jq(this),jqul = jqthis.find('ul');
			var jqlist = jqul.find('li'), count = jqlist.size(),index=0,timer,hoverTimer;

			jqthis.width(settings.width);
			//设置ul的宽度，使li排成一行
			jqul.width(settings.width * count);
			
			jqul.hover(function(){
				//当鼠标移上超过 1000毫秒时清除滚动计时器
				hoverTimer = setTimeout(function(){
					//清除定时器
					clearInterval(timer);
					timer = null;
				},1000);
			},function(){
				//清除鼠标以上的计时
				clearTimeout(hoverTimer);
				//如果滚动计时器被清楚则重新启动
				if(!timer){
					next();				
					interval();
				}
			});

			var ctrl2 = new Ctrl2(jqthis,function(direction){
				//停止动画效果
				jqul.stop();
				if('left' == direction){
					pre();
				}
				else{
					next();
				}
				//清除定时器
				clearInterval(timer);
				//从当前的index继续定时切换
				interval();
			});

			var ctrl = new Ctrl(jqthis,function(){
				//获得被点击的span 索引
				index = jq(this).index();
				//停止动画效果
				jqul.stop();
				//切换到指定的索引
				rolling(index);
				//清除定时器
				clearInterval(timer);
				//从当前的index继续定时切换
				interval();
			});
			
			var interval = function(){
				if(count <= 1)
					return ;
				timer = setInterval(function(){
					next();
				},settings.interval);
			};
			//
			interval();
			//滚动第 i 个
			var rolling = function(i){
				if(ctrl.update)
					ctrl.update(i);
				jqul.animate({'margin-left': -i * settings.width}, settings.speed);
			},
			//下一个
			next = function(){
				index++;
				if(index >= count)
					index=0;
				rolling(index);
			},
			//上一个
			pre = function(){
				index--;
				if(index < 0)
					index = count-1;
				rolling(index); //执行继续滚动
			}
		});
		
	};
})(jQuery1);
//图片切换
jQuery1(function(){
	jQuery1('.moko-slider').mokoSlider();
});
