/**
 * Librairie javascript du menu
 *
 * @author		Julie Tétard <julie@2jstudio.com> 
 * @version		2.0
 * @package		Mediaweb
 * @subpackage 	js
 * @category 	shared
 */
 


/**
 * Instructions de chargement des fonctions d'initialisation
 */
	
	MW_smartAttachEvent(window, 'load', MW_menu_initEvents, false);



/**
 * Fonctions d'initalisation
 */

	/**
	 * Fonction initialisant les actions du menu
	 *
	 * @return		-
	 */
	function MW_menu_initEvents() 
	{
		// Liste des images qui n'ont pas besoin de rollOver
		var noRollImgTab = ['menuBefore', 'menuInter', 'menuAfter', 'menuInclude'];
		// Evénements du menu
		for(var i = 0 ; i < document.getElementById('menuList').childNodes.length ; i++) {
			// On récupère chaque élément de la liste
			var li = document.getElementById('menuList').childNodes[i];
			// S'il contient un noeud enfant 
			if (li.nodeType == 1) {
				var liChild = MW_smartChild(li, 1);
				// Si le premier enfant de ce noeud enfant est une image, il s'agit d'une image non active
				// On recupère donc l'enfant suivant
				if (liChild.nodeName.toLowerCase() == 'img') {
					var liChild = MW_smartChild(li, 2);
				}
				// Si le noeud enfant ainsi obtenu est bien un a
				if (liChild.nodeName.toLowerCase() == 'a') {
					// S'il existe une liste dans cet élément, alors on ajoute sur le a l'action 
					// d'affichage/masquage de la liste
					if(li.getElementsByTagName('ul').length > 0) {
						MW_smartAttachEvent(liChild, 'click', MW_showMenu, false);
					}
					// Si le noeud a contient un enfant de type neud
					if (liChild.childNodes[0].nodeType == 1) {
						var liGrandChild = MW_smartChild(liChild, 1);
						// Si le premier enfant de a est bien une image 
						if (liGrandChild.nodeName.toLowerCase() == 'img') {
							// Et que cette image n'est pas une des images proscrites
							var found = false;
							for (var index in noRollImgTab) {
								if (liGrandChild.id == noRollImgTab[index] || liGrandChild.parentNode.parentNode.id == noRollImgTab[index]) {
									var found = true;
									break;
								}
							}
							// On lui assigne un rollover
							if (found === false) {
								MW_smartAttachEvent(liGrandChild, 'mouseover', MW_menuRollOverOut, false);
								MW_smartAttachEvent(liGrandChild, 'mouseout', MW_menuRollOverOut, false);
							}
						}
					}
				}
			}
		}
		// Target des liens
		var aTags = document.getElementsByTagName('a');
		for(i=0 ; i<aTags.length ; i++) {
			// On découpe le lien selon les #
			var dieseTab = aTags[i].href.split('#');
			// S'il existe bien un # dans le lien
			if (dieseTab.length == 2) {
				// On enlève l'argument passé avec du lien
				aTags[i].href = dieseTab[0];
				aTags[i].target = dieseTab[1];
				// On assigne la fonction d'ouverture dans une nouvelle fenêtre 
				// si l'argument est égal à _blank
			}
		}
	}


/**
 * Fonctions d'exécution
 */

	/**
	 * Fonction affichant un rollover / rollout
	 *
	 * @param		object	event		Objet évenement
	 */
	function MW_menuRollOverOut(event)
	{
		// On récupère l'image cible
		var target = MW_smartGetTarget(event);
		// On eclate le chemin de l'image en tableau selon les points
		var imgPathTab = target.src.split('.');
		// On récupère l'extension tout en la virant du tableau
		var imgMime = imgPathTab.pop();
		// On recolle les cellules
		var imgPath = imgPathTab . join('.');
		// Si l'image finit par _f2 => on supprime la chaine du chemin 
		if (imgPath . substr(imgPath . length - 3) == '_f2') {
			target.src = imgPath . substr(0, imgPath . length - 3) + '.' + imgMime;
		// Sinon on la rajoute
		} else {
			target.src = imgPath + '_f2.' + imgMime;
		}
	}
	
	/**
	 * Fonction déroulant un menu
	 *
	 * @param		object	event		Objet évenement
	 */
	function MW_showMenu(event)
	{
		// On récupère la cible
		var target = MW_smartGetTarget(event);
		// On remonte autant que nécessaire pour avoir l'élément li conteneur
		var parent = target;
		while (parent.nodeName.toLowerCase() != 'li') {
			var parent = parent.parentNode;
		}
		var targetId = parent.id;
		// S'il existe bien une liste dans cet élément li
		if (parent.getElementsByTagName('ul').length > 0) {
			var ul = parent.getElementsByTagName('ul')[0];
			// Si la liste est actuellement masquée => on l'affiche
			if (ul.className == 'menuListHide') {
				ul.className = 'menuListShow';
			// Si la liste est actuellement affichée => on la masque
			} else {
				ul.className = 'menuListHide';
			}
		}
		parent = parent.parentNode;
		for (i = 0 ; i < parent.getElementsByTagName('li').length ; i++) {
			if (parent.getElementsByTagName('li')[i].id != '' && parent.getElementsByTagName('li')[i].id != targetId && 
					parent.getElementsByTagName('li')[i].getElementsByTagName('ul').length > 0) {
				parent.getElementsByTagName('li')[i].getElementsByTagName('ul')[0].className = 'menuListHide';
			}
		}
	}
