//stato del menu
var menuReady = false;

//cache delle immagini del menu
if(document.images){
	var path = "/eng/images/";
	var imagesNormal = new Array();
	imagesNormal["energia"] = new Image(24,103);
	imagesNormal["energia"].src = path + "energia.gif";
	imagesNormal["aria"] = new Image(24,83);
	imagesNormal["aria"].src = path + "aria.gif";
	imagesNormal["acqua"] = new Image(24,95);
	imagesNormal["acqua"].src = path + "acqua.gif";
	imagesNormal["terra"] = new Image(24,93);
	imagesNormal["terra"].src = path + "terra.gif";
	imagesNormal["ecosistemi"] = new Image(24,129);
	imagesNormal["ecosistemi"].src = path + "ecosistemi.gif";
	imagesNormal["i5regni"] = new Image(24,115);
	imagesNormal["i5regni"].src = path + "i_5_regni.gif";
	imagesNormal["speciali"] = new Image(24,141);
	imagesNormal["speciali"].src = path + "speciali.gif";

	var imagesHilite = new Array();
	imagesHilite["energia"] = new Image(24,103);
	imagesHilite["energia"].src = path + "energia_up.gif";
	imagesHilite["aria"] = new Image(24,83);
	imagesHilite["aria"].src = path + "aria_up.gif";
	imagesHilite["acqua"] = new Image(24,95);
	imagesHilite["acqua"].src = path + "acqua_up.gif";
	imagesHilite["terra"] = new Image(24,93);
	imagesHilite["terra"].src = path + "terra_up.gif";
	imagesHilite["ecosistemi"] = new Image(24,129);
	imagesHilite["ecosistemi"].src = path + "ecosistemi_up.gif";
	imagesHilite["i5regni"] = new Image(24,115);
	imagesHilite["i5regni"].src = path + "i_5_regni_up.gif";
	imagesHilite["speciali"] = new Image(24,141);
	imagesHilite["speciali"].src = path + "speciali_up.gif";
}

function getElementStyle(elem,IEStyleProp,CSSStyleProp){
	if(elem.currentStyle){
	return elem.currentStyle[IEStyleProp];
	} else if (window.getComputedStyle){
		var compStyle = window.getComputedStyle(elem,"");
		return compStyle.getPropertyValue(CSSStyleProp);
	}
	return "";
}

//attributi di stile definiti anche nei css
var CSSRulesValues = {
	menuItemHeight:"23px",
	menuItemLineHeight:"1.5em",
	menuWrapperBorderWidth:"1px",
	menuWrapperPadding:"0px",
	defaultBodyFontSize:"12px"
};

//definizione dei sottomenu
var menus = new Array();
menus[0] = {
	mBarImgId:"menuImg_1",
	mBarImgNormal:imagesNormal["energia"],
	mBarImgHilite:imagesHilite["energia"],
	menuItems:[	{text:"Energy",href:"testo.aspx?id=3"},
			   	{text:"Gas",href:"testo.aspx?id=4"},
			   	{text:"Oil",href:"testo.aspx?id=5"},
			   	{text:"Coal",href:"testo.aspx?id=6"},
			   	{text:"Biomass",href:"testo.aspx?id=7"},
			   	{text:"Hydroelectic",href:"testo.aspx?id=8"},
			   	{text:"Solar",href:"testo.aspx?id=9"},
			   	{text:"Wind",href:"testo.aspx?id=10"},
			   	{text:"Waste",href:"testo.aspx?id=11"},
			   	{text:"Nuclear",href:"testo.aspx?id=12"},
			   	{text:"Geothermal",href:"testo.aspx?id=13"},
			   	{text:"Hygrogen",href:"testo.aspx?id=14"}
			],
	elemId:""
};
menus[1] = {
	mBarImgId:"menuImg_2",
	mBarImgNormal:imagesNormal["aria"],
	mBarImgHilite:imagesHilite["aria"],
	menuItems:[	{text:"Air",href:"testo.aspx?id=2"},
			   {text:"Meteorology",href:"testo.aspx?id=85"}
			],
	elemId:""
};
menus[2] = {
	mBarImgId:"menuImg_3",
	mBarImgNormal:imagesNormal["acqua"],
	mBarImgHilite:imagesHilite["acqua"],
	menuItems:[	{text:"Water",href:"testo.aspx?id=1"},
{text:"Ice and glaciers",href:"testo.aspx?id=37"}
			],
	elemId:""
};
menus[3] = {
	mBarImgId:"menuImg_4",
	mBarImgNormal:imagesNormal["terra"],
	mBarImgHilite:imagesHilite["terra"],
	menuItems:[	{text:"Soil",href:"testo.aspx?id=15"},
			   	{text:"Subsoil",href:"testo.aspx?id=16"},
			   	{text:"Landscapes",href:"testo.aspx?id=17"},
				{text:"Caves",href:"testo.aspx?id=48"}
			],
	elemId:""
};
menus[4] = {
	mBarImgId:"menuImg_5",
	mBarImgNormal:imagesNormal["ecosistemi"],
	mBarImgHilite:imagesHilite["ecosistemi"],
	menuItems:[	{text:"Ecosystems",href:"testo.aspx?id=18"},
			   	{text:"Desert",href:"testo.aspx?id=19"},
			   	{text:"Savannah",href:"testo.aspx?id=20"},
			   	{text:"Rain forest",href:"testo.aspx?id=21"},
			   	{text:"Mediterranean Scrubs",href:"testo.aspx?id=22"},
			   	{text:"Coral reef",href:"testo.aspx?id=23"},
			   	{text:"Tundra",href:"testo.aspx?id=24"},
			   	{text:"Temperate forest",href:"testo.aspx?id=25"},
			   	{text:"Steppe",href:"testo.aspx?id=26"},
			   	{text:"Taiga",href:"testo.aspx?id=27"}
			],
	elemId:""
};
menus[5] = {
	mBarImgId:"menuImg_6",
	mBarImgNormal:imagesNormal["i5regni"],
	mBarImgHilite:imagesHilite["i5regni"],
	menuItems:[	{text:"Flora",href:"testo.aspx?id=28"},
			   	{text:"Fauna",href:"testo.aspx?id=29"},
			   	{text:"Fungi",href:"testo.aspx?id=30"},
			   	{text:"Protista",href:"testo.aspx?id=31"},
			   	{text:"Bacteria",href:"testo.aspx?id=32"}
			],
	elemId:""
};
menus[6] = {
	mBarImgId:"menuImg_7",
	mBarImgNormal:imagesNormal["speciali"],
	mBarImgHilite:imagesHilite["speciali"],
	menuItems:[	
{text:"Specials",href:"specialiarchivio.aspx"},
{text:"Caves",href:"speciali.aspx?id=73"}

			],
	elemId:""
};

//hash-table per ricerca rapida degli elementi del menu
function makeHashes(){
	for(var i=0; i<menus.length; i++){
		menus[menus[i].elemId] = menus[i];
		menus[menus[i].mBarImgId] = menus[i];
	}
}

//assegnamento degli eventi alle voci di menu
function assignLabelEvents(){
	var elem;
	for(var i=0; i<menus.length; i++){
		elem = document.getElementById(menus[i].mBarImgId);
		elem.onmouseover = swap;
		elem.onmouseout = swap;
	}
}

//funzione generatrice del menu, invocata da initMenu()
function makeMenus(){
	var menuDiv, menuItem, itemLink, mbarImg, textNode, offsetLeft, offsetTop;
	
	var menuItemH = 0;
	var bodyFontSize = parseInt(getElementStyle(document.body,"fontSize","font-size"));
	//Test per controllare che il fontsize sia stato o meno modificato dall'utente
	if(bodyFontSize == parseInt(CSSRulesValues.defaultBodyFontSize)){

		menuItemH = (parseFloat(CSSRulesValues.menuItemHeight));
	} else {
		//Aggiustamento per Netscape 7
		menuItemH = parseInt(parseFloat(CSSRulesValues.menuItemLineHeight)*bodyFontSize);
	}
	
	var heightAdjust = parseInt(CSSRulesValues.menuWrapperPadding)+parseInt(CSSRulesValues.menuWrapperBorderWidth);
	if(navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.indexOf("Win")!= -1 &&
			(typeof document.compatMode == "undefined" || document.compatMode == "BackCompat")){
		heightAdjust = -heightAdjust;
	}

	//creazione dei menu attraverso un ciclo del menu degli array
	for(var i=0; i<menus.length; i++){
		menuDiv = document.createElement("div");
		menuDiv.id = "popupmenu"+i;
		menus[i].elemId = "popupmenu"+i;
		menuDiv.className = "menuWrapper";
		if(menus[i].menuItems.length>0){
			menuDiv.style.height = (menuItemH*menus[i].menuItems.length) - heightAdjust + "px";
		} else {
			//non mostrare nulla perchè nn esistono sottomenu
			menuDiv.style.display = "none";
		}
		//definizione i gestori di evento per i menu
		menuDiv.onmouseover = keepMenu;
		menuDiv.onmouseout = requestHide;

		//imposta lo stacking order in caso esistano altri elementi posizionati sull'asse nella pagina
		menuDiv.style.zIndex = 1000;

		//assemblaggio dei sottomenu
		for(var j=0; j<menus[i].menuItems.length; j++){
			menuItem = document.createElement("div");
			menuItem.id = "popupmenuItem_"+i+"_"+j;
			menuItem.className = "menuItem";
			menuItem.onmouseover = toggleHighlight;
			menuItem.onmouseout = toggleHighlight;
			menuItem.onclick = hideMenus;
			menuItem.style.top = menuItemH * j + "px";
			itemLink = document.createElement("a");
			itemLink.href = menus[i].menuItems[j].href;
			itemLink.className = "menuItem";
			itemLink.onmouseover = toggleHighlight;
			itemLink.onmouseout = toggleHighlight;
			textNode = document.createTextNode(menus[i].menuItems[j].text);
			itemLink.appendChild(textNode);
			menuItem.appendChild(itemLink);
			menuDiv.appendChild(menuItem);
		}
		//appendo ogni menu al documento
		document.body.appendChild(menuDiv);
	}
	makeHashes();
	assignLabelEvents();
	//preposizionamento dei menu
	for(i=0; i<menus.length; i++){
		positionMenu(menus[i].elemId);
	}
	menuReady = true;
}

//variabile globale per gestire la scomparsa/comparsa dei menu
var timer;

//dal mouseover interno al menu per cancellare la richiesta di scomparsa
function keepMenu(){
	clearTimeout(timer);
}

function cancelAll(){
	keepMenu();
	menuReady = false;
}

//dal mouseout per richiedere la scomparsa dei menu dopo 1/4 di secondo, a meno che non venga cancellata
function requestHide(){
	timer = setTimeout("hideMenus()", 250);
}

//nascondo brutalmente tutti i menu e lascio solo la barra
function hideMenus(){
	for(var i=0; i<menus.length; i++){
		document.getElementById(menus[i].mBarImgId).src = menus[i].mBarImgNormal.src;
		var menu = document.getElementById(menus[i].elemId);
		menu.style.visibility = "hidden";
	}
}

//settaggio delle posizioni dei menu prima di visualizzarli
function positionMenu(menuId){
	//uso le immagini della barra per recuperare le posizioni dei div relativi
	var mBarImg = document.getElementById(menus[menuId].mBarImgId);
	var offsetTrail = mBarImg;
	var offsetLeft = -1;
	var offsetTop = 0;
	while(offsetTrail){
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	if(navigator.userAgent.indexOf("Mac")!=-1 && typeof document.body.leftMargin != "undefined"){
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}
	var menuDiv = document.getElementById(menuId);
	menuDiv.style.left = offsetLeft + "px";
	menuDiv.style.top = offsetTop + mBarImg.height + "px";
}

//visualizza un singolo menu particolare
function showMenu(menuId){
	if(menuReady){
		keepMenu();
		hideMenus();
		positionMenu(menuId);
		var menu = document.getElementById(menuId);
		menu.style.visibility = "visible";
	}
}

//swappo i css per gli elementi del menu durante il rollover
function toggleHighlight(evt){
	evt = (evt) ? evt : ((event) ? event : null);
	if(typeof menuReady != "undefined"){
		if(menuReady && evt){
			var elem = (evt.target) ? evt.target : evt.srcElement;
			if(elem.nodeType == 3){
				elem = elem.parentNode;
			}
			if(evt.type == "mouseover"){
				keepMenu();
				elem.className = "menuItemOn";
			} else {
				elem.className = "menuItem";
				requestHide();
			}
			evt.cancelBubble = true;
		}
	}
}

function swap(evt){
	evt = (evt) ? evt : ((event) ? event : null);
	if(typeof menuReady != "undefined"){
		if(evt && (document.getElementById && document.styleSheets) && menuReady){
			var elem = (evt.target) ? evt.target : evt.srcElement;
			if(elem.className == "menuImg"){
				if(evt.type == "mouseover"){
					showMenu(menus[elem.id].elemId);
					elem.src = menus[elem.id].mBarImgHilite.src;
				} else if(evt.type == "mouseout") {
					requestHide();
				}
				evt.cancelBubble;
			}
		}
	}
}

//creo i menu solo se il browser supporta le caratteristiche necessarie
function initMenus(){
	if(document.getElementById && document.styleSheets){
		setTimeout("makeMenus()",5);
		window.onunload = cancelAll;
	}
}