/*******************************************************************************
 * This function provides a safe way to obtain an element reference.
 ******************************************************************************/
function SafeGetElement(elementID) {
	try {
		return document.getElementById(elementID);
	}
	catch (x) {
		return null;
	}
}


/*******************************************************************************
 * This function toggles the display property of the specified HTML element
 ******************************************************************************/
function ToggleDisplay(element) {
	try {
		element.style.display = element.style.display == 'none' ? '' : 'none';
	}
	catch (x) {}
}


/*******************************************************************************
 * This function toggles the visibility property of the specified HTML element
 ******************************************************************************/
function ToggleVisibility(element) {
	try {
		element.style.visibility = element.style.display == 'visible' ? 'hidden' : 'visible';
	}
	catch (x) {}
}


/******************************************************************************
 * Returns true if the mouse cursor is currently over the specified element;
 * otherwise, returns false.
 *****************************************************************************/
function isUnderCursor(element) {
	try {
		var intTop = getAbsoluteTop(element) - document.body.scrollTop;
		var intLeft = getAbsoluteLeft(element) - document.body.scrollLeft;
		var intBottom = intTop + element.offsetHeight + 1;
		var intRight = intLeft + element.offsetWidth + 1;
		
		if (((event.x >= intLeft) && (event.x <= intRight))
		&& ((event.y >= intTop) && (event.y <= intBottom)))
			return true; 
		else
			return false; 
	}
	catch (x) {}
}


/******************************************************************************
 * Returns the absolute position of the left edge of the specified element.
 *****************************************************************************/
function getAbsoluteLeft(element) {
	try {
		var left = 0;
		var objParent = element;
		
		do {
			left += objParent.offsetLeft;
			objParent = objParent.offsetParent;
		}
		while (objParent != null);
		
		return left; 
	}
	catch (x) {}
}


/******************************************************************************
 * Returns the absolute position of the top edge of the specified element.
 *****************************************************************************/
function getAbsoluteTop(element) {
	try {
		var top = 0;
		var objParent = element;
		
		do {
			top += objParent.offsetTop;
			objParent = objParent.offsetParent;
		}
		while (objParent != null);
		
		return top; 
	}
	catch (x) {}
}


/******************************************************************************
 * Hides all windowed elements that are beneath the specified element.
 *****************************************************************************/
function hideOverlappingWindowedElements(element) {
	hideOverlappingElements(element, "select");
	hideOverlappingElements(element, "applet");
	hideOverlappingElements(element, "iframe");
	hideOverlappingElements(element, "object");
}


/******************************************************************************
 * Makes all windowed elements visible.
 *****************************************************************************/
function showWindowedElements() {
	showElements("select");
	showElements("applet");
	showElements("iframe");
	showElements("object");
}


/******************************************************************************
 * Hides all elements with the specified tagName that that overlap the 
 * specified element.
 *****************************************************************************/
function hideOverlappingElements(element, tagName) {
	try {
		var intElementTop = getAbsoluteTop(element) - document.body.scrollTop;
		var intElementLeft = getAbsoluteLeft(element) - document.body.scrollLeft;
		var intElementBottom = intElementTop + element.offsetHeight;
		var intElementRight = intElementLeft + element.offsetWidth;

		var arrElements = document.getElementsByTagName(tagName);
		for (var i = 0; i < arrElements.length; i++) {
			var intSelectTop = getAbsoluteTop(arrElements[i]) - document.body.scrollTop;
			var intSelectLeft = getAbsoluteLeft(arrElements[i]) - document.body.scrollLeft;
			var intSelectBottom = intSelectTop + arrElements[i].offsetHeight;
			var intSelectRight = intSelectLeft + arrElements[i].offsetWidth;
	  
			if (((intElementTop <= intSelectBottom) && (intElementBottom >= intSelectTop))
			&& ((intElementLeft <= intSelectRight) && (intElementRight >= intSelectLeft)))
				arrElements[i].style.visibility = "hidden";
		}
	}
	catch (x) {}
}


/******************************************************************************
 * Makes all elements with the specified tagName visible.
 *****************************************************************************/
function showElements(tagName) {
	try {
		var arrElements = document.getElementsByTagName(tagName);
		for (var i = 0; i < arrElements.length; i++) {
			arrElements[i].style.visibility = "visible";
		}
	}
	catch (x) {}
}
