// The element to drag should always have top and left styles set to values in pixels
// Implementation example:
//<div id="myBox" class="move" style="top: 110px; left: 30px;">
//<div class="titleBar" onmousedown="beginDrag(this.parentNode, event);"></div>
//	myBox<br />
//	test
//</div>
function beginDrag(elementToDrag, event) {
	if (beginDrag.elem) beginDrag.elem.style.zIndex = beginDrag.oldzindex;

	var deltaX = event.clientX - parseInt(elementToDrag.style.left);
	var deltaY = event.clientY - parseInt(elementToDrag.style.top);
	beginDrag.elem = elementToDrag;
	beginDrag.oldzindex = elementToDrag.style.zIndex;
	elementToDrag.style.zIndex = 100;

	if (document.addEventListener) {
		document.addEventListener("mousemove", moveHandler, true);
		document.addEventListener("mouseup", upHandler, true);
	} else if (document.attachEvent) {
		document.attachEvent("onmousemove", moveHandler);
		document.attachEvent("onmouseup", upHandler);
	} else {
		var oldmovehandler = document.onmousemove;
		var olduphandler = document.onmouseup;
		document.onmousemove = moveHandler;
		document.onmouseup = upHandler;
	}
	
	if (event.stopPropagation) event.stopPropagation();
	else event.cancelBubble = true;	
	if (event.preventDefault) event.preventDefault();
	else event.returnValue = true;
	
	function moveHandler(e) {
		if (!e) e = window.event;

		elementToDrag.style.left = (e.clientX - deltaX) + 'px';
		elementToDrag.style.top = (e.clientY - deltaY) + 'px';
	
		if (e.stopPropagation) e.stopPropagation();
		else e.cancelBubble = true;
	}

	function upHandler(e) {

		if (!e) e = window.event;
		if (document.removeEventListener) {
			document.removeEventListener('mousemove', moveHandler, true);
			document.removeEventListener('mouseup', upHandler, true);
		} else if (document.detachEvent) {
			document.detachEvent('onmouseup', upHandler);
			document.detachEvent('onmousemove', moveHandler);

		} else {
			document.onmousemove = oldmovehandler;
			document.onmouseup = olduphandler;
		}
		
		if (e.stopPropagation) e.stopPropagation();
		else e.cancelBubble = true;
	}
	
}