
//-------------------------------------=================================JQUERY Documnet=================---------------
$(function(){
	$('#marquee').kxbdSuperMarquee({
		isMarquee:true,
		isEqual:false,
		scrollDelay:20,
		controlBtn:{left:'#goLeft',right:'#goRight'},
		direction:'left'
	});

});
//-------------------------------------=================================JQUERY Documnet=================---------------

/**
* @classDescription 超级Marquee，可做图片导航，图片轮换
* @author Aken Li(www.kxbd.com)
* @date 2009-07-27
* @dependence jQuery 1.3.2
* @DOM
*      <div id="marquee">
*          <ul>
*               <li></li>
*               <li></li>
*          </ul>
*      </div>
* @CSS
*      #marquee {width:200px;height:50px;overflow:hidden;}
* @Usage
*      $('#marquee').kxbdSuperMarquee(options);
* @options
*        distance:200,//一次滚动的距离
*        duration:20,//缓动效果，单次移动时间，越小速度越快，为0时无缓动效果
*        time:5,//停顿时间，单位为秒
*        direction: 'left',//滚动方向，'left','right','up','down'
*        scrollAmount:1,//步长
*        scrollDelay:20//时长，单位为毫秒
*        isEqual:true,//所有滚动的元素长宽是否相等,true,false
*        loop: 0,//循环滚动次数，0时无限
*        btnGo:{left:'#goL',right:'#goR'},//控制方向的按钮ID，有四个属性left,right,up,down分别对应四个方向
*        eventGo:'click',//鼠标事件
*        controlBtn:{left:'#goL',right:'#goR'},//控制加速滚动的按钮ID，有四个属性left,right,up,down分别对应四个方向
*        newAmount:4,//加速滚动的步长
*        eventA:'mouseenter',//鼠标事件，加速
*        eventB:'mouseleave',//鼠标事件，原速
*        navId:'#marqueeNav', //导航容器ID，导航DOM:<ul><li>1</li><li>2</li><ul>,导航CSS:.navOn
*        eventNav:'click' //导航事件
*/
(function($){

    $.fn.kxbdSuperMarquee = function(options){
        var opts = $.extend({},$.fn.kxbdSuperMarquee.defaults, options);
        
        return this.each(function(){
            var $marquee = $(this);//滚动元素容器
            var _scrollObj = $marquee.get(0);//滚动元素容器DOM
            var scrollW = $marquee.width();//滚动元素容器的宽度
            var scrollH = $marquee.height();//滚动元素容器的高度
            var $element = $marquee.children(); //滚动元素
            var $kids = $element.children();//滚动子元素
            var scrollSize=0;//滚动元素尺寸
            var _type = (opts.direction == 'left' || opts.direction == 'right') ? 1:0;//滚动类型，1左右，0上下
            var scrollId, rollId, isMove, marqueeId;
            var t,b,c,d,e; //滚动动画的参数,t:当前时间，b:开始的位置，c:改变的位置，d:持续的时间，e:结束的位置
            var _size, _len; //子元素的尺寸与个数
            var $nav,$navBtns;
            var arrPos = []; 
            var numView = 0; //当前所看子元素
            var numRoll=0; //轮换的次数
            var numMoved = 0;//已经移动的距离

            //防止滚动子元素比滚动元素宽而取不到实际滚动子元素宽度
            $element.css(_type?'width':'height',10000);
            //获取滚动元素的尺寸
            var navHtml = '<ul>';
            if (opts.isEqual) {
                _size = $kids[_type?'outerWidth':'outerHeight']();
                _len = $kids.length;
                scrollSize = _size * _len;
                for(var i=0;i<_len;i++){
                    arrPos.push(i*_size);
                    navHtml += '<li>'+ (i+1) +'</li>';
                }
            }else{
                $kids.each(function(i){
                    arrPos.push(scrollSize);
                    scrollSize += $(this)[_type?'outerWidth':'outerHeight']();
                    navHtml += '<li>'+ (i+1) +'</li>';
                });
            }
            navHtml += '</ul>';
            
            //滚动元素总尺寸小于容器尺寸，不滚动
            if (scrollSize<(_type?scrollW:scrollH)) return; 
            //克隆滚动子元素将其插入到滚动元素后，并设定滚动元素宽度
            $element.append($kids.clone()).css(_type?'width':'height',scrollSize*2);
            
            //轮换导航
            if (opts.navId) {
                $nav = $(opts.navId).append(navHtml).hover( stop, start );
                $navBtns = $('li', $nav);
                $navBtns.each(function(i){
                    $(this).bind(opts.eventNav,function(){
                        if(isMove) return;
                        if(numView==i) return;
                        rollFunc(arrPos[i]);
                        $navBtns.eq(numView).removeClass('navOn');
                        numView = i;
                        $(this).addClass('navOn');
                    });
                });
                $navBtns.eq(numView).addClass('navOn');
            }
            
            //设定初始位置
            if (opts.direction == 'right' || opts.direction == 'down') {
                _scrollObj[_type?'scrollLeft':'scrollTop'] = scrollSize;
            }else{
                _scrollObj[_type?'scrollLeft':'scrollTop'] = 0;
            }
            
            if(opts.isMarquee){
                //滚动开始
                //marqueeId = setInterval(scrollFunc, opts.scrollDelay);
                marqueeId = setTimeout(scrollFunc, opts.scrollDelay);
                //鼠标划过停止滚动
                $marquee.hover(
                    function(){
                        clearInterval(marqueeId);
                    },
                    function(){
                        clearInterval(marqueeId);
                        //marqueeId = setInterval(scrollFunc, opts.scrollDelay);
                        marqueeId = setTimeout(scrollFunc, opts.scrollDelay);
                    }
                );
                
                //控制加速运动
                if(opts.controlBtn){
                    $.each(opts.controlBtn, function(i,val){
                        $(val).bind(opts.eventA,function(){
                            opts.direction = i;
                            opts.oldAmount = opts.scrollAmount;
                            opts.scrollAmount = opts.newAmount;
                        }).bind(opts.eventB,function(){
                            opts.scrollAmount = opts.oldAmount;
                        });
                    });
                }
            }else{
                if(opts.isAuto){
                    //轮换开始
                    start();
                    
                    //鼠标划过停止轮换
                    $marquee.hover( stop, start );
                }
            
                //控制前后走
                if(opts.btnGo){
                    $.each(opts.btnGo, function(i,val){
                        $(val).bind(opts.eventGo,function(){
                            if(isMove == true) return;
                            opts.direction = i;
                            rollFunc();
                            if (opts.isAuto) {
                                stop();
                                start();
                            }
                        });
                    });
                }
            }
            
            function scrollFunc(){
                var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollLeft':'scrollTop';
                
                if(opts.isMarquee){
                    if (opts.loop > 0) {
                        numMoved+=opts.scrollAmount;
                        if(numMoved>scrollSize*opts.loop){
                            _scrollObj[_dir] = 0;
                            return clearInterval(marqueeId);
                        } 
                    }
                    var newPos = _scrollObj[_dir]+(opts.direction == 'left' || opts.direction == 'up'?1:-1)*opts.scrollAmount;
                }else{
                    if(opts.duration){
                        if(t++<d){
                            isMove = true;
                            var newPos = Math.ceil(easeOutQuad(t,b,c,d));
                            if(t==d){
                                newPos = e;
                            }
                        }else{
                            newPos = e;
                            clearInterval(scrollId);
                            isMove = false;
                            return;
                        }
                    }else{
                        var newPos = e;
                        clearInterval(scrollId);
                    }
                }
                
                if(opts.direction == 'left' || opts.direction == 'up'){
                    if(newPos>=scrollSize){
                        newPos-=scrollSize;
                    }
                }else{
                    if(newPos<=0){
                        newPos+=scrollSize;
                    }
                }
                _scrollObj[_dir] = newPos;
                
                if(opts.isMarquee){
                    marqueeId = setTimeout(scrollFunc, opts.scrollDelay);
                }else if(t<d){
                    if(scrollId) clearTimeout(scrollId);
                    scrollId = setTimeout(scrollFunc, opts.scrollDelay);
                }else{
                    isMove = false;
                }
                
            };
            
            function rollFunc(pPos){
                isMove = true;
                var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollLeft':'scrollTop';
                var _neg = opts.direction == 'left' || opts.direction == 'up'?1:-1;

                numRoll = numRoll +_neg;
                //得到当前所看元素序号并改变导航CSS
                if(pPos == undefined&&opts.navId){
                    $navBtns.eq(numView).removeClass('navOn');
                    numView +=_neg;
                    if(numView>=_len){
                        numView = 0;
                    }else if(numView<0){
                        numView = _len-1;
                    }
                    $navBtns.eq(numView).addClass('navOn');
                    numRoll = numView;
                }

                var _temp = numRoll<0?scrollSize:0;
                t=0;
                b=_scrollObj[_dir];
                //c=(pPos != undefined)?pPos:_neg*opts.distance;
                e=(pPos != undefined)?pPos:_temp+(opts.distance*numRoll)%scrollSize;
                if(_neg==1){
                    if(e>b){
                        c = e-b;
                    }else{
                        c = e+scrollSize -b;
                    }
                }else{
                    if(e>b){
                        c =e-scrollSize-b;
                    }else{
                        c = e-b;
                    }
                }
                d=opts.duration;
                
                //scrollId = setInterval(scrollFunc, opts.scrollDelay);
                if(scrollId) clearTimeout(scrollId);
                scrollId = setTimeout(scrollFunc, opts.scrollDelay);
            }
            
            function start(){
                rollId = setInterval(function(){
                    rollFunc();
                }, opts.time*1000);
            }
            function stop(){
                clearInterval(rollId);
            }
            
            function easeOutQuad(t,b,c,d){
                return -c *(t/=d)*(t-2) + b;
            }
            
            function easeOutQuint(t,b,c,d){
                return c*((t=t/d-1)*t*t*t*t + 1) + b;
            }

        });
    };
    $.fn.kxbdSuperMarquee.defaults = {
        isMarquee:false,//是否为Marquee
        isEqual:true,//所有滚动的元素长宽是否相等,true,false
        loop: 0,//循环滚动次数，0时无限
        newAmount:3,//加速滚动的步长
        eventA:'mousedown',//鼠标事件，加速
        eventB:'mouseup',//鼠标事件，原速
        isAuto:true,//是否自动轮换
        time:5,//停顿时间，单位为秒
        duration:50,//缓动效果，单次移动时间，越小速度越快，为0时无缓动效果
        eventGo:'click', //鼠标事件，向前向后走
        direction: 'left',//滚动方向，'left','right','up','down'
        scrollAmount:1,//步长
        scrollDelay:10,//时长
        eventNav:'click'//导航事件
    };
    
    $.fn.kxbdSuperMarquee.setDefaults = function(settings) {
        $.extend( $.fn.kxbdSuperMarquee.defaults, settings );
    };
    
})(jQuery);
/*
//参数说明：
// No1:控件的名称，需要不一样，爱加多少个随你喜欢
// No2:控件初始时的top值。
// No3:控件初始时的left值，正值为相对左的left，负数为相对右边的值
new Couplet("maple1",400,8);
new Couplet("maple2",10,-8);
*/
function Couplet(){
	if(arguments.length >= 1) this.objID = document.getElementById(arguments[0]);
	if(arguments.length >= 2) this.divTop = arguments[1];
	if(arguments.length >= 3) this.divPlane = arguments[2];
	if(arguments.length >= 4) this.scrollDelay = arguments[4];
	if(arguments.length >= 5) this.waitTime = arguments[5];
	if(!this.objID){
		alert('对象名【'+ arguments[0] +'】无效，对象无法初始化，请检查对象名称是否正确！');
		this.objID = null; return;
	}else{
		this.objID.style.position='absolute';
		this.objID.style.display='block';
		this.objID.style.zIndex=9999;
	}
	if('' == this.objID.style.top){
		if(isNaN(this.divTop)){
			alert('对象垂直位置(top)参数必须为数字。'); return;
		}else{
			this.objID.style.top = this.divTop+'px';
		}
	}
	if('' == this.objID.style.left && '' == this.objID.style.right){
		if(isNaN(this.divPlane)){
			alert('对象水平位置(left||right)参数必须为数字。'); return;
		}
		if(this.divPlane>0) this.objID.style.left = this.divPlane+'px';
		if(this.divPlane<0) this.objID.style.right = Math.abs(this.divPlane)+'px';
	}
	if(this.scrollDelay<15 || isNaN(this.scrollDelay)) this.scrollDelay = 15;
	if(this.waitTime<500 || isNaN(this.waitTime)) this.waitTime = 500;
	if(arguments.length>=1) this.start();
}
Couplet.prototype.start = function(){
	if(null == this.objID) return;
	var objCouplet = this;
	timer = this.scrollDelay;
	objCouplet.lastScrollY = 0;
	objCouplet.timerID = null;
	objCouplet.startID = function(){
		if('block' == objCouplet.objID.style.display) objCouplet.run();
		else clearInterval(objCouplet.timerID);
	}
	objCouplet.Begin = function(){
		objCouplet.timerID = setInterval(objCouplet.startID,timer);
	}

	setTimeout(objCouplet.Begin,this.waitTime);
}
Couplet.prototype.run = function(){
	if(document.documentElement && document.documentElement.scrollTop)
		uu_scrY = parseFloat(document.documentElement.scrollTop);
	else if(document.body)
		uu_scrY = parseFloat(document.body.scrollTop);

	uu_divX = parseFloat(this.objID.style.top.replace('px',''));
	uu_curTop = .1 * (uu_scrY - this.lastScrollY);
	uu_curTop = uu_curTop>0?Math.ceil(uu_curTop):Math.floor(uu_curTop);
	this.objID.style.top = parseFloat(uu_divX + uu_curTop) + 'px';
	this.lastScrollY += uu_curTop;
}
/*** 删除首尾空格 ***/
String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "");
}
/*** 统计指定字符出现的次数 ***/
String.prototype.occurs = function(ch) {
	// var re = eval("/[^"+ch+"]/g");
	// return this.replace(re, "").length;
	return this.split(ch).length - 1;
}
/*** 检查是否由纯数字组成 ***/
String.prototype.isDigit = function() {
	var s = this.trim();
	return (s.replace(/\d/g, "").length == 0);
}
/*** 检查是否由数字字母和下划线组成 ***/
String.prototype.isAlpha = function() {
	return (this.replace(/[\w]/g, "").length == 0);
}
/*** 检查是否为数字 ***/
String.prototype.isNumber = function() {
	var s = this.trim();
	return (s.search(/^[+-]?[0-9.]*$/) >= 0);
}
/*** 返回字节数 ***/  
String.prototype.lenb = function() {
	return this.replace(/[^\x00-\xff]/g,"**").length;
}
/*** 检查是否包含汉字 ***/
String.prototype.isInChinese = function() {
	return (this.length != this.replace(/[^\x00-\xff]/g,"**").length);
}
/*** 简单的email检查 ***/  
String.prototype.isEmail = function() {
	var strr;
	var mail = this;
	var re = /(\w+@\w+\.\w+)(\.{0,1}\w*)(\.{0,1}\w*)/i;
	re.exec(mail);
	if (RegExp.$3 != "" && RegExp.$3 != "." && RegExp.$2 != ".")
		strr = RegExp.$1+RegExp.$2+RegExp.$3;
	else
		if (RegExp.$2 != "" && RegExp.$2 != ".")
			strr = RegExp.$1 + RegExp.$2;
		else
			strr = RegExp.$1;
	return (strr == mail);
}
/*** 简单的日期检查，成功返回日期对象 ***/
String.prototype.isDate = function() {
	var p;
	var re1 = /(\d{4})[年./-](\d{1,2})[月./-](\d{1,2})[日]?$/;
	var re2 = /(\d{1,2})[月./-](\d{1,2})[日./-](\d{2})[年]?$/;
	var re3 = /(\d{1,2})[月./-](\d{1,2})[日./-](\d{4})[年]?$/; 
	if(re1.test(this)) {
		p = re1.exec(this);
		return new Date(p[1],p[2],p[3]);
	}
	if(re2.test(this)) {
		p = re2.exec(this);
		return new Date(p[3],p[1],p[2]);
	}
	if(re3.test(this)) {
		p = re3.exec(this);
		return new Date(p[3],p[1],p[2]);
	}
	return false;
}
/*** 检查是否有列表中的字符字符 ***/  
String.prototype.isInList = function(list) {
	var re = eval('/['+list+']/');
	return re.test(this);
}
/*
   前台检测是否有非安全字符 注:提交到数据库后同样要过滤非安全字符
*/
String.prototype.isNotSafe = function() {
	var re = new RegExp(/[';&]/);
	return re.test(this);
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
