// declaration de vraiables globales

var xmlhttp, ctScrollX, ctScrollY ;

// détection du navigateur qui pose probleme :
var isIE = (document.all != null );

// remplacement des target en xhtml strict
// utilisation : onclick="nouvFen(this.href); return false;" dans la balise <a>
// on devrait proposer un choix à l'utilisateur.
function nouvFen(url)	{
	window.open(url);
}
// fin de nouvFen

// fonctions de gestion des affichages

function selectionLH (node) {
	var classNode = node.className ;
	if (classNode == "lh_actif" )	return ; // pas d'action si clic sur l'élément actif -> tjrs un élément ouvert !

	getScrollXY () ; // enclenche la sauvegarde du scroll dans la fenetre du navigateur
	var arChild = new Array() ;
	arChild = node.parentNode.childNodes ;
	for ( var i = 0; i < arChild.length; i++ ) {
		if (arChild[i] == node)
			arChild[i].className = (classNode == "lh_actif" ? "lh" : "lh_actif") ;
		else if (arChild[i].className == "lh_actif")
			arChild[i].className = "lh" ;
	}
	window.setTimeout("setScrollXY("+ctScrollX+", "+ctScrollY+")", 30 ) ;
}

function selectionMenu() {
var complementUrl = window.location.search.replace("?", "") ;
if ( ! complementUrl )	{	complementUrl = 1 ;	}
// pb avec cette valeur par defaut si on utilise des index non numériques

gestAffichageMenu() ;
gestAffichagePage(complementUrl, "CNBactive", "CNB") ;
window.setInterval(gestAffichagePied, 200) ;

//window.setInterval(function(){ window.location.reload() ; }, 5000) ; // ligne destiné à la mise au point du site -

} // fin de la fonction selectionMenu

// cette fonction affecte un style spécifique a l'élément de menu dont la page est affichée
function gestAffichageMenu() {

var temp = window.location.href.replace(/\?.*$/, "") ;
var objMenu = document.getElementById("menu") ;
var objUL = objMenu.getElementsByTagName("a") ;
for ( var i = 0; i < objUL.length; i++ ) {
	if (objUL[i].className == "m1" )	{
		if (objUL[i].href == temp ) 
		{	objUL[i].className += " menuActif" ; }
		else if (objUL[i].href == window.location)
		{	objUL[i].className.replace(" menuActif", "") ; }
	}
}

// spécial IE : gestion du hover
if (isIE)	{
	var objUL = objMenu.getElementsByTagName("li") ;
	for ( var i = 0; i < objUL.length; i++ ) {
		if (objUL[i].className == "m1" )	{
			objUL[i].onmouseover=function() {	this.className+=" over";	}
			objUL[i].onmouseout=function() {this.className=this.className.replace(" over", "");	}
		}
	}
}

} // fin de la fonction gestAffichageMenu

// cette fonction gère l'affichage des différentes parties de la page
// correspondant à des éléments de sous-menu
function gestAffichagePage(menu, stylActif, stylAlt)	{

var arChild = new Array () ;
var reNumElem = new RegExp(/\d*$/) ;
var reStyleHidden = new RegExp(/ hiddenPlace/i) ;
var temp ;

if ( document.getElementById("divNavBar") )	{
	arChild = document.getElementById("divNavBar").childNodes; // et si on trouve pas ? A TESTER
	for ( var i = 0 ; i < arChild.length ; i++)	{ 
		if (arChild[i].nodeName != "A")		{ ; } //  ce node n'est pas un A : on ne fait rien
		else if ( ! reNumElem.test(arChild[i].id))	{ ; } // ce node ne possède pas une ID au format attendu : on ne fait rien
		else if (reNumElem.exec(arChild[i].id)== menu)	{
			// l'objet recoit la classe stylActif, en plus de sa classe native
			temp = arChild[i].className.replace(stylAlt+"|"+stylActif, "") ;
			temp += " "+stylActif ;
			arChild[i].className = temp ;
			temp = document.getElementById("divNavBar_"+menu).className.replace(reStyleHidden, "") ;
			document.getElementById("divNavBar_"+menu).className = temp ;
		} else {
			temp = arChild[i].className.replace(stylAlt+"|"+stylActif, "") ;
			temp += " "+stylAlt ;
			arChild[i].className = temp ;
			if ( reStyleHidden.test(document.getElementById("divNavBar_"+reNumElem.exec(arChild[i].id)).className) == false)
				document.getElementById("divNavBar_"+reNumElem.exec(arChild[i].id)).className += " hiddenPlace" ;
		}
	}
}

} // fin de la fonction gestAffichagePage

function gestAffichagePied () {
	var styleHidden = "hiddenPlace" ;
	var objTemp = document.getElementById("renvoiHDP") ;
	var presence = objTemp.className.indexOf(styleHidden) ;
	if ((document.body.scrollHeight > (window.innerHeight ? window.innerHeight : document.body.clientHeight)) & (presence >= 0 ))	{
		objTemp.className = objTemp.className.replace(styleHidden, "") ;
	} else if ((document.body.scrollHeight <= (window.innerHeight ? window.innerHeight : document.body.clientHeight)) & (presence < 0 ))	{
		objTemp.className += styleHidden ;
	}
} // fin de la fonction gestAffichagePied

// cette fonction permet l'affichage en grand - sur fond sombre - de l'élément cliqué
function affichageBox(urlImage)	{

	getScrollXY () ; // enclenche la sauvegarde du scroll dans la fenetre du navigateur

	if (document.getElementById("box-overlay")) {	return ;	}

	var imgSrc	= new Image() ;
	imgSrc.src	= urlImage ;
	imgSrc.lowsrc	= urlImage.replace(/\./, "-apercu.");
	imgSrc.id		= "box-overlay-imgContent" ;
//	imgSrc.style.visibility = "hidden" ;
	
	var objN1		= document.createElement("div") ;
	objN1.id		= "box-overlay" ;
// on fixe la DIV overlay à la taille de l'ensemble de la page en hauteur
	objN1.style.width = document.body.scrollWidth+"px" ;
	objN1.style.height = (document.height ? document.height : document.body.scrollHeight)+"px" ;	// standard OU IE ?

	var objN2		= document.createElement("div") ;
	objN2.id		= "box-overlay-content" ;
	objN2.style.height	= "20px" ;
	objN2.style.width	= "10px" ;

	var objBtnClose	= document.createElement("a") ;
	objBtnClose.id	= "overlay-btn-close" ;
	objBtnClose.href	= "#" ;
	addEvent(objBtnClose, "click", affichageRetourBox) ;

	objN2.appendChild(objBtnClose) ;
	objN2.appendChild(imgSrc) ;
	objN1.appendChild(objN2) ;
	document.body.appendChild(objN1) ;

	window.ID_ajustDiv = window.setInterval(ajustDiv, 100) ;
	// dans 1 s, la boite contenant l'image va etre retaillée et l'image affichée

}// fin de la fonction affichageBox


// fonction appelée à la création de la boite d'affichage

function affichageRetourBox()	{
	var obj = document.getElementById("box-overlay") ;
	obj.parentNode.removeChild(obj) ;
	window.setTimeout("setScrollXY("+ctScrollX+", "+ctScrollY+")", 30 ) ;
}

function getScrollXY ()	{
// état actuel du scroll
	if (window.scrollX == undefined) {	// INTERNET EXPLORER
		ctScrollX = document.body.scrollLeft ;
		ctScrollY = document.body.scrollTop ;
	} else {
		ctScrollX = window.scrollX ;
		ctScrollY = window.scrollY ;
	}
}

function setScrollXY (x, y)	{
	if (document.getElementById("box-overlay") == null)
		window.scrollTo(ctScrollX, ctScrollY) ;
}

function ajustDiv()	{
	var imgSrc = document.getElementById("box-overlay-imgContent") ;
	if (imgSrc.complete == true)	{
		window.clearInterval(window.ID_ajustDiv) ;

		var boxSrc = document.getElementById("box-overlay-content") ;
		var hauteur, largeur ;
		var largeurTotale = boxSrc.parentNode.scrollWidth ;

		if (window.innerHeight == undefined)	{ // sous IE
			hauteurBox = document.body.scrollHeight ;
		} else {
			hauteurBox = window.innerHeight ; // hauteur d'affichage dans le navigateur
		}
		hauteurImg = hauteurBox-16-5-50  ;

		hauteur = (hauteurImg < imgSrc.height) ? hauteurImg : imgSrc.height ;
		largeur = parseInt(imgSrc.width * hauteur / imgSrc.height)
		if (largeur > largeurTotale)	{
			hauteur = parseInt(hauteur * largeurTotale / largeur) ;
			largeur = largeurTotale ;
		}

		boxSrc.style.height = hauteur+21+"px" ;
		boxSrc.style.width	= largeur+"px" ;

		imgSrc.style.height	= hauteur-10+"px" ;
		imgSrc.style.width	= largeur-10+"px" ;
		imgSrc.style.visibility = "visible" ;

	}
} // fin de la fonction ajustDiv

function addEvent(objet, nomEvent, nomFonction)	{
	if (objet.addEventListener)
		objet.addEventListener(nomEvent, nomFonction, true) ;
	else if (objet.attachEvent)
		objet.attachEvent("on"+nomEvent, nomFonction) ; // pour IE
	else // c'est quoi ce navigateur ?
		window.alert("opération impossible !")
}

// fonctions XMLHTTP

function loadXMLDoc(url, vFn)	{
	xmlhttp=null;
	if (window.XMLHttpRequest)	{// code for Firefox, Opera, IE7, etc.
		xmlhttp=new XMLHttpRequest();
	} else if (window.ActiveXObject)	{// code for IE6, IE5
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (xmlhttp!=null)	{
		xmlhttp.onreadystatechange = state_Change (vFn) ;
		xmlhttp.open("GET", url, true);
		xmlhttp.send(null);
	} else {
		alert("Your browser does not support XMLHTTP.");
	}
}

function state_Change (vFn)	{
	if ( xmlhttp.readyState == 4)	{// 4 = "loaded"
		if ( xmlhttp.status == 200 )	{// 200 = "OK"
			alert( xmlhttp.statusText+"\r"+ xmlhttp.responseText);
			vFn () ;
		} else {
			alert( "Problem retrieving data : " + xmlhttp.statusText ) ;
		}
	}
}

// fonction en test
// objectif : créé la box d'affichage avec une temporisation et une animation de l'affichage
// ca ne marche pas pour l'instant

function test_ajax () {
	loadXMLDoc("/cgi-bin/test-cgi", test_ajax_result ) ;
	document.getElementById('testResult').innerHTML = "en cours..." ;
}
function test_ajax_result () {
	document.getElementById('testResult').innerHTML = xmlhttp.responseText ;
}


var hauteur, largeur ;
function ajustDivTest()	{
	var imgSrc = document.getElementById("box-overlay-imgContent") ;
	if (imgSrc.complete == true)	{ // car on a besoin de connaitre ses dimensions
		window.clearInterval(window.ID_ajustDiv) ;
		var boxSrc = document.getElementById("box-overlay-content") ;
		var largeurTotale = boxSrc.parentNode.scrollWidth - 10 ;

		if (window.innerHeight == undefined)	{ // sous IE
			hauteurBox = document.body.scrollHeight ;
		} else {
			hauteurBox = window.innerHeight ; // hauteur d'affichage dans le navigateur
		}
		hauteurImg = hauteurBox-16-5-50 ;

		hauteur = (hauteurImg < imgSrc.height) ? hauteurImg : imgSrc.height ;
		largeur = parseInt(imgSrc.width * hauteur / imgSrc.height)
		if (largeur > largeurTotale)	{
			hauteur = parseInt(hauteur * largeurTotale / largeur) ;
			largeur = largeurTotale ;
		}
		window.ID_ajustDiv = window.setInterval(ajustDivTempo, 100) ;
	}
} // fin de la fonction ajustDivTest

function ajustDivTempo()	{
	var boxSrc	= document.getElementById("box-overlay-content") ;
	var hauteurBox	= parseInt(boxSrc.style.height) ;
	var largeurBox	= parseInt(boxSrc.style.width) ;
	var increment	= 10 ;

	if ( hauteurBox + increment < hauteur )
		hauteurBox += increment ;
	else
		hauteurBox = hauteur ;
		
	if ( largeurBox + (2*increment) < largeur )
		largeurBox += (2*increment) ;
	else
		largeurBox = largeur ;

	boxSrc.style.height = hauteurBox+21+"px" ;
	boxSrc.style.width	= largeurBox+"px" ;

	if ( ( hauteurBox  >= hauteur ) & ( largeurBox >= largeur ) )	{
		var imgSrc = document.getElementById("box-overlay-imgContent") ;
		imgSrc.style.height	= hauteur-10+"px" ;
		imgSrc.style.width	= largeur-10+"px" ;
		imgSrc.style.visibility = "visible" ;
		window.clearInterval(window.ID_ajustDiv) ;
	}

} // fin de la fonction ajustDivTempo
