var Drag = Class.create({
	
	initialize: function (target,xMin,xMax,yMin,yMax,onMoveFunction) {
		this.target = target;
		this.xMin = xMin;
		this.xMax = xMax;
		this.yMin = yMin;
		this.yMax = yMax;
		this.onMoveFunction = onMoveFunction;
		this.targetXMax = xMax-target.offsetWidth;
		this.targetYMax = yMax-target.offsetHeight;	
		this.draggable = false;
		this.targetDown = this.setDraggable.bind(this,true);
		this.targetUp = this.setDraggable.bind(this,false);
		this.docMouseMove = this.move.bindAsEventListener(this);
		this.mouseOldPos = null;
		Event.observe(target,"mousedown",this.targetDown);
		Event.observe(document,"mouseup",this.targetUp);
		Event.observe(document,"mousemove",this.docMouseMove);
	},
	
	setDraggable: function (draggable) {
		this.draggable = draggable;
		this.mouseOldPos = null;
	},
	
	move: function (e) {
		if (this.draggable) {
			
			var xMouse = Event.pointerX(e);
			var yMouse = Event.pointerY(e);
			
			if (this.mouseOldPos) {
				if (this.xMax>this.xMin) {
					var xNew = this.target.offsetLeft-(this.mouseOldPos.xMouse-xMouse);
					if (xNew<this.xMin) { xNew = this.xMin; }
					else if (xNew+this.target.offsetWidth>this.xMax) { xNew = this.targetXMax; }
					this.target.style.left = xNew+"px";
				}
				if (this.yMax>this.yMin) {
					var yNew = this.target.offsetTop-(this.mouseOldPos.yMouse-yMouse);
					if (yNew<this.yMin) { yNew = this.yMin; }
					else if (yNew+this.target.offsetHeight>this.yMax) { yNew = this.targetYMax; }	
					this.target.style.top = yNew+"px";
				}
				Event.SelectionClear();
				if (this.onMoveFunction) { this.onMoveFunction(); }
			}
			
			this.mouseOldPos = {xMouse:xMouse,yMouse:yMouse};
			
		}
	},
	
	reload: function (xMin,xMax,yMin,yMax) {
		this.xMin = xMin;
		this.xMax = xMax;
		this.yMin = yMin;
		this.yMax = yMax;
		this.targetXMax = xMax-this.target.offsetWidth;
		this.targetYMax = yMax-this.target.offsetHeight;
	},
	
	kill: function () {
		Event.stopObserving(target,"mousedown",this.targetDown);
		Event.stopObserving(document,"mouseup",this.targetUp);
		Event.stopObserving(document,"mousemove",this.docMouseMove);
	}

});