// JavaScript Document

( function() {

	// Test de passage d'un argument
	var fnTest = function()
	{
		var iI = arguments.length - 1;
		for(iI; iI >= 0; iI--) if(!arguments[iI]) return false;
		return true;
	};

	// Ajout d'une action sur un événement
	var fnConnect = function(oElem, sEvType, fn, bCapture)
	{
		return oElem.addEventListener ?
			oElem.addEventListener(sEvType, fn, bCapture):
			oElem.attachEvent ?
				oElem.attachEvent('on' + sEvType, fn):
				oElem['on' + sEvType] = fn;
	};

	// Retrait d'une action sur un événement
	var fnDisconnect = function (oElem, sEvType, fn, bCapture)
	{
		return oElem.removeEventListener?
			oElem.removeEventListener(sEvType, fn, bCapture):
			oElem.detachEvent?
				oElem.detachEvent('on' + sEvType, fn):
				oElem['on' + sEvType] = null;
	};
	
	// Annulation du clic sur un élément
	var fnCancelClick = function(e)
	{
		if(e && e.stopPropagation && e.preventDefault)
		{
			e.stopPropagation();
			e.preventDefault();
			return false; // Pour Safari
		}
		else if(window.event && window.event.cancelBubble && window.event.returnValue)
		{
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return false;
		}
		else return false;
	};

	// Récupération de la source de l'événement
	var fnGetTarget = function(e)
	{
		var target = window.event ? window.event.srcElement : e ? e.target : this;
		if(!target) return false;
		if(target.nodeName.toLowerCase() != 'a') target = target.parentNode; //Pour Safari
		return target;
	};

	// Affichage des menus
	var fnMontre = function(e)
	{
		var oTarget = fnGetTarget(e);
		var oList = oTarget.parentNode.getElementsByTagName('ul')[0];
		oList.className = 'Montre';
		fnDisconnect(oTarget, 'click', fnMontre, false);
		fnConnect(oTarget, 'click', fnCache, false);
		return fnCancelClick(e);
	};
	
	// Masquage des menus
	var fnCache = function(e)
	{
		var oTarget = fnGetTarget(e);
		oTarget.nextSibling.className = 'Cache';
		fnDisconnect(oTarget, 'click', fnCache, false);
		fnConnect(oTarget, 'click', fnMontre, false);
		return fnCancelClick(e);
	};
	
	// Initialisation du menu
	var fnMenu = function()
	{
		var oMenus = document.getElementById('menus'),
			oItem = oMenus.getElementsByTagName('li'),
			iI = oItem.length - 1,
			oUl = oMenus.getElementsByTagName('ul'),
			iJ = oUl.length - 1;
		for(iJ; iJ >= 0; iJ--) if(oUl[iJ].className != 'Montre') oUl[iJ].className = 'Cache';
		for(iI; iI >= 0; iI--)
		{
			if(oItem[iI].parentNode.getAttribute('id') == 'menus')
			{
				var oA = document.createElement('a'),
					sTxtLi = oItem[iI].firstChild.nodeValue,
					oTxtA = document.createTextNode(sTxtLi);
				oA.setAttribute('href', '#ouverture-fermeture-Menu');
				oA.appendChild(oTxtA);
				oItem[iI].replaceChild(oA, oItem[iI].firstChild);
				oA.nextSibling.className != 'Montre' ?
					fnConnect(oA, 'click', fnMontre, false):
					fnConnect(oA, 'click', fnCache, false);
			}
		}
	};

	// Méthode de chargement rapide
	// Thanks to Dean Edwards, Matthias Miller & John Resig (http://dean.edwards.name/weblog/2006/06/again/)
	function fnFastLoadEvent(func)
	{
		if(document.addEventListener) document.addEventListener('DOMContentLoaded', func, false);

		/*@cc_on @*/
			/*@if(@_win32) document.write('<scr'+'ipt id="__ie_onload" defer src="javascript:void(0)"><\/scr'+'ipt>');
			var script = document.getElementById('__ie_onload');
			script.onreadystatechange = function()
			{
				if(this.readyState === 'complete') func();
			};
		/*@end @*/

		if(/WebKit/i.test(navigator.userAgent) && /loaded|complete/.test(document.readyState)) func();
	};

	// Test des méthodes du script et lancement si c'est bon...
	fnTest(document.getElementById, document.getElementsByTagName, document.createElement, document.createTextNode) ?
		fnFastLoadEvent(fnMenu) :
		false;

} ) ();
