//───────────────────────────────────────────
//
//(C) Nihon Computer Graphic Co.,Ltd.
//
//───────────────────────────────────────────

// Slider オブジェクト( 関数 )

function Slider(div,dir,len,min,max,pos,
                    stcb,stcd,mvcb,mvcd,edcb,edcd){
  var ctrl=ech_attachMouseDrag(div,
             slideStart,null, slideMove,null, slideEnd,null,
             null,null);
  var x=getDivLeft(div), y=getDivTop(div);
  ctrl.dir = dir; ctrl.len = len;
  ctrl.min = min; ctrl.max = max;
  if(dir==0){   // horizontal
    ctrl.minX = x-Math.abs((pos-min)*len/(max-min));
    ctrl.maxX = x+Math.abs((max-pos)*len/(max-min));
    ctrl.minY = y; ctrl.maxY = y;
  } else {      // vertical
    ctrl.minX = x; ctrl.maxX = x;
    ctrl.minY = y-Math.abs((pos-min)*len/(max-min));
    ctrl.maxY = y+Math.abs((max-pos)*len/(max-min));
  }
  ctrl.slideStartCB=stcb; ctrl.slideStartCD=stcd;
  ctrl.slideMoveCB =mvcb; ctrl.slideMoveCD =mvcd;
  ctrl.slideEndCB  =edcb; ctrl.slideEndCD  =edcd;
  ctrl.getPos      = getSliderPos;
  ctrl.slideTo     = slideTo;
  ctrl.slideBy     = slideBy;
  return ctrl;
}
// 現在位置取り出しメソッド
function getSliderPos(){
  return this.dir==0?
    ((getDivLeft(this.div)-this.minX)*(this.max-this.min)
     /this.len+this.min
    ):
    ((getDivTop (this.div)-this.minY)*(this.max-this.min)
     /this.len+this.min
    );
}
// 位置変更メソッド( 絶対値 )
function slideTo(pos,norep){
  if(this.max>this.min){
    if(pos>this.max) pos=this.max;
    if(pos<this.min) pos=this.min;
  }
  else {
    if(pos>this.min) pos=this.min;
    if(pos<this.max) pos=this.max;
  }
  var x=(this.maxX-this.minX)*(pos-this.min)
       /(this.max-this.min)+this.minX;
  var y=(this.maxY-this.minY)*(pos-this.min)
       /(this.max-this.min)+this.minY;
  if(x<this.minX) x=this.minX;
  if(x>this.maxX) x=this.maxX;
  if(y<this.minY) y=this.minY;
  if(y>this.maxY) y=this.maxY;
  if(x!=getDivLeft(this.div)||y!=getDivTop(this.div)){
    moveDivTo(this.div,x,y);
    if((arguments<2 || !norep) && this.slideMoveCB)
      this.slideMoveCB(this,this.slideMoveCD,pos);
  }
}
// 位置変更メソッド( 相対値 )
function slideBy(pos,norep){
  this.slideTo(this.getPos()+pos,norep);
}
// ハンドラ( ドラッグ開始 )
function slideStart(ctrl,client){
  if(ctrl.slideStartCB)
    ctrl.slideStartCB(ctrl,
           ctrl.slideStartCD,ctrl.getPos());
}
// ハンドラ( ドラッグ )
function slideMove(ctrl,client){
	var cpX, cpY;
	var ccX, ccY;
	if( (4 == _dom)&&( _safari ) ){
		cpX = ctrl.pageX - window.scrollX;
		cpY = ctrl.pageY - window.scrollY;
		ccX = ctrl.curX - window.scrollX;
		ccY = ctrl.curY - window.scrollY;
	}
	else{
		cpX = ctrl.pageX;
		cpY = ctrl.pageY;
		ccX = ctrl.curX;
		ccY = ctrl.curY;
	}
	var x = ox = getDivLeft(ctrl.div), y = oy = getDivTop(ctrl.div);
	switch(ctrl.dir){
		case 0:          // horizontal
			if(cpX > ctrl.maxX)      x = ctrl.maxX;
			else if(cpX < ctrl.minX) x = ctrl.minX;
			else {
				x += cpX - ccX;
				if(x < ctrl.minX) x = ctrl.minX;
				if(x > ctrl.maxX) x = ctrl.maxX;
			}
			break;
		case 1:          // vertical
			if(cpY > ctrl.maxY)      y = ctrl.maxY;
			else if(cpY < ctrl.minY) y = ctrl.minY;
			else {
				y += cpY - ccY;
				if(y < ctrl.minY) y = ctrl.minY;
				if(y > ctrl.maxY) y = ctrl.maxY;
			}
			break;
	}
	if(ox != x || oy != y){
		moveDivTo(ctrl.div,x,y);
		if(ctrl.slideMoveCB)
		ctrl.slideMoveCB(ctrl,
		ctrl.slideMoveCD,ctrl.getPos());
	}
}
// ハンドラ( ドラッグ終了 )
function slideEnd(ctrl,client){
  if(ctrl.slideEndCB)
    ctrl.slideEndCB(ctrl,ctrl.slideEndCD,ctrl.getPos());
}
//───────────────────────────────────────────
//
//	ver 1.00
//	ver 2.00
//	ver 2.10
//
//───────────────────────────────────────────
