// Menu visible
var shownMenu;

// Compte à rebours avant de masquer le menu
var timeout;

// Temps en ms avant de masquer un menu
var HIDE_MENU_TIMEOUT = 450;

var menuPosition;

/**
 * Affiche le menu repéré par son identifiant. Si un menu était déjà affiché,
 * il est masqué.
 *
 * @param {string} name L'identifiant du menu à afficher.
 */
function showMenu(name, rollOut) {
	var currentMenu = shownMenu;
	hideShownMenu();
	shownMenu = name;
	
	var menu = document.getElementById('menu_' + name);
	var submenu = document.getElementById('submenu_' + name);
	
	var container = document.getElementById('submenuContainer');
	submenu.style.display = 'block';
	container.style.left = menu.offsetLeft + 'px';
	container.style.display = 'block';
	container.style.width = submenu.offsetWidth + 'px';
	container.style.height = submenu.offsetHeight + 'px';
	
	if (rollOut && name != currentMenu) {
		menuPosition = -menu.offsetHeight * 2;
		rollOutMenu(name);
	}
}

function rollOutMenu(menuName) {
	var currentPosition = menuPosition;
	
	if (currentPosition > - 2) {
		currentPosition = 0;
	} else {
		currentPosition = Math.floor(currentPosition / 2);
		window.setTimeout('rollOutMenu(\'' + menuName + '\');', 30);	
	}
	
	menuPosition = currentPosition;
	document.getElementById('submenu_' + menuName).style.top = currentPosition + 'px';	
}

/**
 * Masque le menu affiché. Si aucun menu n'est affiché, cette fonction n'a
 * aucun effet.
 */
function hideShownMenu() {
	if (shownMenu) {
		clearHideMenuTimeout();
		document.getElementById('submenu_' + shownMenu).style.display = 'none';
		document.getElementById('submenuContainer').style.display = 'none';
		shownMenu = '';
	}
}

/**
 * Lance un compteur afin de masquer le menu affiché. Le délai avant que le
 * menu soit masqué est défini par la constante HIDE_MENU_TIMEOUT.
 */
function setHideMenuTimeout() {
	timeout = setTimeout('hideShownMenu()', HIDE_MENU_TIMEOUT);
}

/**
 * Annule le compteur pour masquer le menu affiché. Si le compteur n'est pas
 * lancé, cette fonction n'a pas d'effet.
 */
function clearHideMenuTimeout() {
	if (timeout)
		clearTimeout(timeout);
}
