﻿/************
*  Fichier Javascript commun fnac.com
*
*
*****************/

/**************
* Variables globales
**************/
var IS_IE = document.all && window.print && !window.opera && /MSIE [56]/.test(navigator.userAgent);
var IS_IE7 = document.all && window.print && !window.opera && /MSIE [78]/.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.
else if (IS_IE7)
	document.documentElement.className+=" IS_IE7"; //cette classe permet d'utiliser des hacks CSS/JS seulement pour IE7


/********************
* 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 getElement(id) {
		var element_style=null
		if (document.getElementById) {
		  element_style=document.getElementById(id);
		} else if (document.all) {
		  element_style=document.all[id];
		} else if (document.layers) {
		  element_style=document.layers[id];
		}
		return element_style;
    }
    
/*  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 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) {
	try{
	elm.style.right=(parseInt(elm.currentStyle.right)-(elm.parentNode.offsetWidth%2))+"px";
	}
	catch(err)
	{
	    err.toString();
	}
}

/*  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;
	}
	try{
	elm.style.bottom=(parseInt(elm.currentStyle.bottom)-(elm.parentNode.offsetHeight%2))+"px"; // prevent bug pour IE 6 
	}
	catch(err)
	{
	    
	}
}

/*  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("h2");
			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 market = []; // MP!
		var dl = []; // liens télécharger
		var footer = [];
		var h3 = line.getElementsByTagName("h2");
		var dd = line.getElementsByTagName("dd");
		var mp = line.getElementsByTagName("div"); // MP!
		//var ul = line.getElementsByTagName("ul");
		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);
		}
		for (var s=0; s<mp.length; s++) {
			var p=mp[s];
			if (p.className.match(/\bMarketPlaceOffers\b/)) market.push(p); // MP!
			if (p.className.match(/\bbloc-telecharger\b/)) dl.push(p);
			if (p.className.match(/\bblk_footer\b/)) footer.push(p);
		}
		/*for (var d=0; d<ul.length; d++) {
			var o=ul[d];
			if (o.className.match(/\blinks\b/)) footer.push(o);
		}*/

		/* on traite les img a part

		/* aligner les elements */
		var arrOfArrElements = [h3, imgs, resume, prix, links, market, dl, footer];//attention a l'ordre
		var maxImgHeight = 0;
		var maxH3Height = 0;
		var maxDivHeight = 0; // MP !
		var maxDivHght = 0;
		var maxUlHeight = 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; }
				}
				if (current.className == "MarketPlaceOffers") { // MP!
					if (current.offsetHeight>=maxDivHeight) { maxDivHeight = current.offsetHeight; }
				}
				if (current.className == "bloc-telecharger") {
					if (current.offsetHeight>=maxDivHght) { maxDivHght = current.offsetHeight; }
				}
				if (current.className.match(/\bblk_footer\b/) && current.nodeName == "DIV") {
				    var fSet = current.offsetHeight - (intStyle(current, "padding-top")+intStyle(current, "padding-bottom"));
					if (fSet>=maxUlHeight) { maxUlHeight = fSet; }
				}
			}
			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.match(/\bprix\b/)) {
					current.style.marginTop = (maxOffset-current.offsetTop)+"px";
				}
				else if (current.className == "MarketPlaceOffers") { // MP !
					current.style.height = maxDivHeight+"px";
				}
				else if (current.className == "bloc-telecharger") {
				    if(maxDivHght > 30)
				        current.style.height = maxDivHght+"px";
				}
				else if (current.className.match(/\bblk_footer\b/) && current.nodeName == "DIV") {
					//current.style.paddingBottom = (maxUlHeight-current.offsetHeight)+"px";
					current.style.height = maxUlHeight+"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("h2");
		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();
}

/******
  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 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="200px";
    nouveauDiv.style.padding="5px";
    nouveauDiv.innerHTML="<pre>"+debug+"</pre>";
    monId.parentNode.insertBefore(nouveauDiv, monId);//on insert l'objet avant la balise appele
  }
}

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 getCookieVal(offset) 
 {
	
	
	var endstr=document.cookie.indexOf (";", offset);
	if (endstr==-1)
      		endstr=document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

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" : "");
}

/* 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);
	}
}

/* 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') {
				    if (currentLI.className.indexOf('addrClosed') < 0
				        && currentLI.className.indexOf('addrOpen') < 0)
					    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');
		}
	}
}

// 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]);
		}
	}
}

/* fonction sur l'ouverture de la nav RIA sur la catÃ©gorie sÃ©lectionnÃ©e*/
var menuElem = false;
var contextMenu={
	init:function()
	{
		//var selectedElem = false;
		var preDivDl;
		var divDl;
		if(document.getElementById('navigationRIA')) 
		{ 
			preDivDl = document.getElementById('navigationRIA');
			divDl = preDivDl.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(!window.menuElem && /\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++;
									} else {return ;}
								}
								if(counter <= 2 && divBlock.className == "block")
								{
									divBlock.className = divBlock.className.replace(/block/,"blockOpen");
									
									
								}
								window.menuElem = true;
								
							}
							if(!window.menuElem && /\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;
										if(typeof(divBlock)!= "undefined" || divBlock == null) return;
										counter++;
									//}
								}
								if(counter <= 2 && divBlock.className == "block")
								{
									divBlock.className = divBlock.className.replace(/block/,"blockOpen");
									
									
								}
								window.menuElem = true;
								break;
							}
						}
					}
				}
			}
			if(!window.menuElem) { contextMenu.homePage(); };
		} else { return; }
	},
	homePage:function(){
		//var menu = document.getElementById('navigationRIA');
		//if(menu)
		//{
		//	var firstDiv = menu.getElementsByTagName("DIV")[0];
		//	var secondDiv = menu.getElementsByTagName("DIV")[1];
		//	firstDiv.className = firstDiv.className.replace(/\bblock\b/,"blockOpen");
		//	secondDiv.className = secondDiv.className.replace(/\bclosed\b/,"currentRIA");
		//}
	}
};
/*bouton et rollover sur blocs produits shi */
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; }
	}
}

function URLEncodeSearch(chaine)
{
     // The Javascript escape and unescape functions do not correspond
     // with what browsers actually do...
     var SAFECHARS = "0123456789" + // Numeric
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
     "abcdefghijklmnopqrstuvwxyz" +
     "-_.!~'()"; // RFC2396 Mark characters
     var HEX = "0123456789ABCDEF";

     var plaintext = chaine;
     if (plaintext!=null)
     {
        plaintext=plaintext.replace("?","+").replace(":","+").replace("&","+").replace("#","+").replace("*","+").replace("%","+");
     }
     var encoded = "";
     for (var i = 0; i < plaintext.length; i++ ) 
     {
         var ch = plaintext.charAt(i);
         if (ch == " ") 
         {
            encoded += "+"; // x-www-urlencoded, rather than %20
         } 
         else if (SAFECHARS.indexOf(ch) != -1) 
         {
            encoded += ch;
         } 
         else 
         {
            
             var charCode = ch.charCodeAt(0);
             if (charCode > 255) 
             {
                //Unicode Character cannot be encoded using standard URL encoding.(URL encoding only supports 8-bit characters.)
                //A space (+) will be substituted.
                encoded += "+";
             } 
             else 
             {
                 encoded += "%";
                 encoded += HEX.charAt((charCode >> 4) & 0xF);
                 encoded += HEX.charAt(charCode & 0xF);
             }
         }
    } // for
     return encoded;
}

$(function(){
    if(clickable = document.getElementById("SpecialSale"))
    {
        if(clickable)
        {
            clickable.style.cursor = "pointer";           
            clickable.onclick = function(){
                viewEnabled = true;
                enableFilterView(viewEnabled);
                lz.embed.setCanvasAttribute("enableFilterViewInLz", viewEnabled);
            }
        }
    }
});

$(document).ready(function(){
    if($("img.rHvr").length > 0){
        $("img.rHvr").hover(function(){
	        $(this).css("opacity",0.5);
        },function(){
	        $(this).css("opacity",1);
        });

        /*Plug pour les input hover */
        $("input[type='image'].rHvr").hover(function(){
            //alert("ok");
            $(this).css("opacity","0.5");
        },function(){
            $(this).css("opacity","1");
        });
    }
    initProductPage();
	address.addrFind();
});


/* Fonction rollover */
$(function rollHover() {
    // la nécessité d'avoir une variable globale rhChemin définie dans les pages
    if (typeof(rhChemin) == "undefined" || rhChemin == null) {
        return;
    }
    var construction = {
        process: null,
        path: function(file) {
            var indice = file.lastIndexOf("/");
            var fichier = file.substring(indice + 1);
            if (/on/.test(fichier)) {
                process = fichier.replace(/on/, "off");
                return process;
            } else if (/off/.test(fichier)) {
                process = fichier.replace(/off/, "on");
                return process;
            } else {
                return false;
            }
        }
    };
    $("a.rHover").mouseover(function() {
        var fichier = $(this).children("img").attr("src");
        if (f = construction.path(fichier)) {
            $(this).children("img").attr("src", rhChemin + f);
        }

    });
    $("a.rHover").mouseout(function() {
        var fichier = $(this).children("img").attr("src");
        if (f = construction.path(fichier)) {
            $(this).children("img").attr("src", rhChemin + f);
        }
    });
});
function highLightCatalogTr(elem, e)
{
    var list = document.getElementById('list').getElementsByTagName("TD");
	for(var i=0;i<list.length;i++)
	{ 
    	if(/\bcatalogOver\b/.test(list[i].className)) {
		    list[i].className = list[i].className.replace(/catalogOver/,'');
		    list[i].style.backgroundColor = "#fff";
		    if(/\bsort\b/.test(list[i].className))
		        list[i].style.backgroundColor = "#EBEBEB";
		}
	}
	listP = elem.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("TD");
	for(var i=0;i<listP.length;i++)
	{
		if(!/\bover\b/.test(listP[i].className)) {
		    listP[i].className += " catalogOver";
		    listP[i].style.backgroundColor = "#fffbf0";
		    if(/\bsort\b/.test(list[i].className))
		        listP[i].style.backgroundColor = "#e7e7d6";
		}
	}
}


function OpenNewWindow(url, title) {
    window.open(url, title, "toolbar=yes,status=no,directories=no,menubar=yes,location=no,scrollbars=yes,resizable=yes"); 
}

/* 
* POPIN (import du site ASP pour pages mon compte :)
* Creation de popin en récuperant un élément HTML déjà écrit 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);
    }
}
// gestion des z-index pour les mess d'alertes de mon compte
$(function() {
    if ($("div.alert", "div#content.myAccount").length > 1) {
        $("div.alert").mouseenter(function() {
            $("div.alert").css({ "z-index": 10, "opacity": 0.2 });
            $(this).css({ "z-index": 11, "opacity": 1 });
            var i = $(this);

        }).mouseleave(function() { $("div.alert").css({ "z-index": 10, "opacity": 1 }); });
    }
});
function blocHref(bloc, context) {
    $(""+bloc+"", ""+context+"").mouseenter(function() { $(this).css("cursor", "pointer") }).click(function(e) { e.preventDefault(); window.location.href = $(this).find("a").eq(0).attr("href") }); 
}
