/*
==================== Libreria utilizzata per la gestione del menu di terzo livello ==========================

Lorenzo Gianotti 15/04/2003
Cedac software S.R.L.
*/

// == Valorizzazione delle variabili con tipo Browser e Versione 
var tipoBrowser = navigator.appName;
var versioneBrowser = navigator.appVersion;

// Questa funzione mostra un layer hidden
// == ESEMPIO:
// ==========	showLayer('terzoMenu')
// == Visualizza il layer con id 'terzoMenu'
// == Nel caso in cui il browser sia Explorer viene eseguita anche la funzione
// == 'hideElement' che nasconde i '<SELECT>' che vanno a sovrapporsi al layer
// == per evitare il bug di Explorer che "mangia" i layer se sovrapposti a SELECT
// == in più nel caso di explorer viene settato nello style del layer la 
// == proprietà 'filter', che serve per dare la trasparenza, parametro 
// == 'Opacity' Max = 100 Non trasparente Min = 0 Invisibile
function showLayer(nomeLayer){
	if (tipoBrowser == "Microsoft Internet Explorer"){
		hideElement("SELECT");
		document.all[nomeLayer].style.visibility = 'visible';
		document.all[nomeLayer].style.filter = 'progid:DXImageTransform.Microsoft.Alpha( Opacity=90,FinishOpacity=0,Style=0, StartX=0,  FinishX=0, StartY=0, FinishY=0)'
	}else{
		document.getElementById(nomeLayer).style.visibility = 'visible';
	}
}
// == Questa funzione nasconde il layer passato
// == ESEMPIO:
// ==========	hideLayer('terzoMenu')
// == Nasconde il Layer che si chiama terzoMenu
// == Nel caso in cui il browser sia Explorer viene eseguita anche la funzione
// == 'showElement' che ripristina i '<SELECT>' eventualmente nascosti
// == durante la chiamata della funzione 'showLayer'
function hideLayer(nomeLayer){
	if (tipoBrowser == "Microsoft Internet Explorer")
		showElement("SELECT");
	document.getElementById(nomeLayer).style.visibility = 'hidden';
}

// == Questa funzione permette di nascondere i layer
// == Esempio:
// ==========	layerTimeOut('terzoMenu','onmouseoutDalLayer')
// == imposta il timeOut sul Layer chiamato 'terzoMenu'
// == il secondo parametro che viene passato, è la descrizione dell'azione
// == che chiama questa funzione, nell'esempio sopra 'onmouseoutDalLayer'
// == ha il significato dell'evento onMouseOut specificato sul layer
// == queste descrizioni, sono decise arbitrariamente nello switch della funzione
// == e hanno lo scopo di parametrizzare il tempo del timeout
var timeVar;
function layerTimeOut(nomeLayer,act){
	switch(act){
		case 'onmouseoutDalLayer'://In questo caso viene settato il tempo per il timeout, nell'evento onmouseout dal layer
			if(document.all){
				timeVar = setTimeout("hideLayer('" + nomeLayer + "')",500);
			}else{
				timeVar = setTimeout("hideLayer('" + nomeLayer + "')",2000);
			}
			break;
		case 'onclick'://In questo caso viene settato il tempo per il timeout, nell'evento onclick
			timeVar = setTimeout("hideLayer('" + nomeLayer + "')",0);
			break;
		default:
			if(document.all){
				timeVar = setTimeout("hideLayer('" + nomeLayer + "')",1000);
			}else{
				timeVar = setTimeout("hideLayer('" + nomeLayer + "')",2000);
			}			
	}		
}
// == Questa funzione azzera il timeOut "timeVar"
function clearTimeOut(){
	clearTimeout(timeVar);
}

// == Questa funzione permette di nascondere un elemnto html, quando il menu risulta sovrapposto
// == in questo caso sarà sempre il "<SELECT>" perchè per via di un bug di explorer, questo risulta
// == sempre in primo piano rispetto al Layer.
// == Esempio:
// ==========	hideElement("SELECT")
// == Nasconde tutti i select che si vanno a sovrapporre al div chiamato "terzoMenu"
function hideElement(elmID)
{
	if(document.all['terzoMenu']){
		var y = terzoMenu.offsetHeight + document.body.scrollTop;
		var x = terzoMenu.offsetLeft
	}
	if(document.all['inizioMenu']){
		var x2 = document.all['fineMenu'].offsetLeft
	}
	for (i = 0; i < document.all.tags(elmID).length; i++)
	{
		obj = document.all.tags(elmID)[i];
		if (! obj || ! obj.offsetParent)
			continue;
		objLeft   = obj.offsetLeft;
		objWidth  = obj.offsetWidth
		objTop    = obj.offsetTop;
		objParent = obj.offsetParent;
		while (objParent.tagName.toUpperCase() != "BODY")
		{
			objLeft  += objParent.offsetLeft;
			objTop   += objParent.offsetTop;
			objParent = objParent.offsetParent;
		}
		if((y >= objTop) && !((objLeft <= x && (objLeft+objWidth) <=  x) || (objLeft >= (x+x2))))
			obj.style.visibility = "hidden";
		else
			obj.style.visibility = "visible";
	}
}

// == Questa funzione ripristina la visibilità su un determinato tipo di elementi
// == Esempio:
// ==========	showElement("SELECT")
// == Ripristina la visibilità su tutti i select.
function showElement(elmID)
{
	for (i = 0; i < document.all.tags(elmID).length; i++)
	{
		obj = document.all.tags(elmID)[i];
		if (! obj || ! obj.offsetParent)
			continue;
		obj.style.visibility = "";
	}
}