/**
 * Animation du menu "à gauche".
 * 
 * @require	jQuery
 */
(function($) {

	/**
	 * Création ou récupération d'espaces de noms spécifiques.
	 */
	
	var P = window.PAGE || (window.PAGE = {});
	var $_info = P._info || (P._info = {});

	/**
	 * Id d'éléments de la page et classes qu'ils peuvent porter.
	 */
	
	var sLeftPrefix = "leftMenu";
	var sLeftClass = sLeftPrefix;	// leftMenu
	
	var sLeftItemPrefix = sLeftPrefix + "Item"; // leftMenuItem
	var sLeftItemClass = sLeftItemPrefix; // leftMenuItem
	var sLeftItemNumClassPrefix = sLeftItemPrefix + "-"; // leftMenuItem-
	var sLeftItemContBackClass = sLeftItemPrefix + "ContBack"; // leftMenuItemContBack
	var sLeftItemTextClass = sLeftItemPrefix + "Text"; // leftMenuItemText
	
	var sSubPrefix = "leftSubMenu";
	var sSubClass = sSubPrefix; // leftSubMenu
	
	var sSubItemPrefix = sSubPrefix + "Item"; // leftSubMenuItem
	var sSubItemClass = sSubItemPrefix; // leftSubMenuItem
	var sSubItemNumClassPrefix = sSubItemPrefix + "-"; // leftSubMenuItem-
	var sSubItemContBackClass = sSubItemPrefix + "ContBack"; // leftSubMenuItemContBack
	
	var sActiveClass = "active";
	var sOpenClass = "open";
	var sLinkClassPrefix = "link-to-page-id-";
	
	var _aDefaultActiveItems;
	
	/**
	 * Active une entrée de menu, ce qui conduit généralement à la mettre en
	 * valeur.
	 * 
	 * @param	jQuery	j	Une ou plusieurs entrée(s) de menu.
	 */	
	function activate(jItems) {
		jItems.addClass(sActiveClass);
	}
	
	/**
	 * Désactive une entrée de menu, annulant sa mise en valeur.
	 * 
	 * @param	jQuery	j	Une ou plusieurs entrée(s) de menu.
	 */
	function deactivate(jItems) {
		jItems.removeClass(sActiveClass);
	}
	
	/**
	 * Ouvre une entrée de menu, ce qui conduit généralement à afficher son
	 * sous-menu, lorsque ce dernier est présent.
	 * 
	 * @param	jQuery	j	Une ou plusieurs entrée(s) de menu.
	 */	
	function open(jItems) {
		jItems.addClass(sOpenClass);
	}
	
	/**
	 * Ferme une entrée de menu, cachant son éventuel sous-menu.
	 * 
	 * @param	jQuery	j	Une ou plusieurs entrée(s) de menu.
	 */	
	function close(jItems) {
		jItems.removeClass(sOpenClass);
	}
	
	/**
	 * Fournit les entrées de menu qui doivent être activées par défaut sur la
	 * page actuelle.
	 * 
	 * @return	Array	Des entrées de menu, ou <code>null</code>.
	 */	
	function getDefaultActiveItems() {
		
		if (typeof _aDefaultActiveItems === "undefined") {
			
			if (typeof $_info.pathIds !== "undefined" && $_info.pathIds.length > 2) {
				
				_aDefaultActiveItems = [];
				
				_aDefaultActiveItems.push($(
					"." + sLeftClass + " ." + sLinkClassPrefix + $_info.pathIds[2]
				).closest("." + sLeftItemClass));
				
				if ($_info.pathIds.length > 3) {
					
					_aDefaultActiveItems.push($(
						"." + sSubClass + " ." + sLinkClassPrefix + $_info.pathIds[3]
					).closest("." + sSubItemClass));
				}
			}
			else {
				_aDefaultActiveItems = null;
			}
		}
		
		return _aDefaultActiveItems;
	}
	
	/**
	 * Active les entrées de menu qui doivent être activées par défaut sur la
	 * page actuelle, et ouvre celle de ces entrées qui est de niveau 2 (si
	 * elle possède un sous-menu).
	 */
	function activateDefaultItems() {
		
		var aItems = getDefaultActiveItems();
		
		if (!!aItems && aItems.length > 0) {
			
			activate(aItems[0]);
			
			if (aItems[0].find("." + sSubClass).length > 0) {
				open(aItems[0]);
			}
			
			if (aItems.length > 1) {
				activate(aItems[1]);
			}
		}		
	}
	
	/**
	 * Mise en place au chargement de la page.
	 */	
	$(document).ready(function() {
		
		if ($("." + sLeftClass).length > 0) {
		
			// Sélectionne et ouvre les entrées par défaut.
			
			activateDefaultItems();
		}
	});
})
(jQuery);