
function hide(id, parentName) {
	var d = document.getElementById(id);
	var parent = document.getElementById(parentName);
	if (parent)
	{
    	parent.className = ''
    	document.body.onclick = null;
  	}	
	if (d) {
		if (d.style.display != 'none')
			d.style.display='none';
	}
	hideShowCovered(d, true);	
}

function show(dd_id, parentName) {
  	var parent = document.getElementById(parentName);
	var dd = document.getElementById(dd_id);
	if (parent)
	{
    	parent.className = 'active'
    	document.body.onclick = new Function("hide('" + dd_id + "', '" + parentName + "');");	
  	}
	if (dd)
	{
		if (dd.style.display != 'block')
			dd.style.display='block';
	}
	hideShowCovered(dd, false);			
}

/// detect a special case of "web browser"
function is_ie() {
	return ( /msie/i.test(navigator.userAgent) &&
		   !/opera/i.test(navigator.userAgent) );
};

function is_ie5() {
	return ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) );
};

/// detect Opera browser
function is_opera() {
	return /opera/i.test(navigator.userAgent);
};

function getAbsolutePos(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = this.getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};


function hideShowCovered(menu, hide) {
	if (!is_ie() && !is_opera())
		return;
	// retourne la visibilite d'un objet
	function getVisib(obj){
		var value = obj.style.visibility;
		if (!value) {
			if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C
				if (!Calendar.is_khtml)
					value = document.defaultView.
						getComputedStyle(obj, "").getPropertyValue("visibility");
				else
					value = '';
			} else if (obj.currentStyle) { // IE
				value = obj.currentStyle.visibility;
			} else
				value = '';
		}
		return value;
	};

	// la liste des controles a cacher
	var tags = new Array("applet", "iframe", "select");
	var el = menu;

	var p = getAbsolutePos(el);
	// les coins haut gauche (1) et bas droite (2) du menu :
	var EX1 = p.x;
	var EX2 = el.offsetWidth + EX1;
	var EY1 = p.y;
	var EY2 = el.offsetHeight + EY1;

	// pour chacun des controles critiques du document
	for (var k = tags.length; k > 0; ) {
		// ar = une sous-liste de controles
		var ar = document.getElementsByTagName(tags[--k]);
		var cc = null;

		// pour chacun des controles de la liste ar
		for (var i = ar.length; i > 0;) {
			cc = ar[--i];

			p = getAbsolutePos(cc);
			// les coins haut gauche (1) et bas droite (2) du composant :
			var CX1 = p.x;
			var CX2 = cc.offsetWidth + CX1;
			var CY1 = p.y;
			var CY2 = cc.offsetHeight + CY1;

			// si le menu est cache ou que le controle n'est pas masque par le menu, on le remet a son etat initial
			if (hide || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
				if (!cc.__msh_save_visibility) {
					cc.__msh_save_visibility = getVisib(cc);
				}
				cc.style.visibility = cc.__msh_save_visibility;
			} 
			// sinon on le cache
			else {
				if (!cc.__msh_save_visibility) {
					cc.__msh_save_visibility = getVisib(cc);
				}
				cc.style.visibility = "hidden";
			}
		}
	}
};