var stack = new Array();
var monitor = false;


function getLevel (element) {
	var level = 1;
	while (element.up().id != "nav_menu") {
		element = element.up();
		level++;
	}
	return level/2;
}


function getLastVisibleLevel () {
	return stack.size();
}


function is_first (id) {
	return stack[0] == id;
}

function menuType (element) {
	while (element != document) {
		if (element.hasClassName('lm_left')) 
			return 1;
		else if (element.hasClassName('lm_right')) 
			return 2;
		element = element.up();
	}
	return 0;
}


function expand (element) {
	var submenu = Element.childElements(element)[Element.childElements(element).size()-1];
	submenu.show();
	
		
	submenu.style.position = "absolute";
//	submenu.addClassName('level_'+getLevel(submenu));
//	submenu.addClassName('submenu');

	if (getLevel(submenu) == 1) {
		var left = element.cumulativeOffset()[0];
		var top = element.cumulativeOffset()[1];
	} else {		
		var top = element.offsetTop;
		var left = element.style.left.replace('px','')*1;
	}

	if (menuType(element) == 0 && getLevel(submenu) <= 1) {			// Orizzontale
		submenu.style.left = left+'px';
		submenu.style.top = top+element.getHeight()+'px';
	} else if (menuType(element) == 2) {	// Destra	
		submenu.style.left = (left - submenu.getWidth())+'px';
//		alert(submenu.style.left);
		submenu.style.top = top+'px';
		element.cssFloat = 'none';
		element.styleFloat = 'none';
	} else {								// Sinistra
		submenu.style.left = (left + element.getWidth())+'px';
		submenu.style.top = top+'px';
		element.cssFloat = 'none';
		element.styleFloat = 'none';
	}
	
	
}


function clearAll () {
	// Cancella tutti i sottomenu visibili
	$$('.submenu').each (function (div) {
		div.hide();
	});
}


function render () {
	clearAll();
	
	// Mostra il menu basandosi sullo stack
	stack.each (function (id) {
		expand($(id));
	});

//	$('langsite').innerHTML = stack;
}


function showsubmenu(e, element){
	try{
		var submenu = Element.childElements(element)[Element.childElements(element).size()-1];		
		var level = getLevel(submenu);

		if (!submenu.visible()) { 							// Stiamo andando avanti
			monitor = true;

			if (getLastVisibleLevel() == level) {
				stack.pop();
			}

			stack.length = level - 1;
			stack.push(element.id);
		} else {											// Stiamo andando indietro, su o giù
			if (!monitor) {
				monitor = true;
				if (getLastVisibleLevel() > level) {
					var id = stack.pop();
				}
			} else {										// Evento intercettato dal nodo radice
				if (stack.size() == 0 || is_first(element.id)) {
					monitor = false;
					render();	

					if (!e) var e = window.event;
					e.cancelBubble = true;
					if (e.stopPropagation) e.stopPropagation();
				}
			}
		}

		if (level == 1 && monitor) {
			render();

			if (!e) var e = window.event;
			e.cancelBubble = true;
			if (e.stopPropagation) e.stopPropagation();
		}
	} catch(ex){
		alert(ex);
	}
}


function hidesubmenu(e, element){
}


Event.observe(window, 'load', function() {
	Event.observe(document.body,'mouseover',function () {
		clearAll();
	});
});

