var g_sImagePath;
if (g_sImagePath == undefined || g_sImagePath == "")
{
	g_sImagePath = "assets/images/";
}

// drawOverlay()
// =============
function drawOverlay()
{
	document.write('<div id="overlay" style="visibility:hidden;">');
	document.write('<div id="overlayTop" style=""></div>');
	document.write('<div id="overlayMiddle" align="center">');

	// shadow
	//document.write('<table cellspacing="0" cellpadding="10"><tr><td>')
	document.write('<div id="msgPara" align="left" style="color:#64636E; padding:15px; background-color:#ffffff; border-style:solid; border-width:10px; width:400px;">');
	document.write('<table><tr><td valign="top"><img id="msgImage" src="' + g_sImagePath + 'message_box_icon_blank.gif" style="float:left; margin-right:10px;"></td><td valign="top"><span id="messageText" style="padding-top:10px; font-size:0.8em; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">');
	document.write('</span></td></tr></table>');
	document.write('<div align="center" style="clear:both"><button id="msgOkButton" style="margin-top:15px">OK</button> <button id="msgCancelButton" style="margin-top:15px; margin-left:15px;">Cancel</button></div>');
	document.write('</div>');

	// shadow
	//document.write('</td><td width="5" style="background-color:#000000; opacity: .15; filter: alpha(opacity=15);" valign="bottom"></td><tr><td height="5" colspan="2" style="background-color:#000000; opacity: .15; filter: alpha(opacity=15);"></td></tr></table>');

	document.write('</div>');
	document.write('<div id="overlayBottom"></div>');
	document.write('</div>');
};

// truebody()
// ==========
function truebody()
{
	return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

var MSG_COMM = 0; // no buttons, wait to clear
var MSG_SUCCESS = 1; // ok button, tick
var MSG_ERROR = 2; // ok button, cross
var MSG_CONFIRM = 3; // ok, cancel, exclamation mark
var MSG_INFO = 4; // ok button, info

var aMsgColours = ['#8F94A0','#517B34','#AE2F1D','#C99A17'];
var oTimer;
var bFormsEnabled = true;

// showMessage()
// =============
function showMessage(p_nType, p_sText, p_sCallback, p_sArgs)
{
	hideMessage();

	var okButton = 	document.getElementById('msgOkButton')
	var cancelButton = document.getElementById('msgCancelButton');

	if ((p_nType == MSG_COMM) && ((p_sText == undefined) || (p_sText == "")))
	{
		p_sText = "Please wait while Elumos communicates with the server.";
	}

	// set text
	document.getElementById('messageText').innerHTML = p_sText;

	// set border
	document.getElementById('msgPara').style.borderColor = aMsgColours[0];

	// set buttons
	okButton.style.display = (p_nType == MSG_COMM) ? 'none' : 'inline';
	cancelButton.style.display = (p_nType == MSG_CONFIRM) ? 'inline' : 'none';

	var oGraphic = document.getElementById('msgImage');

	oGraphic.src = g_sImagePath + "message_box_icon_blank.gif";

	// set graphic
	switch (p_nType)
	{
		case MSG_COMM:
			debugString = "MSG_COMM"
			oGraphic.src = g_sImagePath + "message_box_icon_comm.jpg";
			break;

		case MSG_SUCCESS:
			debugString = "MSG_SUCCESS"
			oGraphic.src = g_sImagePath + "message_box_icon_success.jpg";
			break;

		case MSG_ERROR:
			debugString = "MSG_ERROR"
			oGraphic.src = g_sImagePath + "message_box_icon_error.jpg";
			break;

		case MSG_CONFIRM:
			debugString = "MSG_CONFIRM"
			oGraphic.src = g_sImagePath + "message_box_icon_confirm.jpg";
			break;

		case MSG_INFO:
			debugString = "MSG_INFO";
			oGraphic.src= g_sImagePath + "message_box_icon_info.jpg";
			break;

		default:
			break;
	}

	if (p_sArgs == undefined)
	{
		p_sArgs = '';
	}

	// Define callback functions

	var sOkCallback = 'hideMessage';
	var sCancelCallback = 'hideMessage';

	if (p_sCallback != undefined)
	{
		if (p_sCallback.indexOf(',') != -1)
		{
			var aCallbacks = p_sCallback.split(',');
			sOkCallback = aCallbacks[0];
			sCancelCallback = aCallbacks[1];
		}
		else
		{
			sOkCallback = p_sCallback;
		}
	}


	okButton.onclick = function ()
	{
		eval('content.' + sOkCallback + '(' + p_sArgs + ')');
	};

	cancelButton.onclick = function ()
	{
		eval('content.' + sCancelCallback + '(' + p_sArgs + ')');
	};

	var nDelay = (p_nType == MSG_COMM) ? 2 : 0;

	displayScreen(nDelay);

	bMessageActive = true;
}

// hideMessage()
// =============
function hideMessage()
{
	document.getElementById('msgImage').src = g_sImagePath + "message_box_icon_blank.gif";

	window.clearTimeout(oTimer);

	hideOverlay();
}

// displayScreen()
// ===============
function displayScreen(p_nDelay)
{
	window.clearTimeout(oTimer);

	var oOverlay = document.getElementById('overlay')
	var oOverlayTop = document.getElementById('overlayTop');
	var oOverlayMiddle = document.getElementById('overlayMiddle');
	var oOverlayBottom = document.getElementById('overlayBottom');
	oOverlay.style.visibility = "visible";

	var docwidth = document.all ? truebody().scrollLeft+truebody().clientWidth : pageXOffset + window.innerWidth-15;
	var windowHeight = document.all ? Math.min(truebody().scrollHeight, truebody().clientHeight) : Math.min(document.body.offsetHeight, window.innerHeight);
	var bodyHeight = document.all ? truebody().scrollHeight : document.body.offsetHeight;
	var windowTop = document.body.scrollTop;

	oOverlay.style.top = '0px';
	oOverlay.style.left = '0px';
	oOverlay.style.height = (bodyHeight)+'px';
	oOverlayTop.style.height = windowTop + ((windowHeight - oOverlayMiddle.offsetHeight) / 2) + 'px';

	// make screen appear invisible
	oOverlayMiddle.style.visibility = 'hidden';

	setFormsEnabled(false);

	oTimer = window.setTimeout('displayMessageBox()', p_nDelay);
}

// displayMessageBox()
// ===================
function displayMessageBox()
{
	window.clearTimeout(oTimer);

	// display message box
	var oOverlayMiddle = document.getElementById('overlayMiddle');
	oOverlayMiddle.style.visibility = 'visible';

	// set focus to button
	var okButton = 	document.getElementById('msgOkButton');
	var cancelButton = document.getElementById('msgCancelButton');

	if (cancelButton.style.display == 'inline')
	{
		cancelButton.focus();
	}
	else if (okButton.style.display == 'inline')
	{
		okButton.focus();
	}
}

// hideOverlay()
// =============
function hideOverlay()
{
	window.clearTimeout(oTimer);

	oOverlay = document.getElementById('overlay');
	oOverlay.style.visibility='hidden';
	oOverlay.style.left= '-2000px';
	oOverlay.height='0px';

	var oOverlayTop = document.getElementById('overlayTop');
	oOverlayTop.style.height = '0px';

	setFormsEnabled(true);
}

// getElementsInDoc()
// ==================
function getElementsInDoc(oDoc, aArray)
{
	aArray.push (oDoc.getElementsByTagName('input'));
	aArray.push (oDoc.getElementsByTagName('select'));
	aArray.push (oDoc.getElementsByTagName('button'));
	// aArray.push (oDoc.getElementsByTagName('a'));
}

// setFormsEnabled()
// =================
function setFormsEnabled(p_bState)
{
	if (bFormsEnabled != p_bState)
	{

		var aAllElements = new Array();

		getElementsInDoc(document, aAllElements);

		document.bSelectEnabled = p_bState;


		// loop through all frames
		var oFrame;
		var oInnerFrame;

		for (var i = 0; i < window.frames.length; i++)
		{
			oFrame = window.frames[i];
			getElementsInDoc(oFrame.document, aAllElements);
			oFrame.document.bSelectEnabled = p_bState;

			for (var j=0; j < oFrame.frames.length; j++)
			{
				oInnerFrame = oFrame.frames[j];
				oInnerFrame.document.bSelectEnabled = p_bState;
			}
		}

		var oElement;

		for (var i = 0; i < aAllElements.length; i++)
		{
			for (var j = 0; j < aAllElements[i].length; j++)
			{
				oElement = aAllElements[i][j];

				// if disabling, store state in element, then disable it
				if (!p_bState)
				{
					if (oElement.tagName.toLowerCase() == 'a')
					{
						oElement.sPrevHref = oElement.href;
						oElement.removeAttribute('href');
					}
					else
					{
						oElement.bPrevState = oElement.disabled;
						oElement.disabled = true;
					}


				}
				// if enabling, set to bState is it's bPrevState,  or if it doesn't have one just enable it.
				else
				{
					if (oElement.tagName.toLowerCase() == "a")
					{
						oElement.setAttribute('href',oElement.sPrevHref);
					}
					else
					{
						oElement.disabled = (oElement.bPrevState == undefined) ? false : oElement.bPrevState;
					}
				}

				// hide / show select boxes
				if (oElement.tagName.toLowerCase() == "select")
				{
					oElement.style.visibility = (p_bState == true) ? 'visible' : 'hidden';
				}

				// enable msgbox buttons
				document.getElementById('msgOkButton').disabled = false;
				document.getElementById('msgCancelButton').disabled = false;
			}
		}

		bFormsEnabled = p_bState;

	}
}