// copyright jeff@thelimit.com 2008

document.onmousemove=mouseMove;
document.onmouseup=mouseUp;
document.onmousedown=mouseDown;

var dragObject  = null;
var mouseOffset = null;
var target_classname=null;
var target=null;
var target_offset_x;
var target_offset_y;
var re_drag = /drag/i;

function mouseDown(e){
e = e || window.event;
target=e.target || e.srcElement;
target_classname=target.className;

if((! re_drag.test(target_classname))&&(target.nodeName == 'DIV')){
target = target.parentNode;
target_classname=target.className;
}

var docPos = getPosition(target);
var mousePos = mouseCoords(e);
target_offset_x=mousePos.x - docPos.x;
target_offset_y=mousePos.y - docPos.y;
}


function getPosition(target){
	var h = target.offsetHeight;
	var w = target.offsetWidth;
	var left = 0;
	var top  = 0;
	while (target.offsetParent){
		left += target.offsetLeft;
		top  += target.offsetTop;
		target = target.offsetParent;
	}
	left += target.offsetLeft;
	top  += target.offsetTop;
	return {x:left, y:top,width:w,height:h};
}

function mouseMove(e){
e = e || window.event;
if(re_drag.test(target_classname)){
	var mousePos = mouseCoords(e);
	target.style.position = 'absolute';
	target.style.top = mousePos.y - target_offset_y + 'px';
	target.style.left = mousePos.x - target_offset_x + 'px';
	return false;
	}
}
function mouseUp(){
target=null;
target_classname='';
}


function mouseCoords(ev){
if(ev.pageX || ev.pageY){
	return {x:ev.pageX, y:ev.pageY};
	}
return{x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop};
}


