//===========================================================================
// DCIMessageBox
// 
// Javascript Class that will create and display a message dialog overtop of a webpage
//===========================================================================
function DCIMessageBox( strMessage )
{
	// Constants
	var m_nScrollBarWidth = 16;	// Rough Estimation of most scrollbars' width
	
	// DCIMessageBox parameters
	var m_strMessage;
	if( typeof(strMessage) == 'undefined' )
		m_strMessage = 'Loading...';
	else
		m_strMessage = strMessage;
	
	// Objects that are created by the DCIMessageBox
	var m_divMsgBox = null;
	var m_oBodyObj = null;
	var m_nIntervalID = null;
	
	//=======================================================================
	// CreateDisplay
	//
	// Creates the Message Box area
	//=======================================================================
	function CreateDisplay()
	{	
		// Progress/Loading bar - ensure there is only 1 per page
		if( !document.getElementById('dciMessageBox') )
			document.write('<div id="dciMessageBox" style="display: block; width: 400px; ' +
								'position: absolute; visibility: hidden; ' + 
								'border: 1px solid #de0000; color: #de0000; font-weight: bold; ' + 
								'background-color: #ffe7e7; padding: 0px; z-index: 5; vertical-align: middle;">' + 
								'<div style="display: block; vertical-align: top; border: 1px solid #de0000; background-color: #ffffff; width: 398px;">' + 
									'<table cellpadding="0" cellspacing="0"><tr><td style="width: 376px;">Page Error</td>' + 
									'<td style="width: 20px; text-align: center; border: 1px solid #000000; color: #ffffff; background-color: #ff0000;" ' + 
										'onMouseOver="this.style.backgroundColor=\'#fffc05\';this.style.color=\'#ff0000\';' + 
										'this.style.cursor=\'pointer\';" onMouseout="this.style.backgroundColor=\'#ff0000\';' + 
										'this.style.color=\'#ffffff\';this.style.cursor=\'\';" ' + 
										'onClick="document.getElementById(\'dciMessageBox\').style.visibility = \'hidden\';">[X]</td></tr></table>' + 
								'</div>' + 
								'<div style="vertical-align: middle; margin: 5px 0px 5px 0px;">' + m_strMessage + '</div>' + 
							'</div>');
		
		m_divMsgBox = document.getElementById('dciMessageBox');
		
		// Save Reference to Standard 'Body' object acress browsers
		m_oBodyObj = (document.compatMode == 'CSS1Compat' ? document.documentElement : document.body);
	}
	
	//========================================================================
	// Center
	//
	// Centers the loading dialog to the center of the viewable area, and displays the graphic
	//========================================================================
	function Center()
	{
		var bInternetExplorer = (document.all && !window.opera);
		var bUsesDOM = document.getElementById;
		
		var nScrollTop = (bInternetExplorer ? m_oBodyObj.scrollTop : window.pageYOffset);
		var nScrollLeft = (bInternetExplorer ? m_oBodyObj.scrollLeft : window.pageXOffset);
		
		// Get the document dimensions
		var nDocWidth = (bInternetExplorer ? m_oBodyObj.clientWidth : window.innerWidth - m_nScrollBarWidth);
		var nDocHeight = (bInternetExplorer ? m_oBodyObj.clientHeight : window.innerHeight);
		
		// Get the full scroll height of the document
		var nDocHeightComplete = (m_oBodyObj.offsetHeight > m_oBodyObj.scrollHeight ? m_oBodyObj.offsetHeight : m_oBodyObj.scrollHeight);
		
		// Get the div object dimensions
		var nObjWidth = m_divMsgBox.offsetWidth;
		var nObjHeight = m_divMsgBox.offsetHeight;
		
		// Get the Top Position
		var nTopPosition = (nDocHeight > nObjHeight ? nScrollTop + (nDocHeight / 2) - (nObjHeight / 2) : nScrollTop + 10);
		
		// Set the Location
		m_divMsgBox.style.left = (nDocWidth / 2) - (nObjWidth / 2) + 'px';
		m_divMsgBox.style.top = Math.floor(parseInt(nTopPosition)) + 'px';
		
	}
	
	function Show()
	{
		Center();
		m_divMsgBox.style.visibility = 'visible';
		
		m_nIntervalID = setInterval(this.Center, 70);
	}
	
	function Close()
	{
		m_divMsgBox.style.visibility = 'hidden';
		
		if( m_nIntervalID != null )
		{
			clearInterval(m_nIntervalID);
			m_nIntervalID = null;
		}
	}
	
	function AddEventHandler( oObj, fpFunction, strEvent )
	{
		var strEvent = (window.addEventListener ? strEvent : 'on' + strEvent);
		
		// If object supports addEventListener, use that to add the event handler
		if( oObj.addEventListener )
			oObj.addEventListener(strEvent, fpFunction, false);
		else if( oObj.attachEvent )
			oObj.attachEvent(strEvent, fpFunction);
	}
	
	// Add Center call to Resize Event
	AddEventHandler(window, function() { if(m_divMsgBox.style.visibility == 'visible') Center(); }, 'resize');
	
	// Assign Functions to new Object
	this.CreateDisplay = CreateDisplay
	this.Center = Center;
	this.Show = Show;
	this.Close = Close;
	this.AddEventHandler = AddEventHandler;
	
	// Create the Display
	this.CreateDisplay();
}