/*
Script modificato in data 6.10.2008
Modificato comportamento: al click del mouse si apre il sottomenu, un altro click e si chiude
Tolta dalla visualizzazione la root del sito (vedi riga commentata sotto
NOTA: questo script è utilizzato come menu verticale
*/
//------------------------------------
// Created on 8.3.2006
// (c) Jan Ptacek
//------------------------------------

// alib Hmenu object
function Hmenu() {};

//------------------------------------
//
//------------------------------------

Hmenu.prototype.addBehavior = function() {
	// get menu roots
	var node;
	var i = 0;
	var k = 1;
	while((node = document.getElementsByTagName('UL').item(i++))) {
		if (node.className == 'hmenu') {
			node.id= 'hmenu';
			for (var j = 0; j < node.childNodes.length;j++) {
				if (node.childNodes[j].tagName == 'LI') {
					if (node.childNodes[j].childNodes[0].className == 'selected') {
						openSubMenu(node.childNodes[j]);
						node.childNodes[j].childNodes[0].opened=true;
					}
					Hmenu.prototype.initMenuItem(node.childNodes[j], k++);
				}
			}
		}
	}
}

//metodo per aprire il sottomenu del nodo selezionato
function openSubMenu(node) {
	for (var i = 0; i < node.childNodes.length;i++) {
		if (node.childNodes[i].tagName == 'UL') {
			var nodeUL = node.childNodes[i];
			node.cachedUL = nodeUL;
			node.cachedUL.style.display = 'block';	
		}
	}
}

Hmenu.prototype.initMenuItem = function(li, num) {
	for (var i = 0; i < li.childNodes.length;i++) {
		if (li.childNodes[i].tagName == 'UL') {
			var nodeUL = li.childNodes[i];
			li.cachedUL = nodeUL;
			// 1 + n-level submenu
			alib.addListener(li, 'click', Hmenu.prototype.showHideSubmenu);
			var k = 1;
			for (var j = 0; j < nodeUL.childNodes.length;j++) {
				if (nodeUL.childNodes[j].tagName == 'LI')
					this.initMenuItem(nodeUL.childNodes[j], k++);
			}
		}
	}
}

Hmenu.prototype.showHideSubmenu = function(e) {
	if (!e) e = window.event;
	var target = alib.getTarget(e);
	if (!target.opened){
		//apro il menu
		target.opened=true;
		if (target.tagName == 'A') 
			target = target.parentNode;
		if (target.cachedUL) {
				target.cachedUL.style.display = 'block';	
				//disabilito il link del padre
				if (e && e.preventDefault)
					e.preventDefault();
				else e.returnValue = false;
			}
		//chiudo tutti le sottovoci aperte nel menu in cui mi trovo...
		var children = target.parentNode.childNodes;
		for ( var i = 0; i < children.length; i++ ) {
			if (children[i].tagName == "LI" && children[i].cachedUL && children[i] != target) {
				children[i].childNodes[0].opened = false;
				children[i].cachedUL.style.display = 'none';
			}
		}
		//...e nell'altro menu della pagina
		var altroMenu = document.getElementById('vmenu');
		var children2 = altroMenu.childNodes;
		for ( var i = 0; i < children2.length; i++ ) {
			if (children2[i].tagName == "LI" && children2[i].cachedUL) {
				children2[i].childNodes[0].opened = false;
				children2[i].cachedUL.style.display = 'none';
			}	
		}	
	}else{
		//chiudo il menu
		target.opened=false;
		var related = alib.getRelatedTarget(e);
		if (!related || related.tagName == 'HTML')
			related = document.getElementsByTagName('body')[0];
		// find ul upon related node or body
		var commonUL = related;
		while (commonUL.tagName != 'UL' && commonUL.tagName != 'BODY')
			commonUL = commonUL.parentNode;
		// iterate up the tree from target till commonUL and close submenu
		while (target != commonUL && target.tagName != 'BODY') {
			if (target.cachedUL) {
				target.cachedUL.style.display = 'none';
			}
			target = target.parentNode;
		}
		//disabilito il link del padre
		if (e.preventDefault)
			e.preventDefault();
		else e.returnValue = false;
		
	}
}
/* INITS */

var hmenu = new Hmenu();

// register onload init
alib.addListener(window, 'load', hmenu.addBehavior);