var dragObject = new Object();
dragObject.zIndex = 0;



function getElementFromId(elementId) {
	element = null;
	
	if (document.getElementById) {
		element = document.getElementById(elementId);
	}
	else if (document.all) {
		element = document.all[elementId];
	}

	return element;
}

function getCursorPosition(event) {

	var cursorPosition = new Object();
	cursorPosition.x = 0;
	cursorPosition.y = 0;

	// Get the position of the cursor relative to the page
	
	if (window.event) {
		cursorPosition.x = window.event.clientX + document.documentElement.scrollLeft
						+ document.body.scrollLeft;
		cursorPosition.y = window.event.clientY + document.documentElement.scrollTop
						+ document.body.scrollTop;
	}
	else if (event.clientX) {
		cursorPosition.x = event.clientX + window.scrollX;
		cursorPosition.y = event.clientY + window.scrollY;
	}
	
	return cursorPosition;
}

function dragBegin(event, elementId) {

	if (elementId) {
		dragObject.element = getElementFromId(elementId);
	}
	else {
		if (window.event) {
			dragObject.element = window.event.srcElement;
		}
		else if (event.target) {
			dragObject.element = event.target
		}
		
		// If the target element was a text node, use it's parent instead
		if (dragObject.element.nodeType == 3) {
			dragObject.element = dragObject.element.parentNode;
		}
	}
	
	var cursorPosition = getCursorPosition(event);
	
	dragObject.cursorStartX = cursorPosition.x;
	dragObject.cursorStartY = cursorPosition.y;
	dragObject.elementStartX = parseInt(dragObject.element.style.left, 10);
	dragObject.elementStartY = parseInt(dragObject.element.style.top, 10);
	
	if (isNaN(dragObject.elementStartX)) {
		dragObject.elementStartX = 0;
	}
	
	if (isNaN(dragObject.elementStartY)) {
		dragObject.elementStartY = 0;
	}
	
	dragObject.element.style.zIndex = ++dragObject.zIndex;
	
	// Capture mouse events
	if (document.attachEvent) {
		document.attachEvent("onmousemove", drag);
		document.attachEvent("onmouseup", dragEnd);
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	else if (document.addEventListener) {
		document.addEventListener("mousemove", drag, true);
		document.addEventListener("mouseup", dragEnd, true);
		event.preventDefault();
	}
}

function drag(event) {
	
	var cursorPosition = getCursorPosition(event);
	
	dragObject.element.style.left = (dragObject.elementStartX + cursorPosition.x - dragObject.cursorStartX) + "px";
	dragObject.element.style.top = (dragObject.elementStartY + cursorPosition.y - dragObject.cursorStartY) + "px";
	
	if (window.event) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	else if (event.target) {
		event.preventDefault();
	}
	
}

function dragEnd(event) {
	if (document.detachEvent) {
		document.detachEvent("onmousemove", drag);
		document.detachEvent("onmouseup", dragEnd);
	}
	else if (document.removeEventListener) {
		document.removeEventListener("mousemove", drag, true);
		document.removeEventListener("mouseup", dragEnd, true);
	}
}

function hideShowElement(elementId) {

	element = getElementFromId(elementId);
	
	if (element.style.display == "none")
	{
		element.style.display = "block";
	}
	else
	{
		element.style.display = "none";
	}

}

function hideShowConsole(consoleId) {

	element = getElementFromId(consoleId);
	
	if (element.style.display == "none")
	{
		element.style.display = "block";
		// Persist state to session cookie
		writeCookie('isConsoleMinimized', 'false');
	}
	else
	{
		element.style.display = "none";
		writeCookie('isConsoleMinimized', 'true');
	}

}

function showElement(element) {

	element.style.display = "block";
}


function hideElement(element) {

	element.style.display = "none";
}

function getElementHeight(element) {
	if (element) {
		if (element.offsetHeight) {
			return element.offsetHeight;
		}
		else if (element.style.pixelHeight) {
			return element.style.pixelHeight;
		}
	}
}