/* Copyright 2009 by Andreas Drewke, all rights reserved to the author */

var windowSelected = undefined;
var windowZIndex = 0;
var windowX = undefined;
var windowY = undefined;

function getWindowWidth() {
	return window.innerWidth == undefined?document.body.offsetWidth:window.innerWidth;
}

function getWindowHeight() {
	return window.innerHeight == undefined?document.body.offsetHeight:window.innerHeight;
}

function centerElement(elementId) {
	var element = document.getElementById(elementId);

	if (element != undefined) {
		var left = (getWindowWidth() - element.offsetWidth) / 2;
		var top = (getWindowHeight() - element.offsetHeight) / 2;
		positionElement(elementId, left, top);
	}
}

function positionElement(elementId, left, top) {
	var element = document.getElementById(elementId);

	if (element != undefined) {

		element.style["left"] = left + "px";
		element.style["top"] = top + "px";
	}
}
  
function createWindow(windowId) {
	document.write("<div id=\"" + windowId + "\"></div>");
	makeWindowFromElement(windowId);
}

function makeWindowFromElement(elementId) {
	var element = document.getElementById(elementId);
	if (element != undefined) {
		element.style["position"] = "absolute";
		element.innerHTML = 
			"<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"border-style: solid; border-color: black; border-width:2px; background-color: black\">" +
			"<tr><th id=\"" + elementId + "_title\" style=\"background-color: darkgray;\"></th></tr>" +
			"<tr><td height=\"1\"></td></tr>" +
			"<tr><td id=\"" + elementId + "_content\" style=\"background-color: lightgray\">" + element.innerHTML + "</td></tr>" +
			"<tr><td height=\"1\"></td></tr>" +
			"<tr><td id=\"" + elementId + "_status\" style=\"background-color: darkgray\"></td></tr>" +
			"</table>";
		addWindowHandler(elementId);
	}
}

function addWindowHandler(windowId) {
	var element = document.getElementById(windowId + "_title");
	if (element != undefined) {
		element.onmousedown = function(event) {
			if (event == undefined) event = window.event;

			if (windowSelected == undefined) {
				var myWindowId = windowId;
				var myElement = document.getElementById(myWindowId);
				windowZIndex += 1;
				myElement.style["z-index"] = windowZIndex;

				var left = myElement.offsetLeft;
				var top = myElement.offsetTop;

				windowX = event.clientX - left;
				windowY = event.clientY - top;

				windowSelected = myWindowId;
 			}
			return false;
		};
	}
}

function setWindowTitle(windowId, titleStr) {
	var element = document.getElementById(windowId + "_title");
	if (element != undefined) element.innerHTML = titleStr;
}

function setWindowStatus(windowId, statusStr) {
	var element = document.getElementById(windowId + "_status");
	if (element != undefined) element.innerHTML = statusStr;
}

function setWindowContent(windowId, contentStr) {
	var element = document.getElementById(windowId + "_content");
	if (element != undefined) element.innerHTML = contentStr;
}

function setWindowPosition(windowId, left, top) {
	positionElement(windowId, left, top);
}

function getWindowLeft(windowId) {
	var element = document.getElementById(windowId);
	return element.offsetLeft;
}

function getWindowTop(windowId) {
	var element = document.getElementById(windowId);
	return element.offsetTop;
}

function getWindowWidth(windowId) {
	var element = document.getElementById(windowId);
	return element.offsetWidth;
}

function getWindowHeight(windowId) {
	var element = document.getElementById(windowId);
	return element.offsetHeight;
}

document.onmousemove = function(event) {
	if (event == undefined) event = window.event;

	var winSelected = windowSelected;
	var winX = windowX;
	var winY = windowY;
	if (winSelected != undefined && winX != undefined && winY != undefined) {
		positionElement(winSelected, event.clientX - winX, event.clientY - winY);
		return false;
	} else {
		return true;
	}
};

document.onmouseup = function(event) {
	if (event == undefined) event = window.event;

	if (windowSelected != undefined) {
		windowSelected = undefined;
		windowX = undefined;
		windowY = undefined;
		return false;
	} else {
		return true;
	}
};
