Aheuh.Drag=Class.create({initialize:function(target,xmin,xmax,ymin,ymax,onMoveFunction){this._target=target;this._mouseOldPos={};this._setLimit(xmin,xmax,ymin,ymax);this.onMoveFunction=onMoveFunction;this.draggable=false;this._targetDown=this.setDraggable.bind(this,true);this._docMouseUp=this.setDraggable.bind(this,false);this._docMouseMove=this._setMove.bindAsEventListener(this);Event.observe(this._target,"mousedown",this._targetDown);Event.observe(document,"mouseup",this._docMouseUp);Event.observe(document,"mousemove",this._docMouseMove)},_setLimit:function(xmin,xmax,ymin,ymax){Aheuh.Axis.each(function(k){this[k.min]=eval(k.min);this[k.max]=eval(k.max);this['target'+[k.max]]=this[k.max]-this._target[k.offsetscale];this._mouseOldPos[k.mouse]=null}.bind(this))},setDraggable:function(draggable){this.draggable=draggable;Aheuh.Axis.each(function(k){this._mouseOldPos[k.mouse]=null}.bind(this))},_setMove:function(e){Aheuh.Axis.each(this._move.bind(this,e))},_move:function(e,k){if(this.draggable){var mouse=Event['pointer'+k.key.toUpperCase()](e);if(this._mouseOldPos[k.mouse]){if(this[k.max]>this[k.min]){var n=this._target[k.offsetpos]-(this._mouseOldPos[k.mouse]-mouse);if(n<this[k.min]){n=this[k.min]}else if(n+this._target[k.offsetscale]>this[k.max]){n=this['target'+[k.max]]}this._target.style[k.pos]=n+"px";Event.SelectionClear();if(this.onMoveFunction){this.onMoveFunction()}}}this._mouseOldPos[k.mouse]=mouse}},reload:function(xmin,xmax,ymin,ymax){this._setLimit(xmin,xmax,ymin,ymax)},kill:function(){Event.stopObserving(this._target,"mousedown",this._targetDown);Event.stopObserving(document,"mouseup",this._docMouseUp);Event.stopObserving(document,"mousemove",this._docMouseMove)}});
