﻿/************
*  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";

/* ecrit les classes dans le tag HTML, pas besoin d'attendre le chargement du body */
document.documentElement.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.documentElement.className+=" IS_IE"; //cette classe permet d'utiliser des hacks CSS/JS seulement pour IE6 et versions inferieures.

/********************
* 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] );
	}
}
function removeEvent(obj, eventType, functionToCall) {

	if(obj.removeEventListener)

		obj.removeEventListener(eventType, functionToCall, false);

	else if(obj.detachEvent)

		obj.detachEvent('on'+eventType, functionToCall);

}


/*  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

/*  cssRight :
	fixe les coins positionnes en absolu a droite
	ex :
		body.IS_IE .tr {right:expression(addHover(this))}
		Il faut afin que cela fonctionne, avoir declare le right dans un selecteur precedent (pour les autres navigateurs).
		ex : .tr {height:5px;  width:5px; right:0}
		Afin de ne pas prendre en compte IE7 en mode strict il suffit de placer la classe .IS_IE avant, cette classe est ajoutee pendant le chargement de la page et n'est ajoutee que pour IE5.x ou 6.
*/
function cssRight(elm) {
	elm.style.right=(parseInt(elm.currentStyle.right)-(elm.parentNode.offsetWidth%2))+"px";
}

/*  cssBottom :  (comme CSS right avec un parametre supplementaire)
	fixe les coins positionnes en absolu a droite
	ex :
		body.IS_IE .br {bottom:expression(addHover(this))}
	Il faut afin que cela fonctionne, avoir declare le right dans un selecteur precedent (pour les autres navigateurs).
	Afin de ne pas prendre en compte IE7 en mode strict il suffit de placer la classe .IS_IE avant, cette classe est ajoutee pendant le chargement de la page et n'est ajoutee que pour IE5.x ou 6.

	Si on veut rajouter ces coins dans un array qui permettra de les refixer si le bloc s'agrandit ou autre. il suffit de rajouter "true" dans les parametres.
	ex :
		body.IS_IE .br {bottom:expression(addHover(this, true))}
*/
function cssBottom(elm, pushElement) {
	if (pushElement && !elm.CSSBottomAlreadyCSS) {
		CSSBottomCorners.push(elm);
		elm.CSSBottomAlreadyCSS=true;
	}
	elm.style.bottom=(parseInt(elm.currentStyle.bottom)-(elm.parentNode.offsetHeight%2))+"px";
}

/*  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;
}

/****************
* Initialisation du systeme d'evaluation criteo
******************/


/*  initEvalFields :
	inialise les images qui permettront d'evaluer le produit
	initEvalFields();
*/
var evaluationMaxNote = 5;
function evaluationInitFields() {
	var p = document.getElementsByTagName("p");
	for (var i=0; i<p.length; i++) {
		var x = p[i];
		if (x.className.match(/\beval\b/)) {
			var img = x.getElementsByTagName("img");
			if (img.length>0) {
				img = img[0];
				img.onmousemove=function(e) {
					evaluationAnimation(this,e);
				}
				img.onmouseout=function() {
					evaluationClearAnim(this)
				}
				img.onclick=function() {
					evaluationSetGrade(this, this.overGrade, true)
				}
			}
		}
	}
}

function evaluationAnimation(img,e) {
	getMouse(e);
	var starWidth = img.offsetWidth/evaluationMaxNote;
	var imgX = findPos(img)[0];
	var mousePosX = window.mouseX-imgX;
	var note = parseInt(mousePosX/starWidth)+1;
	note = note>evaluationMaxNote ? evaluationMaxNote : note<1 ? 1 : note;
	img.overGrade = note;
	if (!img.protectedGrade) evaluationSetGrade(img, note);
}

function evaluationSetGrade(img, note, saveGrade) {
	img.src=img.src.replace(/\d{1}sur/,note+"sur");
	if (saveGrade) {
		img.savedGrade = note;
		evaluationSendGradeByAjax(note);
	}
}

function evaluationClearAnim(img) {
	if (!img.savedGrade) img.savedGrade = 0;
	evaluationSetGrade(img, img.savedGrade);
}

function evaluationSendGradeByAjax(note) {
	//bout de code pour envoyer par ajax la note afin de la sauvegarder en base de donner
}

/*************
* Alignement en hauteur
* Les fonctions qui suivent alignent les blocs et les contenus en hauteur
**************/
/* hashmaps contenant des references de blocks qui doivent etre traites */
var arrLineOfMiseEnAvant=[];
var arrLineOfAlignedProduct=[];
var arrBlocksInCol=[];
var arrLineOfBigBlock=[];

/*  getDivInside :
	Retourne le premier element contenant la classe blk_inside.
	retourne null si aucun element n'a ete trouve.
	ex : var blockInside = getDivInside(block);
*/
function getDivInside(elm) {
	var div = elm.getElementsByTagName("div");
	for (var i=0; i<div.length; i++) {
		if (div[i].className.match(/\bblk_inside\b/)) return div[i];
	}
	return null;
}

/* findListParent :
	retourne le LI parent d'un element passe en parametre
	var li = findListParent(element)
*/
function findListParent(elm) {
	var li = elm
	while(li.nodeName!="LI") li=li.parentNode;
	return li;
}

/*  getAllBlocks :
	cette fonction rempli des arrays (hashmaps) avec les blocks qui devront etre traites, elle est lancee pendant le chargement de la page,
	le traitement des blocks se fait une fois la page charge en un temps tres courts par les fonctions fixMiseEnAvant, fixAligneProduits, fixBlocksHeight (ces fonctions doivent etre lancees dans l'ordre cite).
*/
function getAllBlocks() {
	var content = document.body;
//	var content = document.getElementById("col_centre");
	if (!content) return;
	var div = content.getElementsByTagName("div");
	for (var i=0; i<div.length; i++) {
		var line = div[i];
		if (/\bline_[2345]cols/.test(line.className)) { /*on cherche les lignes*/
		    var h3Inside = line.getElementsByTagName("h3");
			var divInside = line.getElementsByTagName("div");
			if (/\baligner_produits\b/.test(line.className)) {
				arrLineOfAlignedProduct.push(line);
				line.blocks=[];
			}
			for (var j=0; j<divInside.length; j++) {
				var block=divInside[j];  /* on recupere les blocks */
				var h3=h3Inside[j];
				if (/\bblock\b/.test(block.className)) {
					if (/\bmise_en_avant\b/.test(block.className)) { /* Si block mise_en_avant */
						if (!line.alreadyAdded) { /* on initialise un array de block afin que le traitement soit plus rapide une fois la page chargee */
							arrLineOfMiseEnAvant.push(line);
							//document.write('<b>ligne</b> : '+line.className+'<br>');
							line.alreadyAdded=true;

						}
						if (!line.miseEnAvantBlocks) {
							line.miseEnAvantBlocks=[];
						}
						line.miseEnAvantBlocks.push(block);
						//document.write('<b>block</b> : '+block.className+'<br><br>');
					}
					if (/\bblk_inside gradient flat\b/.test(block.className)) { /* Si block mise_en_avant */
						if (!line.alreadyAdded) { /* on initialise un array de block afin que le traitement soit plus rapide une fois la page chargee */
							arrLineOfBigBlock.push(line);
							//document.write('<b>ligne</b> : '+line.className+'<br>');
							line.alreadyAdded=true;
						}
						if (!line.miseEnAvantBlocks) {
							line.miseEnAvantBlocks=[];
						}
						line.miseEnAvantBlocks.push(block);
						//document.write('<b>block</b> : '+block.className+'<br><br>');
					}
					if (line.blocks) {
						line.blocks.push(block);
					}
					if (!/\bnoresize\b/.test(block.className)) {
						arrBlocksInCol.push(block);
					}
					//document.write(arrBlocksInCol[j]);
					block.lineContainer = line;
				}
			}
//			i+=divInside.length-2;//optimisation a revoir permet de sauter des lignes
		}
	}
}

/*  fixMiseEnAvant :
	Aligne les contenus des blocks de mise en avant quand ceux-ci sont dans un conteneur ligne.
*/
function fixMiseEnAvant() {
// var mic2 = new Date();
// var mic = mic2.getTime() - mic1.getTime(); // time in milliseconds
// printDebug(mic,0);
	for (var i=0; i<arrLineOfMiseEnAvant.length; i++) {
	    //document.write(arrLineOfMiseEnAvant.length);
		var line = arrLineOfMiseEnAvant[i];
		/* on cherche d'abord l'ensemble des elements qui devronts etre alignes */
		var imgs = [];
		var resume = [];
		var links = [];
		var h3 = line.getElementsByTagName("h3");
		var dd = line.getElementsByTagName("dd");
		var prix = [];
		var maxOffset=0;
		for (var j=0; j<dd.length; j++) {
			var y=dd[j];
			if (y.className.match(/\bimg\b/)) { imgs.push(y); y.isImage = true; }
			if (y.className.match(/\bresume\b/)) resume.push(y);
			if (y.className.match(/\bprix\b/)) prix.push(y);
			if (y.className.match(/\blinks\b/)) links.push(y);
		}

		/* on traite les img a part

		/* aligner les elements */
		var arrOfArrElements = [h3, imgs, prix, resume, links ];//attention a l'ordre
		var maxImgHeight = 0;
		var maxH3Height = 0;
		for (var j=0; j<arrOfArrElements.length; j++) {
			var arrTmp = arrOfArrElements[j];
			maxOffset=0;
			for (var k=0; k<arrTmp.length; k++) {
				var current = arrTmp[k];
				//var next = arrTmp[k+1];
				//document.write(current.offsetTop+' - ');
				if(current.offsetTop>maxOffset) maxOffset=current.offsetTop;
				if (current.isImage) {
					if (current.offsetHeight>=maxImgHeight) { maxImgHeight = current.offsetHeight; }
				}
				if (current.className == "blk_header") {
					if (current.offsetHeight>=maxH3Height) { maxH3Height = current.offsetHeight; }
				}
			}
			for (var k=0; k<arrTmp.length; k++) {
				var current = arrTmp[k];
				if (current.isImage) {
					var currentHeight = current.offsetHeight;
					var heightToApply = maxImgHeight-currentHeight;
					var topToApply = parseInt(heightToApply/2);
					var bottomToApply = heightToApply-topToApply;
					current.style.paddingTop = intStyle(current, "padding-top")+topToApply+"px";
					current.style.paddingBottom = intStyle(current, "padding-bottom")+bottomToApply+"px";
					current.style.marginTop = intStyle(current, "margin-top")+(maxOffset-current.offsetTop)+"px";
				}
				else if (current.className == "blk_header") {
					var currentHeight = current.offsetHeight;
					var heightToApply = maxH3Height-currentHeight;
					var topToApply = parseInt(heightToApply/2);
					var bottomToApply = heightToApply-topToApply;
                                        current.childNodes[0].style.paddingTop = intStyle(current.childNodes[0], "padding-top")+topToApply+"px";
					current.childNodes[0].style.paddingBottom = intStyle(current.childNodes[0], "padding-bottom")+bottomToApply+"px";
				}
				else if (current.className == "prix") {
					current.style.marginTop = (maxOffset-current.offsetTop)+"px";
				}
				else {
					current.style.paddingTop = (maxOffset-current.offsetTop)+"px";
				}
			}
		}
	}
}

/*  fixAligneProduits :
	Aligne les listes de produits quand 2 a 3 blocs sont contenus dans une ligne ayant la classe "aligner_produits".
	ex : <div class="line_2cols aligner_produits">
*/
function fixAligneProduits() {
	var maxLengthLinks=0;
	var maxLengthProduits=0;
	var maxOffset=0;
	var maxHeight=0;
	for (var i=0; i<arrLineOfAlignedProduct.length; i++) { /*on parcours les lignes */
		var line = arrLineOfAlignedProduct[i];
		for (var j=0; j<line.blocks.length; j++) { /* puis les lignes de chaque  block */
			var block = line.blocks[j];
			block.linksBlocks=[];
			var dd = block.getElementsByTagName("dd");
			for (var k=0; k<dd.length; k++) {
				if (dd[k].className.match(/\blinks\b/)) block.linksBlocks.push(dd[k]);
			}
			if (block.linksBlocks.length>maxLengthLinks) maxLengthLinks=block.linksBlocks.length;
			block.produits=[];
			var li = block.getElementsByTagName("li");
			for (var k=0; k<li.length; k++) {
				if (li[k].parentNode.className.match(/\blisteproduits\b/)) block.produits.push(li[k]);
			}
			if (block.produits.length>maxLengthProduits) maxLengthProduits=block.produits.length;
		}
		for (var j=0; j<maxLengthProduits; j++) { /* on parcoure les tableaux de links, puis les blocks pour aligner les contenus.  */
			maxHeight=0;
			for (var k=0; k<line.blocks.length; k++) {
				if (j<line.blocks[k].produits.length) {
					var current = line.blocks[k].produits[j];
					if(current.offsetHeight>maxHeight) maxHeight=current.offsetHeight;
				}
			}
			for (var k=0; k<line.blocks.length; k++) {
				if (j<line.blocks[k].produits.length) {
					var current = line.blocks[k].produits[j];
					current.style[heightPropertyToUse] = maxHeight-intStyle(current, "padding-top")-intStyle(current, "padding-bottom")+"px";
				}
			}
		}
		for (var j=0; j<maxLengthLinks; j++) { /* on parcoure les tableaux de links, puis les blocks pour aligner les contenus.  */
			maxOffset=0;
			for (var k=0; k<line.blocks.length; k++) {
				if (j<line.blocks[k].linksBlocks.length) {
					var current = line.blocks[k].linksBlocks[j];
					if(current.offsetTop>maxOffset) maxOffset=current.offsetTop;
				}
			}
			for (var k=0; k<line.blocks.length; k++) {
				if (j<line.blocks[k].linksBlocks.length) {
					var current = line.blocks[k].linksBlocks[j];
					current.style.paddingTop = intStyle(current, "padding-top")+(maxOffset-current.offsetTop)+"px";
				}
			}
		}
	}
}

/* par thomas -commentaire a venir */
function fixBigBlock() {
	for (var i=0; i<arrLineOfBigBlock.length; i++) {
	    //document.write(arrLineOfMiseEnAvant.length);
		var line = arrLineOfBigBlock[i];
		/* on cherche d'abord l'ensemble des elements qui devronts etre alignes */
		var imgs = [];
		var resume = [];
		var links = [];
		var h3 = line.getElementsByTagName("h3");
		var dd = line.getElementsByTagName("dd");
		var maxOffset=0;
		for (var j=0; j<dd.length; j++) {
			var y=dd[j];
			if (y.className.match(/\bimg\b/)) { imgs.push(y); y.isImage = true; }
			if (y.className.match(/\bresume\b/)) resume.push(y);
			if (y.className.match(/\blinks\b/)) links.push(y);
		}

		/* on traite les img a part

		/* aligner les elements */
		var arrOfArrElements = [h3, imgs, resume, links];//h3
		var maxImgHeight = 0;
		var maxH3Height = 0;
		for (var j=0; j<arrOfArrElements.length; j++) {
			var arrTmp = arrOfArrElements[j];
			maxOffset=0;
			for (var k=0; k<arrTmp.length; k++) {
				var current = arrTmp[k];
				//var next = arrTmp[k+1];
				//document.write(current.offsetTop+' - ');
				if(current.offsetTop>maxOffset) maxOffset=current.offsetTop;
				if (current.isImage) {
					if (current.offsetHeight>=maxImgHeight) { maxImgHeight = current.offsetHeight; }
				}
				if (current.className == "blk_header") {
					if (current.offsetHeight>=maxH3Height) { maxH3Height = current.offsetHeight; }
				}
			}
			for (var k=0; k<arrTmp.length; k++) {
				var current = arrTmp[k];
				if (current.isImage) {
					var currentHeight = current.offsetHeight;
					var heightToApply = maxImgHeight-currentHeight;
					var topToApply = parseInt(heightToApply/2);
					var bottomToApply = heightToApply-topToApply;
					current.style.paddingTop = intStyle(current, "padding-top")+topToApply+"px";
					current.style.paddingBottom = intStyle(current, "padding-bottom")+bottomToApply+"px";
					current.style.marginTop = intStyle(current, "margin-top")+(maxOffset-current.offsetTop)+"px";
				}
				else if (current.className == "blk_header") {
					var currentHeight = current.offsetHeight;
					var heightToApply = maxH3Height-currentHeight;
					var topToApply = parseInt(heightToApply/2);
					var bottomToApply = heightToApply-topToApply;
					current.childNodes[0].style.paddingTop = 3+intStyle(current, "padding-top")+topToApply+"px";
					current.childNodes[0].style.paddingBottom = 3+intStyle(current, "padding-bottom")+bottomToApply+"px";
				}
		    else {
					current.style.paddingTop = (maxOffset-current.offsetTop)+"px";
				}
			}
		}
	}
}

/*  fixBlocksHeight :
	Aligne tous les blocks en hauteur.
*/
function fixBlocksHeight() {
	var content;
	for (var i=0; i<arrBlocksInCol.length; i++) {
		content=null;
		var b = arrBlocksInCol[i];
		var div = b.getElementsByTagName("div");
		for (var j=0; j<div.length; j++) {
			if (div[j].className.match(/\bblk_content\b/)) { /* on recupere le blk_content, du block */
				content=div[j];
				break;
			}
		}
		if (content) {
			/* on defini la nouvelle hauteur du block via, une simple soustraction : hauteur_content+(hauteu_ligne-hauteur_Block)-paddings */
			content.style[heightPropertyToUse] = content.offsetHeight+(b.lineContainer.offsetHeight-b.offsetHeight)-(intStyle(content,"padding-top")+intStyle(content,"padding-bottom"))+"px";
		}
	}
}


/* ====== alignement des listes (listes en ligne et listes en colonne ou un element sur 2 est sur la droite ou la gauche) ======= */
var listes_inline=[];
var listes_2cols=[];

/* getAllLists :
	Recuperes toutes les listes de produits ou contacts afin de les traiter apres
*/
function getAllLists() {
	var ul = document.getElementsByTagName("ul");
	for (var i=0; i<ul.length; i++) {
		var x = ul[i];
		x.listItems = [];
		if (x.offsetHeight>0) {
			if (x.className.match(/\b(produits_conseilles|liste_inline|liste_3cols)\b/)) {
				listes_inline.push(x);
				for (var j=0; j<x.childNodes.length; j++) {
					var y = x.childNodes[j];
					if (y.nodeType==1 && y.nodeName=="LI") {
						x.listItems.push(y);
					}
				}

				//on recupere le block de liens qui se trouve dans la liste
				x.linksItems=[];
				x.evalItems=[];
				if (x.className.match(/\bproduits_conseilles\b/)) {
					var ul2 = x.getElementsByTagName("ul");
					for (var j=0; j<ul2.length; j++) {
						var y = ul2[j];
						if (y.className.match(/\blinks\b/)) {
							x.linksItems.push(y);
						}
					}
				} else {
					//  dans le cas d'une liste en ligne, on n'alignement pas les links d'acces au produit, mais on aligne les evaluations
					if (x.className.match(/\bliste_inline\b/)) {
						var div = x.getElementsByTagName("div");
						for (var j=0; j<div.length; j++) {
							var y = div[j];
							if (y.className.match(/\beval\b/)) {
								x.evalItems.push(y);
							}
						}
					}
				}
			} else if(x.className.match(/\bliste_2cols\b/)) {
				listes_2cols.push(x);
				x.itemsLeft = [];
				x.itemsRight = [];
				counter=0;
				for (var j=0; j<x.childNodes.length; j++) {
					var y = x.childNodes[j];
					if (y.nodeType==1 && y.nodeName=="LI") {
						var dd = y.getElementsByTagName("dd");
						for (var k=0; k<dd.length; k++) {
							var z = dd[k];
							if (z.className.match(/\blinks\b/)) {
								y.linksBlock = z;
							}
						}
						if (counter%2) {
							x.itemsRight.push(y);
						} else {
							x.itemsLeft.push(y);
						}
						counter++;
					}
				}
			}
		}
	}
}
function fixListeInline() {
	for (var i=0; i<listes_inline.length; i++) {
		var x = listes_inline[i];
		var maxHeight = 0;
		for (var j=0; j<x.listItems.length; j++) {
			var y=x.listItems[j];
			if (y.offsetHeight>maxHeight) maxHeight = y.offsetHeight;
		}
		for (var j=0; j<x.listItems.length; j++) {
			var y=x.listItems[j];
			y.style[heightPropertyToUse] = maxHeight-intStyle(y, "padding-top")-intStyle(y, "padding-bottom")+"px";
		}
		if (x.linksItems && x.linksItems.length>0) {
			var arr = x.linksItems;
			var maxOffset = 0;
			for (var j=0; j<arr.length; j++) {
				var y = arr[j];
				if (y.offsetTop>maxOffset) maxOffset=y.offsetTop;
			}
			for (var j=0; j<arr.length; j++) {
				var y = arr[j];
				y.style.paddingTop = intStyle(y, "padding-top")+(maxOffset-y.offsetTop)+"px";
			}
		}
		if (x.evalItems && x.evalItems.length>0) {
			var arr = x.evalItems;
			var maxOffset = 0;
			for (var j=0; j<arr.length; j++) {
				var y = arr[j];
				var li = findListParent(y);
				var offsetTop = findPos(y)[1]-findPos(li)[1];
				y.specialOffsetTop = offsetTop;
				if (offsetTop>maxOffset) maxOffset=offsetTop;
			}
			for (var j=0; j<arr.length; j++) {
				var y = arr[j];
				y.style.marginTop = (maxOffset-y.specialOffsetTop)+"px";
			}
		}
	}
}
function fixListe2cols() {
	for (var i=0; i<listes_2cols.length; i++) {
		var x = listes_2cols[i];
		for (var j=0; j<x.itemsLeft.length; j++) {
			var l = x.itemsLeft[j];
			var r = x.itemsRight[j];
			var maxOffset = l.linksBlock.offsetTop>r.linksBlock.offsetTop ? l.linksBlock.offsetTop : r.linksBlock.offsetTop;
			l.linksBlock.style.paddingTop = intStyle(l.linksBlock, "padding-top")+(maxOffset-l.linksBlock.offsetTop)+"px";
			r.linksBlock.style.paddingTop = intStyle(r.linksBlock, "padding-top")+(maxOffset-r.linksBlock.offsetTop)+"px";
			var heightStuff = intStyle(l,"padding-top")+intStyle(l,"padding-bottom")+intStyle(l, "border-top-width")+intStyle(l, "border-bottom-width")
			l.style[heightPropertyToUse]=r.style[heightPropertyToUse]= (l.offsetHeight>=r.offsetHeight ? l.offsetHeight : r.offsetHeight)-heightStuff+"px";
		}
	}
}


/*** Fin alignement en hauteur ***/


/**** zooms des listes labels ******/

var pvb;
var pvb2;
function showPreview(elm) {       
   var id = elm.getAttribute("rel"); 
   var Zoom = getElementsByClassName(document.getElementById("LargeListControl"), "div", "hiddenZoomImg");
   for (var i=0; i < Zoom.length; i++) {
        Zoom[i].style.display = "none";
   }
   var pos = findPos(elm); 
   pvb = document.getElementById(id);
   var bigimg = pvb.getElementsByTagName("img");
   pvb.style.display = "block"; 
   var leftVar = pos[0]-parseInt((bigimg[0].offsetWidth - elm.offsetWidth)/2);
   if(leftVar < 1) leftVar = leftVar + 50;
   pvb.style.left = leftVar+"px";
   pvb.style.top = pos[1]-parseInt((bigimg[0].offsetHeight - elm.offsetHeight)/2)+"px";
   pvb2 = elm.parentNode.appendChild(pvb.cloneNode(true)); 
   removeNode(pvb);                                                                             
}
function hidePreview() {
   pvb2.style.display = "none";                                                                                      
}

function removeNode (node) {
    if(node && node.parentNode)
    node.parentNode.removeChild(node);
}

/**** fin des zooms des listes labels ******/




/*****************
* 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 *****/



/* checkScrollBlocks
   il peut y avoir des blocks de scroll dans certains elements.
   Ces blocks de scroll sont horizontaux, et les elements a l'interieurs sont des list-items floates. Mais comme cela ne fonctionne pas, cette fonction fixe les largeurs des elements et applique une largeur sur l'element parent de tous les list-items.
*/
function checkScrollBlocks(elm) {
	elm = typeof(elm) == "string" ? document.getElementById(elm) : elm;
	if (!elm) return;
	var div = elm.getElementsByTagName("div");
	var childWidth = 0;
	for (var i=0; i<div.length; i++) {
		var x = div[i];
		childWidth=0;
		if (x.className.match(/\bscrollblock\b/)) {
			x.style.width = x.offsetWidth-intStyle(x,"padding-left")-intStyle(x,"padding-right");
			var liste = x.getElementsByTagName("ul");
			if (liste.length>0) {
				liste = liste[0];
			} else {
				continue;
			}
			var li = x.getElementsByTagName("li");
			for (var j=0; j<li.length; j++) {
				var y = li[j]
				childWidth+=y.offsetWidth;
				childWidth+=intStyle(y,"margin-left");
				childWidth+=intStyle(y,"margin-right");
				y.style.width = y.offsetWidth-intStyle(y,"padding-left")-intStyle(y,"padding-right")-intStyle(y,"border-left-width")-intStyle(y,"border-right-width")+"px";
			}
			liste.style.width = childWidth+"px";
		}
	}
}

/***************
* 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() {
	getAllBlocks(); //parsing de tous les blocks et mise ne place dans des hashmaps
	fixAligneProduits(); //alignement des contenus de produits
	getAllLists(); // parsing de toutes les listes produits ou contacts
	evaluationInitFields();
}

/*
	onloadFunctions() :
	cette fonction est lancee une fois que la page est totalement chargee (images, flash, fichiers associes)
*/
function onloadFunctions() {
	fixMiseEnAvant(); //alignement des contenus de mise en avant
	fixListeInline(); //aligne les items des listes en ligne
	fixListe2cols(); //aligne les items des listes en 2 colonnes
	fixBlocksHeight();  //alignement des blocs
	fixCorners(); //correction des coins (seulement pour IE et si besoin pour anciennes version des autres navigateurs)
	//overBlocProduits.init();
	contextMenu.init();
}
/****
  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 getElementsByTagName
******/
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
}
/*****
  menu deroulant - simulation du hover facon F6
*****/
function sousMenuAddHover(elm, position) {
  elm.style.behavior = " ";
  var menu = elm.getElementsByTagName("ul");
  if (menu.length>0) {
    elm.theUl = menu[0];
    ifrlayer.make(elm.theUl);
    elm.onmouseenter = function() {
      this.className+= ' currentJs';
      ifrlayer.make(elm.theUl);
    }
    elm.onmouseleave = function() {
      this.className = this.className.replace(/\b(right)?currentJs\b/,"");
      ifrlayer.hide(this.theUl);
    }
  }
}
function sousMenuActivation(obj,evt,boucle)
{
//  printDebug(evt.keyCode,0);
  function killSousMenu()
  {
    var allLi = obj.parentNode.getElementsByTagName("li");
    for (var i = 0; i < allLi.length; i++)
    {
      allLi[i].className = allLi[i].className.replace(/\b(right)?currentJs\b/,"");
      ifrlayer.hide(this.theUl);
    }
  }
// touche echap
  if (evt.keyCode==27)
  {
    killSousMenu();
  }
// fleche haut
  if (evt.keyCode==38)
  {
    if(!obj.id=="")
    {
      return;
    }
    else
    {
      killSousMenu();
    }
  }
// fleche droite
  if (evt.keyCode==39)
  {
    if(obj.id=="m_photo_camescope")
    {
      killSousMenu();
      document.getElementById("m_livres").getElementsByTagName("a")[0].focus();
      document.getElementById("m_livres").className+=" currentJs";
    }
    else
    {
      killSousMenu();
      var droiteMenu = (IS_IE_ALL) ? obj.nextSibling : obj.nextSibling.nextSibling;
//      var droiteMenu = obj.nextSibling.nextSibling;
      droiteMenu.getElementsByTagName("a")[0].focus();
      droiteMenu.className+=" currentJs";
    }
  }
// fleche bas
  if (evt.keyCode==40)
  {
    return;//non actif encore
    if(!obj.id=="")
    {
      var lesA = obj.parentNode.getElementsByTagName("a");
      for (var j=0;j > lesA.length; j++)
      {
        if(lesA[j])
        {
        }
      }
    }
    killSousMenu();
  }
// fleche gauche
  if (evt.keyCode==37)
  {
    if(obj.id=="m_livres")
    {
      killSousMenu();
      document.getElementById("m_photo_camescope").getElementsByTagName("a")[0].focus();
      document.getElementById("m_photo_camescope").className+=" currentJs";
      ifrlayer.make(elm.theUl);
    }
    else
    {
      killSousMenu();
      var gaucheMenu = (IS_IE_ALL) ? obj.previousSibling : obj.previousSibling.previousSibling;
//       var gaucheMenu = obj.previousSibling.previousSibling;
      gaucheMenu.getElementsByTagName("a")[0].focus();
      gaucheMenu.className+=" currentJs";
      ifrlayer.make(elm.theUl);
    }
  }


//        si fleche bas descend 40
//        si fleche haut monte 38
//        si fleche droite droitise 39
//        si fleche gauche gauchise 37
}
/*******
  fonction pour la compatibilite
  des navigateurs pour l'opacity
*******/
function changeOpac(opacity,obj) {
  var object = obj.style;
  object.opacity = (opacity / 100);
  object.MozOpacity = (opacity / 100);
  object.KhtmlOpacity = (opacity / 100);
  object.filter = "alpha(opacity=" + opacity + ")";
}
/* bouclage de changOpac */
function opacity(obj, 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, obj);}//et la on la demarre
  changeOpac(opacStart, obj);//ici on effectue le changement d'opacity
  opacStart = opacStart+frameSize;//la on incremente
  //et la on boucle
  setTimeout(function()
  {
    opacity(
      obj,
      opacStart,
      opacEnd,
      millisec,
      frameSize,
      true
    )
  }, speed);
  return
}
/*******
  ici on switch d'onglet en onglet dans une page adherent,
  la fonction reste assez souple et en la modifiant un
  peu elle pourrait etre adaptable partout
*******/
function switchAvantageAdherent(id, idOnglet){
  var lastViewed = idOnglet;
  SetCookie('lastOnglet',lastViewed,10);
  var selectOngletOffreAdh = document.getElementById(idOnglet);
  var selectOffreAdh = getElementsByClassName(document.getElementById("blockAvantageAdherent"), "div", "blockAvantageAdherent");
  var monId = document.getElementById(id);
  monId.style.display="block";
  var heightMonId = monId.offsetHeight;
  var heightMonIdParent = monId.parentNode.offsetHeight;
  monId.parentNode.style.height="auto";
  function switchAvantageAdherentLoop(){
    for (var i=0; i < selectOffreAdh.length; i++)
    {
      selectOffreAdh[i].style.display="none";
      selectOngletOffreAdh.parentNode.getElementsByTagName("li")[i].className="";
    }
    selectOngletOffreAdh.className="ongletAvtAdhActive";
    monId.style.display="block";
    document.getElementById("AvtAdhAdherer").style.display="none";// le premier bloc doit disparaitre au premier changement d'onglet, il n'est pas demande qu'il reapparaisse
  }
  monId.style.display="block";
//retourne une taille de difference pour pouvoir derouler dans les deux sens proprement
  var frame = parseInt(heightMonId-heightMonIdParent)/10;
//  IE7 retourne 0 si on arrive sur la page avec l'ancre, je recalcule et cela suffit pour avoir la bonne hauteur
  if (!heightMonId == 0){
    resize(monId.parentNode, 0, {start: heightMonIdParent, end: heightMonId}, 1, frame, switchAvantageAdherentLoop(), 0, 0);
  }
//  un peu d'opacite pour plus tard ?
//  changeOpacity(monId.parentNode, {start: 0, end: 100}, 1, 10, 0);

//  pas tres propre, mais permet de switcher d'onglet du menu principal
  if (id=="AvtAdhPaiement")
  {
    document.getElementById("m_adh_avantages_carte").className="";
    document.getElementById("m_adh_facilite_paiement").className="current";
  }
  else
  {
    document.getElementById("m_adh_avantages_carte").className="current";
    document.getElementById("m_adh_facilite_paiement").className="";
  }
}

/*******
  fonction de debug, il suffit de l'appeler printDebug("miou");
  et s'affichera en haut a gauche le resultat
  Je devrais y inclure un bouton pour vider le tableau noir,
  genre un innerHTML="" vite vu
*******/
function printDebug(debug, ecrase){
  var monId = document.getElementById("header");
  if (document.getElementById("debugJS"))
  {
    if(ecrase==0)
    {
      nouveauDiv.innerHTML+="<pre>"+debug+"</pre>";
    }
    else
    {
      nouveauDiv.innerHTML="<pre>"+debug+"</pre>";
    }

  }
  else{
    nouveauDiv = document.createElement("div");//creation  de l objet
    nouveauDiv.id="debugJS";//identification
    nouveauDiv.style.display="block";//on le stylise un peu
    nouveauDiv.style.position="absolute";
    nouveauDiv.style.top="20px";
    nouveauDiv.style.left="0px";
    nouveauDiv.style.background="black";
    nouveauDiv.style.border="solid 1px #900";
    nouveauDiv.style.zIndex="60";
    nouveauDiv.style.fontSize="11px";
    nouveauDiv.style.overflow="auto";
    nouveauDiv.style.height="600px";
    nouveauDiv.style.width="auto";
    nouveauDiv.style.padding="5px";
    nouveauDiv.innerHTML="<pre>"+debug+"</pre>";
    monId.parentNode.insertBefore(nouveauDiv, monId);//on insert l'objet avant la balise appele
  }
}
/******
  deux fonctions pour la newsletter, c'est loin 
  d'etre parfait, mais fonctionnel et pas pire
  qu'avant

  on switch les onglet ici aussi assez similaire
  a la fonction chez les adherents
*******/
function switchChoixNewsletter(id, idOnglet){
  var selectOngletNewsletter = document.getElementById(idOnglet);
  var nlListeRayon = document.getElementById("nlListeRayon").getElementsByTagName("ul");
  var selectNewsletter = document.getElementById("nlChoixNewsletter").getElementsByTagName("ul");
  var monId = document.getElementById(id).getElementsByTagName("ul")[0];
  for (var i=0; i < selectNewsletter.length; i++)
  {
    selectNewsletter[i].parentNode.style.display="none";
  }
  for (var i=0; i < selectOngletNewsletter.parentNode.getElementsByTagName("li").length; i++)
  {
    selectOngletNewsletter.parentNode.getElementsByTagName("li")[i].className="nlListeInactif";
  }
  selectOngletNewsletter.className="nlListeActif";
  monId.parentNode.style.display="block";
  if (idOnglet=="nlListeSpectacle")
  {
    document.getElementById("nlChoixSpectacle").style.display="block";
  }
}
/*
  permet de rajouter ou supprimer de
  facon virtuel la liste des newsletters

  Bug d'opacity sur IE, a voir pourquoi il ne retourne pas la fonction correctement.
*/
function listingNlLive(obj, evt, lienParent, lien, evenement){
//permet de corriger le bug DomIE et DOM2 avec un onclick pour IE et un onchange pour les autres, utiliser les evenement serait preferable ceci dit
  if(evenement=="onclick")
  {
    if(!IS_IE_ALL)
    {
      return false;
    }
  }
  else if(evenement=="onchange")
  {
    if(IS_IE_ALL)
    {
      return false;
    }
  }
  var lesInput = document.getElementById("nlChoixNewsletter").getElementsByTagName("input");
  var i=0;
  var getLabel = obj.getElementsByTagName('label')[0];
  var getInput = obj.getElementsByTagName('input')[0];
  var hop = getLabel.innerHTML+" + "+getInput.checked;
  var liInsertById = document.getElementById(lien);
  var liParentInsertById = document.getElementById(lienParent);
  var listeArticleNl = document.getElementById("listeArticleNl");
  var getLiInsert = listeArticleNl.getElementsByTagName("li");


  if (getInput.checked==false)// ici on supprime
  {
      if(liInsertById.className=="ajouterGhost")
      {
        opacity(liInsertById.id, 100, 0, 500, -5);
        resize(liInsertById, 0, {start: liInsertById.offsetHeight, end: 0}, 1, -1, "", 0, 0);
        function miou(){liInsertById.className="supprimerGhost";};
        setTimeout(""+miou()+"",500);
      }
      else
      {
        liInsertById.className="supprimer";
        opacity(liInsertById.id, 100, 50, 250, -5);
      }
  }
  else // ici on ajoute
  {
    if(liInsertById)
    {
      if(liInsertById.className=="supprimerGhost")
      {
        liInsertById.style.height="auto";
        liInsertById.className="ajouterGhost";
      }
      if(liInsertById.className=="ajouterGhost")
      {
        changeOpac(0,liInsertById.id)
        liInsertById.className="ajouterGhost";
        opacity(liInsertById.id, 0, 100, 500, 5);
      }
      else
      {
        changeOpac(0,liInsertById.id)
        liInsertById.className="";
        opacity(liInsertById.id, 50, 100, 500, 5);
      }
    }
    else
    {
      if(liParentInsertById.childNodes.length>1)
      {
        var li = document.createElement("li");
        var nouveauLi = liParentInsertById.getElementsByTagName("ul")[0].appendChild(li);//creation  de l objet
        nouveauLi.id=lien;//on le display block car en none en css
        changeOpac(0,lien)
        nouveauLi.innerHTML=getLabel.innerHTML;
        nouveauLi.className="ajouterGhost";//on le display block car en none en css
        opacity(lien, 0, 100, 500, 5);
      }
      else
      {
        var ul = document.createElement("ul");
        var li = document.createElement("li");
        var nouveauUl = liParentInsertById.appendChild(ul); //creation  de l objet
        var nouveauUlli = nouveauUl.appendChild(li); //creation  de l objet
        nouveauUlli.id=lien;//on le display block car en none en css
        changeOpac(0,lien)
        nouveauUlli.innerHTML=getLabel.innerHTML;
        nouveauUlli.className="ajouterGhost"; //on le display block car en none en css
        opacity(lien, 0, 100, 500, 5);
      }

    //creation element
    }
  }
  for(var a = 0;a < getLiInsert.length; a++)
  {
    if(getLiInsert[a].parentNode.id=="listeArticleNl")
    {
      if(getLiInsert[a].childNodes.length>2)
      {
        getLiInsert[a].className="rempli";
      }
      else
      {
        getLiInsert[a].className="vide";
      }
    }
  }
// on va gerer ici la parti spectacles bien chiante
  var spectacles = getElementsByClassName(document.getElementById("nlChoixNewsletter"), "input", "nlChoixSpectacleInput");
  for (var o = 0; o < spectacles.length; o++)
  {
    if (obj.parentNode.parentNode.id == spectacles[o].parentNode.parentNode.parentNode.id)
    {}
    else
    {
      spectacles[o].checked=false;
    }
  }
}

/****** POPIN
  Creation de popin en recuperant un element HTML deja ecrit dans la page, puis on l'affiche en popin
******/
function popinIt(obj, id, tag, className, noeuxParent, popinClassName, onOff){
  if (onOff=="on"){
    //ici on supprime tout popup deja affiche pour eviter qu ils se montent les uns sur les autres, mais a voir a passer en variable
    if (document.getElementById("jeVeuxEtreSupprimer")){
      var del = document.getElementById("jeVeuxEtreSupprimer");
      del.parentNode.removeChild(del);
    }
    var remplissage = getElementsByClassName(document.getElementById(id), tag, className)[0].innerHTML; //recup le HTML
    nouveauDiv = document.createElement("div");//creation  de l objet
    nouveauDiv.id="jeVeuxEtreSupprimer";//identification
    nouveauDiv.className="popin "+popinClassName;//on le classifie
    nouveauDiv.style.display="block";//on le display block car en none en css
    nouveauDiv.innerHTML = remplissage;// on rempli le bloc
    obj.parentNode.insertBefore(nouveauDiv, obj);//on l insert l objet avant la balise appele
    var leNouveauDiv = document.getElementById("jeVeuxEtreSupprimer");
    var leParentLeNouveauDiv = noeuxParent;// on selectionne l element parent pour calculer sa difference de positionnement
    var ouLeNouveauDiv = leNouveauDiv.offsetHeight+leNouveauDiv.offsetTop;
    var ouLeParentLeNouveauDiv = leParentLeNouveauDiv.offsetHeight+leParentLeNouveauDiv.offsetTop;
    //si il depasse en bas, alors on le deroule vers le haut
    if (ouLeNouveauDiv>ouLeParentLeNouveauDiv){
      leNouveauDiv.getElementsByTagName("span")[0].className="popbr";
      leNouveauDiv.style.marginTop="-"+leNouveauDiv.offsetHeight+"px";
    }
    //si il depasse a gauche, on le deroule a droite
    if (leNouveauDiv.offsetLeft<1){
      leNouveauDiv.getElementsByTagName("span")[0].className="popbl";
      leNouveauDiv.className+=" popInDerouleDroite";
    }
  }
  else{
      var del = document.getElementById("jeVeuxEtreSupprimer");
      del.parentNode.removeChild(del);
  }
}

function toggle() {
 for (i=0;i<document.getElementsByTagName("div").length; i++) {
	if (document.getElementsByTagName("div").item(i).className == "event"){

			if (document.getElementsByTagName("div").item(i).style.display == "none"){
				document.getElementsByTagName("div").item(i).style.display = "";
			} else {
				document.getElementsByTagName("div").item(i).style.display = "none";
			}
		}
	}
 }

function toggleAndWrite(artlink,Title,TypeId, gauche, haut)
{

	var listArt = artlink.toString();
	listArt = listArt.replace(/\|\|/g, ', ');
	listArt = listArt.replace(/,\s+$/, '.');
	
	for (i=0;i<document.getElementsByTagName("div").length; i++) {
		if (document.getElementsByTagName("div").item(i).className == "event"){
		
			if (document.getElementsByTagName("div").item(i).style.display == "none"){
				document.getElementsByTagName("div").item(i).style.display = "";
				document.getElementsByTagName("div").item(i).style.position = "absolute";
				document.getElementsByTagName("div").item(i).style.left = gauche+"px";
				document.getElementsByTagName("div").item(i).style.top = haut+"px";

				document.getElementsByTagName("div").item(i).innerHTML = "<span class='toggle'><a href='/' onclick='toggle(1); return false' title='Masquer l explication'>X</a></span><p style='padding: 0 7px; background-color: #A3A3A3; color: #fff;'>Nous vous proposons " + TypeId + " <strong>" + Title + "</strong> parce que vous avez consult&eacute;<br /></p><p style='padding: 7px; background-color: #fff; color: #A3A3A3;'><strong>" + listArt + "</strong></p>";
			} else if (document.getElementsByTagName("div").item(i).style.display == "") {
				
				document.getElementsByTagName("div").item(i).style.position = "absolute";
				document.getElementsByTagName("div").item(i).style.left = gauche+"px";
				document.getElementsByTagName("div").item(i).style.top = haut+"px";
				
				document.getElementsByTagName("div").item(i).innerHTML = "<span class='toggle'><a href='/' onclick='toggle(1); return false' title='Masquer l explication'>X</a></span><p style='padding: 0 7px; background-color: #A3A3A3; color: #fff;'>Nous vous proposons " + TypeId + " <strong>" + Title + "</strong> parce que vous avez consult&eacute;<br /></p><p style='padding: 7px; background-color: #fff; color: #A3A3A3;'><strong>" + listArt + "</strong></p>";
			} else {
				document.getElementsByTagName("div").item(i).style.display = "none";
			}
		 }
	}
}

//http://www.diplok.com/1ppl/html/article103.html
var sldValue=0
var sldTop=0
var sldLeft=0
var doDrag=false
var sldMouseLeft=0
var sldMouseTop=0

function getAbsLeft(o) {
	var oLeft = o.offsetLeft
	while(o.offsetParent!=null) {
		oParent = o.offsetParent
		oLeft += oParent.offsetLeft
		o = oParent
	}
	return oLeft
}

function getAbsTop(o) {
	var oTop = o.offsetTop
	while(o.offsetParent!=null) {
		oParent = o.offsetParent
		oTop += oParent.offsetTop
		o = oParent
	}
	return oTop
}

function setLeft(o,oLeft) {
	o.style.left = oLeft + "px"
}

function setTop(o,oTop) {
	o.style.top = oTop + "px"
}

function setPosition(o,oLeft,oTop) {
	setLeft(o,oLeft)
	setTop(o,oTop)
}

function sldMouseDown(e)
{
	if (!e) {e = window.event}
	doDrag=true
	o=document.getElementById("event1")
	sldLeft=getAbsLeft(o)
	sldTop=getAbsTop(o)
	sldMouseLeft=e.clientX-sldLeft
	sldMouseTop=e.clientY-sldTop

	/*document.getElementById("mouseCapt").innerHTML = "Mouse Position on Mouse Down event : " + e.clientX + "/" + e.clientY
	document.getElementById("headPos").innerHTML = "Head Position on Mouse Down event : " + sldLeft + "/" + sldTop
	document.getElementById("mousePosRel").innerHTML = "Relative Mouse Position on Mouse Down event : " + sldMouseLeft + "/" + sldMouseTop*/

}

function sldMouseUp(e)
{
	doDrag=false
}

function sldMouseMove(e)
{
	if (!e) {e = window.event}

	/*if (document.getElementById("mousePos"))
	{
		document.getElementById("mousePos").innerHTML = "Mouse Position : " + e.clientX + "/" + e.clientY
		document.getElementById("dragStatus").innerHTML = "doDrag : " + doDrag
	}*/

	if (doDrag)
	{
		o=document.getElementById("event1")
		setPosition(o,e.clientX-sldMouseLeft,e.clientY-sldMouseTop)
		return false
	}
}

document.onmousemove = sldMouseMove;

function getTaille(Elem) {


   if(document.getElementById) {
      var elem = document.getElementById(Elem);
   } else if (document.all){
      var elem = document.all[Elem];
   }
   window.wPos = elem.offsetWidth;
   window.hPos = elem.offsetHeight;


}

function popinModal(id) {
    var elem = document.getElementById(id);
    if(elem.style.display == "block") {
      elem.style.display = "none";
      if(IS_IE) {ifrlayer.hide(elem);}
    } else {

      elem.style.display = "block";
       if(IS_IE) {ifrlayer.make(elem);}
      window.getTaille(id);
      var large = (screen.availWidth - wPos)/2;
      var haut = (screen.availHeight - hPos)/2;

     elem.style.zIndex = 999;
     elem.style.position = "absolute";
     elem.style.left = large+"px";
     elem.style.top = haut+"px";
     //alert(screen.availHeight+" "+hPos);
   }
}


/* filter:  permet de filtrer un array avec une fonction passee en parametre*/ 
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;
}

/* getText : retourne le text d'un element */
function getText(elt) {
	if (elt.textContent) {
		return elt.textContent;
	} else {
		return elt.innerText;
	}
}

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

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





function GetCookie (name) {
	var arg=name+"=";
	var alen=arg.length;
	var clen=document.cookie.length;
	var i=0;
	while (i<clen) {
		var j=i+alen;
		if (document.cookie.substring(i, j)==arg)
                        return getCookieVal (j);
                i=document.cookie.indexOf(" ",i)+1;
                        if (i==0) break;}
	return null;
}

function SetCookie (name, value) {
	var argv=SetCookie.arguments;
	var argc=SetCookie.arguments.length;
	var expires=(argc > 2) ? argv[2] : null;
	var path=(argc > 3) ? argv[3] : null;
	var domain=(argc > 4) ? argv[4] : null;
	var secure=(argc > 5) ? argv[5] : false;
	document.cookie=name+"="+escape(value)+
		((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
		((path==null) ? "" : ("; path="+path))+
		((domain==null) ? "" : ("; domain="+domain))+
		((secure==true) ? "; secure" : "");
}


/* Objets et fonctions fnac */

/* Onglets Fnac */
var fnactab={
    tabClass:'domtab', //classe du block qui englobe la liste des onglets
    listClass:'domtabs', //classe du menu UL des onglets
    activeClass:'active', //classe active d'un onglet
    currentTab:0, //numero d'index de l'onglet courrant
    menuButtons:[], //tableau contenant une reference des onglets courants
    tabsElements:[], //tableau contenant une reference des blocks d'onglets courants
    init:function() {
        if(!document.getElementById || !document.createTextNode){return;}
        //find the tabbed menu
        var ul = getElementsByClassName(document, "ul",fnactab.listClass );
        if (ul.length==0) return;
        var menu=ul[0];
        
        var lis = menu.getElementsByTagName("li");
        //init buttons menu
        for (var i=0; i<lis.length; i++) {
            var b = lis[i];
            fnactab.menuButtons.push(b);
            if (b.className.match("\\b"+fnactab.activeClass+"\\b")) {
                fnactab.currentTab = i;
            }
            b.indexMenu=i;
            var a = b.getElementsByTagName("a");
            if (a.length>0) a=a[0];
            if (a) {
                a.indexMenu=i;
                a.onclick=function() {
                    fnactab.showtab(this.indexMenu);
                    return false;
                }
            }
        }
        fnactab.menuButtons[fnactab.currentTab].className=fnactab.activeClass;
        //find tabs blocks elements
        var blk = menu;
        while(blk && !blk.className.match("\\b"+fnactab.tabClass+"\\b")) blk=blk.parentNode;
        if (!blk) return;
        var childs = blk.parentNode.childNodes; //on recupere tous les enfants du block, y compris les noeuds de type textes.
        var firstDiv=true; //booleen pour eviter de passer sur le premier div
        for (var i=0; i<childs.length; i++) {
            var block = childs[i];
            if (block.nodeName=="DIV") { //on filtre pour ne recuperer que les divs
                if (firstDiv) {
                    firstDiv=false;
                } else {
                    fnactab.tabsElements.push(block);
                    block.style.display="none";
                }
            }
        }
        fnactab.tabsElements[fnactab.currentTab].style.display="block";
        fnactab.LoadTabFromCookie();
    },
    showtab:function(tabnum) {
        switch(typeof(tabnum)) {
            case "object": 
                    tabnum = tabnum.indexMenu;
                    break;
            case "string":
                    if (!isNaN(parseInt(tabnum))) {
                        tabnum=parseInt(tabnum);
                    } else {
                        tabnum = document.getElementById(tabnum);
                        if (tabnum) tabnum = tabnum.indexMenu;
                    }
                    break;
        }
        if (tabnum==null || tabnum<0 || tabnum>=fnactab.menuButtons.length) tabnum=0;
        
        fnactab.menuButtons[fnactab.currentTab].className=""; //onglet courant a off
        fnactab.menuButtons[tabnum].className=fnactab.activeClass; //nouvel onglet a on
        fnactab.tabsElements[fnactab.currentTab].style.display="none"; //block courant cache
        fnactab.tabsElements[tabnum].style.display="block"; //block nouvel onglet affiche
        fnactab.currentTab=tabnum; 
        fnactab.SaveTab();
    },
    LoadTabFromCookie:function() {
        var tab = GetCookie("fnacTab_DefaultTab");
        var url = GetCookie("fnacTab_SavedUrl");
        if (tab && url && !isNaN(parseInt(tab)) && url==document.location.toString()) {
            fnactab.showtab(tab);
        }
    },
    SaveTab:function() {
        SetCookie("fnacTab_DefaultTab",fnactab.currentTab);
        SetCookie("fnacTab_SavedUrl",document.location.toString());
    }
}


var openCloseGroup={
    groupClass:"open_close_group_parent",
    childClass:"open_close_group_child",
    childClosedClass:"open_close_group_closed_child",
    actionClass:"open_close_group_action_elt", //Element qui va etre clicable
    hideClass:"open_close_groupe_elttohide", //classe qui va afficher/cacher les elements
    init:function() {
        var home = document.getElementById("home"); if (!home) return;
        var div= home.getElementsByTagName("div");
        for(var i=0;i<div.length;i++) { //on cherche tous les groups de blocs open/close
            var thediv = div[i];
            if (thediv.className.match("\\b"+openCloseGroup.groupClass+"\\b")) { //des qu'on en trouve un
                var childs = thediv.getElementsByTagName("div");
                for(var j=0;j<childs.length;j++) { 
                    var thechild = childs[j];
                    if (thechild.className.match("\\b"+openCloseGroup.childClass+"\\b")) { //des qu'on a un enfant
                        thechild.parentGroup=thediv;
                        if (!thediv.currentOpenedChild) {
                            thediv.currentOpenedChild=thechild;
                        }
                        var ChildElements = thechild.getElementsByTagName("*");
                        for (var h=0; h<ChildElements.length;h++) {
                            var x = ChildElements[h];
                            if (x.className.match("\\b"+openCloseGroup.actionClass+"\\b")) {
                                x.onclick=openCloseGroup.gotoGroupAndOpenClose;
                            }
                        }
                        openCloseGroup.close(thechild);
                    }
                }
                openCloseGroup.open(thediv.currentOpenedChild);
                i+=childs.length;
            }
        }
    },
    close:function(elt) { 
        elt.className=elt.className.replace(openCloseGroup.childClass,openCloseGroup.childClosedClass);
    },
    open:function(elt) {
        elt.className=elt.className.replace(openCloseGroup.childClosedClass,openCloseGroup.childClass);
    },
    gotoGroupAndOpenClose:function() {
        var obj = this; 
        while(obj.parentNode && !new RegExp("\\b"+openCloseGroup.childClosedClass+"\\b|\\b"+openCloseGroup.childClass+"\\b").test(obj.className)) {
            obj=obj.parentNode; //on remonte jusqu'au premier parent
        }
        if (!obj.parentNode) return;
        var x=obj.parentGroup;
        openCloseGroup.close(x.currentOpenedChild);
        openCloseGroup.open(obj);
        x.currentOpenedChild=obj;
        return false;
    }
}


/* initialise le lien lire tous les avis*/
function initProductPage() {
	var tmp; //navDiaporama=false;
	var div = document.getElementsByTagName("div"); //init hoverBlock
	for (var i=0; i<div.length; i++) {
		var x = div[i]; 
		if (x.className.indexOf("hoverBlock")!=-1) { 
			with(x.style) { position="absolute"; display="none"; }
		}
	}
	//init readAdviceslink
	var advlnk = document.getElementById(readAllAdvicesLink);
	if (advlnk) { 
		advlnk.onmouseover = function(e) { popLayerMakeContent(e,"advice"); }
		advlnk.onmouseout = function() { popLayerClose() }
		advlnk.onmousemove = function(e) {popLayerShow(e);}
	}
	hoverblock.init(document);
}

var readAllAdvicesLink = "readAllAdvicesLink";
var internautesadviceId = "lastBestComment";
function popLayerMakeContent(e, type, obj) {
	var pop = popLayerShow(e);
	if (pop && type) {
		switch (type.toLowerCase()) {
			//get first user advice
		case "advice" :	var Avislst = document.getElementById(internautesadviceId);
						if (Avislst) {
							var avis = Avislst;
							if (avis) {
								pop.innerHTML = avis.innerHTML;
								var p = pop.getElementsByTagName("p");
								for (var i=0; i<p.length; i++) {
									if (p[i].className.indexOf("ndlr")!=-1) p[i].parentNode.removeChild(p[i]);
								}
							}
						}
						break;
		case "service" : pop.innerHTML = obj.innerHTML;
						 break;
		}
	}
	ifrlayer.make(pop);
}

function popLayerShow(e,normalTop) {
	var home = document.getElementById("home");
	var html = document.getElementsByTagName((navigator.userAgent.indexOf("MSIE 5")!=-1) ? "body" : "html")[0];
	var body = document.getElementsByTagName("body")[0];
	getMouse(e);
	var popup = document.getElementById("popLayer"); 
	if (!popup) {
		var tmp = document.createElement("div");
		tmp.className="hoverBlock filledBox";
		tmp.id="popLayer";
		with(tmp.style) {position="absolute"; display="block";}
		popup = home.appendChild(tmp);
	}
	
	if (popup) {
		if (popup.className!="hoverBlock filledBox") popup.className="hoverBlock filledBox";
		with(popup.style) {
			if (display!="block") display = "block";
			left = (window.mouseX+popup.clientWidth+10>html.scrollLeft+html.clientWidth-10) ? (html.scrollLeft+html.clientWidth-popup.clientWidth-10)+"px" : window.mouseX+10+"px";
			top = (window.mouseY+popup.clientHeight+10>html.scrollTop+html.clientHeight-10 && !normalTop) ? (window.mouseY-popup.clientHeight-10)+"px" : window.mouseY+10+"px";
		}
	   popup.style.visibility = "visible";
		ifrlayer.move(popup);
		return popup;
	}
	return null;
}

function popLayerClose() {
	var popup = document.getElementById("popLayer"); 
	if (popup) {
	   popup.style.visibility = "hidden"; 
	    popup.innerHTML="";
	    ifrlayer.hide(popup);
	}
}


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("home"); if (!home) return;

	    var divtmp = getElementsByClassName(home, "div", "nav-diaporama");
			
        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'element pour ajouter les fonctionnalites necessaires.
		//Le contenu de l'element doit respecter le schema : <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(/\bactiveimg\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(expandimg)\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 defaut, 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 fleches
		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="activeimg";
        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.nodeName=="SPAN") {   
        //evite 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">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 element span, alors on recupere 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 fleches pour feuilletter les pages

        //pour passer du zoom "Feuilleter les pages" au zoom "Agrandir l'image" on supprime les fleches
		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="../img/pictos/arrows/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="../img/pictos/arrows/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 fleches
		
		//if (!navPage) {
		    //la position du popin en haut a gauche de la fenetre du navigateur n'est initialise
		    //qu'a 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 fonctionnalite sur le deplacement
            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 un message d'attente avec */
var waitingMsg={
    shadowLayer:null,
    layerId:"waitingMsg",
    defaultTimeout:15000,
    timer:null,
    show:function() {
        var div = document.getElementById(waitingMsg.layerId);
        var doc = /MSIE 5|OPERA/.test(navigator.userAgent) ? document.body : document.documentElement;
        if (!waitingMsg.shadowLayer) {
            var shadow = document.body.appendChild(document.createElement("div"));
            waitingMsg.shadowLayer = shadow;
            shadow.id="shadowLayer";
            with(shadow.style) {
                left=0;
                right=0;
                height=doc.scrollHeight+"px";
            }
        }
        waitingMsg.shadowLayer.style.display="block";
        ifrlayer.make(waitingMsg.shadowLayer);
        if (div) {
            div = document.body.appendChild(div);
            div.style.display="block";    
            ifrlayer.make(div);
            div.style.left = (doc.scrollLeft+parseInt((doc.clientWidth-div.offsetWidth)/2))+"px";
            div.style.top = (doc.scrollTop+parseInt((doc.clientHeight-div.offsetHeight)/2))+"px"
        }
    },
    hide:function() {
        var div = document.getElementById(waitingMsg.layerId);
        waitingMsg.shadowLayer.style.display="none";
        ifrlayer.hide(waitingMsg.shadowLayer);
        div.style.display="none";
        ifrlayer.hide(div);
        clearTimeout(waitingMsg.timer);
    },
    setHideTimer:function(timer) {
        var timeforTimeout = timer || waitingMsg.defaultTimeout;
        if (!waitingMsg.timer) {
            waitingMsg.timer = setTimeout("waitingMsg.hide()",timeforTimeout);
        }
    }
}



var hoverblock = {
    init:function(parentElement) {
        var tmp=null;
        parentElement = typeof(parentElement)=="string" ? document.getElementById(parentElement) : parentElement;
        if (!parentElement) return;
        var table = parentElement.getElementsByTagName("table"); //init Accessories
        for (var i=0; i<table.length;i++) {
	        if (table[i].className.match(/\btbl-accessoires\b/)) {
		        var tds = table[i].getElementsByTagName("td");
		        for (var j=0; j<tds.length;j++) {
			        var td = tds[j];
        			
			        tmp = getElementsByClassName(td,"a", "picture");
			        if (tmp.length>0) {
			            td.eltPictureLink = tmp[0];
			            td.eltPicture = tmp[0].firstChild;
                    }
                    
                    tmp = getElementsByClassName(td, "a", "element");
			        if (tmp.length>0) td.eltTitle = tmp[0];
			        
			        var hblock = getElementsByClassName(td, "div", "hoverBlock");
			        if (hblock.length>0) {td.hoverBlock = hblock[0];}
			        
			        if (td.hoverBlock) {
			            td.eltTitle.AssociatedTd = td;
			            td.eltTitle.onmouseover = hoverblock.over;
				        addEvent(td.eltTitle, "mousemove", hoverblock.move);
				        addEvent(td.eltTitle, "mouseout", hoverblock.close);
				        if (td.eltPictureLink) {
				            td.eltPictureLink.AssociatedTd = td;
				            
				         /* over on the product picture */
                         /*   td.eltPictureLink.onmouseover = hoverblock.over;
                            addEvent(td.eltPictureLink, "mousemove", hoverblock.move);
                            addEvent(td.eltPictureLink, "mouseout", hoverblock.close);
                         */
				        }
			        }
		        }
	        }
        }
    },
    over:function(e) {
        var td = this.AssociatedTd;
        popLayerMakeContent(e, "service", td.hoverBlock);
    },
    move:function(e) {
        popLayerShow(e);
    },
    close:function(e) {
        popLayerClose();
    }
}

var configurator={
    configuratorId:"configurateurAncre",
    scroll:function() {
        var conf = document.getElementById(configurator.configuratorId);
        if (!conf) return;
        var pos = findPos(conf);
        document.documentElement.scrollTop=pos[1]-10;
    }
}

var address={
	addrFind:function(){
        var home = document.getElementById("home"); if (!home) return;
		var lists = getElementsByClassName(home, 'UL', 'addrList');
		if (lists.length == 0){return;}
		for (var i = 0; i < lists.length; i++){
			var currentList = lists[i].childNodes;
			for (var j = 0; j < currentList.length; j++){
				var currentLI = currentList[j];
				if (currentLI.nodeName.toLowerCase()=='li') {
					currentLI.className += ' addrClosed';
					currentLI.onclick= function (e) {
						address.addrPli(this);
					}
					var aElt = ['input','label','a']
					for (var k=0; k < aElt.length; k++){
						var x = currentLI.getElementsByTagName(aElt[k]);
						for (var h = 0; h < x.length; h++) addEvent(x[h],'click',cancelClick, true);
					}
				}
			}
		}
	},
	addrPli:function(currentLI){
		if (currentLI.className.match(/\baddrOpen\b/)){
			currentLI.className = currentLI.className.replace('addrOpen', 'addrClosed');
		} else 	if (currentLI.className.match(/\baddrClosed\b/)){
			currentLI.className = currentLI.className.replace('addrClosed', 'addrOpen');
		}
	}
}

var GoToTabs={
    init:function() {
        var fichearticle = document.getElementById("fichearticle"); if (!fichearticle) return;
        var url = document.location.href;
        var ancre=url.split("#");

        if(ancre.length > 1)
            fnactab.showtab(ancre[1]);
   }
}


/*****
  menu deroulant - simulation du hover facon F6
*****/
function sousMenuAddHover(elm, position) {
  elm.style.behavior = " ";
  var menu = elm.getElementsByTagName("ul");
  if (menu.length>0) {
    elm.theUl = menu[0];
    ifrlayer.make(elm.theUl);
    elm.onmouseenter = function() {
      this.className+= ' currentJs';
      ifrlayer.make(elm.theUl);
    }
    elm.onmouseleave = function() {
      this.className = this.className.replace(/\b(right)?currentJs\b/,"");
      ifrlayer.hide(this.theUl);
    }
  }
}
function sousMenuActivation(obj,evt,boucle)
{
//  printDebug(evt.keyCode,0);
  function killSousMenu()
  {
    var allLi = obj.parentNode.getElementsByTagName("li");
    for (var i = 0; i < allLi.length; i++)
    {
      allLi[i].className = allLi[i].className.replace(/\b(right)?currentJs\b/,"");
      ifrlayer.hide(this.theUl);
    }
  }
// touche echap
  if (evt.keyCode==27)
  {
    killSousMenu();
  }
// fleche haut
  if (evt.keyCode==38)
  {
    if(!obj.id=="")
    {
      return;
    }
    else
    {
      killSousMenu();
    }
  }
// fleche droite
  if (evt.keyCode==39)
  {
    if(obj.id=="m_photo_camescope")
    {
      killSousMenu();
      document.getElementById("m_livres").getElementsByTagName("a")[0].focus();
      document.getElementById("m_livres").className+=" currentJs";
    }
    else
    {
      killSousMenu();
      var droiteMenu = (IS_IE_ALL) ? obj.nextSibling : obj.nextSibling.nextSibling;
//      var droiteMenu = obj.nextSibling.nextSibling;
      droiteMenu.getElementsByTagName("a")[0].focus();
      droiteMenu.className+=" currentJs";
    }
  }
// fleche bas
  if (evt.keyCode==40)
  {
    return;//non actif encore
    if(!obj.id=="")
    {
      var lesA = obj.parentNode.getElementsByTagName("a");
      for (var j=0;j > lesA.length; j++)
      {
        if(lesA[j])
        {
        }
      }
    }
    killSousMenu();
  }
// fleche gauche
  if (evt.keyCode==37)
  {
    if(obj.id=="m_livres")
    {
      killSousMenu();
      document.getElementById("m_photo_camescope").getElementsByTagName("a")[0].focus();
      document.getElementById("m_photo_camescope").className+=" currentJs";
      ifrlayer.make(elm.theUl);
    }
    else
    {
      killSousMenu();
      var gaucheMenu = (IS_IE_ALL) ? obj.previousSibling : obj.previousSibling.previousSibling;
//       var gaucheMenu = obj.previousSibling.previousSibling;
      gaucheMenu.getElementsByTagName("a")[0].focus();
      gaucheMenu.className+=" currentJs";
      ifrlayer.make(elm.theUl);
    }
  }


//        si fleche bas descend 40
//        si fleche haut monte 38
//        si fleche droite droitise 39
//        si fleche gauche gauchise 37
}






function initpage() {
    navDiaporama.init();
	fnactab.init();
	initProductPage();
	address.addrFind();
	openCloseGroup.init();
    GoToTabs.init();
    getAllBlocks();
    fixAligneProduits();
    fixMiseEnAvant();
    fixBigBlock();
}

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;
}
function ouvreMenuRia(obj, e)
{
	 if(!e) e=window.event;
	 if(e=="click")
	 {
		 var ident = obj.parentNode.id;
		 var divria = document.getElementById(ident).getElementsByTagName("DIV");
		 for(i=0;i<divria.length;i++)
		 {
			if (/\bcurrentRIA\b/.test(divria[i].className))
			{
				var chaine = " closed";
				divria[i].className = divria[i].className.replace(/\bcurrentRIA\b/, chaine);
			}
		}
		 // on ouvre
		 var chaine = " currentRIA";
		 obj.className = obj.className.replace(/\bclosed\b/, chaine);
	}
}

function addOver(elem, e)
{
	listP = elem.getElementsByTagName("TD");
	for(var i=0;i<listP.length;i++)
	{
		if(!/\bover\b/.test(listP[i].className))
		listP[i].className += " over";
	}
}
function dropOver(elem, e)
{
	listP = elem.getElementsByTagName("TD");
	for(var i=0;i<listP.length;i++)
	{
		if(/\bover\b/.test(listP[i].className))
		listP[i].className = listP[i].className.replace(/\bover\b/, "");
	}
}
function supprCol(classe)
{
	var motif = new RegExp(classe);
	// haut du tableau
	var rechTD = document.getElementById("upTree").getElementsByTagName("TH");
	for(var i=0;i<rechTD.length;i++)
	{
		if(motif.test(rechTD[i].className))
		{
			rechTD[i].parentNode.removeChild(rechTD[i]);
		}
	}
	// bas du tableau
	var rechTD2 = document.getElementById("subTree").getElementsByTagName("TD");
	for(var ii=0;ii<rechTD2.length;ii++)
	{
		if(motif.test(rechTD2[ii].className))
		{
			rechTD2[ii].parentNode.removeChild(rechTD2[ii]);
		}
	}
}

function showLongDesc(nb) {
   //on referme s'il y en a un d'ouvert
   var tr="FA_"+nb;
   var tableTds=document.getElementById("colHeaders").getElementsByTagName("TD");
   for(var i=0;i<tableTds.length;i++)
   {
	 if(/\bouvert\b/.test(tableTds[i].className)) { 
		opacity(tableTds[i],100,0,500,6,0);
		tableTds[i].className = tableTds[i].className.replace(/\bouvert\b/," ferme");
		var tr2 = tableTds[i].parentNode;
		var tr3 = tr2.previousSibling;
		while(tr3.nodeName != "TR")
		{
			tr3=tr3.previousSibling;
		}
		var aidi=tr3.id;
		var start=aidi.indexOf("_",0);
		var noumber = aidi.substring(start+1);
		var listA = document.getElementById(aidi).getElementsByTagName("A");
		for(var ii=0;ii<listA.length;ii++)
		{
		 if(listA[ii].getAttribute("title") == "Infos"){ listA[ii].onclick = function(){ showLongDesc(noumber);return false; }; }
		 if(/\bpreviewList\b/.test(listA[ii].className)){ listA[ii].onclick = function(){ showLongDesc(noumber);return false; }; }
		}
	 }
   }
   // on recherche le tr suivant l'id en appel
   var nextTr=document.getElementById(tr).nextSibling;
   while(nextTr.nodeName!="TR")
   {
   	 nextTr = nextTr.nextSibling;
   }
   var enfants=nextTr.childNodes;
   for(var x=0;x<enfants.length;x++)
   {
	if(/\bferme\b/.test(enfants[x].className)) {
		enfants[x].className = enfants[x].className.replace(/\bferme\b/," ouvert");
		enfants[x].style.opacity = 0;
		opacity(enfants[x],0,100,500,6,0);
	}
   }
   // Ã  l'ouverture du div, les liens du tr supÃ©rieur doivent renvoyer Ã  la FA, comme le lien infÃ©rieur
   var listA = document.getElementById(tr).getElementsByTagName("A");
   for(var ii=0;ii<listA.length;ii++)
   {
	if(listA[ii].getAttribute("title") == "Infos"){ listA[ii].onclick = function() { location.href = listA[ii].getAttribute("href") }; }
	if(/\bpreviewList\b/.test(listA[ii].className)){ listA[ii].onclick = function() { location.href = listA[ii].getAttribute("href") }; }
   }
}

var highLightCatalogTr={
	on : function(elem, e)
	{
		var list = document.getElementById(elem.id).getElementsByTagName("TD");
		for(var i=0;i<list.length;i++)
		{
		  list[i].style.backgroundColor = "#eeffd2";
		}
	},
	off : function(elem, e)
	{
		var list = document.getElementById(elem.id).getElementsByTagName("TD");
		for(var i=0;i<list.length;i++)
		{
		  list[i].style.backgroundColor = "#fff";
		}
	}
}
/* Fonctions Generiques */
/* 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(!e) e=window.event;
    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 + e.clientX + document.documentElement.scrollLeft + "px";
                GetElementId(global_element_name).style.top = 10 + e.clientY + document.documentElement.scrollTop + "px";
            } 
            else 
            {
                GetElementId(global_element_name).style.left = 20+ e.clientX + document.body.scrollLeft + "px";
                GetElementId(global_element_name).style.top = 10 + e.clientY + document.body.scrollTop + "px";
            }
        }
    }
}

/* fonction sur l'ouverture de la nav RIA sur la catÃ©gorie sÃ©lectionnÃ©e*/
var contextMenu={
	init:function()
	{
		var selectedElem=false;
		var divDl;
		if(document.getElementById('navigationRIA')) 
		{ 
			divDl = document.getElementById('navigationRIA').getElementsByTagName("DL");
			for(var i=0;i<divDl.length;i++)
			{
				var dlChilds = divDl[i].childNodes;
				for(var ii=0;ii<dlChilds.length;ii++)
				{
					if(dlChilds[ii].nodeType == 1)
					{
						if(dlChilds[ii].getAttribute("selected")=="true")
						{
							dlChilds[ii].className = "forced";
							if(!selectedElem && /\bclosed\b/.test(dlChilds[ii].parentNode.parentNode.className) && dlChilds[ii].nodeName == "DT" || dlChilds[ii].nodeName == "DD") // si je suis un dt ou un dd de premier niveau (tetiÃ¨re)
							{
								dlChilds[ii].parentNode.parentNode.className = dlChilds[ii].parentNode.parentNode.className.replace(/\bclosed\b/," currentRIA");
								//test pour les enlever els coins trop foncÃ©s si l'on est dans la premiÃ¨re liste de l'arbo
								var counter=0;
								if(!dlChilds[ii].parentNode.parentNode.previousSibling) return;
								var divBlock=dlChilds[ii].parentNode.parentNode.previousSibling;
								
								while(divBlock.nodeType != 1)
								{
									if(divBlock.previousSibling)
									{
										divBlock = divBlock.previousSibling;
										counter++;
									}
								}
								if(counter <= 2 && divBlock.className == "block")
								{
									divBlock.className = divBlock.className.replace(/block/,"blockOpen");
									selectedElem=true;
								}
							}
							if(!selectedElem && /\bclosed\b/.test(dlChilds[ii].parentNode.parentNode.parentNode.parentNode.className) && dlChilds[ii].nodeName == "DT" || dlChilds[ii].nodeName== "DD") // si je suis un dt ou un dd deuxiÃ¨me niveau
							{
								dlChilds[ii].parentNode.parentNode.parentNode.parentNode.className = dlChilds[ii].parentNode.parentNode.parentNode.parentNode.className.replace(/\bclosed\b/," currentRIA");
								//test pour les enlever els coins trop foncÃ©s si l'on est dans la premiÃ¨re liste de l'arbo
								var counter=0;
								if(dlChilds[ii].parentNode.parentNode.parentNode.parentNode.previousSibling) return;
								var divBlock=dlChilds[ii].parentNode.parentNode.parentNode.parentNode.previousSibling;
								
								while(divBlock.nodeType != 1)
								{
									if(divBlock.previousSibling)
									{
										divBlock = divBlock.previousSibling;
										counter++;
									}
								}
								if(counter <= 2 && divBlock.className == "block")
								{
									divBlock.className = divBlock.className.replace(/block/,"blockOpen");
									selectedElem=true;
								}
							}
						}
					}
				}
			}
		} else { return; }
	}
};
/*bouton et rollover sur blocs produits */
function swap(obj, status,root)
{
	var enfant = obj.firstChild;
	if(enfant.nodeName == "IMG")
	{
		if(status == "on" && enfant.className == "pagerGauche"){ enfant.src = root+"RIA/common/boutons/bt_prec_over.png"; }
		else if(status == "on" && enfant.className == "pagerDroite") { enfant.src = root+"RIA/common/boutons/bt_suiv_over.png"; }
		else if(status == "off" && enfant.className == "pagerGauche"){ enfant.src = root+"RIA/common/boutons/bt_prec.png"; }
		else if(status == "off" && enfant.className == "pagerDroite") { enfant.src = root+"RIA/common/boutons/bt_suiv.png"; }
		else { return; }
	}
}