/* iubito's menu - http://iubito.free.fr/prog/menu.php - configuration du javascript */


/* true = to make menu vertical, on left.
   false = to make menu horizontal, on top */
var vertical = false;

/* Center the menu ? (true/false).
	Center vertically or horizontaly; according to chosen layout */
var centrer_menu = true;

/* It's needed to define width for menus.
	To make them in different widths :
	var largeur_menu = new Array(largeur menu1, largeur menu2, largeur menu3...)
	You have to assign in that array as much values as number of menus !
	Attention, if you are in vertical mode, use fixed width (No Array) !
	*/
var largeur_menu = 100;

/* In vertical mode, we've got to know height of each menu.
	Even if "boxes" are not measured in height. (Bogac's note: just translated, didn't really get)
	Add this variable where menus are too near each other in vertical mode.
	To make them in different heights:
	var hauteur_menu = new Array(hauteur menu1, hauteur menu2, hauteur menu3...)
	You have to assign in that array as much values as number of menus !
	Attention, if you are in horizontal mode, use fixed width (No Array) !
	*/
var hauteur_menu = 22; 

/* In horizontal mode.
	Width of sub-menus, for IE only, other browsers respect auto-width
	Use "auto" only if you are sure to have used &nbsp; instead of spaces in items.
	To make sub-menus in different widths :
	var largeur_sous_menu = new Array(largeur1, largeur2...).
	You have to assign in that array as much values as number of menus !
	If a menu doesn't have a sub-menu, still need to assign something !
	It's possible to use "auto" for some colums respecting the rule above.
	*/
var largeur_sous_menu = 150;

/* For browsers with automatic width capability (addapted by content), this
	option (active by default) let us get an automatic width. Other case
	(false), sub-menus will have value of largeur_sous_menu. */
var largeur_auto_ssmenu = true;

/* ... to get some space between menus ! */
var espace_entre_menus = 40;


/* position of menu by top of page
	0 = menu at very top. in px */
var top_menu = 90; 

/* In horizontal mode.
	position of submenus by top of screen or page. You need to consider
	top of menus, so not to put 0, which will cause submenu on main menu. in px */
var top_ssmenu = top_menu + hauteur_menu; // 28;

/* Position by left of screen, in px. */
var left_menu = 0;

/* In vertical mode.
	Position of submenus by left of screen, in px */
var left_ssmenu = largeur_menu+2;

/* Users might feel uncomfortable if submenu vanishes instantly, also bad for users with small screen like Palms,
	We can have a delay before submenu dissapears.
	500 ms is fine :-) */
var delai = 650; // in milliseconds

/* In horizontal mode.
	As it is possibe for page's content superposed by menu content it's a good idea to
	lower page contents (or adding some top margin for page content)
	about forty pixels would do the job. in px*/
var marge_en_haut_de_page = 0; //top_menu + 40;

/* In vertical mode.
	We move document to right so that its content doesn't get superposed by menu */
var marge_a_gauche_de_la_page = largeur_menu + 10;


/* Put "true" if you want menu to be always visible.
	Put "false" if you don't want so. In that case when you move the page lower
	menu will disappear	*/
var suivre_le_scroll=false;

/* Only for IE, <select> tags always get above of menu, so by default we hide dropdown list
	when menu is open, then we make them appear when menu is closed
	To avoid that use "false" */
var cacher_les_select=true;


var nbmenu = 0; //Auto-calculated
var timeout; //don't touch it, this is to declare the variable
var agt = navigator.userAgent.toLowerCase();
var isMozilla = (agt.indexOf('mozilla') != -1);
var isMac = (agt.indexOf('mac') != -1);
var isOpera = (agt.indexOf('opera') != -1);
var IEver = parseInt(agt.substring(agt.indexOf('msie ') + 5));
var isIE = ((agt.indexOf('msie')!=-1 && !isOpera && (agt.indexOf('webtv')==-1)) && !isMac);
var isIE5win = (isIE && IEver >= 5);
var isIE5mac = ((agt.indexOf('msie') != -1) && isMac);
var isSafari = (agt.indexOf('safari') != -1);

var isMinNS4=(navigator.appName.indexOf("Netscape")>=0&&parseFloat(navigator.appVersion)>=4)?1:0;
var isMinIE4=(document.all)?1:0;


//to erase "px"s when calculating
var reg = new RegExp("px", "g");

// onScroll for Internet Explorer, position:fixed does same job in other browsers
// which are bount to CSS norms...
window.onscroll = function()
{
	if (suivre_le_scroll && (isIE || isIE5mac))
	{
		if (isIE5mac) document.getElementById("conteneurmenu").style.visibility="hidden";
		var cumul=0;
		for(i=1;i<=nbmenu;i++)
		{
			var scrollTop = (document.documentElement&&document.documentElement.scrollTop
								?document.documentElement.scrollTop
								:document.body.scrollTop);
			if (!vertical) {
				document.getElementById("menu"+i).style.top = scrollTop + top_menu + "px";
				if (document.getElementById("ssmenu"+i))//undefined
					document.getElementById("ssmenu"+i).style.top = scrollTop + top_ssmenu + "px";
			} else {
				document.getElementById("menu"+i).style.top = scrollTop
							+(((i-1)*espace_entre_menus)+cumul+1+top_menu)+"px";
				if (document.getElementById("ssmenu"+i))//undefined
					document.getElementById("ssmenu"+i).style.top = scrollTop
							+(((i-1)*espace_entre_menus)+cumul+1+top_menu)+"px";
				cumul += isFinite(hauteur_menu)?hauteur_menu:hauteur_menu[i-1];
			}
		}
		if (isIE5mac) document.getElementById("conteneurmenu").style.visibility="visible";
	}
}

function preChargement(){	
	if (document.getElementById("conteneurmenu")){
		document.getElementById("conteneurmenu").style.visibility="hidden";
	}
}

function Chargement() {
	
	//Count nbmenu
	nbmenu = 0;
	while (document.getElementById("menu"+(nbmenu+1)))
		nbmenu++;
	
	document.getElementById("conteneurmenu").style.visibility="hidden";
	trimespaces();
	with(document.body.style) {
		if (!vertical) marginTop=marge_en_haut_de_page+"px";
		else		   marginLeft=marge_a_gauche_de_la_page+"px";
	}
	
	positionne();
	CacherMenus();
	
	//for Safari, which has problem sometimes with display, changing the character size
	//help fix the problem. Thanks Stol ! http://iubito.free.fr/forum/read.php?id=705&f=2
	if(isSafari)
		document.getElementById('conteneurmenu').style.fontSize='10px';
	
	// now show the menu ;-)
	document.getElementById("conteneurmenu").style.visibility='';
}
// window.onresize = Chargement;

// FIX for multiple call to window.onresize
if (window.addEventListener) //DOM method for binding an event
window.addEventListener("resize",Chargement, false);
else if (window.attachEvent) //IE exclusive method for binding an event
window.attachEvent("onresize",Chargement);

/*
 * Place elements of menu correctly, on load, on scroll, on redimension
 * of window
 */
function positionne() {
	
	//Calculate winsow's height and width compatible with certain IE doctypes 
	var largeur_fenetre;
	if (document.documentElement && document.documentElement.clientWidth) {
		largeur_fenetre = document.documentElement.clientWidth;		
	} else if (document.body && document.body.clientWidth) {
		largeur_fenetre = document.body.clientWidth;		
	} else if (window.innerWidth) {
		largeur_fenetre = window.innerWidth;		
	}
	
	

	var hauteur_fenetre;
	if (document.documentElement && document.documentElement.clientHeight) {
		hauteur_fenetre = document.documentElement.clientHeight;
	} else if (document.body && document.body.clientHeight) {
		hauteur_fenetre = document.body.clientHeight;
	} else if (window.innerHeight) {
		hauteur_fenetre = window.innerHeight;
	}

	// Fix for Firefox: remove the width of the scrollbar
	// http://jibbering.com/2002/7/drunclear-measure.html
	// Get width of window, need to account for scrollbar width in Netscape and Mozilla. 	
	//if (isMozilla) {
		//largeur_fenetre = largeur_fenetre - (isMinNS4 && getWindowHeight() < getPageHeight() ? 16 : 0);
		//largeur_fenetre = largeur_fenetre - 16;
	//}	
	
	
	if (centrer_menu) {
		if (!vertical) {
			var largeur_totale = espace_entre_menus * (nbmenu-1);
			if (isFinite(largeur_menu))
				largeur_totale += largeur_menu * nbmenu;
			else {
				for (i = 1; i <= nbmenu; i++)
					largeur_totale += largeur_menu[i-1];
			}
			left_menu = (largeur_fenetre - largeur_totale)/2;			
			
		} else {
			var hauteur_totale = espace_entre_menus * (nbmenu-1);
			if (isFinite(hauteur_menu))
				hauteur_totale += hauteur_menu * nbmenu;
			else {
				for (i = 1; i <= nbmenu; i++)
					hauteur_totale += hauteur_menu[i-1];
			}
			top_menu = (hauteur_fenetre - hauteur_totale)/2;
		}
	}
	
	//Menus
	var cumul = 0;
	for(i=1;i<=nbmenu;i++) {
		with(document.getElementById("menu"+i).style) {
			if (!vertical) {
				top=top_menu+"px";
				left=(((i-1)*espace_entre_menus)+cumul+1+left_menu)+"px";				
			} else {
				top=(((i-1)*espace_entre_menus)+cumul+1+top_menu)+"px";
				left=left_menu+"px";
			}
			if (!suivre_le_scroll || isIE || isIE5mac)
				position="absolute";
			else position="fixed";
			//if (vertical) height=hauteur_menu+"px";
			margin="0";
			zIndex="2";
			if (vertical || isFinite(largeur_menu))
				width=largeur_menu+"px";
			else
				width=largeur_menu[i-1]+"px";
			if ((!vertical && isFinite(largeur_menu)) || (vertical && isFinite(hauteur_menu))) {
				cumul += (!vertical?largeur_menu:hauteur_menu);
			}
			else {
				cumul += (!vertical?largeur_menu[i-1]:hauteur_menu[i-1]);
				if (vertical) height=hauteur_menu[i-1]+"px";
			}
		}
	}
	
	//Sus-menus
	
	cumul = 0;
	for(i=1;i<=nbmenu;i++) {
		if (document.getElementById("ssmenu"+i))//undefined
		{
			with(document.getElementById("ssmenu"+i).style) {
				if (!suivre_le_scroll || isIE || isIE5mac)
					position="absolute";
				else position="fixed";
				if (!vertical) {
					top=top_ssmenu+"px";
					left=(((i-1)*espace_entre_menus)+cumul+1+left_menu)+"px";
				} else {
					left=left_ssmenu+"px";
					top=(((i-1)*espace_entre_menus)+cumul+1+top_menu)+"px";
				}
				if (isMozilla || isIE || isOpera || isIE5mac || !largeur_auto_ssmenu) {
					if (isFinite(largeur_sous_menu))
						width = largeur_sous_menu+(largeur_sous_menu!="auto"?"px":"");
					else
						width = largeur_sous_menu[i-1]+(largeur_sous_menu[i-1]!="auto"?"px":"");
				}
				else width = "auto";
				if (!vertical && !isIE5mac) {
					//reposition if owerflowed to right
					if ((width != "auto")
						&& ((left.replace(reg,'').valueOf()*1 + width.replace(reg,'').valueOf()*1) > largeur_fenetre))
						left = (largeur_fenetre-width.replace(reg,'').valueOf())+"px";
				}
				margin="0";
				zIndex="3";
			}
		}
		if ((!vertical && isFinite(largeur_menu)) || (vertical && isFinite(hauteur_menu))) {
			cumul += (!vertical?largeur_menu:hauteur_menu);
		}
		else {
			cumul += (!vertical?largeur_menu[i-1]:hauteur_menu[i-1]);
		}
	}
}


function MontrerMenu(strMenu) {
	AnnulerCacher();
	CacherMenus();
	if (document.getElementById(strMenu))//undefined
		with (document.getElementById(strMenu).style)
			visibility="visible";
	SelectVisible("hidden",document.getElementsByTagName('select'));
}

function CacherDelai() {	
	timeout = setTimeout('CacherMenus()',delai);	
}
function AnnulerCacher() {	
	if (timeout) {
		clearTimeout(timeout);
	}
}
function CacherMenus() {
	for(i=1;i<=nbmenu;i++) {
		if (document.getElementById("ssmenu"+i))//undefined
			with(document.getElementById("ssmenu"+i).style)
				visibility="hidden";				
	}
	SelectVisible("visible",document.getElementsByTagName('select'));	
}

function trimespaces() {
	//Against a bug in IE5/win... it doesn't make css work fine for tags <li>, so we dismiss them !
	if(isIE5win) {
		for(i=1;i<=nbmenu;i++) {
			if (document.getElementById("ssmenu"+i))//undefined
				with(document.getElementById("ssmenu"+i))
					innerHTML = innerHTML.replace(/<LI>|<\/LI>/g,"");
		}
	}
}

function SelectVisible(v,elem) {
	if (cacher_les_select && (isIE||isIE5win))
		for (var i=0;i<elem.length;i++) elem[i].style.visibility=v;
}

function getWindowHeight(){
	if(isMinNS4 || isMozilla)
		return window.innerHeight;
	if(isMinIE4)
		return document.body.clientHeight;
	return-1;
}

function getPageHeight(){
	if(isMinNS4 || isMozilla)
		return document.height;
	if(isMinIE4)
		return document.body.scrollHeight;
	return-1;
}


//Swaping functions
function MM_preloadImages() { //v3.0
 
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0	
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}