/***************************************************************************
* Menu a tendina dinamico
* Copyright 2003 - Mirko Minardi per conto di Sphera Software Srl
*****************************************************************************/

// 1. VARIABILI E METODI PER LA CREAZIONE DEI MENU

// vettore di riferimenti ai menu
var menuArray = new Array(); 

// numero di menu presenti (viene incrementato in maniera automatica)
var menuNum = 0

// indica quante voci sono presenti nell'array menuArray 
// prima delle voci da visualizzare (modificare all'occorrenza)
var numInfo = 4;

// indica quante voci sono presenti nell'array menuArray 
// per ciascuna voce da visualizzare (modificare all'occorrenza)
var lenMenu = 4;

// costanti che indicano la posizione dei rispettivi valori
// nel vettore dei menu
var ID_ = 0;
var TOP_ = 1;
var LEFT_ = 2;
var WIDTH_ = 3;
var NAME_ = 4;
var HEIGHT_ = 5;
var URL_ = 6;
var FUNCTION_ = 7;

// aggiunge un certo menu al vettore menuArray
function addMenu(menu) {
	menuNum++;
	menuArray[menuNum] = menu;
}

// crea il menubar nel documento corrente del browser
function makeMenubar() {
//alert (menuArray[1][6])
	document.write("<div class='mainmenubar' id='" + menuArray[1][ID_] + "' style='top:" + menuArray[1][TOP_] + "px; left:" + menuArray[1][LEFT_] +"px; '>");
	max = (menuArray[1].length - numInfo) / lenMenu;
	for (i = 0; i < max; i++) {
		if (menuArray[1][lenMenu * i + URL_] != "") {
			//link semplice
			document.write("<div class='menuItem0' onClick=location.href='" + menuArray[1][lenMenu * i + URL_] + "' style='top:0px; left:" + (i * menuArray[1][WIDTH_] + i * 2) + "px; width:" + menuArray[1][WIDTH_] + "px' onmouseOver='mEnter(this);mResetMenubar(this);' onmouseOut='mExit(this);canHide=true;canHideSub=true;'>");
		} else {
			// javascript
			document.write("<div class='menuItem1' style='top:0px; left:" + (i * menuArray[1][WIDTH_] + i * 2) + "px;width:" + menuArray[1][WIDTH_] + "px' onMouseOver=" + menuArray[1][lenMenu * i + FUNCTION_] + " onmouseOut='canHide=true;canHideSub=true;'>");
		}
		document.write(menuArray[1][lenMenu * i + NAME_]);
		document.write("</div>");
	}
	document.write("</div>");
}

// crea menu e submenu nel documento corrente del browser
function makeMenu() {
	for (i = 2; i <= menuNum; i++) {
		document.write("<div class='menuscript' id='" + menuArray[i][ID_] + "' style='top:" + menuArray[i][TOP_] + "px; left:" + menuArray[i][LEFT_] +"px; width:" + menuArray[i][WIDTH_] + "px;' onMouseOver='canHide=false;canHideSub=false;' onMouseOut='canHide=true;canHideSub=true'>");
		max = (menuArray[i].length - numInfo) / lenMenu;
		t = 0;
		for (j = 0; j < max; j++) {
			if (j == max - 1) {
				bordo = "border-bottom: 1px #000000 solid;";
			} else {
				bordo = " ";
			}
			if ( (menuArray[i][lenMenu * j + URL_] != "") && (menuArray[i][lenMenu * j + FUNCTION_] != "") ) {
				// menu + link
				str = "<div class='menulink2' onClick=location.href='" + menuArray[i][lenMenu * j + URL_] + "' onMouseOver=" + menuArray[i][lenMenu * j + FUNCTION_] + " style='position:absolute; top:" + t +"px; left:0px; width:" + menuArray[i][WIDTH_] + "px; height:" + menuArray[i][lenMenu * j + HEIGHT_] + ";" + bordo +"'>" + menuArray[i][lenMenu * j + NAME_] + "</div>"; 
				document.write(str);
			} else {
				if (menuArray[i][lenMenu * j + URL_] != "") {
					//link semplice
					str = "<div class='menulink' onClick=location.href='" + menuArray[i][lenMenu * j + URL_] + "' style='position:absolute;top:" + t + "px; left:0px; width:" + menuArray[i][WIDTH_] + "px; height:" + menuArray[i][lenMenu * j + HEIGHT_] + ";" + bordo + "' onMouseOver='mEnter(this);mReset(this);' onMouseOut='mExit(this);'>" + menuArray[i][lenMenu * j + NAME_] + "</div>";
					document.write(str);
				} else {
					// menu
					str = "<div class='menuItem2' onMouseOver=" + menuArray[i][lenMenu * j + FUNCTION_] + " style='position:absolute; top:" + t +"px; left:0px; width:" + menuArray[i][WIDTH_] + "px; height:" + menuArray[i][lenMenu * j + HEIGHT_] + ";" + bordo +"'>" + menuArray[i][lenMenu * j + NAME_] + "</div>";
					document.write(str);
				}
			}
			t += menuArray[i][lenMenu * j + HEIGHT_];
		}
		document.write("</div>");
	}
}





// 2. VARIABLI E FUNZIONI PER LA VISUALIZZAZIONE DEI MENU NEL BROWSER

// millisecondi per il timeout
var TIMEOUT = 900
// riferimento al menu visualizzato
var currentMenu = null;
// riferimento al submenu visualizzato
var currentSubMenu = null;
// riferimento all'item (di un menu) attualmente selezionato dal mouse
var currentMenuItem = null;
// riferimento all'item (di un submenu) attualmente selezionato dal mouse
var currentSubMenuItem = null;
// timeout per richiamare la funzione hideMenu()
var currentTimeout = null;
// timeout per richiamare la funzione hideSubMenu()
var currentTimeoutSub = null;
// variabile booleana per nascondere o visualizzare un menu
var canHide = false;
// variabile booleana per nascondere o visualizzare un submenu
var canHideSub = false;
//effetto di transizione (solo per IE)
//effect = "progid:DXImageTransform.Microsoft.Fade(duration=0.2);progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=88);progid:DXImageTransform.Microsoft.Shadow(color='#777777', Direction=135, Strength=5)"

// funzione di supporto per nascondere submenu
function mReset(obj) {
	if ((obj.parentNode.id.indexOf("submenu", 0) != 0) && (currentSubMenuItem != null)) {
		mExit(currentSubMenuItem);
		if (currentSubMenu != null) {
			currentSubMenu.style.visibility = "hidden";
			mExit(currentSubMenuItem);
			currentSubMenu = null;
			currentSubMenuItem = null;
		}
	}
}

// funzione di supporto per nascondere menu e submenu
function mResetMenubar(obj) {
	if (currentSubMenu != null) {
		currentSubMenu.style.visibility = "hidden";
		mExit(currentSubMenuItem);
		currentSubMenu = null;
		currentSubMenuItem = null;
	}
	if (currentMenu != null) {
		currentMenu.style.visibility = "hidden";
		mExit(currentMenuItem);
		currentMenu = null;
		currentMenuItem = null;
	}
}

// funzione richiamata dall'evento onMouseOver sull'elemento e
function mEnter(e) {
	e.style.backgroundColor = "#CCCCCC";
	e.style.color = "#000000";
}

// funzione richiamata dall'evento onMouseOut sull'elemento e
function mExit(e) {
	e.style.backgroundColor = "#FFFFFF";
	e.style.color = "navy";
}

// funzione che visualizza un certo menu
// Parametri:	menuid --> id del menu che deve essere visualizzato
//				m 	   --> elemento che richiama la funzione
function showMenu(menuid, m) {
	//nasconde il precedente menu (se presente)
	if (currentTimeout != null) {
		clearTimeout(currentTimeout);
		canHide = true;
		hideMenu();
	}
	//menu da visualizzare
	var menu = document.getElementById(menuid);
	mEnter(m);
	canHide = false;
	var menubar = document.getElementById("menubar");
	//calcola la posizione del menu da visualizzare
	var x = menubar.offsetLeft + m.offsetLeft;
	var y = menubar.offsetTop + m.offsetTop + 21;
	menu.style.left = x + "px";
	menu.style.top = y + "px";
	menu.style.visibility = "visible";
	currentMenu = menu;
	currentMenuItem = m;
	currentTimeout = setTimeout("hideMenu()", TIMEOUT);
}

// funzione richiamata da un timeout per nascondere il menu corrente
function hideMenu() {
	if (currentMenu != null && currentMenuItem != null && canHide) {
		currentMenu.style.visibility = "hidden";
		mExit(currentMenuItem);
		currentMenu = null;
		currentMenuItem = null;
		canHide = false;
		hideSubMenu();
	} else {
		currentTimeout = setTimeout("hideMenu()", TIMEOUT);
	}
}

// funzione che visualizza un certo submenu
// Parametri:	menuid --> id del submenu che deve essere visualizzato
//				m 	   --> elemento che richiama la funzione
function showSubMenu(menuid, m) {
	// nasconde il submenu precedentemente visualizzato (se esiste)
	if (currentTimeoutSub != null) {
		clearTimeout(currentTimeoutSub);
		canHideSub = true;
		hideSubMenu();
	}
	var menu = document.getElementById(menuid);
	currentSubMenuItem = m;
	currentSubMenu = menu;
	canHideSub = false;
	mEnter(m);
	// calcola la posizione del submenu da visualizzare
	var parent = m.parentNode;
	left_ = parent.style.left;
	top_ = parent.style.top;
	parentLeft = (left_.substr(0, left_.indexOf("px", 0)));
	parentTop = (top_.substr(0, top_.indexOf("px", 0)));
	left_ = m.style.left;
	width_ = m.style.width;
	top_ = m.style.top;
	mLeft = (left_.substr(0, left_.indexOf("px", 0)));
	mWidth = (width_.substr(0, width_.indexOf("px", 0)));
	mTop = (top_.substr(0, top_.indexOf("px", 0)));
	var x = eval(parentLeft) + eval(mLeft) + eval(mWidth) - 10 + "px";
	var y = eval(parentTop) + eval(mTop) + 5 + "px";
	menu.style.left = x;
	menu.style.top = y;
	menu.style.visibility = "visible";
	currentTimeoutSub = setTimeout("hideSubMenu()", TIMEOUT);
}

// funzione richiamata da un timeout per nascondere il submenu corrente
function hideSubMenu() {
	if (currentSubMenu != null && currentSubMenuItem != null && canHideSub) {
		currentSubMenu.style.visibility = "hidden";
		mExit(currentSubMenuItem);
		currentSubMenu = null;
		currentSubMenuItem = null;
		canHideSub = false;
	} else {
		currentTimeoutSub = setTimeout("hideSubMenu()", TIMEOUT);
	}
}
