var DragHandler = {
	_oElem: null,
	attach : function(oElem, handler) {
        handler.onmousedown = DragHandler._dragBegin;
        handler.oElem = oElem;
		return oElem;
	},
	_dragBegin: function(e) {
		var oElem = DragHandler._oElem = this.oElem;
        
        oElem.style.left = document.defaultView.getComputedStyle(oElem, null).left;
        oElem.style.top = document.defaultView.getComputedStyle(oElem, null).top;

        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() {
		var oElem = DragHandler._oElem;

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

		document.onmousemove = null;
		document.onmouseup = null;
		DragHandler._oElem = null;
	}
}
