//#######################################################################################
// MENUS JAVASCRIPT
// Copyright: Anaximandre 2006
// Auteur: Stephane PERECK
// Derniere modification: 20/04/2006
//#######################################################################################


//#######################################################################################
// VALEURS INITIALES
//#######################################################################################


var numDernierMenu = false;
var stopMenu = false;
if (!tabMenus) var tabMenus = new Array();


//#######################################################################################
// EXEMPLE DE PARAMETRAGE
//#######################################################################################


/*
var menuTemps = 500; // Temps de visibilite des menus en millisecondes (default = 500)
var menuPrefixe = 'menujs_'; // Prefixe des id
var menuSurvol = 'hover'; // Suffixe des className pour le survol (rollover)
var menuBorder = '0'; // Border des blocs (peut etre contrarie par la feuille de style)
var menuCellspacing = '1'; // Cellspacing des blocs (peut etre contrarie par la feuille de style)
var menuCellpadding = '2'; // Cellpadding des blocs (peut etre contrarie par la feuille de style)
var menuOrientation = false; // Orientation du menu d'origine: true = horizontal, false = vertical
var menuLargeur = '20%'; // Largeur du bloc d'origine
var menuHauteur = false; // Hauteur du bloc d'origine
var menuDecalageHaut = -2; // Decalage en hauteur des sous menus (en pixels)
var menuDecalageGauche = 2; // Decalage en largeur des sous menus (en pixels)
var menuFlecheBas = '<span style="font:14px Webdings">6</span>'; // Html de la fleche bas ou false
var menuFlecheDroite = '<span style="font:14px Webdings">4</span>'; // Html de la fleche droite ou false
var menuAvecConstruitMenus = true; // Autorise la construction automatique des menus en javascript
var menuOrigine = 0; // Numero du menu d'origine ou -1 (defaut = 0)
var menuReference = 0; // Reference unique
var menuDebug = true;
tabMenus[menuReference] = 
[['classBloc',
	'Lien 1.1','url 1.1',false,'classElement',
	'Lien 1.2','url 1.2',1,'classElement',
	'Lien 1.3','url 1.3',false,'classElement']
,['classBloc',
	'Lien 1.2.1','url 1.2.1',false,'classElement',
	'Lien 1.2.2','url 1.2.2',false,'classElement',
	'Lien 1.2.3','url 1.2.3',2,'classElement',
	'Lien 1.2.4','url 1.2.4',false,'classElement']
,['classBloc',
	'Lien 1.2.3.1','url 1.2.3.1',false,'classElement',
	'Lien 1.2.3.2','url 1.2.3.2',false,'classElement']
];
*/

//#######################################################################################
// INITIALISATION
//#######################################################################################


// Construction des menus
if (menuAvecConstruitMenus && tabMenus[menuReference]) {
	var html = '';
	for (var i = 0; i < tabMenus[menuReference].length; i++) {
		html += menuConstruitBloc(menuReference,i);
	}
	document.write(html);
	if (menuDebug) document.write('<br / ><textarea cols="80" rows="40">' + html + '</textarea>');
}


//#######################################################################################
// FONCTIONS
//#######################################################################################


// Ouvre une url
function menuLien(url) {
	window.location.href = url;
}
// Retourne la position d'un bloc
function menuDonnePosition(what,offsetType,orientation){
	var totalOffset = (offsetType == 'left') ? what.offsetLeft + (orientation ? 0 : what.offsetWidth) : what.offsetTop + (orientation ? what.offsetHeight : 0);
	var parentEl = what.offsetParent;
	while (parentEl != null){
		totalOffset = (offsetType == 'left') ? totalOffset + parentEl.offsetLeft : totalOffset + parentEl.offsetTop;
		parentEl = parentEl.offsetParent;
	}
	return totalOffset;
}
// Affiche un bloc
function menuAffBloc(idItemMenu,classNameItemMenu,numBlocMenu,numSousMenu,orientation,reference) {
	//menuMsqSauf(reference);
	clearTimeout(stopMenu);
	if (classNameItemMenu) idItemMenu.className = classNameItemMenu + menuSurvol;
	var idSousMenu = numSousMenu ? document.getElementById(numSousMenu) : false;
	//if (numBlocMenu == menuPrefixe+menuOrigine) menuMsqTout(reference);
	if (numDernierMenu != false && numDernierMenu != numBlocMenu) document.getElementById(numDernierMenu).style.visibility = 'hidden';
	if (idSousMenu) {
		idSousMenu.style.top = menuDonnePosition(idItemMenu,'top',orientation) + menuDecalageHaut;
		idSousMenu.style.left = menuDonnePosition(idItemMenu,'left',orientation) + menuDecalageGauche;
		idSousMenu.style.visibility = 'visible';
		numDernierMenu = numSousMenu;
	}
}
// Masque tous les tableaux de menu, sauf ceux correspondant à la reference passee en parametre
function menuMsqSauf(reference)
{
	for(i in tabMenus)
	{
		if(i==reference)
			continue;
		tab=tabMenus[i];
		for(var j=0;j<tab.length;j++)
		{
			id=tab[j];
			if(id=="0")
				continue;
			element=document.getElementById(id);
			if(element)
				element.style.visibility='hidden';
		}
	}
}
// Masque un bloc
function menuMsqBloc(idItemMenu,classNameItemMenu,reference) {
	stopMenu = setTimeout('menuMsqTout('+reference+')',menuTemps);
	if (classNameItemMenu) idItemMenu.className = classNameItemMenu;
}
// Masque tous les blocs
function menuMsqTout(reference) {
	for (var n = 1; n < tabMenus[reference].length; n++) {
		numBlocMenu = menuAvecConstruitMenus ? menuPrefixe + n : tabMenus[reference][n];
		document.getElementById(numBlocMenu).style.visibility = 'hidden';
	}
}
// Construit un bloc
function menuConstruitBloc(reference,numBlocMenu) {
	var tabMenusRef = tabMenus[reference];
	var nbItemsMenu = (tabMenusRef[numBlocMenu].length - 1) / 4;
	var classNameBlocMenu   = tabMenusRef[numBlocMenu][0];
	var codeSup  = '';
	var orientation = false;
	if (numBlocMenu == 0) {
		orientation = menuOrientation;
		if (menuLargeur) codeSup += ' width="' + menuLargeur + '"';
		if (menuHauteur) codeSup += ' height="' + menuHauteur + '"';
	} else {
		orientation = false;
	}
	var retour  = '<table id="' + menuPrefixe + numBlocMenu + '" style="z-index:10000' + numBlocMenu + ';' + ((numBlocMenu == 0) ? 'visibility:visible' : 'position:absolute;visibility:hidden') + '" border="' + menuBorder + '" cellspacing="' + menuCellspacing + '" cellpadding="' + menuCellpadding + '" class="' + classNameBlocMenu + '" ' + codeSup + '>\n';
	retour += '<tr>\n';
	for (var numItemMenu = 0; numItemMenu < nbItemsMenu; numItemMenu++) {
		var idItemMenu = menuPrefixe + numBlocMenu + '_' + numItemMenu;
		var texteItemMenu = tabMenusRef[numBlocMenu][4 * numItemMenu + 1];
		var urlItemMenu = tabMenusRef[numBlocMenu][4 * numItemMenu + 2];
		var numSousMenu = tabMenusRef[numBlocMenu][4 * numItemMenu + 3];
		var classNameItemMenu = tabMenusRef[numBlocMenu][4 * numItemMenu + 4];
		if (numItemMenu != 0 && !orientation) retour += '</tr>\n<tr>';
		if (numSousMenu) {
			if (orientation && menuFlecheBas) {
				if (menuFlecheBas.substr(0,4) == '<img') texteItemMenu = menuFlecheBas + '&nbsp;' + texteItemMenu;
				else texteItemMenu += '&nbsp;' + menuFlecheBas;
			} else if (!orientation && menuFlecheDroite) {
				if (menuFlecheDroite.substr(0,4) == '<img') texteItemMenu = menuFlecheDroite + '&nbsp;' + texteItemMenu;
				else texteItemMenu += '&nbsp;' + menuFlecheDroite;
			}
			var refSousMenu = '\'' + menuPrefixe + numSousMenu + '\'';
		} else {
			var refSousMenu = 'false';
		}
		retour += '<td id="' + idItemMenu + '" class="' + classNameItemMenu + '" onmouseover="menuAffBloc(this,\'' + classNameItemMenu + '\',\'' + menuPrefixe + numBlocMenu + '\',' + refSousMenu + ',' + orientation + ',' + menuReference + ')" onmouseout="menuMsqBloc(this,\'' + classNameItemMenu + '\',' + menuReference + ')" onclick="menuLien(\'' + urlItemMenu + '\')">' + texteItemMenu + '</td>\n';
	}
	retour += '</tr>\n';
	retour += '</table>\n';
	
	return retour;
}
