/* ---------------------------------------------------------------------------
		Bibliotheque JS pour un menu deroulant de rubriques / sous-rubriques
		Derniere modification par Michel Pouzet le 28/02/2006
----------------------------------------------------------------------------*/

//
// -- Classe "MenuDeroulant" : --
//

function MenuDeroulant(origineX, origineY, webPathDesign) {
	// Init des proprietes :
	// Coulissage des rubriques
	this.animation_step_pixels = 20;	//40;	// pixels
	this.animation_step_ms = 25;	// millisecondes
		// Exemples : 
			// Rapide = 20 pixels / 25 ms
			// Normal = 10 pixels / 25 ms
			// Lent = 2 pixels / 25 ms
	// Fading des sous-rubriques :
	this.fadesr_step_opacity = 30;	// % d'opacite
	this.fadesr_step_ms = 25;	// millisecondes
		// Exemples : 
			// Rapide = 30 % / 25 ms
			// Normal = 10 % / 20 ms
			// Lent = 2 % / 20 ms
	this.rubs = new Array();	// liste d'objets 'Rubrique'
	this.rubrique_active = 0;	// Numero de la rubrique ouverte (0 = aucune)
	this.origine_x = origineX || 0;	// pixels (x)
	this.origine_y = origineY || 0;	// pixels (y)
	this.web_path_design = webPathDesign;
	//this.isMsie  = (document.all && document.getElementById);
	//this.isMoz = (!document.all && document.getElementById);
	// Init des methodes :
	this.nbr_rubriques = MenuDeroulant_NbrRubriques;
	this.affiche_toi = MenuDeroulant_AfficheToi;
	this.check_if_moving =  MenuDeroulant_CheckIfMoving;
	// Methodes plutot privees :
	this.affiche_header = MenuDeroulant_AfficheHeader;
	this.affiche_footer = MenuDeroulant_AfficheFooter;
	this.init_layers = MenuDeroulant_InitLayers;
}
// Methodes :
function MenuDeroulant_NbrRubriques() {
	return (this.rubs.length-1);
}
//
function MenuDeroulant_AfficheToi() {
	this.affiche_header(this.origine_x, this.origine_y);
	for(var i=1; i<=this.nbr_rubriques(); i++) {
		// Init de certaines variables de la rubrique :
		this.rubs[i].origine_y_menu = 0;	//this.origine_y;
		this.rubs[i].origine_x_menu = 0;	//this.origine_x;
		this.rubs[i].web_path_design_menu = this.web_path_design;
		// Affichage de la rubrique :
		this.rubs[i].affiche_toi();
	}
	this.affiche_footer();
	// Init des layers HTML :
	this.init_layers();
	// Init des opacites des layers :
	for(var i=1; i<=this.nbr_rubriques(); i++) {
		this.rubs[i].layer.setOpacity(85);	//99
			// 99 au lieu de 100 pour eviter bug clignotement
		this.rubs[i].layer_sr.setOpacity(0);
	}
}
//
function MenuDeroulant_CheckIfMoving() {
	var is_menu_moving = false;
	for(var i=1; i<=this.nbr_rubriques(); i++) {
		// Cette rubrique est-t-elle en train de bouger ?
		if(this.rubs[i].is_moving)
			is_menu_moving = true;
	}
	return is_menu_moving;
}
//
function MenuDeroulant_AfficheHeader(oriX, oriY) {
	var texte;
	texte =  '<div style="position:absolute;left:'+oriX+'px;top:'+oriY+'px;width:200px;z-index:2;">';
	document.write(texte);
}
//
function MenuDeroulant_AfficheFooter() {
	var texte;
	texte =  '</div>';
	document.write(texte);
}
//
function MenuDeroulant_InitLayers() {
	// Boucle des rubriques :
	for(var i=1; i<=this.nbr_rubriques(); i++) {
		this.rubs[i].layer = new Layer(this.rubs[i].id_layer);
		this.rubs[i].layer_agrafes = new Layer(this.rubs[i].id_layer_agrafes);
		this.rubs[i].layer_sr = new Layer(this.rubs[i].id_layer_sr);
			// Classe 'Layer' definie dans js/layer.js
	}
}

//
// -- Sous-classes de "MenuDeroulant" : --
//

// -- Classe "Rubrique" : --
//
function Rubrique(leTitre, laHauteur, leBgColor, leNumero, laHauteurSousrubs) {
	// Init des proprietes :
	this.titre = leTitre || "";
	this.hauteur = laHauteur || 30;	// pixels
	this.hauteur_sousrubs = laHauteurSousrubs || 0;	// pixels
	this.bgcolor = leBgColor || "";
	this.numero_ordre = leNumero || 1;
	this.id_layer = 'rub_'+leNumero;
	this.id_layer_agrafes = 'rub_agrafes_'+leNumero;
	this.id_layer_sr = 'sousrub_'+leNumero;
	this.layer;		// init dans MenuDeroulant_InitLayers()
	this.layer_sr;	// init dans MenuDeroulant_InitLayers()
	this.origine_y_menu;	// init dans MenuDeroulant_AfficheToi()
	this.origine_x_menu;	// init dans MenuDeroulant_AfficheToi()
	this.web_path_design_menu;	// init dans MenuDeroulant_AfficheToi()
	this.position_y_normale;	// init dans Rubrique_AfficheToi()
	this.is_moving = false;	// la rubrique n'est pas en train de bouger.
	this.sousrubs = new Array();	// liste d'objets 'SousRubrique'
	// Init des methodes :
	this.nbr_sousrubriques = Rubrique_NbrSousRubriques;
	this.affiche_toi = Rubrique_AfficheToi;
	// Methodes plutot privees :
	this.affiche_tes_sousrubs = Rubrique_AfficheTesSousRubriques;
	this.change_opacite_sr = Rubrique_ChangeOpaciteSousRubriques;
}
//
// Methodes :
function Rubrique_NbrSousRubriques() {
	return (this.sousrubs.length-1);
}
//
function Rubrique_AfficheToi() {
	var numero = this.numero_ordre;
	var id_layer = this.id_layer;
	var id_layer_agrafes = this.id_layer_agrafes;
	var origine_y_menu = this.origine_y_menu;	// pixels
	var origine_x_menu= this.origine_x_menu;	// pixels
	var layer_height = this.hauteur;	// pixels
	var layer_top = origine_y_menu+layer_height*(numero-1)+2*(numero-1);	// pixels
	var layer_left = origine_x_menu;	// pixels
	var bgcolor = this.bgcolor;
	var titre = this.titre;
	var web_path_design = this.web_path_design_menu;
	//
	this.position_y_normale = layer_top;
	//
	var texte;
	texte =  '<div ID="'+id_layer+'" ';
	texte += ' STYLE="height: '+layer_height+'px;';
	texte += '  top:'+layer_top+'px; left: '+layer_left+'px;';
	texte += '  position: absolute; visibility: visible; z-index: 2;';
	texte += '  filter:alpha(opacity=99); -moz-opacity:0.99;';
	texte += '  background-color: '+bgcolor+'; margin-bottom: 2px;';
	texte += '  ">';	// 99 au lieu de 100 pour eviter bug clignotement
	texte += '<table width="200" border="0" cellspacing="0" cellpadding="0"><tr valign="top">';
	texte += '<td><img src="'+web_path_design+'images-navig/G-barre-gauche-'+numero+'_off.gif" width="20" height="22" ';
	texte += ' alt="" border="0" style="margin-top:2px;" id="icone_G_'+numero+'"></td>';
	texte += '<td><img src="'+web_path_design+'images/spacer.gif" width="5" height="1" alt="" border="0"></td>';
	texte += '<td class="barregauche_menu_txt">';
	texte += ' <img src="'+web_path_design+'images/spacer.gif" width="175" height="6" alt="" border="0"><br>';
	texte += '<div ID="'+id_layer+'_contenu" class="rub_std">';
	texte += ' <A HREF="javascript:flipflap('+numero+');">';
	texte += titre+'</A></DIV></td>';
	texte += '</tr></table>';
	texte += '</div>';
	// Agrafes :
	var tmp_top = layer_top+layer_height-2;
	texte += '<div ID="'+id_layer_agrafes+'" ';
	texte += ' style="position:absolute; top:'+tmp_top+'px; left: 5px;';
	texte += ' width:189px; height:6; visibility:visible; z-index:3;';
	texte += ' background-image:url(\''+web_path_design+'images-navig/filet-horizontal-menu-barre.gif\');">';
	texte += '<!-- --></div>';	// Les comment. html sont *important* - les laisser.
	//
	document.write(texte);
	//
	// Afficher le pave des sous-rubriques :
	this.affiche_tes_sousrubs();
}
//
function Rubrique_AfficheTesSousRubriques() {
	var numero_rub = this.numero_ordre;
	var liste_sousrubs = this.sousrubs;
	var nbr_sousrubs = this.nbr_sousrubriques();
	var id_layer = this.id_layer_sr;
	var layer_height = 0;	// pixels
	var layer_height_max = this.hauteur_sousrubs;
	var origine_y_menu = this.origine_y_menu;
	var origine_x_menu = this.origine_x_menu;
	var layer_rub_height = this.hauteur;
	var layer_top = origine_y_menu+layer_rub_height*(numero_rub)+2*(numero_rub-1);	// pixels
	var layer_left = origine_x_menu;	// pixels
	var bgcolor = this.bgcolor;
	//
	var texte;
	texte =  '<div ID="'+id_layer+'" ';
	texte += ' STYLE="height: '+layer_height+'px; width: 200px; ';
	texte += '  top:'+layer_top+'px; left:'+layer_left+'px;';
	texte += '  position: absolute; visibility: hidden; z-index: 1;';
	texte += '  background-color:'+bgcolor+';';
	texte += '  filter:alpha(opacity=99); -moz-opacity:0.99;';	// 99 au lieu de 100 pour eviter bug clignotement
	texte += '  ">';
	texte += '<div class="barregauche_menu_txt" style="padding-left:25px; height:'+layer_height_max+'px;">';
	for(var i=1; i<=nbr_sousrubs; i++) {
		lien = liste_sousrubs[i].lien;
		titre = liste_sousrubs[i].titre;
		texte += '<A HREF="'+lien+'"><b>'+titre+'</b></A><br>';
	}
	texte += '</div>';
	texte += '</div>';
	//
	document.write(texte);
}
//
function Rubrique_ChangeOpaciteSousRubriques(opac) {
	this.layer_sr.setOpacity(opac);
}

// -- Classe "SousRubrique" : --
function SousRubrique(leTitre, leLien) {
	// Init des proprietes :
	this.titre = leTitre || "";
	this.lien = leLien || "#";
	// Init des methodes :
	// yapa
}


//
// -- Fonction de deroulage du menu dans la page HTML --
//

function flipflap(numero_rubrique_cible, is_instantane) {
	// Init :
	if(!is_instantane)
		is_instantane = 0;
	//else	alert('yo!');	// debug
	var le_menu = mon_beau_menu;	// defini dans la page HTML
	var nbr_rubriques = le_menu.nbr_rubriques();
	var web_path_design = le_menu.web_path_design;
	var new_top;
	// Memoriser l'ancienne rubrique active avant sa modification :
	var old_rubrique_active = le_menu.rubrique_active;
	//
	// Desactiver la rubriques active si il y en a une :
	if(le_menu.rubrique_active > 0) {
		// RaZ de la rubrique active memorisee dans le menu :
		le_menu.rubrique_active = 0;
		// Replacer les agrafes de la rub en bas du layer de rub :
		//var old_h_layer_sr = le_menu.rubs[old_rubrique_active].layer_sr.getHeight();	// marche pas sous IE
		var old_h_layer_sr = le_menu.rubs[old_rubrique_active].hauteur_sousrubs;
			//alert('old_h_layer_sr='+old_h_layer_sr);
		leLayer_agrafes = le_menu.rubs[old_rubrique_active].layer_agrafes;
		oriTop_agrafes = leLayer_agrafes.getTop();
		cibleTop_agrafes = oriTop_agrafes - old_h_layer_sr;
			//alert('cibleTop_agrafes('+cibleTop_agrafes+') = oriTop_agrafes('+oriTop_agrafes+') - old_h_layer_sr('+old_h_layer_sr+') ')
		leLayer_agrafes.setTop(cibleTop_agrafes);
			//alert('Tentative leLayer_agrafes.setTop('+cibleTop_agrafes+')' );
		// Rendre invisible le layer des sous-rubriques :
		le_menu.rubs[old_rubrique_active].layer_sr.setInvisible();
		// + RaZ de sa hauteur :
		le_menu.rubs[old_rubrique_active].layer_sr.setHeight(0);
		// Remettre le style normal de la rubrique :
		nom_layer_contenu = le_menu.rubs[old_rubrique_active].id_layer+'_contenu';
		layer_contenu = document.getElementById(nom_layer_contenu);
		layer_contenu.className = 'rub_std';
		// Modifier l'icone G :
		document.getElementById('icone_G_'+old_rubrique_active).src 
			= web_path_design+'images-navig/G-barre-gauche-'+old_rubrique_active+'_off.gif';
		// Remonter les rubriques du dessous (s'il y en a) :
		if(old_rubrique_active < nbr_rubriques) {
			hauteur_layer_sousrub = le_menu.rubs[old_rubrique_active].hauteur_sousrubs;
			for(var i=(old_rubrique_active+1); i<=nbr_rubriques; i++) {
				// Animation :
				deplacement = -hauteur_layer_sousrub;
				if(is_instantane) {
					step_delai = 0;
					step_pixels = -100;	//-10;
				} else {
					step_delai = le_menu.animation_step_ms;	//20;
					step_pixels = -le_menu.animation_step_pixels;	//-10;
				} 
				coulisse_layer(i, deplacement, step_pixels, step_delai);
					// Fonction definie ci-apres.
			}
		}
	}
	//
	// Activer la nouvelle rubrique le cas echeant :
	if(numero_rubrique_cible!=old_rubrique_active) {
		// Memoriser la nouvelle rubrique active :
		le_menu.rubrique_active = numero_rubrique_cible;
		// Modifier l'icone G :
		document.getElementById('icone_G_'+numero_rubrique_cible).src 
			= web_path_design+'images-navig/G-barre-gauche-'+numero_rubrique_cible+'_on.gif';
		// Changer le style de la rubrique :
		nom_layer_contenu = le_menu.rubs[numero_rubrique_cible].id_layer+'_contenu';
		layer_contenu = document.getElementById(nom_layer_contenu);
		layer_contenu.className = 'rub_std_on';
		// Redescendre les rubriques du dessous :
		if(numero_rubrique_cible < nbr_rubriques) {
			hauteur_layer_sousrub = le_menu.rubs[numero_rubrique_cible].hauteur_sousrubs;
			for(var i=(numero_rubrique_cible+1); i<=nbr_rubriques; i++) {
				// Animation :
				deplacement = +hauteur_layer_sousrub;
				if(is_instantane) {
					step_delai = 0;
					step_pixels = +100;	//+10;
				} else {
					step_delai = le_menu.animation_step_ms;	//20;
					step_pixels = +le_menu.animation_step_pixels;	//+10;
				}
				coulisse_layer(i, deplacement, step_pixels, step_delai);
					// Fonction definie ci-apres.
			}
		}
		// Lancer le timer qui fera s'afficher les sous-rubs de la rub activee
		// des que l'animation aura pris fin :
		rendre_visible_layer_sousrub(numero_rubrique_cible);
			// Fonction definie ci-apres.

	}
}

function coulisse_layer(numeroRubrique, rangePixels, stepPixels, delaiMs) {
	// Init :
	var le_menu = mon_beau_menu;	// defini dans la page HTML
	//
	leLayer = le_menu.rubs[numeroRubrique].layer;
	oriTop = leLayer.getTop();
	cibleTop = oriTop + stepPixels;
	leLayer_agrafes = le_menu.rubs[numeroRubrique].layer_agrafes;
	oriTop_agrafes = leLayer_agrafes.getTop();
	cibleTop_agrafes = oriTop_agrafes + stepPixels;
	rangePixels -= stepPixels;
	if( (stepPixels<0 && rangePixels<=0) || (stepPixels>0 && rangePixels>=0) ) {
		// Flaguer la rubrique (elle bouge) :
		le_menu.rubs[numeroRubrique].is_moving = true;
			// sera RaZ des que l'animation aura pris fin.
		// Coulissage progressif :
		leLayer.setTop(cibleTop);
		leLayer_agrafes.setTop(cibleTop_agrafes);
		setTimeout('coulisse_layer(' +numeroRubrique+ ',' +rangePixels+ ',' 
						+stepPixels+ ',' +delaiMs+ ')', 	delaiMs);
	} else {
		// Position finale :
		leLayer.setTop(cibleTop+rangePixels);
		leLayer_agrafes.setTop(cibleTop_agrafes+rangePixels);
		// De-flaguer la rubrique (elle ne bougera plus) :
		le_menu.rubs[numeroRubrique].is_moving = false;
			// sera RaZ des que l'animation aura pris fin.
	}
}

function rendre_visible_layer_sousrub(numeroRubrique) {
	// Init :
	var le_menu = mon_beau_menu;	// defini dans la page HTML
	//
	// Attendre que le menu arrete de bouger :
	if(le_menu.rubrique_active>0) {
		if(le_menu.check_if_moving()) {
			// Attendre encore un peu :
			setTimeout('rendre_visible_layer_sousrub('+numeroRubrique+')', 100);
			//setTimeout('rendre_visible_layer_sousrub('+numeroRubrique+')', 99); ??
				// 99 au lieu de 100 pour eviter bug clignotement ??
		} else {
			// Rendre visible le layer des sous-rubriques :
			opacite_layer_sousrub(numeroRubrique, 0);	// re-init.
			le_menu.rubs[numeroRubrique].layer_sr.setVisible();
			// Programmer le fade-in :
			fade_layer_sousrub(numeroRubrique, 'in', le_menu.fadesr_step_opacity,
								le_menu.fadesr_step_ms);
				// fade_layer_sousrub(numeroRubrique, inOrOut, stepOpac, stepMs)
			// Lui donner sa hauteur :
			h_layer = le_menu.rubs[numeroRubrique].hauteur_sousrubs;
			le_menu.rubs[numeroRubrique].layer_sr.setHeight(h_layer);
			// Deplacer les agrafes de la rub en bas du layer des sous-rubs :
			leLayer_agrafes = le_menu.rubs[numeroRubrique].layer_agrafes;
			oriTop_agrafes = leLayer_agrafes.getTop();
			cibleTop_agrafes = oriTop_agrafes + h_layer;
			leLayer_agrafes.setTop(cibleTop_agrafes);
		}
	}
}

function fade_layer_sousrub(numeroRubrique, inOrOut, stepOpac, stepMs) {
	// Init :
	var in_or_out;
	(inOrOut=='in') ? in_or_out='in' : in_or_out='out';
	var step_opac = stepOpac || 20;	// opacite en %
	var step_ms = stepMs || 50;	// delai en ms
	var opac_min = 0;
	var opac_max = 85;	//99;	// 99 au lieu de 100 pour eviter bug clignotement
	var delai = step_ms*1;
	var opac;
	var thisIsTheEnd = false;
	//
	if(in_or_out == 'in') {
		opac = opac_min;
	} else {
		opac = opac_max;
		step_opac = (-1)*step_opac;
	}
	while( !thisIsTheEnd ) {
		if((step_opac>0 && opac==opac_max) || (step_opac<0 && opac==opac_min))
			thisIsTheEnd = true;
		setTimeout('opacite_layer_sousrub('+numeroRubrique+', '+opac+')', delai);
			//alert('opac='+opac+' / delai='+delai);	//debug
		delai += step_ms;
		opac += step_opac;
		// Faut pas depasser les bornes :
		if(opac>opac_max)	opac = opac_max;
		if(opac<opac_min)	opac = opac_min;
	}
}

function opacite_layer_sousrub(numeroRubrique, opac) {
	// Init :
	var le_menu = mon_beau_menu;	// defini dans la page HTML
	//
	le_menu.rubs[numeroRubrique].layer_sr.setOpacity(opac);	
}