/*
 * Variables globales
 *
 */
var ICMenuTimer;
var ICMenuConfig;

/*
 * Affichage d'un sous-menu
 *
 */
function ICMenuShow(subMenuId, anchorId)
{
	// menu à afficher
	var ICMenuDiv = $(subMenuId);
	
	// masquage de tous les sous-menus
	//ICMenuHide();
	
	// affichage du menu appelé
	if(ICMenuDiv && ICMenuDiv.style.display  && subMenuId) {	// on vérifie qu'on a quelquechose à afficher
		// coordonnées de l'ancre
		if($(anchorId)) {
			anchorXY = getAbsoluteOffset($(anchorId));
			anchorX = anchorXY[0];
			anchorY = anchorXY[1];
		}
		else {
			anchorX = 0;
			anchorY = 0;
		}
		
		// configuration de l'offset X
		if(ICMenuConfig['offset'][subMenuId]) {
			ICMenuDiv.style.left = anchorX + ICMenuConfig['offset'][subMenuId][0];
		}
		
		// configuration de l'offset Y
		if(ICMenuConfig['offset'][subMenuId]) {
			ICMenuDiv.style.top = anchorY + ICMenuConfig['offset'][subMenuId][1];
		}

		// affichage
		Element.show(ICMenuDiv);
	}
	
	// debug
	if(ICMenuConfig['debug']) {
		if(subMenuId && ICMenuDiv && ICMenuConfig['offset'][subMenuId]) {
			alert('appel : ICMenuShow('+subMenuId+')' + '\n' + 'menu affiché : '+ICMenuDiv.id + '\n' + 'offset : '+ICMenuConfig['offset'][subMenuId][0]+', '+ICMenuConfig['offset'][subMenuId][1]);
		}
	}
}

/*
 * Masquage retardé
 *
 */
function ICMenuHide()
{
	// on annule le timeout en cours
	clearTimeout(ICMenuTimer);
	
	// avant de le relancer
	ICMenuTimer = setTimeout("ICMenuHideAll()", ICMenuConfig['timeout']);
}

/*
 * Masquage de tous les sous-menus
 *
 */
function ICMenuHideAll()
{
	for (var i = 1; i <= ICMenuConfig['nbICMenuSub']; i++) {
		if($('ICMenuSub'+i)) {
			Element.hide($('ICMenuSub'+i));
		}
	}
}

/*
 * Annule le masquage programmé des menus
 *
 */
function ICMenuClearTimeout()
{
	clearTimeout(ICMenuTimer);
}

/*
 * Lancement initial
 *
 */
function ICMenuInit(timeout, nbICMenuSub, offsets)
{
	ICMenuConfig = new Array();
	
	ICMenuTimeout = timeout;
	ICMenuConfig['nbICMenuSub'] = nbICMenuSub;
	ICMenuConfig['offset'] = new Array();
	
	if(offsets) {
		ICMenuConfig['offset'] = offsets;
	}
	
	// on applique les évènements onMouseOver et onMouseOut, la position
	// et le style aux ICMenuSub une fois la page chargée
	Event.observe(window, 'load', function() {
		for (var i = 1; i <= ICMenuConfig['nbICMenuSub']; i++) {
			if($('ICMenuSub'+i)) {
				$('ICMenuSub'+i).style.top = 0;
				$('ICMenuSub'+i).style.left = 0;
				
				Event.observe($('ICMenuSub'+i), 'mouseover', ICMenuClearTimeout);
				Event.observe($('ICMenuSub'+i), 'mouseout', ICMenuHide);
				
				Position.absolutize($('ICMenuSub'+i));
				Element.hide($('ICMenuSub'+i));
			}
		}
	});
}

/*
 * Donne la position absolue d'un élément
 * (http://www.prototypejs.org)
 *
 */
function getAbsoluteOffset(element)
{
	var positionX = 0;
	var positionY = 0;
	
	if(element) {
		position = Position.cumulativeOffset(element);
		positionX = position[0];
		positionY = position[1] += element.getHeight();		// décalage car cumulativeOffset() donne les coordonnées du coin haut-gauche
	}
	
	return [positionX, positionY];
}
