/* *****************************************************
   VERIFICATEUR DU NAVIGATEUR **************************
   *****************************************************
*/
var browser;
if (document.layers){ // Si Netscape 4.X
	var browser = 'ns4';
} else if (document.all){ // Si Internet Explorer
	var browser = 'ie4';
} else if (document.getElementById){ // Si Internet Explorer
	var browser = 'mozilla';
}

// *****************************
// ***** LISTING DES BLOCS *****
// *****************************

var ListeBlocs = new Array();
ListeBlocs[0] = 'bloc1';
ListeBlocs[1] = 'bloc2';

// *********************************
// ***** LISTING DES RUBRIQUES *****
// *********************************

// La nomenclature d'une rubrique découle du nom du calque. Elle influe sur le nom des images de calage.
// Exemple : pour la rubrique 01, on a le calque 'bloc1rub1' avec à l'intérieur l'image référente 'bloc1rubrh' ( remoted height)
//           et l'image référente 'bloc1rub1eh' (expanded height).
// Bien écrire les calques et les images référentes qu'ils contiennent en suivant cette nomenclature (voir dans le code en bas
// de page pour plus d'infos).

var ListeDivs0 = new Array();
j=0;
for(i=0;i<rubriqueNav1.length;i++){
	tmprubrique = rubriqueNav1[i];
	if(tmprubrique.getNiveau() ==1 && tmprubrique.getNiveau1() != 0){
		ListeDivs0[j] = 'bloc1rub'+tmprubrique.getNiveau1();
		j++;
	}
}
ListeDivs0[j] = 'bloc1foot';

// *********************************************************************************
// ***** FONCTION DE CALAGE Y DES SOUS-RUBRIQUES A l'INITIALISATION DE LA PAGE *****
// *********************************************************************************
function calRubs(DivMaster, DivToPlace, Referent) {

/* On a besoin de récuperer la hauteur du tableau 'bloc1rub1' dans le calque 'bloc1'.
   Pour ça il faut définir la distance entre le bas du tableau, et son point le plus
   haut. Le bas du tableau est l'image 'bloc1rub1cal'. Le haut du tableau est le calque
   'bloc1'.
*/
	if (browser == 'ie4'){ // Si Internet Explorer
// On définit le point le plus bas, là où le calcul va démarrer
		thisElmnt = document.all[DivMaster].document[Referent];

// On définit le point le plus haut, là où le calcul de la hauteur du tableau va s'arreter
		EndRef = document.all[DivMaster];

// On définit la première valeur du calcul
		thisTop = document.all[DivMaster].document[Referent].offsetTop;

// Tant que le point de calcul n'est pas le plus haut, on aditionne les coordonnées Y de chaque point de calcul 
		while (thisElmnt != EndRef) {
			thisTop += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
// On attribue la coordonnée Y au calque à placer
		document.all[DivMaster].document.all[DivToPlace].style.top = thisTop;

	}else if (browser == 'mozilla'){ 
		thisElmnt = document[Referent];
		EndRef = document.getElementById(DivMaster);
		thisTop = document[Referent].offsetTop;
		while (thisElmnt != EndRef) {
			thisTop += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
		document.getElementById(DivToPlace).style.top = thisTop;
	} else if (browser == 'ns4'){// Si Netscape 4.X
		thisElmnt = document[DivMaster].document[Referent];
		thisTop = thisElmnt.y;
		thisLeft = thisElmnt.x;
// On attribue la coordonnée Y au calque à placer
		document[DivMaster].document[DivToPlace].top = thisTop;
	}
	
}

// *********************************************************************************
// ***** FONCTION DE CALAGE H DES SOUS-RUBRIQUES A l'INITIALISATION DE LA PAGE *****
// *********************************************************************************
function sizeRubs(DivMaster, DivToPlace, Referent) {

/* On a besoin de récuperer la hauteur du tableau 'bloc1rub1' dans le calque 'bloc1'.
   Pour ça il faut définir la distance entre le bas du tableau, et son point le plus
   haut. Le bas du tableau est l'image 'bloc1rub1cal'. Le haut du tableau est le calque
   'bloc1'.
*/
	if (browser == 'ie4'){ // Si Internet Explorer
// On définit le point le plus bas, là où le calcul va démarrer
		thisElmnt = document.all[DivMaster].document.all[DivToPlace].document[Referent];

// On définit le point le plus haut, là où le calcul de la hauteur du tableau va s'arreter
		EndRef = document.all[DivMaster].document.all[DivToPlace];

// On définit la première valeur du calcul
		thisTop = document.all[DivMaster].document.all[DivToPlace].document[Referent].offsetTop;

// Tant que le point de calcul n'est pas le plus haut, on aditionne les coordonnées Y de chaque point de calcul 
		while (thisElmnt != EndRef) {
			thisTop += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
// On attribue la hauteur au calque à dimensionner
		document.all[DivMaster].document.all[DivToPlace].style.height = thisTop;
		BlocRubDecay = thisTop;
	}else if (browser == 'mozilla'){
		thisElmnt = document[Referent];
		EndRef = document.getElementById(DivToPlace);
		thisTop = document[Referent].offsetTop;
		while (thisElmnt != EndRef) {
			thisTop += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
		document.getElementById(DivToPlace).style.height = thisTop;
		BlocRubDecay = thisTop;
	} else if (browser == 'ns4'){// Si Netscape 4.X
		thisElmnt = document[DivMaster].document[Referent];
		thisTop = thisElmnt.y;
		thisLeft = thisElmnt.x;
// On attribue la coordonnée Y au calque à placer
		document[DivMaster].document[DivToPlace].top = thisTop;
	}
}

// ***********************************************************************
// ***** FONCTION POUR DETERMINER LA HAUTEUR DE LA DERNIERE RUBRIQUE *****
// ***********************************************************************
function matchRubsH(DivMaster, DivToPlace, Referent) {

/* On a besoin de récuperer la hauteur du tableau 'bloc1rub1' dans le calque 'bloc1'.
   Pour ça il faut définir la distance entre le bas du tableau, et son point le plus
   haut. Le bas du tableau est l'image 'bloc1rub1cal'. Le haut du tableau est le calque
   'bloc1'.
*/

if (browser == 'ie4'){ // Si Internet Explorer

// On définit le point le plus bas, là où le calcul va démarrer
	thisElmnt = document.all[DivMaster].document.all[DivToPlace].document[Referent];

// On définit le point le plus haut, là où le calcul de la hauteur du tableau va s'arreter
	EndRef = document.all[DivMaster].document.all[DivToPlace];

// On définit la première valeur du calcul
	thisTop = document.all[DivMaster].document.all[DivToPlace].document[Referent].offsetTop;

// Tant que le point de calcul n'est pas le plus haut, on aditionne les coordonnées Y de chaque point de calcul 
	while (thisElmnt != EndRef) {
		thisTop += thisElmnt.offsetTop;
		thisElmnt = thisElmnt.offsetParent;
	}
	
	BlocRubDecay = thisTop;
	}else if (browser == 'mozilla'){

	thisElmnt = document[Referent];

	EndRef = document.getElementById(DivToPlace);

	thisTop = document[Referent].offsetTop;

	while (thisElmnt != EndRef) {
		thisTop += thisElmnt.offsetTop;
		thisElmnt = thisElmnt.offsetParent;
	}
	
	BlocRubDecay = thisTop;
	
	} else if (browser == 'ns4'){// Si Netscape 4.X
		thisElmnt = document[DivMaster].document[Referent];
		thisTop = thisElmnt.y;
		BlocRubDecay = thisTop;
	}
}

// ******************************************************
// ***** FONCTION DE CALAGE DES BLOCS DE NAVIGATION *****
// ******************************************************
function calBloc(BlocName, Referent, DecayX, DecayY) {
// On doit caler les blocs grace à une image de référence située dans le body ou dans
// un bloc supérieur. 
	if (Referent != 'no') {// Si l'image référente est dans le body
		
		if (browser == 'ie4'){ // Si Internet Explorer

			var thisTop = 0;
			thisElmnt = document[Referent];
			thisTop = thisElmnt.offsetTop;
			thisLeft = thisElmnt.offsetLeft;
		
			while (thisElmnt != null) {
				thisTop += thisElmnt.offsetTop;
				thisLeft += thisElmnt.offsetLeft;
				thisElmnt = thisElmnt.offsetParent;
			}
			var realTop = thisTop + DecayY;
			var realLeft = thisLeft + DecayX;
			document.all[BlocName].style.top = realTop;
			document.all[BlocName].style.left = realLeft;
			
		}else if (browser == 'mozilla'){
		
			var thisTop = 0;
			thisElmnt = document[Referent];
			thisTop = thisElmnt.offsetTop;
			thisLeft = thisElmnt.offsetLeft;
		
			while (thisElmnt != null) {
				thisTop += thisElmnt.offsetTop;
				thisLeft += thisElmnt.offsetLeft;
				thisElmnt = thisElmnt.offsetParent;
			}
			var realTop = thisTop + DecayY;
			var realLeft = thisLeft + DecayX;
			document.getElementById(BlocName).style.top = realTop;
			document.getElementById(BlocName).style.left = realLeft;
			
		}else if (browser == 'ns4'){// Si Netscape 4.X
			thisElmnt = document[DivMaster].document[Referent];
			thisTop = thisElmnt.y;
			var realTop = thisTop + DecayY;
			var realLeft = thisLeft + DecayX;
			document[BlocName].top = realTop;
			document[BlocName].left = realLeft;
		}
		
	}else {// Si l'image référente est dans un bloc supérieur
		// On détermine le bloc supérieur et sa dernière rubrique
		for (i=0; i<ListeBlocs.length; i++) {
			if (ListeBlocs[i] == BlocName) {
				var anteI = i-1;
				// On définit le bloc supérieur
				var BlocParent = ListeBlocs[anteI];
				// On définit la dernière rubrique de ce bloc
				var lastRub = eval("ListeDivs"+anteI)[eval("ListeDivs"+anteI).length-1];
			}else {
			}
		}

		// On détermine la hauteur minimale de la dernière rubrique
		var refRhTop = 0;
		if (browser == 'ie4'){ // Si Internet Explorer
			var refRh = document.all(BlocParent).document.all(lastRub).document.all(lastRub+"rh");
		
			var refRhTop = refRh.offsetTop;
			var refRhEnd = document.all(BlocParent).document.all(lastRub);
			
			while (refRh != refRhEnd) {
				refRhTop += refRh.offsetTop;
				refRh = refRh.offsetParent;
			}		
			
			// On vérifie la hauteur de  cette rubrique
			lastRubDiv = document.all[BlocParent].document.all[lastRub];
			lastRubDivHtmp = lastRubDiv.style.height;
			lastRubDivH = lastRubDivHtmp.substring(0, 2);
		}else if (browser == 'mozilla'){
			var refRh = document[lastRub+"rh"];
		
			var refRhTop = refRh.offsetTop;
			var refRhEnd = document.getElementById(lastRub);
			
			while (refRh != refRhEnd) {
				refRhTop += refRh.offsetTop;
				refRh = refRh.offsetParent;
			}		
			
			// On vérifie la hauteur de  cette rubrique
			lastRubDiv = document.getElementById(lastRub);
			lastRubDivHtmp = lastRubDiv.style.height;
			lastRubDivH = lastRubDivHtmp.substring(0, 2);
		}else if (browser == 'ns4'){// Si Netscape 4.X
			refRh = document[DivMaster].document[lastRub].document[lastRub+"rh"];
			refRhTop = refRh.y;
			refRhEnd = document[DivMaster].document[lastRub];
			// On vérifie la hauteur de  cette rubrique
			lastRubDiv = document[BlocParent].document[lastRub];
			lastRubDivHtmp = lastRubDiv.height;
			lastRubDivH = lastRubDivHtmp.substring(0, 2);
		}
		
		// On regarde si la hauteur actuelle de la dernière rubrique est supérieur à sa hauteur minimale
		if (lastRubDivH >  refRhTop) {
			var etat="eh";
		}else {
			var etat="rh";
		}
		// Maintenant on sait si la dernière rubrique est déployée ou pas, on procède au placement du bloc.
		if (browser == 'ie4'){ // Si Internet Explorer
			thisTop = 0;
			thisElmnt = lastRubDiv.document[lastRub+etat];
			thisTop = thisElmnt.offsetTop;
			thisLeft = thisElmnt.offsetLeft;
			while (thisElmnt != null) {
				thisTop += thisElmnt.offsetTop;
				thisLeft += thisElmnt.offsetLeft;
				thisElmnt = thisElmnt.offsetParent;
	
			}
	
			var realTop = thisTop + DecayY;
			var realLeft = thisLeft + DecayX;
	
			// On attribue les coordonnées Y et X au bloc concerné
			document.all[BlocName].style.top = realTop;
			document.all[BlocName].style.left = realLeft;
		}else if (browser == 'mozilla'){
			thisTop = 0;
			thisElmnt = document[lastRub+etat];
			thisTop = thisElmnt.offsetTop;
			thisLeft = thisElmnt.offsetLeft;
			while (thisElmnt != null) {
				thisTop += thisElmnt.offsetTop;
				thisLeft += thisElmnt.offsetLeft;
				thisElmnt = thisElmnt.offsetParent;
	
			}
	
			var realTop = thisTop + DecayY;
			var realLeft = thisLeft + DecayX;
	
			// On attribue les coordonnées Y et X au bloc concerné
			document.getElementById(BlocName).style.top = realTop;
			document.getElementById(BlocName).style.left = realLeft;
		}else if (browser == 'ns4'){// Si Netscape 4.X

			thisTop = 0;
			thisElmnt = document[lastRub+etat];
			thisTop = thisElmnt.y;
			thisLeft = thisElmnt.x;
			
			var realTop = thisTop + DecayY;
			var realLeft = thisLeft + DecayX;
	
			// On attribue les coordonnées Y et X au bloc concerné
			document[BlocName].top = realTop;
			document[BlocName].left = realLeft;		}

	}
}

// *************************************************************
// ***** FONCTION DE REDÉFINITION DE HAUTEUR DES RUBRIQUES *****
// *************************************************************
function NewDivH (DivMaster, DivTarget, Referent) {
	if (browser == 'ie4'){ // Si Internet Explorer
		thisHeight = 0;
		thisElmnt = document.all[DivMaster].document.all[DivTarget].document[Referent];
		EndRef = document.all[DivMaster].document.all[DivTarget];
		
		while (thisElmnt != EndRef) {
			thisHeight += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
	
		DivH = thisHeight;
	}else if (browser == 'mozilla'){
		thisHeight = 0;
		thisElmnt = document[Referent];
		EndRef = document.getElementById(DivTarget);
		
		while (thisElmnt != EndRef) {
			thisHeight += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
	
		DivH = thisHeight;
	}else if (browser == 'ns4'){// Si Netscape 4.X
		thisHeight = 0;
		thisElmnt = document[DivMaster].document[DivTarget].document[Referent];
		EndRef = document[DivMaster].document[DivTarget];
		
		while (thisElmnt != EndRef) {
			thisHeight += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
	
		DivH = thisHeight;
	}
	
}

// ********************************************************************
// ***** FONCTION DE REDÉFINITION DES COORDONNÉES Y DES RUBRIQUES *****
// ********************************************************************
function NewDivY (DivMaster, DivTarget, DivParent, ParentReferent) {
	if (browser == 'ie4'){ // Si Internet Explorer

		thisTop = 0;
		thisElmnt = document.all[DivMaster].document.all[DivParent].document[ParentReferent];
		EndRef = document.all[DivMaster];
		
		while (thisElmnt != EndRef) {
			thisTop += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
		
		DivY = thisTop;
	}else if (browser == 'mozilla'){

		thisTop = 0;
		thisElmnt = document[ParentReferent];
		EndRef = document.getElementById(DivMaster);
		
		while (thisElmnt != EndRef) {
			thisTop += thisElmnt.offsetTop;
			thisElmnt = thisElmnt.offsetParent;
		}
		
		DivY = thisTop;
	}else if (browser == 'ns4'){// Si Netscape 4.X

		thisTop = 0;
		thisElmnt = document[DivMaster].document[DivParent].document[ParentReferent];
		EndRef = document[DivMaster];
		
		thisTop = thisElmnt.y;
		
		DivY = thisTop;
	}
	
}


// **********************************************************************
// ***** FONCTION DE MOULINETTE DÉFINISSANT QUEL CALQUE EST DÉPLOYÉ *****
// **********************************************************************
function RemoteExpand(DivMaster, DivToExpand){
	// On répertorie tous les blocs afin de vérifier dans lequel la navigation doit être actionnée 
	var DivParent = "";
	for (j = 0; j< ListeBlocs.length; j++){
		if (ListeBlocs[j] == DivMaster){// Si le bloc vérifié est celui à actionner, on actionne sa navigation.
			// On fait la boucle sur toutes les divs du bloc concerné
			for (i = 0; i< eval("ListeDivs"+j).length; i++) {
			// Si la div listée est celle à déployer
				if ( eval("ListeDivs"+j)[i] == DivToExpand) {
					// son image référente sera l'image Expanded Height.
					var Referent =  eval("ListeDivs"+j)[i]+'eh';
					// On calcule la distance entre l'image référente et le haut du bloc
					NewDivH(DivMaster,  eval("ListeDivs"+j)[i], Referent);
					// On attribue cette distance à la div concernée en tant que hauteur
					if (browser == 'ie4'){ // Si Internet Explorer
						document.all[DivMaster].document.all[ eval("ListeDivs"+j)[i]].style.height = DivH;
					}else if (browser == 'mozilla'){
						document.getElementById(eval("ListeDivs"+j)[i]).style.height = DivH;
					}else if (browser == 'ns4'){// Si Netscape 4.X
						document[DivMaster].document[eval("ListeDivs"+j)[i]].height = DivH;
					}
					// Si la div concernée n'est pas la plus haute du bloc, on va devoir recalculer sa position Y
					if (i != 0) {
						// On définit l'image référente  (située dans la div supérieure).
						var ParentReferent =  eval("ListeDivs"+j)[(i-1)]+'rh';
						// On définit la div supérieure
						DivParent = eval("ListeDivs"+j)[(i-1)];
						// On calcule la distance entre cette image référente et le haut du bloc
						NewDivY(DivMaster, eval("ListeDivs"+j)[i], DivParent, ParentReferent);
						// On attibue cette distance à la div à deployer 
						if (browser == 'ie4'){ // Si Internet Explorer
							document.all[DivMaster].document.all[eval("ListeDivs"+j)[i]].style.top = DivY;
						}else if (browser == 'mozilla'){
							document.getElementById(eval("ListeDivs"+j)[i]).style.top = DivY;
						}else if (browser == 'ns4'){// Si Netscape 4.X
							document[DivMaster].document[eval("ListeDivs"+j)[i]].top = DivY;
						}
					}
				}else{// Si la div listée est celle à replier
					// On définit l'image référente (qui sera Remoted Height).
					var Referent = eval("ListeDivs"+j)[i]+'rh';
					// On calcule sa hauteur
					NewDivH(DivMaster,  eval("ListeDivs"+j)[i], Referent);
					// On attribue cette hauteur à la div concernée
					if (browser == 'ie4'){ // Si Internet Explorer
						document.all[DivMaster].document.all[eval("ListeDivs"+j)[i]].style.height = DivH;
					}else if (browser == 'mozilla'){
						document.getElementById(eval("ListeDivs"+j)[i]).style.height = DivH;
					}else if (browser == 'ns4'){// Si Netscape 4.X
						document[DivMaster].document[eval("ListeDivs"+j)[i]].height = DivH;
					}
					// Si la div concernée n'est pas la plus haute du bloc
					if (i != 0) {
						// On définit son parent qui est la div supérieure
						DivParent =  eval("ListeDivs"+j)[(i-1)];
						if ( DivParent == DivToExpand) {
							// Si le parent est déployé on définit l'image référente contenue dans celui-ci comme Expanded Height
							var ParentReferent = eval("ListeDivs"+j)[(i-1)]+'eh';
						}else{
							// Si le parent est replié on définit l'image référente contenue dans celui-ci comme Remoted Height
							var ParentReferent = eval("ListeDivs"+j)[(i-1)]+'rh';
						}
						// On calcule la distance entre l'image référente et le haut du bloc
						NewDivY(DivMaster, eval("ListeDivs"+j)[i], DivParent, ParentReferent); 	
						// On attribue la distance à la div concernée en tant que coordonnée Y
						if (browser == 'ie4'){ // Si Internet Explorer
							document.all[DivMaster].document.all[eval("ListeDivs"+j)[i]].style.top = DivY;
						}else if (browser == 'mozilla'){
							document.getElementById(eval("ListeDivs"+j)[i]).style.top = DivY;
						}else if (browser == 'ns4'){// Si Netscape 4.X
							document[DivMaster].document[eval("ListeDivs"+j)[i]].top = DivY;
						}
					}
				}
			}
			if (j ==0){
			calBloc(ListeBlocs[j+1], 'no', 0, 8);
			}
		}
	}
}
