//<![CDATA[
var savedTarget = null;
var dragOK = false;
var dragXoffset = 0;
var dragYoffset = 0;
var mousemoveHandler = null;
var mouseupHandler = null;
var orgCursor = null;

function moveHandler(e) {
	if (e.button <= 1 && dragOK) {
		savedTarget.style.left = e.clientX - dragXoffset + 'px';
		savedTarget.style.top = e.clientY - dragYoffset + 'px';
		return false;
	}
}

function cleanup(e) {
	if (savedTarget != null) {
		if (mousemoveHandler != null) {
			Event.stopObserving(document, 'mousemove', mousemoveHandler);
			mousemoveHandler = null;
		}
		if (mouseupHandler != null) {
			Event.stopObserving(document, 'mouseup', mouseupHandler);
			mouseupHandler = null;
		}
		savedTarget.style.cursor = orgCursor;
		savedTarget = null;
	}
	dragOK = false;
}

function dragHandler(e) {
	var htype = '-moz-grabbing';
	if (Prototype.Browser.IE)
		htype = 'move';
	
	var target = e.target != null ? e.target : e.srcElement;
	if ($(target).hasClassName('moveable')) {
		savedTarget = target;
		dragOK = true;
		orgCursor = (target.style.cursor == null) ? 'normal' : target.style.cursor;
		target.style.cursor = 'move';
		var position = target.cumulativeOffset();
		dragXoffset = e.clientX - position.left;
		dragYoffset = e.clientY - position.top;
		mousemoveHandler = moveHandler.bindAsEventListener();
		mouseupHandler = cleanup.bindAsEventListener();
		Event.observe(document, 'mousemove', mousemoveHandler);
		Event.observe(document, 'mouseup', mouseupHandler);
		return false;
	}
}

var dragHandlerEvent = dragHandler.bindAsEventListener();
Event.observe(document, 'dom:loaded', function() {
	Event.observe(document, 'mousedown', dragHandlerEvent);
});

Event.observe(document, 'unload', function() {
	Event.stopObserving(document, 'mousedown', dragHandlerEvent);
});

//]]>