function toggleVisibility(anElement) {
	if (typeof anElement == "string") {
		anElement = document.getElementById(anElement);
	}

	if (anElement.style.display == "none") {
		anElement.style.display = "";
	} else {
		anElement.style.display = "none";
	}
}


function hideShowOverlappingSelects(popup, trueToHideFalseToShow) {
	var inIE = document.documentElement.filters;
	if (document.getElementById && inIE) {
		var selectElements = document.getElementsByTagName('select');
		for (var i = 0; i < selectElements.length; i++) {
			var aSelectElement = selectElements[i];
			if (areOverlapping(aSelectElement, popup) && !contains(popup, aSelectElement)) {
				if (trueToHideFalseToShow) {
					aSelectElement.style.visibility='hidden';
				} else {
					aSelectElement.style.visibility='';
				}
			}
		}
	}
}

function contains(container, anElement) {
	var parent = anElement.parentNode;
	while (parent != null) {
		if (parent == container) {
			return true;
		} else {
			parent = parent.parentNode;
		}
	}

	// If we didn't find container in the ancestor tree:
	return false;
}

function areOverlapping(oneElement, anotherElement) {
	var width1 = oneElement.offsetWidth;
	var height1 = oneElement.offsetHeight;
	var width2 = anotherElement.offsetWidth;
	var height2 = anotherElement.offsetHeight;
	var x1 = getElementLeft(oneElement);
	var y1 = getElementTop(oneElement);
	var x2 = getElementLeft(anotherElement);
	var y2 = getElementTop(anotherElement);

	width2 += x2;
	height2 += y2;
	width1 += x1;
	height1 += y1;
	//      overflow || intersect
	return ((width2 < x2 || width2 > x1) &&
	        (height2 < y2 || height2 > y1) &&
	        (width1 < x1 || width1 > x2) &&
	        (height1 < y1 || height1 > y2));
}


function getElementLeft(eElement)
{
    if (!eElement && this)                       // if argument is invalid
    {                                            // (not specified, is null or is 0)
        eElement = this;                         // and function is a method
    }                                            // identify the element as the method owner
    
    var nLeftPos = eElement.offsetLeft;          // initialize var to store calculations
    var eParElement = eElement.offsetParent;     // identify first offset parent element  
    while (eParElement != null)
    {                                            // move up through element hierarchy
        nLeftPos += eParElement.offsetLeft;      // appending left offset of each parent
        eParElement = eParElement.offsetParent;  // until no more offset parents exist
    }
    return nLeftPos;                             // return the number calculated
}


function getElementTop(eElement)
{
    if (!eElement && this)
    {
        eElement = this;
    }

    var nTopPos = eElement.offsetTop;
    var eParElement = eElement.offsetParent;
    while (eParElement != null)
    {
        nTopPos += eParElement.offsetTop;
        eParElement = eParElement.offsetParent;
    }
    return nTopPos;
}


