var Utils = {
    
findPos: function(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

}


var DragHandler = {

	_oElem: null,
	_oHandles: new Object(),

	attach: function(oHandle, oElem) {
	    oHandle.onmousedown = DragHandler._dragBegin;
	    DragHandler._oHandles[oHandle] = oElem;

		return oElem;
	},

	_dragBegin: function(e) {
		var oElem = DragHandler._oElem = DragHandler._oHandles[this];

        var tmp = Utils.findPos(oElem);

		if (isNaN(parseInt(oElem.style.left))) {
		    oElem.style.left = tmp[0]+'px';
		    oElem.style.marginLeft = '0';
		}
		if (isNaN(parseInt(oElem.style.top))) {
		    oElem.style.top = tmp[1]+'px';
		    oElem.style.marginTop = '0';
		}

		e = e ? e : window.event;
		oElem.mouseX = e.clientX;
		oElem.mouseY = e.clientY;

		document.onmousemove = DragHandler._drag;
		document.onmouseup = DragHandler._dragEnd;
		
		return false;
	},

	_drag: function(e) {
		var oElem = DragHandler._oElem;

		var x = parseInt(oElem.style.left);
		var y = parseInt(oElem.style.top);

		e = e ? e : window.event;
		oElem.style.left = x + (e.clientX - oElem.mouseX) + 'px';
		oElem.style.top = y + (e.clientY - oElem.mouseY) + 'px';

		oElem.mouseX = e.clientX;
		oElem.mouseY = e.clientY;

		return false;
	},

	_dragEnd: function() {
		document.onmousemove = null;
		document.onmouseup = null;
		DragHandler._oElem = null;
	}

}
