function getPageEventCoords(evt) {
	var coords = {left:0, top:0};
	if (evt.pageX) {
		coords.left = evt.pageX;
		coords.top = evt.pageY;
	} else if (evt.clientX) {
		coords.left = evt.clientX + document.body.scrollLeft - document.body.clientLeft;
		coords.top = evt.clientY + document.body.scrollTop - document.body.clientTop;
		// include html element space, if applicable
		if (document.body.parentElement && document.body.parentElement.clientLeft) {
			var bodParent = document.body.parentElement;
			coords.left += bodParent.scrollLeft - bodParent.clientLeft;
			coords.top += bodParent.scrollTop - bodParent.clientTop;
		}
	}
	return coords;
}

function toggleXWindowDisplay(elemId, evt) {
	var evt = getEvent(evt);
	var elem = document.getElementById(elemId);
	if (elem) {
		elem.style.display = elem.style.display == '' ? 'none' : '';
		var tempTop = getPageEventCoords(evt).top - parseInt(elem.style.height) + 50;
		elem.style.top = tempTop > 0 ? tempTop : 0;
	}
	for (i=0; i<xWindows.length; i++)
		if (xWindows[i].id != elemId)
			document.getElementById(xWindows[i].id).style.display='none';
}

function toggleXWindowRoll(evt) {
	var evt = getEvent(evt);
	var elem = getEventElement(evt);
	setCurrentXWindow(elem);
	var tempContentDiv = document.getElementById(currentXWindow.contentId);
	if (tempContentDiv.style.display == '') {
		tempContentDiv.style.display = 'none';
		currentXWindowDiv.style.height = 20;
	} else {
		tempContentDiv.style.display = '';
		currentXWindowDiv.style.height = 420;
	}
}

function setCurrentXWindow(elem)
{
	if (xWindows)
		for (i=0; i<xWindows.length; i++) {
			var tmpElem = elem;
			while (tmpElem && tmpElem.tagName != 'BODY')
			{
				if (xWindows[i].titleId == tmpElem.id) {
					currentXWindow = xWindows[i];
					currentXWindowDiv = document.getElementById(currentXWindow.id);
					return;
				}
				else
					tmpElem = tmpElem.parentNode;
			}
		}
	currentXWindow = null;
	currentXWindowDiv = null;
}

// defines the xWindow object type
function xWindowType(id, titleId, contentId, xMovable, yMovable) {
	this.id = id;
	this.titleId = titleId;
	this.contentId = contentId;
	this.xMovable = xMovable;
	this.yMovable = yMovable;
}

function xWindowInit() {
	stateDown = false;
	xWindows = new Array();
	document.onmouseup=xWindowMouseUp;
}

function xWindowMouseDown(evt) {
	var evt = getEvent(evt);
	var elem = getEventElement(evt);
	setCurrentXWindow(elem);
	if (currentXWindow) {
		stateDown = true;
		posWStartX = parseInt(currentXWindowDiv.style.left);
		posWStartY = parseInt(currentXWindowDiv.style.top);
		posMStartX = getPageEventCoords(evt).left;
		posMStartY = getPageEventCoords(evt).top;
	}
}

function xWindowMouseUp(evt) {
	stateDown = false;
	currentXWindow = null;
	currentXWindowDiv = null;
}

function xWindowMouseMove(evt) {
	if (stateDown) {
		var evt = getEvent(evt);
		var pageX = getPageEventCoords(evt).left;
		var pageY = getPageEventCoords(evt).top;
		if (currentXWindow.xMovable)
			currentXWindowDiv.style.left = posWStartX + (pageX - posMStartX);
		if (currentXWindow.yMovable)
			currentXWindowDiv.style.top = posWStartY + (pageY - posMStartY);
	}
}

var posWStartX = 0;
var posWStartY = 0;
var posMStartX = 0;
var posMStartY = 0;
var stateDown = false;
var currentXWindow = null;
var currentXWindowDiv = null;	
var xWindows = null;
