﻿var sina={$:function(objName)
    {
        if(document.getElementById){return eval('document.getElementById("'+objName+'")')}
        else{return eval('document.all.'+objName)}
    },
    isIE:navigator.appVersion.indexOf("MSIE")!=-1?true:false,
    addEvent:function(l,i,I)
    {
        if(l.attachEvent){l.attachEvent("on"+i,I)}
        else{l.addEventListener(i,I,false)}
    },
    delEvent:function(l,i,I)
    {
        if(l.detachEvent){l.detachEvent("on"+i,I)}
        else{l.removeEventListener(i,I,false)}
    },
    readCookie:function(O)
    {
        var o="",l=O+"=";
        if(document.cookie.length>0)
        {
            var i=document.cookie.indexOf(l);
            if(i!=-1)
            {
                i+=l.length;
                var I=document.cookie.indexOf(";",i);
                if(I==-1)I=document.cookie.length;
                o=unescape(document.cookie.substring(i,I))
            }
        };
    return o
    },
    writeCookie:function(i,l,o,c)
    {
        var O="",I="";
        if(o!=null)
        {
            O=new Date((new Date).getTime()+o*3600000);
            O="; expires="+O.toGMTString()
        };
        if(c!=null){I=";domain="+c};
        document.cookie=i+"="+escape(l)+O+I
    },
    readStyle:function(I,l)
    {
        if(I.style[l]){return I.style[l]}
        else if(I.currentStyle){return I.currentStyle[l]}
        else if(document.defaultView&&document.defaultView.getComputedStyle)
        {
            var i=document.defaultView.getComputedStyle(I,null);
            return i.getPropertyValue(l)
        }
        else{return null}
    }
};

function ScrollPic(scrollContId,arrLeftId,arrRightId,dotListId)
{
    this.scrollContId=scrollContId;
    this.arrLeftId=arrLeftId;
    this.arrRightId=arrRightId;
    this.dotListId=dotListId;
    this.dotClassName="dotItem";
    this.dotOnClassName="dotItemOn";
    this.dotObjArr=[];
    this.pageWidth=0;
    this.frameWidth=0;
    this.speed=10;
    this.space=10;
    this.pageIndex=0;
    this.autoPlay=true;
    this.autoPlayTime=5;
    var _autoTimeObj,_scrollTimeObj,_state="ready";
    this.stripDiv=document.createElement("DIV");
    this.listDiv01=document.createElement("DIV");
    this.listDiv02=document.createElement("DIV");
    if(!ScrollPic.childs){ScrollPic.childs=[]};
    this.ID=ScrollPic.childs.length;ScrollPic.childs.push(this);
    this.initialize=function()
    {
        if(!this.scrollContId){throw new Error("必须指定scrollContId.");return};
        this.scrollContDiv=sina.$(this.scrollContId);
        if(!this.scrollContDiv){return};
        this.scrollContDiv.style.width=this.frameWidth+"px";
        this.scrollContDiv.style.overflow="hidden";
        this.listDiv01.innerHTML=this.listDiv02.innerHTML=this.scrollContDiv.innerHTML;
        this.scrollContDiv.innerHTML="";
        this.scrollContDiv.appendChild(this.stripDiv);
        this.stripDiv.appendChild(this.listDiv01);
        this.stripDiv.appendChild(this.listDiv02);
        this.stripDiv.style.overflow="hidden";
        this.stripDiv.style.zoom="1";
        this.stripDiv.style.width="32766px";
        this.listDiv01.style.cssFloat="left";
        this.listDiv02.style.cssFloat="left";
        sina.addEvent(this.scrollContDiv,"mouseover",Function("ScrollPic.childs["+this.ID+"].stop1()"));
        sina.addEvent(this.scrollContDiv,"mouseout",Function("ScrollPic.childs["+this.ID+"].play1()"));
        if(this.arrLeftId)
        {
            this.arrLeftObj=sina.$(this.arrLeftId);
            if(this.arrLeftObj)
            {
                sina.addEvent(this.arrLeftObj,"mousedown",Function("ScrollPic.childs["+this.ID+"].rightMouseDown()"));
                sina.addEvent(this.arrLeftObj,"mouseup",Function("ScrollPic.childs["+this.ID+"].rightEnd()"));
                sina.addEvent(this.arrLeftObj,"mouseout",Function("ScrollPic.childs["+this.ID+"].rightEnd()"))
            }
        };
        if(this.arrRightId)
        {
            this.arrRightObj=sina.$(this.arrRightId);
            if(this.arrRightObj)
            {
                sina.addEvent(this.arrRightObj,"mousedown",Function("ScrollPic.childs["+this.ID+"].leftMouseDown()"));
                sina.addEvent(this.arrRightObj,"mouseup",Function("ScrollPic.childs["+this.ID+"].leftEnd()"));
                sina.addEvent(this.arrRightObj,"mouseout",Function("ScrollPic.childs["+this.ID+"].leftEnd()"))
            }
        };
        if(this.dotListId)
        {
            this.dotListObj=sina.$(this.dotListId);
            if(this.dotListObj)
            {
                var pages=Math.round(this.listDiv01.offsetWidth/this.frameWidth+0.4),i,tempObj;
                for(i=0;i<pages;i++)
                {
                    tempObj=document.createElement("span");
                    this.dotListObj.appendChild(tempObj);
                    this.dotObjArr.push(tempObj);
                    if(i==this.pageIndex){tempObj.className=this.dotClassName}
                    else
                    {
                        tempObj.className=this.dotOnClassName
                    };
                    tempObj.title="第"+(i+1)+"页";
                    sina.addEvent(tempObj,"click",Function("ScrollPic.childs["+this.ID+"].pageTo("+i+")"))
                }
            }
        };
        if(this.autoPlay){this.play1()}
    };
    this.leftMouseDown=function()
    {
        if(_state!="ready"){return};
        _state="floating";
        _scrollTimeObj=setInterval("ScrollPic.childs["+this.ID+"].moveLeft()",this.speed)
    };
    this.rightMouseDown=function()
    {
        if(_state!="ready"){return};
        _state="floating";
        _scrollTimeObj=setInterval("ScrollPic.childs["+this.ID+"].moveRight()",this.speed)
    };
    this.moveLeft=function()
    {
        if(this.scrollContDiv.scrollLeft+this.space>=this.listDiv01.scrollWidth)
        {
            this.scrollContDiv.scrollLeft=this.scrollContDiv.scrollLeft+this.space-this.listDiv01.scrollWidth
        }
        else
        {this.scrollContDiv.scrollLeft+=this.space};
        this.accountPageIndex()
    };
    this.moveRight=function()
    {
        if(this.scrollContDiv.scrollLeft-this.space<=0)
        {this.scrollContDiv.scrollLeft=this.listDiv01.scrollWidth+this.scrollContDiv.scrollLeft-this.space}
        else{this.scrollContDiv.scrollLeft-=this.space};
        this.accountPageIndex()
    };
    this.leftEnd=function()
    {
        if(_state!="floating"){return};
        _state="stoping";
        clearInterval(_scrollTimeObj);
        var fill=this.pageWidth-this.scrollContDiv.scrollLeft%this.pageWidth;
        this.move(fill)
    };
    this.rightEnd=function()
    {
        if(_state!="floating"){return};
        _state="stoping";
        clearInterval(_scrollTimeObj);
        var fill=-this.scrollContDiv.scrollLeft%this.pageWidth;
        this.move(fill)
    };
    this.move=function(num,quick)
    {
        var thisMove=num/5;
        if(!quick)
        {
            if(thisMove>this.space){thisMove=this.space};
            if(thisMove<-this.space){thisMove=-this.space}
        };
        if(Math.abs(thisMove)<1&&thisMove!=0){thisMove=thisMove>=0?1:-1}
        else{thisMove=Math.round(thisMove)};
        var temp=this.scrollContDiv.scrollLeft+thisMove;
        if(thisMove>0)
        {
            if(this.scrollContDiv.scrollLeft+thisMove>=this.listDiv01.scrollWidth)
            {
                this.scrollContDiv.scrollLeft=this.scrollContDiv.scrollLeft+thisMove-this.listDiv01.scrollWidth
            }
            else
            {this.scrollContDiv.scrollLeft+=thisMove}
        }
        else
        {
            if(this.scrollContDiv.scrollLeft-thisMove<=0)
            {
                this.scrollContDiv.scrollLeft=this.listDiv01.scrollWidth+this.scrollContDiv.scrollLeft-thisMove
            }
            else{this.scrollContDiv.scrollLeft+=thisMove}
        };
        num-=thisMove;
        if(Math.abs(num)==0)
        {
            _state="ready";
            if(this.autoPlay){this.play1()};
            this.accountPageIndex();return
        }
        else{this.accountPageIndex();setTimeout("ScrollPic.childs["+this.ID+"].move("+num+","+quick+")",this.speed)}
    };
    this.next=function()
    {
        if(_state!="ready"){return};
        _state="stoping";
        this.move(this.pageWidth,true)
    };
    this.play1=function()
    {
        if(!this.autoPlay){return};
        clearInterval(_autoTimeObj);
        _autoTimeObj=setInterval("ScrollPic.childs["+this.ID+"].next()",this.autoPlayTime*1000)
    };
    this.stop1=function(){clearInterval(_autoTimeObj)};
    this.pageTo=function(num)
    {
        if(_state!="ready"){return};
        _state="stoping";
        var fill=num*this.frameWidth-this.scrollContDiv.scrollLeft;
        this.move(fill,true)
    };
    this.accountPageIndex=function()
    {
        this.pageIndex=Math.round(this.scrollContDiv.scrollLeft/this.frameWidth);
        if(this.pageIndex>Math.round(this.listDiv01.offsetWidth/this.frameWidth+0.4)-1){this.pageIndex=0};
        var i;
        for(i=0;i<this.dotObjArr.length;i++)
        {
            if(i==this.pageIndex){this.dotObjArr[i].className=this.dotClassName}
            else{this.dotObjArr[i].className=this.dotOnClassName}
        }
    }
};


var isIE = (document.all) ? true : false;

var Class = {
	create: function() {
		return function() { this.initialize.apply(this, arguments); }
	}
}

var Extend = function(destination, source) {
	for (var property in source) {
		destination[property] = source[property];
	}
}

var Bind = function(object, fun) {
	return function() {
		return fun.apply(object, arguments);
	}
}

var Each = function(list, fun){
	for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }
};


//ie only
var RevealTrans = Class.create();
RevealTrans.prototype = {
  initialize: function(container, options) {
	this._img = document.createElement("img");
	this._a = document.createElement("a");
	
	this._timer = null;//计时器
	this.Index = 0;//显示索引
	this._onIndex = -1;//当前索引
	
	this.SetOptions(options);
	
	this.Auto = !!this.options.Auto;
	this.Pause = Math.abs(this.options.Pause);
	this.Duration = Math.abs(this.options.Duration);
	this.Transition = parseInt(this.options.Transition);
	this.List = this.options.List;
	this.onShow = this.options.onShow;
	
	//初始化显示区域
	this._img.style.visibility = "hidden";//第一次变换时不显示红x图
	this._img.style.width = this._img.style.height = "100%"; this._img.style.border = 0;
	this._img.onmouseover = Bind(this, this.Stop);
	this._img.onmouseout = Bind(this, this.Start);
	isIE && (this._img.style.filter = "revealTrans()");
	
	this._a.target = "_blank";
	
	document.getElementById(container).appendChild(this._a).appendChild(this._img);
  },
  //设置默认属性
  SetOptions: function(options) {
	this.options = {//默认值
		Auto:		true,//是否自动切换
		Pause:		3000,//停顿时间(微妙)
		Duration:	1,//变换持续时间(秒)
		Transition:	23,//变换效果(23为随机)
		List:		[],//数据集合,如果这里不设置可以用Add方法添加
		onShow:		function(){}//变换时执行
	};
	Extend(this.options, options || {});
  },
  Start: function() {
	clearTimeout(this._timer);
	//如果没有数据就返回
	if(!this.List.length) return;
	//修正Index
	if(this.Index < 0 || this.Index >= this.List.length){ this.Index = 0; }
	//如果当前索引不是显示索引就设置显示
	if(this._onIndex != this.Index){ this._onIndex = this.Index; this.Show(this.List[this.Index]); }
	//如果要自动切换
	if(this.Auto){
		this._timer = setTimeout(Bind(this, function(){ this.Index++; this.Start(); }), this.Duration * 1000 + this.Pause);
	}
  },
  //显示
  Show: function(list) {
	try
	{
        if(isIE){
	        //设置变换参数
	        with(this._img.filters.revealTrans){
		        Transition = this.Transition; Duration = this.Duration; apply(); play();
	        }
        }
	}catch(exception
      ){}
	this._img.style.visibility = "";
	//设置图片属性
	this._img.src = list.img; this._img.alt = list.text;
	//设置链接
	!!list["url"] ? (this._a.href = list["url"]) : this._a.removeAttribute("href");
	//附加函数
	this.onShow();
  },
  //添加变换对象
  Add: function(sIimg, sText, sUrl) {
	this.List.push({ img: sIimg, text: sText, url: sUrl });
  },
  //停止
  Stop: function() {
	clearTimeout(this._timer);
  }
};
