/****** BEGIN LICENSE BLOCK *****
 * Copyright (c) 2005 Harmen Christophe and contributors. All rights reserved.
 * 
 * This script is free software; you can redistribute it and/or
 *   modify under the terms of the Creative Commons - Attribution-ShareAlike 2.0
 * <http://creativecommons.org/licenses/by-sa/2.0/>
 * You are free:
 *     * to copy, distribute, display, and perform the work
 *     * to make derivative works
 *     * to make commercial use of the work
 * 
 * Under the following conditions:
 * _Attribution_. You must attribute the work in the manner specified by the
 *   author or licensor.
 * _Share Alike_. If you alter, transform, or build upon this work, you may
 *   distribute the resulting work only under a license identical to this one.
 *     * For any reuse or distribution, you must make clear to others 
 *      the license terms of this work.
 *     * Any of these conditions can be waived if you get permission from 
 *      the copyright holder.
 * 
 * Your fair use and other rights are in no way affected by the above.
 * 
 * This is a human-readable summary of the Legal Code (the full license). 
 * <http://creativecommons.org/licenses/by-sa/2.0/legalcode>
 ***** END LICENSE BLOCK ******/
function trim(s) {
	return s.replace(/(^\s+)|(\s+$)/g,"");
}
function hasClassName(oNode,className) {
    return ((" "+oNode.className+" ").indexOf(" "+className+" ")!=-1);
}
function addClassName(oNode,className) {
    if (!hasClassName(oNode,className)) oNode.className = trim(oNode.className+" "+className);
}
function deleteClassName(oNode,className) {
    oNode.className = trim((" "+oNode.className+" ").replace(" "+className+" "," "));
}
function getElementsByClass(className,oNode) {
	var arrElements = new Array();
	function _getElementsByClass(arrElements, oNode, className) {
		while (oNode) {
			if (oNode.nodeType == 1) {
      	if ((" "+oNode.className+" ").indexOf(" "+className+" ")!=-1)
					arrElements[arrElements.length] = oNode;
				_getElementsByClass(arrElements, oNode.firstChild, className);
			}
			oNode = oNode.nextSibling;
		}
	}
	_getElementsByClass(arrElements, oNode?oNode:document.documentElement, className);
	return arrElements;
}
function isChildNodeOf(ChildNode,oNode) {
	var bIsChildNodeOf = false;
	function _isChildNodeOf(ChildNode,oNode) {
		while (oNode) {
			if (oNode==ChildNode) {
				bIsChildNodeOf = true;
				return;
			} else _isChildNodeOf(ChildNode,oNode.firstChild);
			oNode = oNode.nextSibling;
		}
	}
	_isChildNodeOf(ChildNode,oNode.firstChild);
	return bIsChildNodeOf;
}
function addEventLst(EventTarget,type,listener,useCapture) {
	useCapture = typeof(useCapture)=="boolean"?useCapture:false;
	if (EventTarget.addEventListener) {
		EventTarget.addEventListener(type, listener, useCapture);
	} else if ((EventTarget==window) && document.addEventListener) {
		document.addEventListener(type, listener, useCapture);
	} else if (EventTarget.attachEvent) {
		EventTarget["e"+type+listener] = listener;
		EventTarget[type+listener] = function() {EventTarget["e"+type+listener]( window.event );}
		EventTarget.attachEvent("on"+type, EventTarget[type+listener]);
	} else {
		EventTarget["on"+type] = listener;
	}
}
function removeEventLst(EventTarget,type,listener,useCapture) {
	useCapture = typeof(useCapture)=="boolean"?useCapture:false;
	if (EventTarget.removeEventListener) {
		EventTarget.removeEventListener(type,listener, useCapture);
	} else if ((EventTarget==window) && document.removeEventListener) {
		document.removeEventListener(type,listener, useCapture);
	} else if (EventTarget.detachEvent) {
		EventTarget.detachEvent("on"+type, EventTarget[type+listener]);
		EventTarget[type+listener]=null;
		EventTarget["e"+type+listener]=null;
	} else {
		EventTarget["on"+type]=null;
	}
}
addEventLst(window,"load",initMenus);

function initMenus() {
	var nav = navigator.userAgent;
	var ie5mac = nav.indexOf("Opera")==-1 && nav.indexOf("MSIE 5")>-1 && nav.indexOf("Mac")>-1;
	if (!document.createElement && !document.createTextNode && !document.getElementById && !document.getElementsByTagName && ie5mac) return;
	document.getElementById("nav").style.display = "block";
	//var nPControle, nAControle, nTxt;
	//nPControle = document.getElementById("lefter").getElementsByTagName("p")[0];
	//nPControle.id= "menusControle";
	//nAControle = document.createElement("a");
	//nAControle.href="javascript:menuController();";
	//nPControle.appendChild(nAControle);
	//nTxt = document.createTextNode("Désactiver le menu");
	//nAControle.appendChild(nTxt);
	//var nChild = document.getElementById("menu");
	//document.getElementById("lefter").insertBefore(nPControle,nChild);
	loadMenus();
}
function loadMenus() {
	var nRessources, nA;
	addClassName(document.body,"dynamik");
	nMenus = document.getElementById("nav");
	if (nMenus.addEventListener) {
		nMenus.addEventListener("mouseover",montrerMenu,true);
		nMenus.addEventListener("focus",montrerMenu,true);
		nMenus.addEventListener("DOMFocusIn",montrerMenu,true);
		nMenus.addEventListener("mouseout",cacherMenus,true);
		nMenus.addEventListener("blur",cacherMenus,true);
		nMenus.addEventListener("DOMFocusOut",cacherMenus,true);
	} else {
		var cTheme = getElementsByClass("theme",nMenus);
		for (var i=0; i<cTheme.length; i++) {
			addEventLst(cTheme[i],"mouseover",montrerMenu);
			addEventLst(cTheme[i],"mouseout",cacherMenus);
			for (var j=0; nA = cTheme[i].getElementsByTagName("a")[j]; j++) {
				addEventLst(nA,"focus",montrerMenu);
				addEventLst(nA,"blur",cacherMenus);
			}
		}
	}
	//document.getElementById("menusControle").getElementsByTagName("a")[0].firstChild.nodeValue="Désactiver le menu";
}
function unloadMenus() {
	var nRessources, nA;
	deleteClassName(document.body,"dynamik");
	nMenus = document.getElementById("nav");
	if (nMenus.removeEventListener) {
		nMenus.removeEventListener("mouseover",montrerMenu,true);
		nMenus.removeEventListener("focus",montrerMenu,true);
		nMenus.removeEventListener("DOMFocusIn",montrerMenu,true);
		nMenus.removeEventListener("mouseout",cacherMenus,true);
		nMenus.removeEventListener("blur",cacherMenus,true);
		nMenus.removeEventListener("DOMFocusOut",cacherMenus,true);
	} else {
		var cTheme = getElementsByClass("theme",nMenus);
		for (var i=0; i<cTheme.length; i++) {
			removeEventLst(nChild,"mouseover",montrerMenu);
			removeEventLst(nChild,"mouseout",cacherMenus);
			for (var j=0; nA = cTheme[i].getElementsByTagName("a")[j]; j++) {
				removeEventLst(nA,"focus",montrerMenu);
				removeEventLst(nA,"blur",cacherMenus);
			}
		}
	}
	//document.getElementById("menusControle").getElementsByTagName("a")[0].firstChild.nodeValue="Activer le menu";
}
function menuController() {
	if (hasClassName(document.body,"dynamik")) unloadMenus();
	else loadMenus();
}
function montrerMenu(evt) {
	var oNode;
	if (evt && evt.target) {
		oNode = evt.target;
	} else if (window.event) {
	    oNode = window.event.srcElement;
	} else {
		oNode = this;
	}
	while (oNode.id!="nav") {
		if (hasClassName(oNode,"theme")) {
			addClassName(oNode,"currentTheme");
			//On veut remonter jusqu'a [id=menus] alors pas de : break;
		}
		oNode = oNode.parentNode;
	}
}
function cacherMenus(evt) {
	var oNode, nRelatedTarget;
	function _cacherMenus(oNode) {
		var nSibling = oNode;
		// On test les frères
		while (nSibling) {
			if (hasClassName(nSibling,"theme")) deleteClassName(nSibling,"currentTheme");
			nSibling=nSibling.nextSibling;
		}
		// On remonte les parents
		while (oNode.id!="nav") {
			if (hasClassName(oNode,"theme")) deleteClassName(oNode,"currentTheme");
			oNode=oNode.parentNode;
		}
	}
	if (evt && evt.target) {
		oNode = evt.target;
		nRelatedTarget = evt.relatedTarget;
	} else if (window.event) {
		oNode = window.event.srcElement;
		nRelatedTarget = window.event.toElement;
	} else {
		oNode = this;
	}
	while (oNode.id!="nav") {
		if (hasClassName(oNode,"theme")) {
			if (nRelatedTarget && (!isChildNodeOf(nRelatedTarget,oNode))) {
				_cacherMenus(oNode);
			} else if (!nRelatedTarget) {
				_cacherMenus(oNode);
			}
			break;
		}
		oNode = oNode.parentNode;
	}
}


