// Basic alert functions
function showAlert(message) {		
	showCanopy();
	var alertContainer = document.getElementById("alertContainer");
	if(!alertContainer) {
		alertContainer = document.createElement("div");
		alertContainer.id = "alertContainer";
		alertContainer.innerHTML = '<div id="alertHeader" onmousedown="/*startDragDrop(event, this, \'alertContainer\', false);*/">Alert</div>'+
					'<div id="alertBody">'+message+'</div>'+
					'<div id="alertButtons"><p class="imagebutton-dark"><a href="#" onclick="hideAlert();return false;">ok</a></p></div>'+
					'<div id="alertFooter"><img class="closeButton" src="/common/img/center/btn_closepopup.gif" onclick="hideAlert();" alt="Close" height="14" width="14" /></div>';
		document.getElementById("contentcontainer").appendChild(alertContainer);
	}
	else {
		document.getElementById("alertBody").innerHTML = message;
		alertContainer.style.display = "block";
	}
	centerVerticalOnCanopy(alertContainer);
	document.alertInUse = true;
	document.getElementById("alertButtons").getElementsByTagName("a")[0].focus();
}

function hideAlert() {	
	document.getElementById('alertContainer').style.display = "none";
	document.alertInUse = false;
	hideCanopy();
}

// Basic confirm functions
function showConfirm(message, callback) {
	showCanopy();
	var confirmContainer = document.getElementById("confirmContainer");
	if(!confirmContainer) {
		confirmContainer = document.createElement("div");
		confirmContainer.id = "confirmContainer";
		confirmContainer.innerHTML = '<div id="confirmHeader" onmousedown="/*startDragDrop(event, this, \'confirmContainer\', false);*/">Confirm</div>'+
					'<div id="confirmBody">'+message+'</div>'+
					'<div id="confirmButtons">'+
						'<p class="imagebutton-dark"><a href="#" onclick="hideConfirm(false);return false;">no</a></p>'+
						'<p class="imagebutton-dark"><a href="#" onclick="hideConfirm(true);return false;">yes</a></p>'+
					'</div>'+
					'<div id="confirmFooter"><img class="closeButton" src="/common/img/center/btn_closepopup.gif" onclick="hideConfirm(false);" alt="Close" height="14" width="14" /></div>';
		document.getElementById("contentcontainer").appendChild(confirmContainer);
	}
	else {
		document.getElementById("confirmBody").innerHTML = message;
		confirmContainer.style.display = "block";
	}
	confirmContainer.callback = callback;
	centerVerticalOnCanopy(confirmContainer);
	document.confirmInUse = true;
	document.getElementById("confirmButtons").getElementsByTagName("a")[1].focus();
}

function hideConfirm(confirmed) {
	var confirmContainer = document.getElementById('confirmContainer');
	confirmContainer.style.display = "none";
	document.confirmInUse = false;
	hideCanopy();
	if(confirmed) confirmContainer.callback();
	confirmContainer.callback = null;
}

// Basic popup functions
function showPopup(title, source, parameters, onCompleteRequest, onErrorRequest) {
	showCanopy();
	var popupContainer = document.getElementById("popupContainer");
	if(!popupContainer) {
		popupContainer = document.createElement("div");
		popupContainer.id = "popupContainer";
		popupContainer.innerHTML = '<div id="popupHeader" onmousedown="/*startDragDrop(event, this, \'popupContainer\', false);*/">'+title+'</div>'+
					'<div id="popupBody">&nbsp;</div>'+
					'<div id="popupButtons">&nbsp;</div>'+
					'<div id="popupFooter"><img class="closeButton" src="/common/img/center/btn_closepopup.gif" onclick="hidePopup();" alt="Close" height="14" width="14" /></div>';
		document.getElementById("contentcontainer").appendChild(popupContainer);
	}
	else popupContainer.style.display = "block";

	centerVerticalOnCanopy(popupContainer);
	document.popupInUse = true;
	sendPopupRequest('POST', source, 'popupBody', true, ((onErrorRequest) ? onErrorRequest : defaultOnPopupError), ((onCompleteRequest) ? onCompleteRequest : defaultOnCompletePopupRequest), parameters, true)
}

function hidePopup() {	
	document.getElementById('popupContainer').style.display = "none";
	document.popupInUse = false;
	hideCanopy();
}

// Canopy Functions
function showCanopy() {
	hideSelectBoxesInBackground();
	var canopy = document.getElementById("canopyContainer");
	if(!canopy) {
		canopy = document.createElement("div");
		canopy.id = "canopyContainer";
		if(isIE) canopy.style.filter = "alpha(opacity=50)";
		document.getElementById("contentcontainer").appendChild(canopy);
	}
	else {
		with(canopy.style) {
			display = "block";
			width = "100%";
			height = "100%";
		}
	}
	window.onscroll = resizeCanopyContainer;
	window.onresize = resizeCanopyContainer;
}

function hideCanopy() {
	if(!document.alertInUse && !document.confirmInUse && !document.popupInUse) {
		document.getElementById('canopyContainer').style.display = "none";
		showSelectBoxesInBackground();
	}
}

function resizeCanopyContainer() {
	var canopy = document.getElementById("canopyContainer");
	var viewSize = getViewableWindowSize();
	var scrollDistance = getScrollXY();
	
	var pageWidth = document.getElementById("contentcontainer").offsetWidth;
	var pageHeight = document.getElementById("contentcontainer").offsetHeight + document.getElementById("hdr").offsetHeight + document.getElementById("ftr").offsetHeight;

	with(canopy.style) {
		width = (viewSize[0] < pageWidth) ? pageWidth + "px" : "100%";
		height = (viewSize[1] < pageHeight) ? pageHeight + "px" : "100%";
	}
	
	if(document.popupInUse) {
		var popup = document.getElementById('popupContainer');
		with(popup.style) {
			left = (scrollDistance[0] > 0) ? (viewSize[0]/2+scrollDistance[0]) +"px" : "50%";
			top = (scrollDistance[1] > 0) ? (viewSize[1]/2+scrollDistance[1]) +"px" : "50%";
		}
	}
	if(document.alertInUse) {
		var alertPopup = document.getElementById('alertContainer');
		with(alertPopup.style) {
			left = (scrollDistance[0] > 0) ? (viewSize[0]/2+scrollDistance[0]) +"px" : "50%";
			top = (scrollDistance[1] > 0) ? (viewSize[1]/2+scrollDistance[1]) +"px" : "50%";
		}
	}
	if(document.confirmInUse) {
		var confirmPopup = document.getElementById('confirmContainer');
		with(confirmPopup.style) {
			left = (scrollDistance[0] > 0) ? (viewSize[0]/2+scrollDistance[0]) +"px" : "50%";
			top = (scrollDistance[1] > 0) ? (viewSize[1]/2+scrollDistance[1]) +"px" : "50%";
		}
	}
}

function getPageContainer() {
	var pageContainer = document.getElementById("tier4");
	if(!pageContainer) {
		pageContainer = document.getElementsByTagName("body")[0];
	}
	return pageContainer;
}

function hideSelectBoxesInBackground() { // hide select boxes because they show through popup layers in IE
	if(isIE) {
		var pageContainer = getPageContainer();
		var selects = pageContainer.getElementsByTagName("select");
		for(var i = selects.length-1; i >= 0; i--) {
			selects[i].style.visibility="hidden";
		}
	}
}

function showSelectBoxesInBackground() { // show select boxes that have been hidden for popup layers
	if(isIE) {
		var pageContainer = getPageContainer();
		var selects = pageContainer.getElementsByTagName("select");
		for(var i = selects.length-1; i >= 0; i--) {
			selects[i].style.visibility="visible";
		}
	}
}

function centerVerticalOnCanopy(obj) {
	var topMargin = obj.offsetHeight/2+30;
	obj.style.marginTop = (topMargin > getViewableWindowSize()[1]/2) ? "0px" : "-" + topMargin + "px";
}

function getViewableWindowSize() {
	if( typeof( window.innerWidth ) == 'number' ) { // Non-IE
		return [window.innerWidth, window.innerHeight];
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { // IE 6+ in 'standards compliant mode'
		return [document.documentElement.clientWidth, document.documentElement.clientHeight];
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { // IE 4 compatible
		return [document.body.clientWidth, document.body.clientHeight];
	}
	return [0, 0];
}

function getScrollXY() {
	if(typeof(window.pageYOffset) == 'number' ) { // Netscape compliant
		return [window.pageXOffset,window.pageYOffset];
	} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) { // DOM compliant
		return [document.body.scrollLeft,document.body.scrollTop];
	} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) { // IE6 standards compliant mode
		return [document.documentElement.scrollLeft,document.documentElement.scrollTop];
	}
	return [0, 0];
}

// Generic action function
function sendPopupRequest(method, source, target, displayonerror, onerror, oncomplete, payload, toggleStatus) {
	var container = document.getElementById("popupContainer");
	container.request = (window.XMLHttpRequest) ? new XMLHttpRequest() : (window.ActiveXObject) ? new ActiveXObject("MSXML2.XMLHTTP") : null;
	container.payload = payload;
	container.callback = oncomplete;
	container.onerror = onerror;
	container.displayonerror = displayonerror;
	container.path = source;
	container.checkReadyState = checkReadyState;
	if(container.request) {
		try {
			container.request.open("POST", container.path, true);
			container.request.onreadystatechange = container.checkReadyState;
			container.request.send(container.payload);
			document.getElementById("popupBody").innerHTML = "<p>Loading ...</p>";
		}
		catch(e) {
			alert(e);
			document.getElementById("popupBody").innerHTML = "<p>Unable to access content.</p>";
		}
	}
}

function checkReadyState() {
	var container = document.getElementById("popupContainer");
	if(container.request.readyState == 4) {
		if(container.request.status == 200) container.callback();
		else document.getElementById("popupBody").innerHTML = "<p>There was an error loading this content.</p>";
	}
}

function defaultOnCompletePopupRequest() {
	var container = document.getElementById("popupContainer");
	var html = container.request.responseText;
	if(html.indexOf("<body>") > 0) {
		html = html.substring(html.indexOf("<body>")+6);
		html = html.substring(0,html.indexOf("</body>"));
	}
	document.getElementById("popupBody").innerHTML = html;
	centerVerticalOnCanopy(container);
}

function defaultOnPopupError() {
	alert("error");
}

// Tip display functions
function showPopoutTip(txt) {
	var popupContainer = document.getElementById('popupContentContainer');
	var tipContainer = popupContainer.tipContainer;
	if(!tipContainer) {
		tipContainer = document.createElement('div');
		tipContainer.id = "popupTipContainer";
		if(isIE) {
			tipContainer.style.filter = "alpha(opacity=90)";
			tipContainer.style.height = popupContainer.offsetHeight + "px"; // 100% height will not work in IE without fixed height on parent
		}
		tipContainer.onclick = function() {
			// hide function
			this.style.display="none";
			if(isIE) {
				// show select boxes that have been hidden
				var popupContainer = document.getElementById('popupContainer');
				var selects = popupContainer.getElementsByTagName("select");
				for(var i = selects.length-1; i >= 0; i--) {
					selects[i].style.visibility="visible";
				}
			}
		}
		popupContainer.appendChild(tipContainer);
		popupContainer.tipContainer = tipContainer;
	}
	tipContainer.innerHTML = '<p><img src="/common/img/center/question.gif" width="11" height="11" alt="">&nbsp;&nbsp;'+txt+'</p>';

	// hide select boxes because they show through
	if(isIE) {
		var selects = popupContainer.getElementsByTagName("select");
		for(var i = selects.length-1; i >= 0; i--) {
			selects[i].style.visibility="hidden";
		}
	}

	tipContainer.style.display = "block";
}

// Basic popup tab functions
function activatePopupTab(tabGroup, tabNum) {
	var tabgroup = document.getElementById("tabGroup");
	var tabElements = document.getElementById(tabGroup + 'Tabs').childNodes;
	var count = 0;
	for(var i=0; i < tabElements.length; i++) {
		var tab = tabElements[i];
		if(tab.nodeName.toLowerCase() == "span") {
			if(count == (tabNum - 1)) tab.className = tab.className.replace("tabButtonInactive","tabButtonActive");
			else tab.className = tab.className.replace("tabButtonActive","tabButtonInactive");
			count++;
		}
	}
	var containerElements = document.getElementById(tabGroup + 'Containers').childNodes;
	count = 0;
	for(var i=0; i<containerElements.length; i++) {
		var tabContainer = containerElements[i];
		if(tabContainer.nodeName.toLowerCase() == "div") {
			if(count == (tabNum - 1)) tabContainer.style.display = "block";
			else tabContainer.style.display = "none";
			count++;
		}
	}
}