/************
*  Fichier Javascript commun fnac.com
*
*
*****************/

/**************
* Variables globales
**************/
var IS_IE = document.all && window.print && !window.opera && /MSIE [56]/.test(navigator.userAgent);
var IS_IE_ALL = document.all && window.print && !window.opera && /MSIE/.test(navigator.userAgent);
var IE_W3C = IS_IE && /MSIE [789]/.test(navigator.userAgent);
var IS_Webkit = /Konqueror|Safari|KHTML/.test(navigator.userAgent);
var heightPropertyToUse = IS_IE ? "height" : "minHeight";


/********************
* Framework
* Ensemble de fonctions qui aident au developpement
* Certaines de ces fonctions ne sont pas documentees, par le simple fait qu'ellesfonctionnent parfaitement et n'ont pas a etre modifiees.
*******************/

/* AddEvent :
	Cette fonction permet d'associer une fonction a un evenement,
	ex : addEvent(window, "load", mafonction)
	ne Jamais mettre de parentheses a la fonction passee en parametres
*/
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}



/*  getStyle :
	Cette fonction permet de recuperer le style declare sur un element, meme si celui-ci a ete declare dans la feuille de style.
	ex : getStyle(monelement, "padding-top");
*/
function getStyle(oElm, strCssRule){
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle) {
		try{ strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); }
		catch(e) { strValue = ""; }
	}
	else if(oElm.currentStyle) {
		try{
			strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
				return p1.toUpperCase();
			});
			strValue = oElm.currentStyle[strCssRule];
		} catch(e) {
			strValue = "";
		}
	}
	return strValue;
}

/*  intStyle :
	Cette fonction retourne une valeur entiere d'un style.
	ex :
		getStyle(monelement, "padding-top"); // retourne 15px, mais on ne veut que 15
		intStyle(monelement, "padding-top"); // retourne 15

*/
function intStyle(oElm, strCSSRule) {
	var val = parseInt(getStyle(oElm, strCSSRule));
	if (isNaN(val)) val=0;
	return val;
}

/*  floatStyle :
	Cette fonction retourne la  valeur flottante d'un style.
	ex :
		getStyle(monelement, "width"); // retourne 15.5em, mais on ne veut que 15.5
		floatStyle(monelement, "padding-top"); // retourne 15
	Cette fonction n'est pas encore utilisee, mais peut-etre dans un developpement futur.
*/
function floatStyle(oElm, strCSSRule) {
	var val = parseFloat(getStyle(oElm, strCSSRule));
	if (isNaN(val)) val=0;
	return val;
}

/* findPos :
	recupere la position X,Y d'un objet dans une page
	ex :
		var pos = findPos(elm);

*/
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


/* getMouse :
	Recupere les coordonnees de la souris et les met dans les variables globales
		window.mouseX
	et	window.mouseY,
		il faut passer event en parametre sur les evenements
	ex :
		function fun(param1, param2, e) {
			getMouse(e);
			sourisX = window.mouseX;
			sourisY = window.mouseY
		}
		fun("foo", "bar", event);

*/
/* getMouse :  */
function getMouse(e){
	var x,y; var elt = (navigator.userAgent.indexOf("MSIE 5")!=-1) ? document.body : document.documentElement;
	if ( document.captureEvents ) {
		x = e.pageX;
		y = e.pageY;
	} else if ( window.event.clientX ) {
		x = window.event.clientX+elt.scrollLeft;
		y = window.event.clientY+elt.scrollTop;
	}
	window.mouseX = x;
	window.mouseY = y;
}

function mouseMove(evt) {
	var x = 0;
	var y = 0;
	var plusX = 0;
	var plusY = 0;
	if (document.layers) {
		x = evt.x;
		y = evt.y;
		plusX = window.pageXOffset;
		plusY = window.pageYOffset;
	} else	if (document.all) {
		x = event.clientX;
		y = event.clientY;
		plusX = document.body.scrollLeft;
		plusY = document.body.scrollTop;
	} else if (document.getElementById) {
		x = evt.clientX;
		y = evt.clientY;
		plusX = window.pageXOffset;
		plusY = window.pageYOffset;
	}
	if(global_element_name)
	{
         document.getElementById(global_element_name).style.left = (x+plusX+15)+"px";
	     document.getElementById(global_element_name).style.top = (y+plusY+5)+"px";
        }
} 




/*  ifrlayer :
	Cette fonction retourne la  valeur flottante d'un style.
	ex :
		- afficher un bloc :
			myBlock.style.display='block';
			ifrlayer.make(myBlock); //genere ou affiche l'iframe
		- cacher un bloc :
			myBlock.style.display='none';
			ifrlayer.hide(myBlock); //cache l'iframe associee au bloc
		-deplacer un bloc :
			myBlock.style.left = "100px";
			ifrlayer.move(myBlock); // deplace l'iframe associee au bloc
	Cette fonction n'est pas encore utilisee, mais peut-etre dans un developpement futur.
*/
/* genere une iframe pour faire passer les divs par dessus des selects sous IE */
var ifrlayer = {
	make:function(obj) {
		if(!obj) return; obj = (typeof(obj)=="string") ? document.getElementById(obj) : obj; if(!obj) return;
		if(document.all && !window.opera && document.getElementById) {
			if(obj.parentNode && !obj.iframelayer) {
			    var ifr = obj.parentNode.insertBefore(document.createElement('<iframe src="javascript:false"></iframe>'), obj);
			    if(obj.currentStyle.zIndex != "" && parseInt(obj.currentStyle.zIndex)>1 ) {
				    ifr.style.zIndex = parseInt(obj.currentStyle.zIndex)-1;
			    }
			    with(ifr.style) {
				    filter = "mask()";
				    position = "absolute";
			    }
                obj.iframelayer = ifr;
            }
		}
		if(obj.iframelayer) {
		    obj.iframelayer.style.visibility="visible";
            ifrlayer.resize(obj);
            ifrlayer.move(obj)
        }
	},
	hide:function(obj) {
		if(!obj) return; obj = typeof(obj)=="string" ? document.getElementById(obj) : obj; if (!obj) return;
		var ifr = obj.iframelayer;
		if(ifr) {
			ifr.style.visibility="hidden";
		}
	},
	move:function(obj) {
		if(obj && obj.iframelayer) {
		    with(obj.iframelayer.style) {
			    top = obj.offsetTop+"px";
			    left = obj.offsetLeft+"px"
		    }
		}
	},
	resize:function(obj) {
	    if(obj && obj.iframelayer) {
	        with(obj.iframelayer.style) {
	            width =  obj.offsetWidth+"px";
		        height =  obj.offsetHeight+"px";
		    }
		}
	}
}


/*  addHover :
	Cette fonction ajoute le fonctionnement de la pseudo classe hover en CSS, et seulement pour IE
	Elle se base sur les evenement propres a IE qui sont les evenements qui ont le comportement le plus proche du :hover en CSS.
	Pour utiliser cette fonction il faut le faire en CSS
	ex :
		#menu ul li {behavior:expression(addHover(this))}
		Afin de ne pas prendre en compte IE7 en mode strict il suffit de placer la classe .IS_IE avant, cette classe est ajoute pendant le chargement de la page.
		.IS_IE #menu ul li {behavior:expression(addHover(this))}
*/
function addHover(elm) {
	elm.style.behavior = " ";
	elm.onmouseenter = function() {
		this.className+= ' hover';
	}
	elm.onmouseleave = function() {
		this.className = this.className.replace(/\bhover\b/,"");
	}
}

/******************************
* fonctions d'effets
******************************/
/*
 size : redimensionne un element avec un effet
 size ( element, actionsWidth:object, heightWidth:object, timer:int, pitch:int);
 */

function resize(obj, actionWidth, actionHeight, timer, pitch, funcWhile, funcAfter, inBoucle) {
	var endWidth=false;
	var endHeight=false;
	if (actionWidth) {
		if (!inBoucle) obj.style.width=actionWidth.start+"px";
		if ((pitch>=0 && obj.offsetWidth<actionWidth.end) || (pitch<0  && obj.offsetWidth>actionWidth.end)) obj.style.width = actionWidth.start+pitch+"px";
		if ((pitch>=0 && obj.offsetWidth>=actionWidth.end) || (pitch<=0  && obj.offsetWidth<=actionWidth.end)) {
			obj.style.width = actionWidth.end+"px";
			endWidth=true;
		}
	} else {
		endWidth=true;
	}
	if (actionHeight) {
		if (!inBoucle) obj.style.height=actionHeight.start+"px";
		if ((pitch>=0 && obj.offsetHeight<actionHeight.end) || (pitch<0  && obj.offsetHeight>actionHeight.end)) obj.style.height = actionHeight.start+pitch+"px";
		if ((pitch>=0 && obj.offsetHeight>=actionHeight.end) || (pitch<=0  && obj.offsetHeight<=actionHeight.end)) {
			obj.style.height = actionHeight.end+"px";
			endHeight=true;
		}
	} else {
		endHeight=true;
	}
	if (funcWhile) funcWhile();
	if (endWidth && endHeight) {
		if (funcAfter) funcAfter();
		return;
	}
	setTimeout(function() {
		resize(
			obj,
			actionWidth ? {start:obj.offsetWidth, end:actionWidth.end} : null,
			actionHeight ? {start:obj.offsetHeight, end:actionHeight.end} : null,
			timer,
			pitch,
			funcWhile,
			funcAfter,
			true
		)
	}, timer);
}


/*************
* Fonctions pour fixer les coins sous IE
* Une fonctions est prevue aussi pour Safari 2.0, Opera 8.5 et FF 1.0 pour certains cas
**************/
var CSSBottomCorners=[]; //array pouvant contenir les coins absolu positionnes en bottom
var currentBlockToFixCorners=null; //variable gloable utilisee lorsqu'on veux fixer les coins sur un seul bloc


/*  fixCorners :
	Cette fonction  est appelee lorsque l'on doit fixer tous les coins d'une page ou d'un block.
	ex :
		fixCorners ();  //Lance la fonction pour fixer tous les blocks, il faut lancer la fonction une fois la page chargee.
		fixCorners(block); //en passant un element en parametre, le traitement ne se fera que sur le bloc et non sur toute la page.
*/
function fixCorners(block) {
	if (IS_IE) {
		for (i=CSSBottomCorners.length-1; i>-1; --i) {
			CSSBottomCorners[i].style.bottom="";
		}
	} else {
		if (IS_Webkit || /Gecko\/200[56]|Opera 8.5/i.test(navigator.userAgent)) fixCornersOnBlocks(block);
	}
}

/*
	fixCornersOnBlocks :
	Ajoute une classe CSS hidecorners afin de cacher les coins puis les reafficher.
	Cette fonction n'est lancee que pour Safari, Le moteur Gecko 2005 (FF1.0) et Opera 8.5), car lorsqu'on agrandit un block en Javascript, les coins en absolu positionnes en bas restent a leur place. Cette fonction corrige le probleme.
*/
function fixCornersOnBlocks(block) {
	currentBlockToFixCorners = block || document.body;
	currentBlockToFixCorners.className+=" hidecorners";
	setTimeout("fixCornersOnBlocksShowCorners()",5);
}

/*
	fixCornersOnBlocksShowCorners :
	Fonction associee a fixCornersOnBlocks(), cette fonction retire la classe hidecorners qui a ete appliquee a currentBlockToFixCorners
*/
function fixCornersOnBlocksShowCorners() {
	if (currentBlockToFixCorners) currentBlockToFixCorners.className=currentBlockToFixCorners.className.replace(/\bhidecorners\b/g,"");
	currentBlockToFixCorners=null;
}



/*****************
* domLoad et onload fonctions
* Ces fonctions permettent de lancer des fonctions en 2 temps
* - Soit pendant le chargement de la page (mais le DOM est construit)
* - Soit une fois que la page est construite
*****************/
/* variables globales (arrays et booleens) qui permettent de gerer le lancement des fonctions domload et onload */
var domLoaded=false;
var domMustLaunch=false;
var domLoadFunctionLaunched=false;
var domLoadTimer=null;
var domLoadArrFunctions=[];
var onloadArrFunctions=[];

/*
	domLoad() :
	Appartient a un ensemble de fonctions qui sont lancees pendant le chargement de la page, une fois le DOM construit
	Cette fonction attend que le dom soit totalement construit
*/
function domLoad() {
	if(document.getElementById("footer")) {
		domLoadCaller();
	} else {
		domLoadTimer=setTimeout("domLoad()",10);
	}
}
domLoad();

/*
	domLoadCaller() :
	Appartient a un ensemble de fonctions qui sont lancees pendant le chargement de la page, une fois le DOM construit
	Cette fonction gere le lancement de la fonction finale domLoadFunctions();
	domLoadCaller() lances les fonctions contenues dans un array de fonctions et gere le fait que domLoad doit etre lance avant le onload
*/
function domLoadCaller() {
	domLoadFunctionLaunched=true;
	for (var i=0; i<domLoadArrFunctions.length; i++) {
		domLoadArrFunctions[i]();
	}
	domLoadFunctions();
	domLoaded=true;
	if(domMustLaunch) {
		onloadCaller();
	}
}

/*
	onloadCaller() : // ne pas modifier cette fonction
	Cette fonction gere le lancement de la fonction finale onLoadFunctions();
	onLoadCaller() est executee une fois que la page est chargee.
*/
function onloadCaller() {
	clearTimeout(domLoadTimer);
	if (!domLoadFunctionLaunched) {
		domLoadCaller();
	}
	if (!domLoaded) {
		domMustLaunch=true;
		return;
	}
	for (var i=0; i<domLoadArrFunctions.length; i++) {
		onloadArrFunctions[i]();
	}
	onloadFunctions();
}

/*
	addDomLoadFunc() :
	permet d'ajouter facilement une fonction qui sera lancee avant avant le chargement complet de la page.
	ex :
		function myfunc() {
			//contenu fonction.
		}
		addDomLoadFunc(myfunc) // il ne faut pas mettre les parentheses, car ici on passe une fonction en parametres.

	Si on veut lancer la fonction avec des parametres, il faut passer par une fonction anonyme.
	ex :
		function myfunc(p1, p2) {
			//contenu fonction.
		}
		addDomLoadFunc(
			function () {
				myfunc("foo", "bar");
			}
		);
		// il ne faut pas mettre les parentheses, car ici on passe une fonction en parametres.
*/
function addDomLoadFunc(f) {
	domLoadArrFunctions.push(f);
}
/*
	addOnLoadFunc() :
	permet d'ajouter facilement une fonction qui sera lancee une fois la page chargee.
	fonctionne de la meme maniere que addDomLoadFunc()
*/
function addOnloadFunc(f) {
	onloadArrFunctions.push(f);
}

//on lance la fonction onloadCaller une fois la page chargee.
addEvent(window, "load", onloadCaller);

/***** fin domLoad et onload fonctions *****/



/***************
* Executions des fonctions au chargement de la page
 ***************/
/*
	domLoadFunctions() :
	cette fonction est lancee pendant le chargement de la page, une fois que le DOM est completement construit
*/
function domLoadFunctions() {
	document.body.className+=" hasJS"; //cette classe rajoute une classe CSS qui permet des actions afin de cacher ou afficher des elements seulement pour les visiteurs qui ont le Javascript active sur leur navigateur. (exemple le hidesubmit)
	if (IS_IE) document.body.className+=" IS_IE"; //cette classe permet d'utiliser des hacks CSS/JS seulement pour IE6 et versions inferieures.
}

/*
	onloadFunctions() :
	cette fonction est lancee une fois que la page est totalement chargee (images, flash, fichiers associes)
*/
function onloadFunctions() {
	fixCorners(); //correction des coins (seulement pour IE et si besoin pour anciennes version des autres navigateurs)
}
/****
  permet d'afficher les flash sans
  pre-selection sous IE a cause du
  patch Eolas
****/
function DisplayFlash(flashFile,width,height,quality,wmode,idHtml,background) {
  document.write('<object id="'+ idHtml +'" type="application/x-shockwave-flash" data="'+ flashFile +'" width="'+ width +'" height="'+ height +'">');
  document.write('  <param name="movie" value="'+ flashFile +'" />');
  document.write('  <param name="allowScriptAccess" value="sameDomain" />');
  document.write('  <param name="quality" value="'+ quality +'" />');
  document.write('  <param name="wmode" value="'+ wmode +'" />');
  document.write('  <param name="bgcolor" value="'+ background +'" />');
  document.write('  <embed src="'+ flashFile + '" quality="high" wmode="'+ wmode +'" width="'+ width +'" height="'+ height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
  document.write('</object>');
}
/******
  function
  getElementsByClassName(un object, un tag, la class a trouver)
  j'aurais du la transformer en utilisation similaire ?etElementsByTagName
******/
function getElementsByClassName(oElm, sTagName, sClassName)
{
  var aElements = (sTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(sTagName);
  var aReturnElements = new Array();
  sClassName = sClassName.replace(/\-/g, "\\-");
  var oRegExp = new RegExp("(^|\\s)" + sClassName + "(\\s|$)");
  var oElement;
  for(var i=0; i < aElements.length; i++)
  {
    oElement = aElements[i];
    if(oRegExp.test(oElement.className))
    aReturnElements.push(oElement);
  }
  return aReturnElements
}


/*******
  fonction pour la compatibilite
  des navigateurs pour l'opacity
*******/
function changeOpac(opacity,id) {
  var object = document.getElementById(id).style;
  object.opacity = (opacity / 100);
  object.MozOpacity = (opacity / 100);
  object.KhtmlOpacity = (opacity / 100);
  object.filter = "alpha(opacity=" + opacity + ")";
}
/******
  bouclage pour l'opacity a
  modifier en fonction sans "for"
******/
function opacityOld(id, opacStart, opacEnd, millisec, frameSize) {
  //speed for each frame
  var speed = Math.round(millisec / 100);
  var timer = 0;
  //determine the direction for the blending, if start and end are the same nothing happens
  if(opacStart > opacEnd) {
    for(i = opacStart; i >= opacEnd; i=i-frameSize) {
      setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
      timer++;
    }
  }
  else if(opacStart < opacEnd) {
    for(i = opacStart; i <= opacEnd; i++)
      {
      setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
      timer++;
    }
  }
}
function opacity(id, opacStart, opacEnd, millisec, frameSize, boucle) {
  var speed = Math.round(millisec / 100);
  //determine the direction for the blending, if start and end are the same nothing happens
  if (frameSize>0&&opacEnd+frameSize < opacStart){return false;}//on kill la fonction ici
  if (frameSize<0&&opacEnd+frameSize > opacStart){return false;}//on kill la fonction ici
  if (!boucle){changeOpac(opacStart, id);}//et la on la demarre
  changeOpac(opacStart, id);//ici on effectue le changement d'opacity
  opacStart = opacStart+frameSize;//la on incremente
  //et la on boucle
  setTimeout(function()
  {
    opacity(
      id,
      opacStart,
      opacEnd,
      millisec,
      frameSize,
      true
    )
  }, speed);
}

/* au chargement de la page on ajoute une classe qui cache les éléments 
* qui n'ont pas besoin d'apparaître au chargement de la page  (applyJS() )
*/
function applyJS() {
    var d = document.body;
    if (d) {
        d.className+=" hasJS";
    }
}
function removeJS() {
    var d = document.body;
    if (d) {
        d.className=d.className.replace(/hasJS/gi,"");
    }
}
setTimeout("applyJS()",100);


/* Fonctions Génériques */
/* global variable to store the name of the element to hide/display  */
var global_element_name = "";
/*
 show_element : display an element
*/
 function show_element(elementName)
 {
    global_element_name = elementName;
    var element = GetElementId(elementName);
    element.style.display = 'block';
 }
 
 /*
    hide_element : hide an element
 */
 function hide_element(elementName)
 {
    global_element_name = "";
    var element = GetElementId(elementName);
    element.style.display = 'none';
 }

/*
    getelementid : shortcut to document.getelementbyid 
*/
 function GetElementId(id)
 {
    return document.getElementById(id);
 } 

/*
    if the global element is visible, move it when the cursor move.
*/
 function OnMoveElement(e)
 {
    if (global_element_name != "") 
    {  
        if (navigator.appName != "Microsoft Internet Explorer") 
        { 
            GetElementId(global_element_name).style.left = e.pageX + 5 + "px";
            GetElementId(global_element_name).style.top = e.pageY + 10 + "px";
        }
        else 
        { 
            if (document.documentElement.clientWidth > 0) 
            {
                GetElementId(global_element_name).style.left = 20 + event.x + document.documentElement.scrollLeft + "px";
                GetElementId(global_element_name).style.top = 10 + event.y + document.documentElement.scrollTop + "px";
            } 
            else 
            {
                GetElementId(global_element_name).style.left = 20+ event.x + document.body.scrollLeft + "px";
                GetElementId(global_element_name).style.top = 10 + event.y + document.body.scrollTop + "px";
            }
        }
    }
}

/* filter:  permet de filtrer un array avec une fonction passée en paramètre*/ 
function filter(arr, f) {
	   	var out = new Array();
    	var j = 0;
		for(var i = 0; i<arr.length; ++i) {
	   		if(f(arr[i])) {
	       		out[j++] = arr[i];
	       	}
       	}
	return out;
}

/*
getElementsByClassName( Object, String, String);
return an array of Objects
*/
function getElementsByClassName(oElm, sTagName, sClassName){
    var aElements = (sTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(sTagName);
	var aReturnElements = new Array();
    sClassName = sClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + sClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i < aElements.length; i++){
		oElement = aElements[i];      
		if(oRegExp.test(oElement.className)){
           // aReturnElements.push(oElement);
            aReturnElements[aReturnElements.length] = oElement;
        }   
    }
	return (aReturnElements)
}

/*addEvent : Ajoute un évènement  à un élement */
function addEvent(elm, evType, fn, useCapture){
	if (elm.addEventListener) 
	{
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}
}

/* getText : retourne le text d'un element */
function getText(elt) {
	if (elt.textContent) {
		return elt.textContent;
	} else {
		return elt.innerText;
	}
}
/* getMouse : Récupère les coordonnées de la souris et les met dans window.mouseX et window.mouseY, il faut passer event en paramètre sur les évènements */
function getMouse(e){
	var x,y; var elt = (navigator.userAgent.indexOf("MSIE 5")!=-1) ? document.body : document.documentElement;
	if ( document.captureEvents ) {
		x = e.pageX;
		y = e.pageY;
	} else if ( window.event.clientX ) {
		x = window.event.clientX+elt.scrollLeft;
		y = window.event.clientY+elt.scrollTop;
	}
	window.mouseX = x;
	window.mouseY = y;
}


// getStyle : retourne la valeur d'une propriété CSS appliquée à un élément
function getStyle(oElm, strCssRule){
    var strValue = "";
    if(document.defaultView && document.defaultView.getComputedStyle) {
		try{ strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); } 
		catch(e) { strValue = ""; }
    }
    else if(oElm.currentStyle) {
        try{
			strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
	            return p1.toUpperCase();
	        });
	        strValue = oElm.currentStyle[strCssRule];
		} catch(e) {
			strValue = "";
		}
    }
    return strValue;
}
/*	retourne la valeur entière d'une propriété CSS appliquée à un élément. 
	ex : si Padding-left = "15px", intStyle retournera 15, alors que getStyle retournera "15px".
*/
function intStyle(oElm, strCSSRule) {
	var val = parseInt(getStyle(oElm, strCSSRule));
	if (isNaN(val)) val=0;
	return val;
}

/* cancelClick, permet de supprimer la propagation du click sur un élément */
cancelClick=function(e){
	if (window.event){
		window.event.cancelBubble = true;
		return;
	}
	if (e){
		if (e.stopPropagation) {
			e.stopPropagation();
		}
	}
}

cancelBubble=function(e) {
	if (window.event){
		window.event.cancelBubble = true;
		window.event.returnValue = false;
		return;
	}
	if (e){
		e.stopPropagation();
		e.preventDefault();
	}
}

/* récupère la position X,Y d'un objet dans une page*/
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


var navDiaporama={
    container:null,
    container2:null,
    imagesContainer:null,
    imagesContainer2:null,
    imagesList:[],
    imagesList2:[],
    indexSoftList:null,
    currentImg:null,
	hiddenImgs:[],
	hiddenImgsSrc:[],
    zoomButton:null,
    turnpagesButton:null,
	turnpages:"false",
    arrow:{ left:null, right:null },
    popZoomId:"popZoomImage",
    popZoom:null,
    init:function() {

        var x, firstArrow=false;
        var home = document.getElementById("DivPopupBox"); if (!home) return;

	    var divtmp = getElementsByClassName(home, "div", "DivNavDiaporama");
			
        if (divtmp.length > 0) { var nav=divtmp[0]; }
        else return;
		if (divtmp.length > 1) { var nav2=divtmp[1]; }
        //else return;
        
		//on parcourt les childnodes de l'élément pour ajouter les fonctionnalités nécessaires.
		//Le contenu de l'élément doit respecter le schéma : <a flechegauche><span blockdimages><a flechedroite> 

	    navDiaporama.container=nav;
	    var childs=nav.childNodes;
	    for (var i=0; i<childs.length; i++){ 
		    var chd=childs[i];
		    switch (chd.nodeName) {
			    case "A": //si on rencontre un lien on le considere comme une fleche de nav
				    if (!firstArrow) {
					    chd.onclick=function() {
						    navDiaporama.gotoImg(1);
						    return false;
					    }
					    navDiaporama.arrow.left=chd;
					    firstArrow=true;
				    } else {
					    chd.onclick=function() {
						    navDiaporama.gotoImg(-1);
						    return false;
					    }
					    navDiaporama.arrow.right=chd;
				    }
				    break;
			    case "SPAN": //ici on doit obligatoirement rencontrer le bloc d'images
				    navDiaporama.imagesContainer=chd;
				    var imgs = chd.childNodes;
				    var k=0;
				    for (var j=0; j<imgs.length; j++) {
					    var img=imgs[j];
					    if (/A|SPAN/.test(img.nodeName)) {
						    navDiaporama.imagesList.push(img);
						    img.indexNumber=navDiaporama.imagesList.length-1;
						    if (img.nodeName=="A") {
							    img.onclick=navDiaporama.showZoomImg;
						    }
						    if (img.className.match(/\bDivActiveImg\b/)){
							    navDiaporama.currentImg = img;
						    }
						    else {
							    navDiaporama.hiddenImgs[k] = img;
							    navDiaporama.hiddenImgsSrc[k] = navDiaporama.hiddenImgs[k].childNodes[0].src;
							    k++;
						    }
					    }
				    }
		    }
	    }
	    
	    if (divtmp.length > 1) { 
	        navDiaporama.container2=nav2;
	        var childs2=nav2.childNodes;
	        var j = 0;
	        for (var i=0; i<childs2.length; i++){ 
	            if (childs2[i].nodeName == "A") {
			       navDiaporama.imagesList2.push(childs2[i]);
			       navDiaporama.indexSoftList=navDiaporama.imagesList2.length-1;
                   childs2[i].onclick=navDiaporama.showSoftZoomImg;
                   childs2[i].indexImg = j;
                   j++;
	            }
	        }
	    }
	    
		//initialise le lien pour zoomer l'image et les liens pour Feuilleter les pages
		var par = navDiaporama.container.parentNode;
		var a = par.getElementsByTagName("a");
		for (var i=0;i<a.length;i++) {
			if (a[i].className.match(/\b(DivExpandImg)\b/)) {
				navDiaporama.zoomButton = a[i];
				navDiaporama.zoomButton.onclick = navDiaporama.showZoomImg;
			}
			if (a[i].className.match(/\b(turnpagesButton)\b/)) {
				navDiaporama.turnpagesButton = a[i];
				navDiaporama.turnpagesButton.onclick = navDiaporama.showTurnpagesImg;
			}
		}

		//verifie s'il y a une image par défaut, sinon on en active une
		if(navDiaporama.imagesList.length>0 && !navDiaporama.currentImg) {
			navDiaporama.currentImg = navDiaporama.imagesList[0];
			navDiaporama.showImg(0);
		}
		
		//verifie si il n' y a plus d'une image dans le diaporama, dans ce cas on affiche les flèches
		if (navDiaporama.imagesList.length>1) {
			for (elt in navDiaporama.arrow) {
				var x = navDiaporama.arrow[elt];
				if (x && x.style) { x.style.display="inline"; }
			}
		}
	},
    gotoImg:function(sens) {
        var num =  navDiaporama.currentImg.indexNumber;
        num+=sens;
        if (num<0) num = navDiaporama.imagesList.length-1;
        if (num>=navDiaporama.imagesList.length) num=0;
        navDiaporama.showImg(num);
    },
    showImg:function(imgIndex) {
        navDiaporama.currentImg.className="";
        if (!navDiaporama.imagesList[imgIndex]) return;
        navDiaporama.currentImg=navDiaporama.imagesList[imgIndex];
        navDiaporama.currentImg.className="DivActiveImg";
        if (navDiaporama.zoomButton) {
            if (navDiaporama.currentImg.nodeName!="A" || navDiaporama.currentImg.href=="" || !/.jpg$|.bmp$|.gif$|.png$/.test(navDiaporama.currentImg.href)) {
                navDiaporama.zoomButton.parentNode.style.visibility="hidden";
            } else {
                navDiaporama.zoomButton.parentNode.style.visibility="visible";
            }
        }
    },
    showZoomImg:function(e) {
        if (navDiaporama.currentImg.nodeName=="A" && navDiaporama.currentImg.href!="" && /.jpg$|.bmp$|.gif$|.png$/.test(navDiaporama.currentImg.href)) {
            navDiaporama.turnpages = "false";
			var pop=navDiaporama.makePopZoom();
			pop.zoomImage.src = navDiaporama.currentImg.href;
            pop.move();
            ifrlayer.make(pop);
        }
		return false;
    },
    showSoftZoomImg:function(e) {
       var firingElement = e.currentTarget;
       if( firingElement != null )
       {
            navDiaporama.turnpages = "false";
            pop=navDiaporama.makePopZoom();
            pop.zoomImage.src = navDiaporama.imagesList2[firingElement.indexImg];
            pop.move();
            ifrlayer.make(pop);
       }
       return false;
    },
    showTurnpagesImg:function(e) {
        if (navDiaporama.currentImg.nodeName=="A" && navDiaporama.currentImg.href!="" && /.jpg$|.bmp$|.gif$|.png$/.test(navDiaporama.currentImg.href)) {
            //évite d'ajouter un 2e navPage
            var navPage = document.getElementById("navPage");
		    var popZoomId = document.getElementById("popZoomImage");
		    if (navPage) { popZoomId.removeChild(navPage); }
		    ///
            navDiaporama.turnpages = "true";
			var pop=navDiaporama.makePopZoom();
			pop.zoomImage.src = navDiaporama.hiddenImgsSrc[0];
            pop.move();
            ifrlayer.make(pop);
        }
		return false;
    },
    makePopZoom:function(e){
		
		var pop = document.getElementById(navDiaporama.popZoomId);
		
		if (!pop) {
		
		    var div = document.createElement("div");
		    div.id=navDiaporama.popZoomId;
		    div.innerHTML = '<ul><li><a href="#" onclick="navDiaporama.hidePopZoom();return false"><img src="images/icons/w_close.gif" border="0" alt="Fermer" title="Fermer" width="11" height="11"  align="left" />&nbsp;Fermer</a></li></ul>';

		    div.style.visibility="hidden";
    		
		    var zoomBlock = div.appendChild(document.createElement("p"));
    		
		    zoomBlock.style.verticalAlign="middle";	
    		
		    var span = zoomBlock.appendChild(document.createElement("span"));
		    var img = span.appendChild(document.createElement("img"));
		    img.onload=function() {
			    pop.className="";
			    pop.getPositionFromWindow;
			    this.pop.move();
			    ifrlayer.resize(pop);
		    } 
    		
		    div.zoomImage = img;
		    img.pop = div;
		    div=document.body.appendChild(div);
		    pop=div;
		    navDiaporama.popZoom = div;
    		
		    var AllElt = div.getElementsByTagName("*");
		    for(var i=0; i<AllElt.length;i++) {
			    AllElt[i].onmousemove=AllElt[i].onmousedown=function() {return false};
		    }

		    pop.move        = navDiaporama.movePopZoom;
		    pop.onmousedown = navDiaporama.makePopZoomDraggable;
		    addEvent(pop,"mousedown", cancelBubble);
		    addEvent(pop,"dblclick", navDiaporama.hidePopZoom);
		    
		    
		    //gestion du copyright de l'image
            
            copyright = null;
            eltParentImg = navDiaporama.currentImg.parentNode;
            bElementCurrent = false;
            
            var i;
            for( i=0;i<eltParentImg.childNodes.length;i++ ) { 
                if( navDiaporama.currentImg == eltParentImg.childNodes[i] ) {
                    bElementCurrent = true;
                }
                else if( bElementCurrent ) {
                    // si le type du noeud n'est pas du texte et que c'est un élément span, alors on récupère le copyright
                    if (eltParentImg.childNodes[i].nodeType != 3 && eltParentImg.childNodes[i].nodeName.toLowerCase() == "span" ) {
                        var span = eltParentImg.childNodes[i];
                        if (span.childNodes[0].nodeName.toLowerCase() != "img") {
                            copyright = eltParentImg.childNodes[i];
                            break;
                        }                                    
                    }
                    if (eltParentImg.childNodes[i].nodeType != 3 && eltParentImg.childNodes[i].nodeName.toLowerCase() != "span" ) {
                        copyright = null;
                        break;
                    }
                }
            } 

            
            if (copyright != null) {
               if (!pop.copyright ) {
                    var popCopyright = pop.appendChild(document.createElement("p"));
                    popCopyright.className = "copyright noir lienInverse";
                    pop.copyright = popCopyright;
                }
                if (/\w/.test(getText(copyright)) ) {
                    pop.copyright.innerHTML = copyright.innerHTML;
                    pop.copyright.style.display = "block";
                } else {
                    pop.copyright.style.display = "none";
                }
            }	
            
            //fin du copyright
        }

        //gestion des flèches pour feuilletter les pages

        //pour passer du zoom "Feuilleter les pages" au zoom "Agrandir l'image" on supprime les flèches
		if (pop && navDiaporama.turnpages == "false") {	    
		    var navPage = document.getElementById("navPage");
		    var popZoomId = document.getElementById("popZoomImage");
		    if (navPage) { popZoomId.removeChild(navPage); }
		}
		else if (!navPage) {
            //on ne compte pas le dernier span qui contient le copyright	    
            if (copyright != null) var numPage = navDiaporama.hiddenImgsSrc.length-1;
            else var numPage = navDiaporama.hiddenImgsSrc.length;
	    	
	        if (numPage > 1) {
	    	
                var navPage = pop.appendChild(document.createElement("p"));
                navPage.id = "navPage";
                navPage.className = 'txt_c';
                //navPage.style.backgroundColor = '#eee';
                navPage.style.Height = '2em';
    			
                var aPrev = navPage.appendChild(document.createElement("a"));
                aPrev.href = "#";
                aPrev.innerHTML = '<img src="images/picto_arrow_previous.gif" alt="previous image" />';
		        aPrev.style.verticalAlign = '-0.5em';
    			
                var popNumPage = navPage.appendChild(document.createElement("span"));
                popNumPage.className = 'noir';
                popNumPage.style.lineHeight = '3em';
                popNumPage.style.verticalAlign = 'middle';
                
                var aNext = navPage.appendChild(document.createElement("a"));
                aNext.href = "#";
                aNext.innerHTML = '<img src="images/picto_arrow_next.gif" alt="next image" />';
                aNext.style.verticalAlign = '-0.5em';

                popNumPage.innerHTML = 'Page : 1 / '+ numPage;
    		    
	            var i = 1;
	            aPrev.onclick=function() {
		            i--;
		            if (i == 0) i = numPage;
		            pop.zoomImage.src = navDiaporama.hiddenImgsSrc[i-1];
		            popNumPage.innerHTML = 'Page : '+ i +' / '+numPage;
		            return false;
	            }	
	            aNext.onclick=function() {
		            i++;
		            if (i == navDiaporama.hiddenImgsSrc.length) i = 1;
		            pop.zoomImage.src = navDiaporama.hiddenImgsSrc[i-1];
		            popNumPage.innerHTML = 'Page : '+ i +' / '+numPage;
		            return false;
	            }    
	        }
		}
		
		//fin de la gestion des flèches
		
		//if (!navPage) {
		    //la position du popin en haut à gauche de la fenêtre du navigateur n'est initialisée 
		    //qu'à l'ouverture de la popin
			//pop.getPositionFromWindow = navDiaporama.getPositionFromWindow;					
		//}
		
		pop.style.visibility="visible";
		pop.onmousemove=function(){};
		if (pop.zoomImage.complete) {
			pop.zoomImage.onload();
		}
		return pop;
    },
    movePopZoom:function(){
       if (!isNaN(this.x)) this.style.left = this.x+"px";
       if (!isNaN(this.y)) this.style.top = this.y+"px";
       ifrlayer.move(this);
    },
    hidePopZoom:function(e){
        var pop = navDiaporama.popZoom;
        pop.style.visibility="hidden";
        ifrlayer.hide(navDiaporama.popZoom);
    },
    getPositionFromWindow:function(e){
        var doc = (/MSIE 5|Opera/.test(navigator.userAgent)) ? document.body : document.documentElement;  //document.documentElement;
        /*  
        this.x = doc.scrollLeft+parseInt((doc.clientWidth-this.offsetWidth)/2);
        this.y = doc.scrollTop+parseInt((doc.clientHeight-this.offsetHeight)/2)
        if (this.x<0) this.x=0;
        if (this.y<0) this.y=0;
        */
         this.x = doc.scrollLeft;
         this.y = doc.scrollTop;
    },
    makePopZoomDraggable:function(e) {
        getMouse(e);
        this.className+=" dragmode";
        this.mouseOffsetX = window.mouseX-this.offsetLeft;
        this.mouseOffsetY = window.mouseY-this.offsetTop;
        document.onselectstart = function() {return false};
        document.onmousemove = navDiaporama.moveFromMouse;
        this.onmouseup = function() {
            document.onmousemove=function() {}; //retire les fonctionnalités sur le déplacement
            document.onselectstart=function() {};
            this.className = this.className.replace(/dragmode/g,"");
        };
    },
    moveFromMouse:function(e) {
        var doc = document.documentElement;
        var p = navDiaporama.popZoom;
        getMouse(e);
        p.x = window.mouseX-p.mouseOffsetX;
        p.y = window.mouseY-p.mouseOffsetY;
        p.move();
    } 
}


/* genere une iframe pour faire passer les divs par dessus des selects sous IE */
ifrlayer = {
	make:function(obj) {
		if(!obj) return; obj = (typeof(obj)=="string") ? document.getElementById(obj) : obj; if(!obj) return;
		if(document.all && !window.opera && document.getElementById) {
			if(obj.parentNode && !obj.iframelayer) {
			    var ifr = obj.parentNode.insertBefore(document.createElement('<iframe src="javascript:false"></iframe>'), obj);
			    if(obj.currentStyle.zIndex != "" && parseInt(obj.currentStyle.zIndex)>1 ) {
				    ifr.style.zIndex = parseInt(obj.currentStyle.zIndex)-1;
			    }
			    with(ifr.style) { 
				    filter = "mask()";
				    position = "absolute";
			    }
                obj.iframelayer = ifr;
            }
		}
		if(obj.iframelayer) {
		    obj.iframelayer.style.visibility="visible";
            ifrlayer.resize(obj);
            ifrlayer.move(obj)
        }
	},
	hide:function(obj) {
		if(!obj) return; obj = typeof(obj)=="string" ? document.getElementById(obj) : obj; if (!obj) return;
		var ifr = obj.iframelayer;
		if(ifr) {
			ifr.style.visibility="hidden";
		}
	},
	move:function(obj) {
		if(obj && obj.iframelayer) {
		    with(obj.iframelayer.style) {
			    top = obj.offsetTop+"px";
			    left = obj.offsetLeft+"px"
		    }
		}
	},
	resize:function(obj) {
	    if(obj && obj.iframelayer) {
	        with(obj.iframelayer.style) {
	            width =  obj.offsetWidth+"px";
		        height =  obj.offsetHeight+"px";
		    }
		}
	}
}

/*******
  fonction pour la compatibilite
  des navigateurs pour l'opacity
*******/

function changeOpac(opacity,id) {
  var object = document.getElementById(id).style;
  object.opacity = (opacity / 100);
  object.MozOpacity = (opacity / 100);
  object.KhtmlOpacity = (opacity / 100);
  object.filter = "alpha(opacity=" + opacity + ")";
}

/******
  bouclage pour l'opacity a
  modifier en fonction sans "for"
******/

function opacityOld(id, opacStart, opacEnd, millisec, frameSize) {
  //speed for each frame
  var speed = Math.round(millisec / 100);
  var timer = 0;
  //determine the direction for the blending, if start and end are the same nothing happens
  if(opacStart > opacEnd) {
    for(i = opacStart; i >= opacEnd; i=i-frameSize) {
      setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
      timer++;
    }
  }
  else if(opacStart < opacEnd) {
    for(i = opacStart; i <= opacEnd; i++)
      {
      setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
      timer++;
    }
  }
}

function opacity(id, opacStart, opacEnd, millisec, frameSize, boucle) {
  var speed = Math.round(millisec / 1000);
  //determine the direction for the blending, if start and end are the same nothing happens
  if (opacEnd+frameSize > opacStart){return false;}//on kill la fonction ici
  if (!boucle){changeOpac(opacStart, id);}//et la on la demarre
  changeOpac(opacStart, id);//ici on effectue le changement d'opacity
  opacStart = opacStart+frameSize;//la on incremente
  //et la on boucle
  setTimeout(function()
  {
    opacity(
      id,
      opacStart,
      opacEnd,
      millisec,
      frameSize,
      true
    )
  }, speed);
}

function initpage() {
    navDiaporama.init();
}

addEvent(window, 'load', initpage, false);
// fonctions arbre flux rss
function deployColapseTag(idTag) {
    var oTag;
    
    oTag = document.getElementById(idTag);
	if (oTag.style.display=='none') {
		if(oTag.parentNode.parentNode.nodeName =='TR')
		{
			
			if(oTag.parentNode.previousSibling.className == "plusT")
			{
				oTag.parentNode.previousSibling.className = 'moinsT';
				oTag.parentNode.parentNode.parentNode.lastChild.firstChild.style.backgroundImage = 'url()';
			} else {
				oTag.parentNode.parentNode.parentNode.lastChild.previousSibling.firstChild.nextSibling.style.backgroundImage = 'url()';
				oTag.parentNode.previousSibling.previousSibling.className = 'moinsT';
			}
		} else {
			
			if(oTag.previousSibling.className == 'plus')
			{
				oTag.parentNode.lastChild.style.backgroundColor = '#FFFFFF';
				oTag.previousSibling.className = 'moins';
			} else if(oTag.previousSibling.previousSibling.className == 'plus') {
				oTag.parentNode.lastChild.previousSibling.style.backgroundColor = '#FFFFFF';
				oTag.previousSibling.previousSibling.className = 'moins';
			} else {
				
			}
		}
		oTag.style.display='';
	}
	else {
		if(oTag.parentNode.parentNode.nodeName =='TR')
		{
			if(oTag.parentNode.previousSibling.className == "moinsT")
			{
				
				oTag.parentNode.previousSibling.className = 'plusT';
			} else {
				oTag.parentNode.previousSibling.previousSibling.className = 'plusT';
			}
		} else {
			if(oTag.previousSibling.className == 'moins')
			{
				oTag.previousSibling.className = 'plus';
			} else if (oTag.previousSibling.previousSibling.className == 'moins') {
				oTag.previousSibling.previousSibling.className = 'plus';
			} else {
				
			}
		}
		oTag.style.display='none';
	}
	return false;
}

