
var dragObject = {
	selectedObject : null,
	offsetX : 0,
	offsetY : 0,

	init : function() {
		addEvent(getEl('dragBox'), "mousedown", dragObject.startDrag, false);
	},

	startDrag : function(e) {
		if (isIE) e = dragObject.fixEvent(e);
		var t = dragObject.selectedObject = e.target;

		// in case event target is nested in draggable container
		while ((t.className != "draggable") && (t.parentNode))
			t = dragObject.selectedObject = t.parentNode;

		// Make ColorBox show above all other elements
		t.style.zIndex = 10;

		// Calculate offset of mousedown within draggable element
		// Use this instead of e.layerX/Y if primary click-element is contained within t!
		// (e.pageX ? e.pageX : e.clientX): Finds distance from mouse click to page left
		// findPosX(t.id): Finds distance from element (dragBox) to page left
		dragObject.cursorOffsetX = (e.pageX ? e.pageX : e.clientX) - findPosX(t.id);
		dragObject.cursorOffsetY = (e.pageY ? e.pageY : e.clientY) - findPosY(t.id);

		if (window.event) {
			e.cancelBubble = true;
			e.returnValue = false;
		} else {
			e.stopPropagation();
			e.preventDefault();
		}

		addEvent(document, "mousemove", dragObject.dragMe, false);
		addEvent(document, "mouseup", dragObject.dropMe, false);

		return false;
	},

	dragMe : function(e) {
		var e = e || window.event;

		dragObject.selectedObject.style.left = dragObject.getX(e) - dragObject.cursorOffsetX + 'px';
		dragObject.selectedObject.style.top = dragObject.getY(e) - dragObject.cursorOffsetY + 'px';

		if (window.event) {
			e.cancelBubble = true;
			e.returnValue = false;
		} else {
			e.stopPropagation();
			e.preventDefault();
		}

		return false;
	},

	dropMe : function(e) {
		var e = e || window.event;

		// Restore original zIndex
		dragObject.selectedObject.style.zIndex = 1;

		removeEvent(document, "mousemove", dragObject.dragMe, false);
		removeEvent(document, "mouseup", dragObject.dropMe, false);
		dragObject.selectedObject = null;
	},

	// Local Helpers

	getX : function(e) {
		// Check for W3C position, then the IE position
		return e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));
	},

	getY : function(e) {
		// Check for W3C position, then the IE position
		return e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
	},

	fixEvent : function(e)  {
		// Make all the IE-centric parameters be W3C-like
		e = window.event;
		e.target = e.srcElement;
		e.layerX = e.offsetX; // Cursor position relative to the element; W3C/IE
		e.layerY = e.offsetY; // Cursor position relative to the element; W3C/IE
		return e;
	}
};

