// SITE NET CRÉATEURS
// 06/02/2004 - Net Créateurs (www.net-createurs.com)

// Menus V2.2
if(!lmenu_margin) var lmenu_margin=0;
var lmenuMAC=(navigator.userAgent.indexOf("Mac") != -1);
var lmenuIE=document.all;							// IE4+
var lmenuNS=top.document.layers;					// NS4 - "top" obligatoire quand frameset
var lmenuNS6=document.getElementById && !lmenuIE;	// NS6+
var lmenuIE4=lmenuIE ? parseInt(navigator.appVersion.substring(navigator.appVersion.indexOf("MSIE") + 5))==4 : false;
var lmenux=new Array;lmenuscroll=new Array;			// mémo posit X des menus et step scroll oui/non
var lmenuact='';									// mémo des noms de menus ouverts
var lmenu_io=new Array,lmenu_close=new Array;		// mémo état des menus (survol, demande de fermeture)
var lmenuscrollstep;								// vitesse de scroll
var opacmin=30;										// % Opacité minimale (à l'ouverture, de 0 à 100)

// création d'un sous-menu scrollant
function lmenu_create(name,x,y,txt,path,pstyle,bcol,l,h,typ,params) {
	name=name.split(':');
	var del=(l ? false : (pstyle ? true : false));	// vrai -> demande fermeture de tous menu ouvert lors du survol de CE menu
	var d= (name[1] ? name[1].toLowerCase() : '');	name=name[0];
	if(d) {		// Appartion en rideau (d = sens : g, d, h ou b)
		var ll=path[0],hl=path[1];
		if(d=='b') lmenuscroll[name]= new Array(0,-hl);			// posit de départ
		else if(d=='d') lmenuscroll[name]= new Array(-ll,0);
		else if(d=='h') { lmenuscroll[name]= new Array(0,hl); y-=hl }
		else { lmenuscroll[name]= new Array(ll,0); x-=ll }
	}
	lmenux[name]=x;					// -- mémo posit x absolue
	if (lmenuIE || lmenuNS6) {		//-- IE ou NS6+
		var t= (
			  '<div id="' + name + '" style="position:absolute;overflow:hidden;display:none;'
			+ 'left:' + x + ';top:' + y
			+ (d ? ';width:' + ll + ';height:' + hl : '')
			+ ';border:0" onmouseover="lmenu_es(\'' + name + '\',1,' + del + ')" '
			+ 'onmouseout="lmenu_es(\'' + name + '\',0,' + del + ')">'
			+ (d ? '<div id="scroll_' + name + '" style="position:absolute">' : '')
			+ (l ? make_table(txt,path,pstyle,bcol,l,h,typ,params) : txt)
			+ (d ? '</div>' : '')
			+ '</div>'
		);
	}
	else if (lmenuNS) {
		var t= (
			  '<layer name="' + name + '" overflow="hide" '
			+ 'left="' + x + '" top="' + y + '" visibility="hide" '
			+ (d ? ' width="' + ll + '" height="' + hl + '" ' : '')
			+ 'onmouseover="lmenu_es(\'' + name + '\',1,' + del + ')" '
			+ 'onmouseout="lmenu_es(\'' + name + '\',0,' + del + ')">'
			+ (d ? '<ilayer name="scroll_' + name + '">' : '')
			+ (l ? make_table(txt,path,pstyle,bcol,l,h,typ,params) : txt)
			+ (d ? '</ilayer>' : '')
			+ '</layer>'
		);
	}
	document.write(t);
}


function lmenu_display(name,v,c,lmnuf,mnu_opacity,max_opacity,scroll) {
	var f=lmnuf;
	if(!mnu_opacity) var mnu_opacity=0;
	if(!max_opacity) var max_opacity=100;
	lmenuscrollstep = (scroll ? scroll/40 : 8);	// nb de steps de scroll par tranche de 40 msec
	if(v==1 && c>0) {					// reposit du menu à allumer nécessaire (c=largeur de la page utile)
		if(!f) f=0.5					// facteur d'échelle éventuel de c
		var lmenucomp= lmenuNS6 ? 0:lmenu_margin;	// NS6+ tient déjà compte des marges
		if(lmenuNS) lmenucomp+= (lmenuMAC ? 14 : 16);	// NS4 : ajouter la barre de scroll
		if(lmenuIE4) {lmenucomp+=3; f=1}			// IE4 : pis aller
		var xwin=lmenu_x();				//largeur interne de la fenêtre
		xwin =(xwin>c+lmenucomp) ? Math.floor((xwin-lmenucomp-c)*f) : 0;
		xwin+= lmenux[name];
		lmenu_move(name,xwin,0)			//reposit menu
	}
	else if(v==3) {
		lmenu_move(name,c,f);			// reposit direct c=x, f=y avant allumage
		v=1;
	}

	if(v==2 || !v) lmenu_del(name,v);	// effacement à reculons de la tt les menus ouverts, jusqu'à "name"
										// v=0 -> immédiat, v=2 -> temporisé

	else {								// v=1 -> allumer le menu "name"
		if(mnu_opacity) {				// duré d'opacité progressive
			var lmenuopacstep= Math.round(2800/mnu_opacity);	// step =  (100-30)/(durée/40 msec)
			if(!lmenuopacstep) lmenuopacstep=1;				// très lent !...
		} else lmenuopacstep=0;

		// demande d'ouverture du menu
		// Si déjà ouvert -> effacer éventuelle demande de fermeture temporisée
		// Sinon fermer jusqu'à trouver un éventuel menu survolé
		var x= lmenuact ? lmenuact.split(':') : '',i=x.length-1,found=-1;
		for(var i in x) { if(x[i]==name) found= i}
		if(found==-1) {
			if(x.length) {
				lmenu_del(name,0)		// fermeture immédiat des menus devenus inutiles 
				x= lmenuact ? lmenuact.split(':') : '';
			}
			i=x.length;
			lmenuact+= (lmenuact ? ':' : '') + name;
			lmenu_startopac(name,opacmin,lmenuopacstep,max_opacity);	// lancement de la procédure d'opacité progressive
			lmenu_upd(name,true,i);										// puis affichage de la fenêtre
		}
		else lmenu_close[found]='';
	}
}

// Posit bulle/menu directement à la posit du curseur -offset
// 06 avr 04 : 'no_scroll' true -> n'ajoute pas l'offset de scroll à my et my
function open_bulle(name,mx,my,ox,oy,mnu_opacity,max_opacity,no_scroll) {
	var x=ox,y=oy;
	if(!x) x=0;
	if(!y) y=0;
	if (lmenuIE) {
		var mx=event.x;
		var my=event.y;
		if(!lmenuIE4 && !no_scroll) {	// IE5+ : lui seul n'inclu pas ces offset de scroll dans event.x et y
			mx+=document.body.scrollLeft;
			my+=document.body.scrollTop;
		}
	}
	lmenu_display(name,3,mx+x,my+y,mnu_opacity,max_opacity)
}

// ======= FONCTIONS INTERNES =======

// Raffraichissement du menu "name" à l'écran; x vrai -> affiche, faux -> efface
// gère le scrolling éventuel
function lmenu_upd(name,x,i) {

	if(lmenuscroll[name]) {
		lmenuscroll[name][2]=lmenuscroll[name][0];	// reposit initiale
		lmenuscroll[name][3]=lmenuscroll[name][1];
		if(x) menu_scroll(name);
	}
	if (lmenuIE) document.all[name].style.display= (x ? 'block' : 'none');
	else if (lmenuNS) {document.layers[name].visibility= (x ? 'show' : 'hide')}
	else if (lmenuNS6) document.getElementById([name]).style.display=(x ? 'block' : 'none');
	if(!x) {
		lmenu_close[i]='';
		lmenu_io[i]='';
	}
}

// Scroll éventuel d'un menu
function menu_scroll(name) {
	var x=lmenuscroll[name];
	if(x[2] || x[3]) {		// pas encore arrivé à la posit finale (0,0)
		var xstep= -Math.round(x[0]/lmenuscrollstep);
		var ystep= -Math.round(x[1]/lmenuscrollstep);
		x[2]=(Math.abs(x[2])>Math.abs(xstep) ? x[2] + xstep : 0);
		x[3]=(Math.abs(x[3])>Math.abs(ystep) ? x[3] + ystep : 0);
		lmenuscroll[name]=x
		if(lmenuIE) {
			div= document.all['scroll_' + name].style;
			div.pixelLeft = x[2];
			div.pixelTop = x[3];
		}
		else if(lmenuNS6) {
			div= document.getElementById('scroll_' + name).style;
			div.left= x[2];
			div.top= x[3];
		}
		else if(lmenuNS) {
			var i=0,div;
			while(!div && i<document.layers.length) div=document.layers[i++].document['scroll_' + name];
			if(div) {
				div.left=x[2];
				div.top=x[3];
			}
		}
		setTimeout("menu_scroll('" + name + "')",40)
	}
}


// Survol ou sortie d'un menu -> MAJ de l'indicateur de survol
// entrée (quid vrai) -> on supprime les éventuels demande d'effacement temporisé des menus inférieurs,
//						sauf si del = vrai -> on efface tout ce qui est ouvert
// sortie (quid faux) -> demande d'effacement temporisé
function lmenu_es(name,quid,del) {
	var x= lmenuact ? lmenuact.split(':') : '',i=x.length-1,found=false;
	while(i>-1) {
		if(x[i]==name) {
			found=quid;
			lmenu_io[i]= quid;
			lmenu_close[i]=!quid;
		}
		else if(found) lmenu_close[i]=(del ? true : false);
		i--;
	}
	if(!quid) lmenu_del(name,2);	// sortie -> mise à jour de l'affichage
}

// Demande de fermeture d'un bloc de menus de nom "name"
// v=2 -> fermeture après délai
// v=0 ou rien ->  fermeture immédiate
// On efface à reculons, depuis la fin jusqu'à tomber sur un menu survolé
function lmenu_del(name,v) {
	var x= lmenuact ? lmenuact.split(':') : '',i=x.length-1,a='x';
	if(x.length) {
		while(i>-1) {
			if(lmenu_io[i]) a= '';		// Menu ouvert -> fin des demandes d'effacement
			lmenu_close[i]= a;
			i--;
		}
		setTimeout("lmenu_reaff()",(v? 150 : 10));	// lance la procédure d'effacement
	}
}

// après tempo -> Check & MAJ de tous les menus ouverts
function lmenu_reaff() {
	var x= lmenuact ? lmenuact.split(':') : '';
	lmenuact='';
	for(var i in x) {
		if(lmenu_close[i]) {
			lmenu_upd(x[i],0,i);		// extinction immédiate
		}
		else lmenuact+= (lmenuact ? ':' : '') + x[i];
	}
}

// gestion de l'opacité du menu i
function lmenu_startopac(name,valeur,step,max) {
	if(!step) valeur=max;
	if (lmenuIE) document.all[name].style.filter= 'alpha(opacity=' + valeur + ')';
	else if(lmenuNS) valeur=max;
	else if(lmenuNS6) document.getElementById([name]).style.MozOpacity=valeur/101;
	if(valeur<max) {
		valeur+=step;
		if(valeur>max) valeur=max;
		setTimeout('lmenu_startopac("' + name + '",' + valeur + ',' + step + ',' + max + ')',40);
	}
}
// -- Retourne la largeur interne de la fenêtre
function lmenu_x() {
	var x=0;
	if (lmenuIE || lmenuNS6) x=document.body.scrollWidth;
	else if (lmenuNS) x=window.innerWidth;
	return x;
}

// -- repositionnement de l'objet 'name' en x et en y si y<>0
function lmenu_move(name,x,y) {
	if(lmenuIE) document.all[name].style.pixelLeft=x;
	else if(lmenuNS) document.layers[name].left=x;
	else if(lmenuNS6) document.getElementById([name]).style.left=x;
	if(y) {
		if(lmenuIE) document.all[name].style.pixelTop=y;
		else if(lmenuNS) document.layers[name].top=y;
		else if(lmenuNS6) document.getElementById([name]).style.top=y;
	}
}

// -- dessin de la bulle
// retourne le contenu HTML, ou rien si bulle non initialisée (var params vide)
function make_table(txt,path_img,pstyle,bcol,l,h,t,params) {
	var r='';
	if(params) {
		var pa=params.split(':');	// paramètres de la bulle
		for(var i in pa) pa[i]=parseFloat(pa[i]);
		var l0=pa[0],l1=pa[1]	// largeur des colonnes gauche et droite
		var h0=pa[2],h1=pa[3]	// hauteur des coins hg, bg
		var h2=pa[4],h3=pa[5]	// coins hd, bd
		var h4=pa[6],h5=pa[7]	// hauteur des bandes h / b
		if(!t) t="hd";			// par défaut, haut-droite
		var hd=(t=="hd") ? "fle_hd" : "std_hd"	// Nom du coin haut droit
		var bd=(t=="bd") ? "fle_bd" : "std_bd"	// idem bas droit
		var bg=(t=="bg") ? "fle_bg" : "std_bg"	// bas gauche
		var hg=(t=="hg") ? "fle_hg" : "std_hg"	// haut gauche
		l=l-l0-l1;				// largeur du milieu
		var ht=(h0+h1>h2+h3) ? h0+h1 : h2+h3;	// plus grande hauteur des coins (h mini bulle)
		if(h<ht) {								// mise à l'échelle des coins nécessaire
			var e=ht/h;
			h0=Math.floor(h0/e);
			h1=Math.floor(h1/e);
			h2=Math.floor(h2/e);
			h3=Math.floor(h3/e);
			h4=Math.floor(h4/e);
			h5=Math.floor(h5/e);
		}
		var r= '<table border="0" cellspacing="0" cellpadding="0" width="' + l + '" height="' + h + '">';

		// - Colonne de gauche (largeur = l0)
		r+= '<tr><td rowspan="3" width="' + l0 + '">';
		r+= '<img src="' + path_img + hg + '.gif" width="' + l0 + '" height="' + h0 + '"><br>';
		var hm=h-h0-h1;		// hauteur restant pour le milieu / gauche de la bulle
		if(hm>0) r+='<img src="' + path_img + 'std_g.gif" width="' + l0 + '" height="' + hm + '"><br>';
		r+= '<img src="' + path_img + bg + '.gif" width="' + l0 + '" height="' + h1 + '"></td>';

		// - Haut de la colonne du centre (largeur = l)
		r+= '<td valign="top"><img src="' + path_img + 'std_h.gif" width="' + l + '" height="' + h4 + '"></td>';

		// - Colonne de droite (largeur = l1, hauteur = h - 38)
		r+= '<td rowspan="3" width="' + l1 + '">';
		r+= '<img src="' + path_img + hd + '.gif" width="' + l1 + '" height="' + h2 + '"><br>';
		var hm=h-h2-h3;	// hauteur restant pour le milieu / droite de la bulle
		if(hm>0) r+='<img src="' + path_img + 'std_d.gif" width="' + l1 + '" height="' + hm + '"><br>';
		r+= '<img src="' + path_img + bd + '.gif"  width="' + l1 + '" height="' + h3 + '"></td>';

		// - Fin de la colonne centrale
		r+= '</tr><tr><td width="' + l + '" bgcolor="'+ bcol + '" valign="middle" height="' + (h-h4-h5) + '">';
		r+= '<p class="' + pstyle + '">' + txt + '</td>';
		r+= '</tr><tr><td valign="bottom">';
		r+= '<img src="' + path_img + 'std_b.gif" width="' + l + '" height="' + h5 + '"></td>';
		r+= '</tr></table>';
	}
	return r;
}