/*
	滚动 2009-1-21 yoom
	此脚本依赖于Jquery核心库，版本是1.2.9或更高
	
	作用是提供图片，新闻滚动 （非无缝滚动）。

*/
$(document).ready(function() {
    var scrollGalleryObj = $(".scrollGallery");
    scrollGalleryObj.each(function(i) {
        var parentObj = $(this);
        var obj = $(this).find(".scroll");
        if (obj[0] == null) { return; }


        var n3 = parseInt(obj[0].scrollHeight);
        var n2 = parseInt(obj[0].clientHeight);
        //alert(n3 + ',' + n2);
        var delay = parseInt(obj.attr("delay"), 10);
        var step = parseInt(obj.attr("step"), 10);

        //obj[0].scrollTop = 0;
        //设置当前索引位置，从1开始的
        obj.attr("currentIndex", "1");

        var stepNumber = obj.children('li').length;
        //如果滚动的步数小于2，那么就没必要执行下面的语句了
        if (stepNumber < 2) { return false; }

        //现在做锚点
        var ulObj = document.createElement("ul");
        ulObj.className = "scrollNum";
        for (var i = 0; i < stepNumber; i++) {
            var liNode = document.createElement("li");
            var textNode = document.createTextNode(i + 1);
            liNode.setAttribute("title", i + 1);
            liNode.appendChild(textNode);
            if (i == 0) { liNode.className = "current"; }
            //给liNode添加事件
            $(liNode).bind("mouseover", function() {
                var num = parseInt($(this).attr("title"), 10);
                if (isNaN(num)) { return; }
                //跳至对应位置
                startScroll(num);
            });
            ulObj.appendChild(liNode);
            $(ulObj).hide();
        }

        $(ulObj).appendTo(parentObj)
		  .fadeIn("slow")
		  .animate({ opacity: 0.5 }, 2000);

        $('<div class="link"><a href="' + parentObj.find("ul.scroll>li:eq(0)>a").attr('href') + '">' + parentObj.find("ul.scroll>li:eq(0)>a").attr('title') + '</a></div>').appendTo(parentObj);


        if (isNaN(delay) || isNaN(step)) { return true; }
        //根据传递进来的参数进行注册
        function foo(obj, delay, step) { window.setInterval(function() { interalRun(obj, step); }, delay); }
        //执行滚动
        function startScroll(num, where) {
            //先停止并移除可能存在的动画队列
            obj.stop();
            obj.dequeue();
            //如果where=true，则滚动到顶部，否则+=step
            if (where == true) {
                obj.attr("currentIndex", "1");
                obj.animate({ scrollTop: "0" }, 600);
            } else if (where == false) {
                var i = parseInt(obj.attr("currentIndex"), 10);
                if (i == stepNumber) { i = 0 }
                obj.attr("currentIndex", (i + 1));
                obj.animate({ scrollTop: "+=" + 268 + "" }, 600);
            }
            //如果num不为空，那么说明是鼠标hover了
            if (num != null) {
                var h = (num - 1) * 268;
                obj.attr("currentIndex", num.toString());
		
                obj.animate({ scrollTop: h }, 300);
            }

            selectCurrent();
        }
        //根据滚动条位置来决定是继续向上还是向下
        function interalRun(obj, step) {
            if (parentObj.attr("scroll") == "false") { return; }
            var n1 = parseInt(obj[0].scrollTop);
            var n2 = parseInt(obj[0].clientHeight);
            var n3 = parseInt(obj[0].scrollHeight);
            /*
            第一个参数：是在鼠标事件中才有意义的，这里是自动执行，因此设置为null
            第二个参数：startScroll根据这个布尔值决定是向上还是向下
            */
            n1 + n2 == n3 ? startScroll(null, true) : startScroll(null, false);
        }
        if (delay > 0) { foo(obj, delay, step) };
        //当鼠标移上的时候，设置一个属性scroll,为false是，interalRun方法就不会执行（return）;
        parentObj.hover(
			function(event) {
			    parentObj.attr("scroll", "false");
			    //当鼠标移上的时候，数字由50%透明过渡到完全不透明
			    var scrollNumObj = parentObj.find(".scrollNum");
			    scrollNumObj.stop();
			    scrollNumObj.dequeue();
			    scrollNumObj.animate({ opacity: 1 }, 500);
			},
			function(event, obj, delay, step) {
			    parentObj.attr("scroll", "true");
			    //当鼠标移上的时候，数字由完全不透明过渡到50%透明
			    var scrollNumObj = parentObj.find(".scrollNum");
			    scrollNumObj.stop();
			    scrollNumObj.dequeue();
			    scrollNumObj.animate({ opacity: 0.5 }, 500);
			}
		);

        //此方法的作用是“选中”的li
        function selectCurrent() {
            var scrollNumObj = parentObj.find(".scrollNum");
            if (scrollNumObj[0] == null) { return; }
            var currentNum = parseInt(obj.attr("currentIndex"), 10) - 1;
            scrollNumObj.find("li").removeClass("current");
          
            scrollNumObj.find("li:eq(" + currentNum + ")").addClass("current");

            parentObj.find('.link').html('<a href="' + parentObj.find("ul.scroll>li:eq(" + currentNum + ")>a").attr('href') + '">' + parentObj.find("ul.scroll>li:eq(" + currentNum + ")>a").attr('title') + '</a>');
        }

    })
});

