/****************************
Slider2.js
Ver.2.1b

(c) Wataru Kanzaki, Wings-Winds, 2010
http://www.wi-wi.jp/
****************************/
/****************/
function Slider2(frm, lvr, opts){
	var ID='';
	var _frame=null;
	var _lever=null;

	var _aspect=0; //aspect のデフォルトは12時方向

	var _direction=true; // true: 時計回り, false: 反時計回り
	var _distance=true; // true: _baseからの距離をピクセルで計算, false: _baseからの距離を_rangeで計算
	var _range={
			minX:false, l:false,
			maxX:false, r:false,
			minY:false, t:false,
			maxY:false, b:false,
			minD:false, n:false,
			maxD:false, d:false,
			maxA:360,   a:false
		};
	var _reverse={
			x:false,
			y:false
		};
	var _limit={
			left:false, l:false,
			right:false, r:false,
			top:false, t:false,
			bottom:false, b:false,
			distance:false, d:false,
			near:false, n:false,
			arc:false, a:false
		};
	var _step={
			x:1,
			y:1
		};
	var _stepmove=false; // devide、step指定の時に飛び飛びで移動する

	var _always=0;
	var _ondrag=false;
	var _fpos={x:0,y:0}; // frame element's position
	var _lpos={x:0,y:0}; // lever's position
	var _base={x:0,y:0}; // frame's base position
	var _center={x:0,y:0}; // lever's center
	var _callback=null;
	var self=this;

	if(frm==undefined){
//		alert('"'+frm+'" is null');
		return null;
	}
	
	if(typeof(frm)=='string'){
		_frame=document.getElementById(ID=frm);
	}else if(!!frm){
		_frame=frm;
		ID=_frame.id;
	}

	if(!_frame){
//		alert('"'+ID+'" is null');
		return null;
	}

	if(ArrayIndexOf(GetStyle(_frame, 'position'), ['relative','absolute','fixed'])==-1){
		_frame.style.position='relative';
	}
	
	var sz_f=Size(_frame);
	var p=Pos(_frame);
	_fpos.x=p.left;
	_fpos.y=p.top;


	for(var i=0;_lever=_frame.childNodes[i];i++){
		if(_lever.nodeType==1){
			break;
		}
	}

	if(_lever){
	// HTMLでの指定、leverオプションなし
		if(ArrayIndexOf(GetStyle(_lever, 'position'), ['relative','absolute'])==-1){
			_lever.style.position='absolute';
		}
		if(opts){
			for(var k in opts){
				_lever.style[k]=opts[k];
			}
		}
	}else{
	// HTMLでの指定なし
		_lever=document.createElement('span');

		if(!opts)opts={};
		if(!opts.backgroundColor)opts.backgroundColor='';
		opts.position='absolute';
		opts.display='block';
		opts.top='0px';
		opts.left='0px';

		if(lvr){
			url=lvr;
			if(!opts || !opts.width || !opts.height){
				var img=new Image();
				img.onload=(function(s){
						return function(){s.lever(false, {width:this.width+'px',height:this.height+'px'});};
					})(self);
				img.src=lvr;
			}else{
				opts.backgroundImage='url('+lvr+')';
				opts.width=opts.width||opts.height||'10px';
				opts.height=opts.height||opts.width||'10px';
			}
		}else{
			opts.backgroundImage='url(http://web.wi-wi.jp/image/slider/lever1.png)';
			opts.width='20px';
			opts.height='20px';
		}
		for(var k in opts){
			_lever.style[k]=opts[k];
		}
		while(_frame.firstChild)_frame.removeChild(_frame.firstChild);
		_frame.appendChild(_lever);
	}

	var sz_l=Size(_lever);
//実際にはこの時点のmaxX、maxYは使われない
	_range.maxX=_limit.right=sz_f.width-sz_l.width;
	_range.maxY=_limit.bottom=sz_f.height-sz_l.height;
	
	_center.x=sz_l.width*.5;
	_center.y=sz_l.height*.5;
	
	_limit.top=0;
	_limit.left=0;
	
	_Slider.push(self);
	_Slider.AddEvent(_frame, 'mousedown', _Slider.mdown, false);

	delete p;
	delete sz_f;
	delete sz_l;
	
	/****************/
	// set callback function
	/****************/
	this.callback=function(f){
		_callback=f;
		return this;
	};//callback
	
	/****************/
	// フレーム設定
	/****************/
	this.frame=function(url, opts){
		if(url)
			_frame.style.backgroundImage='url('+url+')';
			
		if(opts){
			for(var k in opts){
				_frame.style[k]=opts[k];
			}
			if(opts.width!=undefined ||opts.height!=undefined){
				var sz_l=Size(_lever);
				var sz_f=Size(_frame);
				_limit.right=sz_f.width-sz_l.width;
				_limit.bottom=sz_f.height-sz_l.height;
				delete sz_l;
				delete sz_f;
			}
		}
		return this;
	};//frame

	/****************/
	// レバー設定
	/****************/
	this.lever=function(url, opts){
		if(url)
			_lever.style.backgroundImage='url('+url+')';
		if(opts){
			for(var k in opts){
				_lever.style[k]=opts[k];
			}
			
			if(opts.width!=undefined ||opts.height!=undefined){
				var sz_l=Size(_lever);
				var sz_f=Size(_frame);
				_limit.right=sz_f.width-sz_l.width;
				_limit.bottom=sz_f.height-sz_l.height;
				delete sz_l;
				delete sz_f;
			}
		}
	
		return this;
	};//lever

	/****************/
	// フレームの基準点
	/****************/
	this.base=function(xy){
		if(xy.y===0)
			_base.y=0;
		else if(xy.y=='center')
			_base.y=parseInt(Size(_frame).height*.5);
		else
			_base.y=isNaN(parseInt(xy.y))?0:parseInt(xy.y);
		
		if(xy.x===0)
			_base.x=0;
		else if(xy.x=='center')
			_base.x=parseInt(Size(_frame).width*.5);
		else
			_base.x=isNaN(parseInt(xy.x))?0:parseInt(xy.x);


		if(!_range.r)
			_range.maxX=Size(_frame).width-_base.x;
		if(!_range.b)
			_range.maxY=Size(_frame).width-_base.y;
		
		_lpos.x=_base.x-_center.x;
		_lpos.y=_base.y-_center.y;
		Limit();
		Move();
		
		return this;
	};//base
	
	/****************/
	// レバーの基準点
	/****************/
	this.center=function(xy){
		if(xy.y==undefined)
			;
		else if(xy.y===0)
			_center.y=0;
		else if(xy.y=='center')
			_center.y=parseInt(Size(_lever).height*.5);
		else
			_center.y=isNaN(parseInt(xy.y))?0:parseInt(xy.y);

		if(xy.x==undefined)
			;
		else if(xy.x===0)
			_center.x=0;
		else if(xy.x=='center')
			_center.x=parseInt(Size(_lever).width*.5);
		else
			_center.x=isNaN(parseInt(xy.x))?0:parseInt(xy.x);
		return this;
	};//center
	
	/****************/
	// スライダー値のx方向、y方向を反転させる
	/****************/
	this.reverse=function(o){
		if(o.x!=undefined)
			_reverse.x=!!o.x;
		if(o.y!=undefined)
			_reverse.y=!!o.y;

		return this;
	};//reverse

	/****************/
	// minの値をx、y方向の最小値にマッピング
	/****************/
	this.min=function(r){
		if(r.x!=undefined){
			_range.minX=r.x;
			_range.l=true;
		}
		if(r.y!=undefined){
			_range.minY=r.y;
			_range.t=true;
		}
		if(r.d!=undefined){
			_range.minD=r.d;
			_range.n=true;
		}
		return this;
	};//min

	/****************/
	// maxの値をx、y方向の最大値（width、height）にマッピング
	// maxの値を含める
	/****************/
	this.max=function(r){
		if(r.x!=undefined){
			_range.maxX=r.x;
			_range.r=true;
		}
		if(r.y!=undefined){
			_range.maxY=r.y;
			_range.b=true;
		}
		if(r.d!=undefined){
			_range.maxD=r.d;
			_range.d=true;
		}
		return this;
	};//max

	/****************/
	//
	/****************/
	this.range=function(r){
		if(r.minX!=undefined)
			self.min({x:r.minX});
		if(r.minY!=undefined)
			self.min({y:r.minY});
		if(r.maxX!=undefined)
			self.max({x:r.maxX});
		if(r.maxY!=undefined)
			self.max({y:r.manY});
		if(r.minD!=undefined)
			self.min({d:r.minD});
		if(r.maxD!=undefined)
			self.max({d:r.manD});
		return this;
	}
	
	/****************/
	// 12時方向がデフォルト、時計回りに360度で指定。
	// default: 0
	/****************/
	this.aspect=function(a){
		a=parseFloat(a);
		if(isNaN(a))
			return this;
		while(a>360)
			a-=360;
		while(a<0)
			a+=360;
		_aspect=a;
		return this;
	};//aspect

	/****************/
	// true: 時計回り
	// false: 反時計回り
	// default: true;
	/****************/
	this.direction=function(flg){
		_direction=!!flg;
		return this;
	};//direction

	/****************/
	// true: _baseからの距離をピクセルで計算
	// false: _baseからの距離を_rangeで計算
	// default: true
	/****************/
	this.distance=function(flg){
		_distance=!!flg;
		return this;
	};//distance

	/****************/
	this.getValue=function(){
		var minX=_range.l?_range.minX:_limit.left-_base.x;
		var maxX=_range.maxX;
		var minY=_range.t?_range.minY:_limit.top-_base.y;
		var maxY=_range.maxY;
		
		// とりあえずスピード対策
		var bsX=_base.x;
		var bsY=_base.y;
		
		var pX=_lpos.x+_center.x;
		var pY=_lpos.y+_center.y;
		var lX=_lpos.x;
		var lY=_lpos.y;
		
		var rvX=_reverse.x;
		var rvY=_reverse.y;

		// 角度、一時変数
		var angle=0;

		// 戻り値
		var val={
				x:0, //x値
				y:0, //y値
				a:0, angle:0, //angle: aspect方向からdirection向きの角度
				d:0, distnce:0, //distance: baseからの距離（px）
				ID: ID
			};//valt

		// baseがlimitの外か内か
		var limX= (bsX < _limit.left || _limit.right < bsX);
		var limY= (bsY < _limit.top || _limit.bottom < bsY );

		// レバーがbaseより左か右か、reverse反転
		// plsが真の時はmax側
		var plsX= rvX?(pX <= bsX):(bsX <= pX );
		var plsY= rvY?(pY <= bsY):(bsY <= pY );

		// レバーポジション _baseからピクセル距離
		var x = Math.abs( (rvX) ? ( (limX)?_limit.right:bsX )-pX  : pX-bsX- ( (limX)?_limit.left:0) );
		var y = Math.abs( (rvY) ? ( (limY)?_limit.bottom:bsY )-pY : pY-bsY- ( (limY)?_limit.top:0)  );

		// フレームサイズ、_baseから_limitまで、ピクセル
		var width = Math.abs( ((bsX==0) ? _limit.right-_limit.left : (plsX)?_limit.right-bsX+_center.x:bsX-_limit.left-_center.x) );
			if(width<1)
				width=1; //zero-devide対策
		var height = Math.abs( ((bsY==0)? _limit.bottom-_limit.top : (plsY)?_limit.bottom-bsY+_center.y : bsY-_limit.top-_center.y) );
//		var height = Math.abs( ((bsY==0)? _limit.bottom-_limit.top : (rvY)? (plsY)?bsY-_limit.top:_limit.bottom-bsY : (plsY)?_limit.bottom-bsY:bsY-_limit.top) );
			if(height<1)
				height=1; //zero-devide対策

		// スライダー値範囲、_baseを0としてmaxまたはminまでの絶対値
		var rgX = Math.abs( (rvX)? (bsX==_limit.right)?Math.abs(maxX)-Math.abs(minX):(plsX)?maxX:minX : (bsX==0)?Math.abs(maxX)-Math.abs(minX):(plsX)?maxX:minX );
		var rgY = Math.abs( (rvY)? (bsY==_limit.bottom)?Math.abs(maxY)-Math.abs(minY):(plsY)?maxY:minY : (bsY==0)?Math.abs(maxY)-Math.abs(minY):(plsY)?maxY:minY );

		val.x=Math.ceil(x*rgX/width);
		val.y=Math.ceil(y*rgY/height);

		if(_step.x>1)
			val.x=parseInt(val.x/_step.x);
		
		if( minX<0 && !plsX || maxX<0 && plsX)
			val.x*=-1;

		if(_step.y>1)
			val.y=parseInt(val.y/_step.y);
		
		if( minY<0 && !plsY || maxY<0 && plsY)
			val.y*=-1;

		// distance
		if(_distance)
			val.d=val.distance=Round(Math.sqrt(Math.pow(val.x,2)+Math.pow(val.y,2)),2);
		else
			val.d=val.distance=Round(Math.sqrt(Math.pow(x,2)+Math.pow(y,2)),2);
		
		// angle
		var bX=pX-bsX; //レバー位置、ピクセル
		var bY=pY-bsY; //レバー位置、ピクセル

		// レバーベクトルのaspect
		var deg=(!bX && !bY)?0:Math.acos(bX/Math.sqrt(bX*bX+bY*bY))/Math.PI*180.0;

		if(!rvY && bY<0 || rvY && bY>0)
			deg=360-deg;

		// 基準を12時方向に変換
		deg=(deg<90)?90-deg:450-deg; //360-deg+90
		if(deg<0)
			deg+=360;
		else if(deg>=360)
			deg-=360;

		// if(deg==_aspect)angle=0;
		if(deg!=_aspect){
			
			if(_direction){
				angle=deg-_aspect;
			}else{
				if(90>deg){
					angle=_aspect-deg;
				}else{
					angle=360-deg+_aspect;
				}
			}
			if(angle<0)
				angle+=360;
			else if(angle>=360)
				angle-=360;
		}

		// 小数点以下第２位で四捨五入（直近の最大値）
		val.a=val.angle=Round(angle,2);
		
		return val;
	};//getValue
	
	/****************/
	//
	/****************/
	this.setValue=function(x, y){
		if(x!=null)_lpos.x=parseInt(x);
		if(y!=null)_lpos.y=parseInt(y);
		Limit();
		Move();
		return this;
	};//setValue
	
	/****************/
	//
	/****************/
	this.getFrame=function(){
		return _frame;
	};//getFrame
	
	/****************/
	//
	/****************/
	this.getLever=function(){
		return _lever;
	};//getLever
	
	/****************/
	// マウスボタンを放しているときにレバーを移動させる
	// rev=trueの時はマウスボタンを押すとレバーが停止する
	/****************/
	this.always=function(rev){
		rev=rev?1:0;
		_always=1+rev;
		_Slider.always(self);
		return this;
	};//always
	
	/****************/
	// prepare to start D&D
	/****************/
	this.start=function(){
		var p=Pos(_frame);
		_fpos.x=p.left;
		_fpos.y=p.top;
		_ondrag=true;
		delete p;
		return this;
	};//start

	/****************/
	// to stop D&D
	/****************/
	this.end=function(){
		_ondrag=false;
		return this;
	};//end
	
	/****************/
	//
	/****************/
	this.limit=function(o){
		if(!o)
			return this;
		if(o.top!=undefined){
			_limit.top=o.top;
		}
		if(o.left!=undefined){
			_limit.left=o.left;
		}
		if(o.right!=undefined){
			_limit.right=o.right;
			if(!_range.r)
				_range.maxX=_limit.right;
		}
		if(o.bottom!=undefined){
			_limit.bottom=o.bottom;
			if(!_range.b)
				_range.maxY=_limit.bottom;
		}
		if(o.distance!=undefined){
			_limit.distance=o.distance;
			if(!_range.d)
				_range.maxD=_limit.distance;
		}
		if(o.near!=undefined){
			_limit.near=o.near;
			if(!_range.n)
				_range.minD=_limit.near;
		}
		if(o.arc!=undefined){
			_limit.arc=o.arc;
		}

		Limit();
		Move();
		return this;
	};//limit

	/****************/
	// step、devideが2以上の時に、レバーを飛び飛びで移動させるか
	/****************/
	this.stepmove=function(o){
		_stepmove=(arguments.length==1)?!!arguments[0]:!_stepmove;
		return this;
	};//stepMove

	/****************/
	// スライダー枠を等分割して、stepを指定
	// マイナスの分割数は無視
	/****************/
	this.devide=function(o){
		var s={
			x:undefined,
			y:undefined
		};
		if(!!o.x && o.x>0){
			var w=_limit.right-_limit.left;
			s.x=parseInt(w/o.x);
			if(isNaN(s.x))
				s.x=undefined;
			else if(s.x<1)
				s.x=1;
			else if(s.x>w)
				s.x=w;
			delete w;
		}
		if(!!o.y && o.y>0){
			var h=_limit.bottom-_limit.top;
			s.y=parseInt(h/o.y);
			if(isNaN(s.y))
				s.y=undefined;
			else if(s.y<1)
				s.y=1;
			else if(s.y>h)
				s.y=h;
			delete h;
		}
		this.step(s);
		delete s;
		return this;
	};//devide

	/****************/
	// width:100 step:10の時に 0-10を返すか0-100を返すか
	// true: 0, 1, 2, 3, ..., 9, 10
	// false: 0, 10, 20, 30 ..., 90, 100
	// マイナスのステップ数は無視
	/****************/
	this.step=function(o){
		if(!!o.x && o.x>0)
			_step.x=o.x;
		if(!!o.y && o.y>0)
			_step.y=o.y;
		return this;
	};//step

	/****************/
	//
	/****************/
	this.drag=function(e, b){
		if(!_ondrag && !_always || _always==2 && b)
			return false;

		SetPos(e);
		Limit();
		Move();
		if(_callback)
			_callback(self.getValue());
		
		return false;
	};//drag

	/****************/
	//
	/****************/
	this.drop=function(e){
		if(!_ondrag)
			return false;

		self.end();
		return false;
	};//drop

	/****************/
	this.getPos=function(el){
		return (!el)?Pos(_frame):Pos(_lever);
	};//drop

	/****************/
	function Move(){

		if(_stepmove){
			var t=_lpos.x%_step.x;
			_lpos.x=_lpos.x-( (t>_step.x/2)?t-_step.x:t );

			t=_lpos.y%_step.y;
			_lpos.y=_lpos.y-( (t>_step.y/2)?t-_step.y:t );
		}
		_lever.style.left=_lpos.x+'px';
		_lever.style.top =_lpos.y+'px';
		return true;
	}//Move
	
	/****************/
	function Limit(){

		if(_limit.distance!==false || _limit.near!==false){

			var x=_lpos.x-_base.x;
			var y=_lpos.y-_base.y;
	
			var d=Round(Math.sqrt(x*x+y*y),2);
			var deg=(!x&!y)?0:Math.acos(x/Math.sqrt(x*x+y*y))/Math.PI*180.0;
			var rad=2*Math.PI*(deg/360);

			if(_limit.distance!==false && _limit.distance<d){
				if(y<0)
					_lpos.y=_base.y-_limit.distance*Math.sin(rad);
				else
					_lpos.y=_base.y+_limit.distance*Math.sin(rad);
				_lpos.x=_limit.distance*Math.cos(rad)+_base.x;

			}
			if(_limit.near!==false && d<_limit.near){
				if(y<0)
					_lpos.y=_base.y-_limit.near*Math.sin(rad);
				else
					_lpos.y=_base.y+_limit.near*Math.sin(rad);
				_lpos.x=_limit.near*Math.cos(rad)+_base.x;
			}
			_lpos.x-=_center.x;
			_lpos.y-=_center.y;
		}else{
			if(_lpos.x<_limit.left)
				_lpos.x=_limit.left;
			else if(_limit.right<_lpos.x)
				_lpos.x=_limit.right;
			if(_lpos.y<_limit.top)
				_lpos.y=_limit.top;
			else if(_limit.bottom<_lpos.y)
				_lpos.y=_limit.bottom;
		}

		return _lpos;
	}//Limit
	
	/****************/
	function SetPos(e){
		if(e && e.sliderx!=undefined) {
		// from _Slider
			_lpos.x=e.sliderx;
			_lpos.y=e.slidery;
		}else if(e.pageX) {
		// gecko, webkit, presto, etc
			_lpos.x=e.pageX-_fpos.x;
			_lpos.y=e.pageY-_fpos.y;
		}else{
		// trident
			var sLeft=document.documentElement.scrollLeft||document.body.scrollLeft||0; //by compatmode
			var sTop=document.documentElement.scrollTop||document.body.scrollTop||0; // by compatmode
			var elm=e.srcElement;
			if(elm==_frame || elm==_lever){
			//  スライダー内部
			// event.x ie8 standard
				_lpos.x=event.x||e.clientX-_fpos.x+sLeft||0;
				_lpos.y=event.y||e.clientY-_fpos.y+sTop||0;
			}else{
			// スライダー外部
				var x=e.clientX+sLeft||0;
				var y=e.clientY+sTop||0;
				_lpos.x=x-_fpos.x;
				_lpos.y=y-_fpos.y;
			}
		}
	}//SetPos


	// via motel
	/****************/
	//
	/****************/
	function Pos(el,opt){
	var _pos={left:0,top:0};
	var isMac=(navigator.platform.toLowerCase().indexOf("mac")!=-1);
	if(!el)return _pos;
		if(el.getBoundingClientRect){
			var t=document.body.scrollTop||document.documentElement.scrollTop||0;
			var l=document.body.scrollLeft||document.documentElement.scrollLeft||0;
			t=parseInt(t);
			l=parseInt(l);
			var rect=el.getBoundingClientRect();
			_pos.top=parseInt(rect.top+t);
			_pos.left=parseInt(rect.left+l);

		}else if(document.getBoxObjectFor){
			var rect=document.getBoxObjectFor(el);
			_pos.top=rect.y;
			_pos.left=rect.x;

		}else{
			while(el){
				_pos.left+=parseInt(el.offsetLeft);
				_pos.top+=parseInt(el.offsetTop);
				el=el.offsetParent;
			}
			if (!isMac){
			_pos.left-=document.body.offsetLeft; // html margin-left
			_pos.top-=document.body.offsetTop; // html margin-top
			}

		}
		return _pos;
	}//Pos
	
	// via motel
	/****************/
	//
	/****************/
	function GetStyle(el, prop){
		if(!!el.style && el.style[prop]){
			return el.style[prop];
		}else if(document.defaultView && document.defaultView.getComputedStyle){
			prop=prop.replace(/([A-Z])/g, "-$1");
			prop=prop.toLowerCase();
			return document.defaultView.getComputedStyle(el,"").getPropertyValue(prop);
		}else if(el.currentStyle){
			return el.currentStyle[prop];
		}else{
			return null;
		}
	}//getstyle

	/****************/
	//
	/****************/
	function Size(el){
		var sz={width:0,height:0};
		if(!el)return sz;
		if(el.getBoundingClientRect){ //trident, presto
			var rect=el.getBoundingClientRect();
			sz.width=rect.right-rect.left;
			sz.height=rect.bottom-rect.top;
		}else if(document.getBoxObjectFor){ // gecko, webkit
			var rect=document.getBoxObjectFor(el);
			sz.width=rect.width;
			sz.height=rect.height;
		}else{
			sz.width=el.clientWidth;
			sz.height=el.clientHeight;
		}
		return sz;
	}//Size
	/****************/
	//
	/****************/
	function ArrayIndexOf(s, ary){
		for(var i=0;i<ary.length;i++)
			if(ary[i]==s)
				return i;
		return -1;
	}//ArrayIndexOf
	/****************/
	//
	/****************/
	function Round(num, len){
		var ret=''+Math.floor(num);
		if(len>0)
			ret+='.';
		for(var i=0,num=(num-Math.floor(num))*10;i<len;i++){
			ret+=''+Math.floor(num);
			num=(num-Math.floor(num))*10;
		}
		return ret;
	}//Round

/**********************/
};//


/****************/
//
/****************/
var _Slider;
if(!_Slider){
_Slider=new (function(){
	var _slds=[];
	var _sld=null;
	var _aslds=[];
	var _mdown=false;

	/****************/
	//
	/****************/
	this.push=function(sl){
		_slds.push(sl);
	};//push

	/****************/
	//
	/****************/
	this.always=function(sl){
		_aslds.push(sl);
		return _aslds.length;
	}
	
	/****************/
	//
	/****************/
	this.mdown=function(e){
		_mdown=true;
		var tar=e?e.target||event.srcElement:event.srcElement;
		for(var i=0;i<_slds.length;i++){
			if(_slds[i].getLever()==tar || _slds[i].getFrame()==tar){
				_sld=_slds[i];
				break;
			}
		}
		if(!_sld)
			return true;
		
		_sld.start();
		_sld.drag(e, _mdown);
		return false;
	};//mdown
	/****************/
	//
	/****************/
	this.start=function(o, c, b){
		_sld=o;
	};
	/****************/
	//
	/****************/
	this.drag=function(e){
		var isA=false;
		if(_aslds.length){
			var x,y;
			if(e&&e.pageX!==undefined){
				x=e.pageX;
				y=e.pageY;
			}else{
				var sLeft=document.documentElement.scrollLeft||document.body.scrollLeft||0;//by compatmode
				var sTop=document.documentElement.scrollTop||document.body.scrollTop||0;
				x=e.clientX+sLeft||0;
				y=e.clientY+sTop||0;
			}
			for(var i=0,p,s;s=_aslds[i];i++){
				p=s.getPos();
				_aslds[i].drag({sliderx:x-p.left,slidery:y-p.top}, _mdown);
				//_aslds[i].drag({sliderx:x,slidery:y});
				if(!isA && _aslds[i]==_sld)
					isA=true;
			}
		}
		
		if(!_sld || isA)
			return true;
		
		_Slider.StopEvent(e);
		_sld.drag(e, _mdown);
		return false;
	};//drag

	/****************/
	//
	/****************/
	this.drop=function(e){
		_mdown=false;
		if(!_sld)
			return false;
		_Slider.StopEvent(e);
		_Slider.Deselect();
		_sld.drop(e);
		
		_sld=null;
		return false;
	};//drop

	/****************/
	//
	/****************/
	this.AddEvent;
	this.RemoveEvent;

	/****************/
	//
	/****************/
	this.StopEvent=function(e){
		if(e && e.stopPropagation){
			e.stopPropagation();
			e.preventDefault();
		}
		if(window.event){
			window.event.returnValue=null;
			window.event.cancelBubble=true;
		}
	};//StopEvent
	
}//function
);//new

if(window.addEventListener){
	_Slider.AddEvent=function(elm, handler, func, r){
		return elm.addEventListener(handler, func, r);
	};
	_Slider.RemoveEvent=function(elm, handler, func, r){
		return elm.removeEventListener(handler, func, r);
	};
}else if(window.attachEvent){
	_Slider.AddEvent=function(elm, handler, func, r){
		return elm.attachEvent('on'+handler, func);
	};
	_Slider.RemoveEvent=function(elm, handler, func, r){
		return elm.dettachEvent('on'+handler, func);
	};
}else{
	_Slider.AddEvent=function(elm, handler, func, r){
		return null;
	};
	_Slider.RemoveEvent=function(elm, handler, func, r){
		return null;
	};
}

if(window.getSelection){
	_Slider.Deselect=function(){
		var selection = window.getSelection();
		selection.collapse(document.body, 0);
	}
}else if(document.selection && document.selection.createRange){
	_Slider.Deselect=function(){
//		var selection = document.selection.createRange();
//		selection.setEndPoint("EndToStart", selection);
//		selection.select();
	}
}




if(document.body){
	_Slider.AddEvent(document.body, 'mousemove', _Slider.drag, false);
	_Slider.AddEvent(document.body, 'mouseup', _Slider.drop, false);
}else{
	_Slider.AddEvent(window, 'load', function(){
		_Slider.AddEvent(document.body, 'mousemove', _Slider.drag, false);
		_Slider.AddEvent(document.body, 'mouseup', _Slider.drop, false);
		}, false);
}

}//if(!_Slider)



