﻿/**
*ScrollBar 应用包
*版本：1.1.0
*日期：9:21 2006-12-18
*作者：www.bigtreexu.com
*支持：IE 6.0+ ,FF 1.5+
*/
/**
*var scrollBar=new ScrollBar();
*scrollBar.init();
*scrollBar.moveTo(val,[1|2|3]);
*
*/

function ScrollBar(scrollBar,scrollButton,func,type,isRunAtOnce)
{
	this.scrollBar=$(scrollBar);
	this.scrollButton=$(scrollButton);
	if(typeof func!='function')
	{
		func=function(){}
	}
	this.func=func;
	if(type!=null&&type.toLowerCase()=='x')
	{
		this.type=0;
	}else
	{
		this.type=1;
	}
	if(isRunAtOnce==null)
	{
		isRunAtOnce=true;
	}
	this.isRunAtOnce=isRunAtOnce;
}

ScrollBar.prototype={
	_isScroll:false,
	_startPos:[0,0],
	_scrollBarXY:null,
	_scrollBarWH:null,
	_scrollButtonXY:null,
	_scrollButtonWH:null,
	_barWH:[0,0],
	_dic:['left','top'],
	_rtnVal:0,
	_scrollTo:null,
	init:function()
	{
		
		V.addListener(this.scrollButton,'mousedown',this._onStartScroll());
		V.addListener(this.scrollBar,'click',this._scrollTo=this.__scrollTo());
		V.addListener(this.scrollButton,'mouseover',function(e,o){O.addClass(o,'scrollButton-drag')});
		V.addListener(this.scrollButton,'mouseout',function(e,o){O.removeClass(o,'scrollButton-drag')});
	},
	_onStartScroll:function()
	{
		var _=this;
		_._scrollBarXY=O.getXY(_.scrollBar);
		_._scrollBarWH=O.getWH(_.scrollBar);
		_._scrollButtonXY=O.getXY(_.scrollButton);
		_._scrollButtonWH=O.getWH(_.scrollButton);
		_._barWH=[_._scrollBarWH[0]-_._scrollButtonWH[0],_._scrollBarWH[1]-_._scrollButtonWH[1]];
		return function(e)
		{
			if(_._isScroll)
			{
				return;
			}
			_._isScroll=true;
			var _mouseXY=O.getMouseXY(e);
			_._startPos[0]=_mouseXY[0]-_._scrollBarXY[0]-_.scrollButton.style.left.replace(/px/gi,'');
			_._startPos[1]=_mouseXY[1]-_._scrollBarXY[1]-_.scrollButton.style.top.replace(/px/gi,'');
			V.addListener(document.body,'mousemove',_._onScrolling());
			V.addListener(document.body,'mouseup',_._onEndScroll());
			V.addListener(document.body,'click',_._onEndScroll());
		}
	},
	_onScrolling:function()
	{
		var _=this;
		return function(e)
		{
			if(_._isScroll)
			{
				_._scrollTo(e);
			}
		}
	},
	moveTo:function(refVal,method)
	{
		this.__scrollTo(refVal,method)();
	},
	__scrollTo:function(refVal,method)
	{
		var _=this;
		var _type=_.type;
		if(method==null)
		{
			method=1;
		}
		return function(e)
		{
			if(refVal==null)
			{
				var _mouseXY=O.getMouseXY(e);
				var _topVal=_mouseXY[_type]-_._scrollBarXY[_type]-_._startPos[_type];
				var _refVal=_topVal/_._barWH[_type];
			}else
			{
				var _refVal=refVal;
			}
			if(_refVal>=0&&_refVal<=1)
			{
				
				_._rtnVal=_refVal;
				if(method==1||method==2)
				{
					_.scrollButton.style[_._dic[_type]]=_refVal*_._barWH[_type]+'px';
				}
				if(method==1||method==3)
				{
					if( (_._isScroll&&_.isRunAtOnce)||!_._isScroll ){
						_.func(_refVal);
					}
				}
			}
		}
	},
	_onEndScroll:function()
	{
		var _=this;
		return function(e)
		{
			if(_._isScroll)
			{
				if(!_.isRunAtOnce){
					_.func(_._rtnVal);
				}
				_._isScroll=false;
				V.removeListener(document.body,'mousemove',_._onScrolling());
				V.removeListener(document.body,'mouseup',_._onEndScroll());
				V.removeListener(document.body,'click',_._onEndScroll());
			}
		}
	}
}