var isNav = (navigator.appName.indexOf("Netscape") != -1);
var CurrentUser = '';
var OnScrollFunctions = new Object();
var CurrentZIndex = 900;

var http_request = false;
function NewHTTPRequest()
{
	var ReturnVar;

	if (window.XMLHttpRequest) // Mozilla, Safari,...
		ReturnVar = new XMLHttpRequest();
	else if (window.ActiveXObject) // IE
	{
		try { ReturnVar = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) 
		{
			try { ReturnVar = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (e) {}
		}
	}
	
	return ReturnVar;
}  

function StateChange()
{
    if (http_request.readyState == 4) 
    {
        if (http_request.status == 200)
        {
			var xmldoc = http_request.responseXML;
			var error;
			
			//Report Errors
			if (http_request.responseText.indexOf('<?xml') != 0)
				ReportError('Functions - StateChange', http_request.responseText);
			
			try { error = xmldoc.getElementsByTagName('error')[0].firstChild.nodeValue; }
			catch (e) { }	

			if (error != undefined)
				ReportError('Functions - StateChange', http_request.responseText);
        }
        else
			ReportError('Functions - StateChange', http_request.responseText);
    
		RemoveStatus();
    }
}      

var error_request;
function ReportError(CallingFunction, PageText)
{
	var ErrorURL = '';
	
	if (document.location.href.indexOf('https://') != -1)
		ErrorURL = 'https://www.csbsju.edu/aspIncludes/ReportError.aspx';
	else
		ErrorURL = 'http://www.csbsju.edu/aspIncludes/ReportError.aspx';
	
	alert('An error has occurred. Please reload the page.');

	error_request = NewHTTPRequest();
	error_request.onreadystatechange = StateChange_ReportError;	
	error_request.open('POST', ErrorURL, true);
	error_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	error_request.send('CurrentUser=' + CurrentUser + '&CallingFunction=' + CallingFunction + '&PageText=' + URLEncode(PageText));
}

function StateChange_ReportError()
{
    if (error_request.readyState == 4) 
    {
        if (error_request.status == 200)
        {
			if (error_request.responseText.length > 0)
				alert('Unable to connect to server. Please try again later.' + error_request.responseText.length);
        }
        else        
			alert('Unable to connect to server. Please try again later.');
	}
}

var StatusDiv;
function ShowStatus(Status)
{
	if (StatusDiv == undefined || StatusDiv == null)
	{
		StatusDiv = document.createElement('DIV');
		document.body.appendChild(StatusDiv);	
		StatusDiv.style.padding = '1px';
		StatusDiv.style.backgroundColor = '#CCCCCC';
		StatusDiv.style.color = '#FFFFFF';	
		StatusDiv.style.position = 'absolute';	
		StatusDiv.style.zIndex = CurrentZIndex + 1;	
	}

	StatusDiv.style.top = getScrollTop() + 'px';
	StatusDiv.style.right = '0px';
	StatusDiv.innerHTML = '&nbsp;' + Status + '&nbsp;';
		
	StatusDiv.style.visibility = 'visible';
	
	KeepObjectPositioned(StatusDiv, 'upperright', true);
}

function RemoveStatus()
{
	if (StatusDiv != null && typeof StatusDiv == 'object') 
	{		
		OnScrollFunctions['StatusDiv'] = undefined;
		delete OnScrollFunctions['StatusDiv'];
	
		StatusDiv.style.visibility = 'hidden';
		StatusDiv.style.left = 0;
		StatusDiv = null;		
	}
}     

function DocTypeSet()
{
	if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return true;
	else
		return false;
} 

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,'');
}

function URLEncode(ToEncode) 
{
    return escape(ToEncode).replace('/\+/g', '%2B').replace('/\"/g','%22').replace('/\'/g', '%27').replace('/\//g','%2F');
}

function HTMLEncode(ToEncode)
{
	if (ToEncode)
	{ 
		var TempDiv = document.createElement('DIV');
		var TempTextNode = document.createTextNode(ToEncode);
		TempDiv.appendChild(TempTextNode);
		return TempDiv.innerHTML;
	}
	else
		return '';
}

function HTMLDecode(ToDecode)
{
	if (ToDecode != '')
	{
		var TempDiv = document.createElement('DIV');
		TempDiv.innerHTML = StripTags(ToDecode);
		return TempDiv.childNodes[0].nodeValue;
	}
	else
		return '';
}

function StripTags(ToStrip)
{
	return ToStrip.replace(/<\/?[^>]+>/gi, '');
}

function getScrollLeft()
{
	var ScrollLeft = 0;
	
	if (document.body && document.body.scrollTop)
		ScrollLeft = document.body.scrollLeft;
	else if (document.documentElement && document.documentElement.scrollTop)
		ScrollLeft = document.documentElement.scrollLeft; 
	else if (window.pageYOffset)
		ScrollLeft = parseInt(window.pageXOffset); 

	return ScrollLeft;		
}

function getScrollTop()
{
	var ScrollTop = 0;
	
	if (document.body && document.body.scrollTop)
		ScrollTop = document.body.scrollTop;
	else if (document.documentElement && document.documentElement.scrollTop)
		ScrollTop = document.documentElement.scrollTop; 
	else if (window.pageYOffset)
		ScrollTop = parseInt(window.pageYOffset); 

	return ScrollTop;
}

function getWindowTop()
{
	return getScrollTop;
}

function getWindowBottom()
{				
	if (isNav)
		return parseInt(window.innerHeight) + parseInt(window.pageYOffset);
	else if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return document.documentElement.offsetHeight + document.documentElement.scrollTop;	
	else
		return document.body.clientHeight + document.body.scrollTop; 
}	

function getWindowHeight()
{
	if (isNav)
		return parseInt(window.innerHeight);
	else if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return document.documentElement.offsetHeight;	
	else
		return document.body.clientHeight; 				
}

function getWindowWidth()
{
	if (isNav)
		return parseInt(window.innerWidth);
	else if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return document.documentElement.offsetWidth;	
	else
		return document.body.clientWidth; 	
}

function getWindowRight()
{
	if (isNav)
		return parseInt(window.innerWidth) + parseInt(window.pageXOffset);
	else if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return document.documentElement.offsetWidth + document.documentElement.scrollLeft;	
	else
		return document.body.clientWidth + document.body.scrollLeft;
}

function getWindowLeft()
{
	return getScrollLeft();
}

function getMouseX(event)
{
	if (isNav)
		return parseInt(event.pageX);
	else if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return event.clientX + document.documentElement.scrollLeft;
	else
		return event.clientX + document.body.scrollLeft;
}

function getMouseY(event)
{
	if (isNav)
		return parseInt(event.pageY);
	else if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return event.clientY + document.documentElement.scrollTop;
	else
		return event.clientY + document.body.scrollTop;
}

function GetOffset(obj) 
{
	var offset = new Object();
	offset.left = 0;
	offset.top = 0;
	
	if (obj.offsetParent) 
	{
		offset.left = obj.offsetLeft;
		offset.top = obj.offsetTop;
		
		while (obj = obj.offsetParent) 
		{
			offset.left += obj.offsetLeft;
			offset.top += obj.offsetTop;
		}
	}
	
	return offset;
}

function FixEvent (e)
{
	//IE doesn't pass event parameters to the function
	if (e == undefined)
		e = window.event;
	
	//w3c/mozilla use e.target, IE uses srcElement
	if (e.target == undefined && e.srcElement != undefined)
		e.target = e.srcElement;

	//Correct a Safari bug
	if (e.target.nodeType == 3)
		e.target = e.target.parentNode;
						
	return e;
} 

var DivShim;
function CreateDivShim(DivToShim)
{
	//IE does not allow divs to overlap window controls gracefully so we need to throw an IFRAME behind the div.
	var agt = navigator.userAgent.toLowerCase();
		
	if ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1) && (agt.indexOf("msie 7") == -1))
	{	
		DivToShim.DivShim = document.createElement('IFRAME');
		
		if (document.location.href.indexOf('https://') != -1)
			DivToShim.DivShim.src = 'https://www.csbsju.edu/aspIncludes/blank.htm';
		else
			DivToShim.DivShim.src = 'http://www.csbsju.edu/aspIncludes/blank.htm';
		
		DivToShim.DivShim.scrolling = 'no';
		DivToShim.DivShim.frameBorder = '0px';		
		document.body.appendChild(DivToShim.DivShim);
		
		DivToShim.id = GenerateRandomID();
		DivToShim.DivShim.style.position = 'absolute';
		DivToShim.DivShim.style.display = 'block';
		DivToShim.DivShim.style.width = DivToShim.offsetWidth + 'px';
		DivToShim.DivShim.style.height = DivToShim.offsetHeight + 'px';
		DivToShim.DivShim.style.top = DivToShim.style.top;
		DivToShim.DivShim.style.left = DivToShim.style.left;
		DivToShim.DivShim.style.zIndex = DivToShim.style.zIndex - 1;
	}
}

function KeepObjectPositioned(Object, Position, ResetTimeout)
{
	if (Object != undefined && Object != null && Object.style.display != 'none')
	{
		if (Object.id == undefined || Object.id == '')
			Object.id = NewRandomObjectID();
			
		if (typeof OnScrollFunctions[Object.id] != 'function')
			OnScrollFunctions[Object.id] = function() { KeepObjectPositioned(Object, Position, false); }; 
	
		var ScrollTop = getScrollTop();
		var ScrollLeft = getScrollLeft();
		var WindowHeight = getWindowHeight();
		var WindowWidth = getWindowWidth();
		var Width = Object.offsetWidth;
		var Height = Object.offsetHeight;

		if (Object.scrollHeight > WindowHeight)
		{
			var SetWidth = (Object.style.overflowY != 'scroll');
			var TempInnerHTML = Object.innerHTML;
			Object.innerHTML = '';
			Object.style.overflowY = 'scroll';
			Object.style.height = WindowHeight - 50 + 'px';
			Object.innerHTML = TempInnerHTML;

			//This corrects width problems that occur when the scroll bar is added.
			if (SetWidth)
				Object.style.width = (Width - 20) + 'px';
		}
		
		if (Position == "center")
		{
			Object.style.top = ((ScrollTop + (WindowHeight/2)) - (Height/2)) + 'px';
			Object.style.left = ((ScrollLeft + (WindowWidth/2)) - (Width/2)) + 'px';
		}
		else if (Position == "upperright")
		{
			Object.style.top = ScrollTop + 'px';
		
			if ((navigator.userAgent.indexOf('MSIE') != -1 && DocTypeSet()) || ((document.body.offsetHeight > WindowHeight || ScrollTop > 0) && DocTypeSet()))
				Object.style.left = (getWindowRight() - Width - 22) + 'px';	
			else
				Object.style.left = (getWindowRight() - Width) + 'px';
		}
		else if (Position == "upperleft")
		{
			Object.style.top = ScrollTop + 'px';
			Object.style.left = '0px';
		}
		
		if (ResetTimeout)
			setTimeout(function() { KeepObjectPositioned(Object, Position, true); }, 1000);
	}
	else
	{
		delete Object;
	}
}

function OnScrollProcessor()
{
	var count = 0;
	
	for (var a in OnScrollFunctions)
		count++;

	for (var a in OnScrollFunctions)
		OnScrollFunctions[a]();
}
window.onscroll = OnScrollProcessor;

var BlockDiv;
function BlockPageContents()
{
	var ParentDiv = GetElementFromArguments(arguments);
	var NewBlockDiv;

	if (ParentDiv == undefined || ParentDiv == null)
		NewBlockDiv = BlockDiv;
	else
		NewBlockDiv = ParentDiv.BlockDiv;

	if (NewBlockDiv == undefined || NewBlockDiv == null)
	{
		NewBlockDiv = document.createElement('DIV');
		document.body.appendChild(NewBlockDiv);
		NewBlockDiv.id = GenerateRandomID();
		NewBlockDiv.style.display = 'none';
		
		if (ParentDiv != undefined && ParentDiv != null && ParentDiv.style != undefined)
			NewBlockDiv.style.zIndex = ParentDiv.style.zIndex - 1;
		else
			NewBlockDiv.style.zIndex = CurrentZIndex - 5;
			
		//IE's filter opacity is horrible so instead use an alpha png. 
		NewBlockDiv.style.backgroundImage = 'url(https://www.csbsju.edu/aspIncludes/1px_alpha.png)'; 
		NewBlockDiv.style.position = 'absolute';
		
		NewBlockDiv.style.top = '0px';
		NewBlockDiv.style.left = '0px';
		NewBlockDiv.style.display = 'block';
		NewBlockDiv.style.width = '100%';		
		NewBlockDiv.style.repeat = 'repeat';
		
		if (getWindowBottom() > document.body.offsetHeight)
			NewBlockDiv.style.height = getWindowBottom() + 'px';		
		else
			NewBlockDiv.style.height = document.body.offsetHeight + 'px';	
	}
	
	if (ParentDiv == undefined || ParentDiv == null)
		BlockDiv = NewBlockDiv;
	else
		ParentDiv.BlockDiv = NewBlockDiv;
}

function RemoveBlock()
{
	var ParentDiv = GetElementFromArguments(arguments);
	var DivToRemove;

	if (ParentDiv == undefined || ParentDiv == null)
		DivToRemove = BlockDiv;
	else
		DivToRemove = ParentDiv.BlockDiv;

	if (DivToRemove != undefined && DivToRemove != null)
	{
		DivToRemove.style.display = 'none';
		DivToRemove = null;
	}
}

function RemovePromptDiv()
{
	var DivToRemove = GetElementFromArguments(arguments);

	if (DivToRemove == undefined || DivToRemove == null)
		DivToRemove = PromptDiv;

	if (DivToRemove != undefined && DivToRemove != null && DivToRemove.id != undefined)
	{
		if (document.getElementById(DivToRemove.id) != undefined)
		{
			RemoveDivShim(DivToRemove);
			RemoveBlock(DivToRemove);

			OnScrollFunctions[DivToRemove.id] = undefined;
			delete OnScrollFunctions[DivToRemove.id];

			DivToRemove.style.display = 'none';
			DivToRemove.parentNode.removeChild(DivToRemove);	
			
			if (PromptDiv == DivToRemove)
				PromptDiv = null;
			
			DivToRemove = null;
			PromptInput = null;	
		}
	}
}

function RemoveDivShim()
{
	var ShimmedDiv = GetElementFromArguments(arguments);

	if (ShimmedDiv.DivShim != undefined && ShimmedDiv.DivShim != null)
	{
		OnScrollFunctions[ShimmedDiv.DivShim.id] = undefined;
		delete OnScrollFunctions[ShimmedDiv.DivShim.id];
	
		ShimmedDiv.DivShim.style.display = 'none';
		document.body.removeChild(ShimmedDiv.DivShim);		
		ShimmedDiv.DivShim = null;
	}
}

var PromptDiv;
var PromptInput;
function CreatePromptBox()
{
	PromptDiv = document.createElement('DIV');
	document.body.appendChild(PromptDiv);
	PromptDiv.id = GenerateRandomID();
	PromptDiv.style.display = 'none';
	PromptDiv.style.zIndex = CurrentZIndex;
	PromptDiv.style.border = '4px solid #AAAAAA';
	PromptDiv.style.paddingTop = '20px';
	PromptDiv.style.paddingBottom = '20px';
	PromptDiv.style.paddingLeft = '20px';
	PromptDiv.style.paddingRight = '20px';
	PromptDiv.style.backgroundColor = '#EEEEEE';
	PromptDiv.style.color = '#000000';	
	PromptDiv.style.position = 'absolute';
	
	CurrentZIndex++;
}

function NewPromptBox()
{
	var ParentDiv = GetElementFromArguments(arguments);
	var NewDiv = document.createElement('DIV');

	if (ParentDiv == undefined || ParentDiv == null)
		document.body.appendChild(NewDiv);
	else
		ParentDiv.appendChild(NewDiv);
	
	NewDiv.id = GenerateRandomID();
	NewDiv.style.display = 'none';
	NewDiv.style.zIndex = CurrentZIndex;
	NewDiv.style.border = '4px solid #AAAAAA';
	NewDiv.style.paddingTop = '20px';
	NewDiv.style.paddingBottom = '20px';
	NewDiv.style.paddingLeft = '20px';
	NewDiv.style.paddingRight = '20px';
	NewDiv.style.backgroundColor = '#EEEEEE';
	NewDiv.style.color = '#000000';	
	NewDiv.style.position = 'absolute';
	
	CurrentZIndex++;
	
	return NewDiv;
}

function DisplayPromptBox()
{
	var DivToShow = GetElementFromArguments(arguments);

	if (DivToShow == undefined || DivToShow == null)
		DivToShow = PromptDiv;

	if (DivToShow != undefined && DivToShow != null)
	{
		DivToShow.style.display = 'block';
		var TempHeight = DivToShow.offsetHeight;
		var TempWidth = DivToShow.offsetWidth;
		DivToShow.style.display = 'none';
		
		DivToShow.style.top = ((getScrollTop() + (getWindowHeight()/2)) - (TempHeight/2)) + 'px';
		DivToShow.style.left = ((getScrollLeft() + (getWindowWidth()/2)) - (TempWidth/2)) + 'px';		
		
		DivToShow.style.display = 'block';		

		CreateDivShim(DivToShow);				
		
		KeepObjectPositioned(DivShim, 'center', true);
		KeepObjectPositioned(DivToShow, 'center', true);	
		BlockPageContents(DivToShow);	
	}
}

function ShowPromptBox(PromptText, DefaultText, ReturnFunction)
{
	PromptDiv = null;
	CreatePromptBox();
	PromptDiv.innerHTML = '<b>' + PromptText + '</b><br />';
	
	PromptInput = document.createElement('INPUT');		
	PromptDiv.appendChild(PromptInput);
	PromptInput.size = '50';
	PromptInput.value = DefaultText;
	PromptInput.onkeydown = PromptKeyDownHandler;
	
	var ButtonP = document.createElement('P');
	var OKButton = document.createElement('INPUT');
	var CancelButton = document.createElement('INPUT');
	var TextNode = document.createTextNode('  ');
	
	OKButton.type = 'button';
	OKButton.id = 'PromptBoxButton';
	OKButton.value = 'OK';
	OKButton.style.width = '75px';
	OKButton.onclick = function () { ReturnFunction(); };
	
	CancelButton.type = 'button';
	CancelButton.value = 'Cancel';
	CancelButton.style.width = '75px';
	CancelButton.onclick = RemovePromptDiv;
	
	PromptDiv.appendChild(ButtonP);
	ButtonP.appendChild(OKButton);
	ButtonP.appendChild(TextNode);
	ButtonP.appendChild(CancelButton);
	
	ButtonP.style.textAlign = 'center';	
	
	DisplayPromptBox();

	PromptInput.focus();
	PromptInput.select();
}

var PromptInput2;
function ShowDualPromptBox(PromptText1, DefaultText1, PromptText2, DefaultText2, ReturnFunction)
{
	CreatePromptBox();
					
	//1st Prompt Box
	var Prompt1P = document.createElement('P');
	Prompt1P.innerHTML = '<b>' + PromptText1 + '</b><br />';		
	PromptInput = document.createElement('INPUT');		
	Prompt1P.appendChild(PromptInput);
	PromptInput.size = '50';
	PromptInput.value = DefaultText1;
	PromptInput.onkeydown = PromptKeyDownHandler;
	
	//2nd Prompt Box
	var Prompt2P = document.createElement('P');
	Prompt2P.innerHTML += '<b>' + PromptText2 + '</b><br />';
	PromptInput2 = document.createElement('INPUT');		
	Prompt2P.appendChild(PromptInput2);
	PromptInput2.size = '50';
	PromptInput2.value = DefaultText2;
	PromptInput2.onkeydown = PromptKeyDownHandler;
	
	PromptDiv.appendChild(Prompt1P);
	PromptDiv.appendChild(Prompt2P);
	
	Prompt1P.style.marginTop = '0px';
	
	var ButtonP = document.createElement('P');
	var OKButton = document.createElement('INPUT');
	var CancelButton = document.createElement('INPUT');
	var TextNode = document.createTextNode('  ');
	
	OKButton.type = 'button';
	OKButton.id = 'PromptBoxButton';
	OKButton.value = 'OK';
	OKButton.style.width = '75px';
	OKButton.onclick = function () { ReturnFunction(); };
	
	CancelButton.type = 'button';
	CancelButton.value = 'Cancel';
	CancelButton.style.width = '75px';
	CancelButton.onclick = RemovePromptDiv;
	
	PromptDiv.appendChild(ButtonP);
	ButtonP.appendChild(OKButton);
	ButtonP.appendChild(TextNode);
	ButtonP.appendChild(CancelButton);
	
	ButtonP.style.textAlign = 'center';	
	
	DisplayPromptBox();

	PromptInput.focus();
	PromptInput.select();				
}

function ShowPopup(ElementID, CloseWithExternalClick, CloseText)
{
	var PopUp;
	var Element = document.getElementById(ElementID);
	
	if (typeof Element == 'object' && typeof Element.parentNode == 'object')
	{
		if (CloseText == undefined || CloseText.length == 0)
			CloseText = 'Close';
	
		PopUp = NewPromptBox(Element.parentNode);

		var NewID = NewRandomObjectID();
		PopUp.style.margin = '5px';
		PopUp.style.paddingTop = '5px';
		PopUp.style.paddingRight = '15px';
		PopUp.style.paddingLeft = '15px';
		PopUp.style.paddingBottom = '15px';
		PopUp.style.backgroundColor = 'white';					
		
		PopUp.innerHTML =   '<p style="margin:0px;" align="right">' +
								'<a style="color:blue;font-size:.8em;" id="PromptCloseButton' + ElementID + 
									'" href="javascript:void(0);" title="' + CloseText + '" onclick="ClosePopupByID(\'' + NewID + '\'); return false;">' + CloseText + '</a>' +
							'</p>' +
							'<div>' + Element.innerHTML + '</div>';

		DisplayPromptBox(PopUp);

		PopUp.id = NewID;

		if (PopUp.offsetWidth > PopUp.parentNode.offsetWidth)
			PopUp.style.width = PopUp.parentNode.offsetWidth + 'px';
			
		KeepObjectPositioned(DivShim, 'center', false);
		KeepObjectPositioned(PopUp, 'center', false);

		//Save original element and then remove it from the DOM.
		PopUp.origElement = Element;
		Element.parentNode.removeChild(Element);		
		
		//Setup the close functions.
		if (CloseWithExternalClick)
			PopUp.BlockDiv.onclick = function() { ClosePopup(PopUp); return false; };
	}

	return PopUp;	
}

function ClosePopupByID(PopupID)
{
	ClosePopup(document.getElementById(PopupID));
}

function ClosePopup(PopUp)
{
	PopUp.parentNode.appendChild(PopUp.origElement);
	RemovePromptDiv(PopUp); 	
}

function PromptKeyDownHandler(e)
{
	e = FixEvent(e);

	if (e.keyCode == 13)
	{
		e.returnValue=false;
		e.cancel = true;

		document.getElementById('PromptBoxButton').click();
	}	
}

function GetElementFromArguments(Args)
{
	for (var a = 0; a < Args.length; a++)
	{
		if (Args[a] != undefined && Args[a] != null && Args[a].style != undefined)
			return Args[a];
	}
	
	return null;
}

function NewRandomObjectID()
{
	return new Date().getTime().toString().substr(5) + Math.floor(Math.random() * 100).toString();
}

function GenerateRandomID()
{
	var CharPool = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
	var ID = '';

	for (a=0; a < CharPool.length; a++)
		ID += CharPool.charAt(Math.floor(Math.random() * CharPool.length));

	return ID;
}