/* Script élémentaire pour menu hierarchique en colones (3 niveaux)
 *
 * Utilisation :
 * 1.	créer une boîte DIV identifiée #menuCol
 * 2.	y imbriquer des boîtes classifiées .niveauA, .niveauB et .niveauC
 * 		(une seule de niveau A, autant que nécessaire de niveaux B et C)
 * 3.	identifier les boîtes de niveau B et C à votre convenance
 *		ex. id="itemBUn"
 * 4.	identifier les boîtes devant s'afficher par défaut en B et C
 *		ex. id="itemBVide"
 * 5.	créer dans les boîtes des liste ul et dans ces listes les liens servant de menu
 *		ex. href="javascript:;" ou href="http://monadresse..."
 * 6.	attribuer à chaque lien une propriété rel reprenant l'identifiant de la boîte
 *      à afficher au niveau inférieur
 *		ex. rel="itemCDeux"
 * 7.	définir ci-dessous les menus de niveaux B et C par défaut
 *
 *
 * Version : -liveQuery- 1.1.0 (effacement après un court délais)
 *            Version modifiée nécessitant le plugin LiveQuery
 *            pour une manipulation du DOM altéré
 *            http://plugins.jquery.com/project/livequery
 *
 * Alternatives :
 *
 * Rendre les menus cliquables plutôt que survolables :
 * -> remplacer mouseover() par click()
 * 
 * Utiliser des effets de fondu jQuery :
 * -> remplacer hide() et show() par fadeOut() fadeIn()
 * ex.
 * actuelB.fadeOut(100, function() {
 *	  actuelB = prochainB;
 *	  actuelB.fadeIn(100);
 *	});
 *
 */

// Variables pour les menus à afficher
var actuelB;
var actuelC;
var prochainB;
var prochainC;

// Définition des menus de niveaux B et C par défaut
actuelB = $("div#itemBVide");
actuelC = $("div#itemCVide");

// Fonctions permettant de ré-initialiser les menus après un court délais
effacer = function() {
  // Si l'un des sous-menus est affiché
  if (actuelB.attr("id") != "itemBVide") {
    // On supprime les classes "selected" pour tous les menus
    $("div.niveauA ul li a").attr("class", "");
    $("div.niveauA ul li").attr("class", "");
    $("div.niveauB ul li a").attr("class", "");
    $("div.niveauB ul li").attr("class", "");
    // On efface les menus de niveaux B et C
    actuelB.fadeOut(500);
    actuelC.fadeOut(500);
    actuelB = $("div#itemBVide");
    actuelC = $("div#itemCVide");
    // On arrête le décompte
    stopperDecompte();
  }
};

demarrerDecompte = function() {
  decompte = setInterval(function() { effacer() }, 5000);
};

stopperDecompte = function() {
  clearInterval(decompte);
};

// lorsque le document est chargé totalement
$(document).ready(function() {
  // on masque les colonnes de niveaux B et C (sélecteur CSS)
  $("div#menuCol div.niveauB").livequery(function(){ $(this).hide(); });
  $("div#menuCol div.niveauC").livequery(function(){ $(this).hide(); });
  // on applique un style de curseur neutre pour les liens sans ancre
  $("div#menuCol a").livequery(function(){ $(this).filter('[href="javascript:;"]').attr("style", "cursor:default;"); });
  // et on affiche les menus par défaut
  actuelB.show();
  actuelC.show();
  // on démarre une première fois le décompte
  demarrerDecompte();
  stopperDecompte();
  // On stop le décompte lorsque le curseur passe sur le menu,
  // et on le relance lorsqu'il en sort
  $("div#menuCol").livequery(function(){ $(this).hover(function() {stopperDecompte();},function() {demarrerDecompte();}); });

  // Affichage des menus du niveau B
  // lorsqu'on survol le menu de niveau A
  $("div.niveauA ul li a").livequery(function(){ $(this).mouseover(function() {
	// on stocke la "cible" à afficher
    prochainB = $("div"+this.getAttribute('rel',2));
    // suppression de la classe "selected" pour les autres menus
    $("div.niveauA ul li a").attr("class", "");
	$("div.niveauA ul li").attr("class", "");
    $("div.niveauB ul li a").attr("class", "");
	$("div.niveauB ul li").attr("class", "");
    // attribution de la classe "selected" pour le menu à afficher
    $(this).attr("class", "selected");
	$(this).parents("li").attr("class", "selected");
	// on masque le précédent menu de niveau B
	// et on affiche le menu choisi à sa place
	actuelB.hide();
	actuelB = prochainB;
	actuelB.show();
	// on masque le précédent menu de niveau C
	// et on affiche le menu de niveau C par défaut
	actuelC.hide();
	actuelC = $("div#itemCVide");
	actuelC.show();
    return false;
  });});

  // Affichage des menus du niveau C
  // lorsqu'on survol le menu de niveau B
  $("div.niveauB ul li a").livequery(function(){ $(this).mouseover(function() {
    // on stocke la "cible" à afficher
    prochainC = $("div"+this.getAttribute("rel",2));
    // suppression de la classe "selected" pour les autres menus
    $("div.niveauB ul li a").attr("class", "");
	$("div.niveauB ul li").attr("class", "");
    // attribution de la classe "selected" pour le menu à afficher
    $(this).attr("class", "selected");
	if (this.getAttribute("rel",2) != "#itemCVide") { $(this).parents("li").attr("class", "selected"); }
	// on masque le précédent menu de niveau C
	// et on affiche le menu choisi à sa place
	actuelC.hide();
	actuelC = prochainC;
	actuelC.show();
    return false;
  });});
});