﻿function Slider(id,urls,autoplay){
    var c=urls.length;
    var loadimgcount=0;
    var imgs=[];
    for(var i=0;i<c;i++){
        var img=document.createElement("IMG");
        img.src = urls[i].Url;
        if(img.complete){
            loadimgcount++;
        }else{
            img.onload=function(){
                loadimgcount++;
            }
            img.onerror=function(){
                loadimgcount++;
            }
        }
        imgs.push(img);
    }
    
    start();
    function start(){
        if(loadimgcount<c){
            setTimeout(start,100);
            return;
        }
        c=urls.length;
        if(c==0)return;
        var obj=$(id);
        var ul=obj.find("ul");
        obj.Ins=this;
        
        var indexstatus=obj.find("a");
        var currentimg=obj.find("img:first");
        var currentcnt=obj.find("p:first");
        var controlbtn=obj.find("input:button");
        
        var isplay=false;
        var playhandler;
        var showlock=false;
        var currentindex=-1;

        $(indexstatus[1]).text(c);
        $(indexstatus[2]).text(c);
        indexstatus=$(indexstatus[0]);
        
        /* 先把第一张图片显示出来 */
        currentimg.attr("src",urls[0].Url);
        currentcnt.text(urls[0].Txt);
        indexstatus.text(1);
        currentimg.fadeIn("slow",function(){
            currentindex=0;
        });
        
        this.Show=function(index){
            if(showlock||index<0||index>=c||index==currentindex)return;
            showlock=true;
            currentimg.fadeOut("slow",function(){
                currentimg.attr("src",urls[index].Url);
                $(ul.find("li")[currentindex]).removeClass("now");
                $(ul.find("li")[index]).addClass("now");
                currentcnt.text(urls[index].Txt);
                indexstatus.text(index+1);
                currentimg.fadeIn("slow",function(){
                    currentindex=index;
                    showlock=false;
                });
            });
        }
        this.Play=function(){
            if(isplay)return;
            if(currentindex>=c-1){
                obj.Ins.Show(0);
            }else{
                obj.Ins.Show(currentindex+1);
            }
            playhandler=window.setInterval(function(){
                if(currentindex>=c-1){
                    obj.Ins.Show(0);
                }else{
                    obj.Ins.Show(currentindex+1);
                }
            },3000);
            isplay=true;
            controlbtn[0].style.display="none";
            controlbtn[1].style.display="";
        }
        this.Stop=function(){
            window.clearInterval(playhandler);
            isplay=false;
            controlbtn[1].style.display="none";
            controlbtn[0].style.display="";
        }
        this.First=function(){
            this.Show(0);
        }
        this.Prev=function(){
            this.Show(currentindex-1);
        }
        this.Next=function(){
            this.Show(currentindex+1);
        }
        this.Last=function(){
            this.Show(c-1);
        }
        function move(){
            if(movedir<0&&nowpx<=minpxmove){
                nowpx=minpxmove;
                if(nowpx-onewidth*7<minpx){
                    $(controlbtn[7]).attr('class','buttonBackwardNone');
                }
                movedir=0;
                return;
            }
            if(movedir>0&&nowpx>=maxpxmove){
                nowpx=maxpxmove;
                if(nowpx+onewidth*7>0){
                    $(controlbtn[6]).attr('class','buttonForwardNone');
                }
                movedir=0;
                return;
            }
            nowpx+=movedir;
            if(nowpx>maxpxmove)nowpx=maxpxmove;
            else if(nowpx<minpxmove)nowpx=minpxmove;
            ul.css("left",nowpx);
        }
        this.MoveLeft=function(){
            minpxmove=nowpx-onewidth*7;
            if(minpxmove<minpx){
                minpxmove=minpx;
            }
            movedir=-10;
            $(controlbtn[6]).attr('class','buttonForward');
        }
        this.MoveRight=function(){
            maxpxmove=nowpx+onewidth*7;
            if(maxpxmove>0){
                maxpxmove=0;
            }
            movedir=10;
            $(controlbtn[7]).attr('class','buttonBackward');
        }
        
        if(autoplay)
            this.Play();
        else
            this.Stop();

        obj.show();

        /* 初始化缩略图列表 */
        for(var i=0;i<c;i++){
            urls[i].sUrl=urls[i].Url.replace("/20","/s_20");
            ul.append("<li><p><a href=\"javascript:void(0)\"><img src=\"" + urls[i].sUrl + "\" alt=\"\" /></a></p></li>");
        }
        
        $.each(ul.find("a"),function(i,o){
            $(o).click(function(){obj.Ins.Show(i);})
            .hover(
                function(){$(this).addClass("hover");},
                function(){$(this).removeClass("hover");}
            );
        });

        /* 设置缩略图第一张的透明度 */
        $(ul.find("li")[0]).addClass("now");
        
        /* 初始化命令按钮 */
        $(controlbtn[0]).click(function(){obj.Ins.Play();});
        $(controlbtn[1]).click(function(){obj.Ins.Stop();});
        $(controlbtn[2]).click(function(){obj.Ins.First();});
        $(controlbtn[3]).click(function(){obj.Ins.Prev();});
        $(controlbtn[4]).click(function(){obj.Ins.Next();});
        $(controlbtn[5]).click(function(){obj.Ins.Last();});
        
        /* 如果总数大于7个 */
        if(c>7){
            var btn6=$(controlbtn[6]);
            var btn7=$(controlbtn[7]);
            btn6.click(function(){obj.Ins.MoveRight();}).hover(
                function(){if(btn6.attr("class")!='buttonForwardNone')btn6.attr('class','buttonForwardOver');},
                function(){if(btn6.attr("class")!='buttonForwardNone')btn6.attr('class','buttonForward');}
            );
            
            btn7.click(function(){obj.Ins.MoveLeft();}).hover(
                function(){if(btn7.attr("class")!='buttonBackwardNone')btn7.attr('class','buttonBackwardOver');},
                function(){if(btn7.attr("class")!='buttonBackwardNone')btn7.attr('class','buttonBackward');}
            );

            var tmp=ul.find("li");
            var minpx=$(tmp[c-1]).position().left;
            var onewidth=minpx-$(tmp[c-2]).position().left;
            tmp=null;
            minpx=-parseInt(minpx/onewidth/7)*onewidth*7;
            ul.css("left","0");
            var nowpx=parseInt(ul.css("left"));
            var minpxmove=0;
            var maxpxmove=0;
            var movedir=0;
            window.setInterval(move,10);
        }else{
            $(controlbtn[6]).attr('class','buttonForwardNone');
            $(controlbtn[7]).attr('class','buttonBackwardNone');
        }
    }
}
