//var mic1 = new Date();
/************
*  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] );
	}
}



/*  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;
}


/*  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";
		    }
		}
	}
}
/* generateElements();
	genere des coins sur les blocks contenant la classe "corners"
	Cette fonction n'est plus utilisee par simple choix de la fnac.
	Je laisse cette fonction mais commentee afin que d'autres puissent s'inspirer si besoin.
*/
/*
function generateElements() {
	var content = document.getElementById("content");
	var div = content.getElementsByTagName("div");
	var btm_shadow = document.createElement("b"); btm_shadow.className="btmshadow"; btm_shadow.appendChild(document.createElement("b"));
	var tl = document.createElement("b"); tl.className="tl";var tr = document.createElement("b"); tr.className="tr";
	var bl = document.createElement("b"); bl.className="bl";var br = document.createElement("b"); br.className="br";
	for (var i=div.length-1; i>=0; i--) {
		var x=div[i];
		if (!x.alreadyProcessed) {
			if (x.className.indexOf("corners")!=-1) {
				var divIsd = getDivInside(x);
				with (divIsd) {
					appendChild(tl.cloneNode(true));appendChild(tr.cloneNode(true));
					appendChild(bl.cloneNode(true));appendChild(br.cloneNode(true));
				}
			}
			if (x.className.indexOf("bottomshadow")!=-1) {
				var btm = x.appendChild(btm_shadow.cloneNode(true));
			}
			x.alreadyProcessed=true;
		}
	}
}
*/

/*  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 mic3 = new Date();
//var mic = mic3.getTime() - mic1.getTime(); // time in milliseconds
//printDebug(mic,0);
	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");
// desactive pour sebastien P. n aligne plus les ajout au panier (class links)
//				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 produit, 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 if (current.className == "prix") {
					current.style.marginTop = (maxOffset-current.offsetTop)+"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 ***/

/*****************
* 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 *****/


/*******************
* Toolbar fonctions pour la toolbar
*********************/
var fnacToolbar=null;
var fnacToolbarTimer=null;
var fnacStartScroll=true;
/*
	initToolbar :  initialise la toolbar et corrige le positionnement de la toolbar sous IE
	La toolbar est traitee (systeme d'onglets resize d'elements) seulement si la page dans laquelle on est n'est pas un template de toolbar.
	Un test est effectue sur le className du document.body
 */
function initToolbar() {
	fnacToolbar = document.getElementById("toolbar");
	if (!fnacToolbar) return;
	if (document.body.className.match(/\btoolbar\b/)) return
	//probleme avec IE, pour lequel on doit emuler un pseudo position:fixed, et aussi positionner une iframe pour passer par dessus les selects.
	if (IS_IE) { //probleme avec IE, pour lequel on doit emuler un pseudo position:fixed, et aussi positionner une iframe pour passer par dessus les selects.
		ifrlayer.make(fnacToolbar);
		fnacToolbar.sensZIndex=1;
		if (fnacToolbar.currentStyle.zIndex=="") fnacToolbar.style.zIndex = 100;
		addEvent(window, 'scroll', toolbarSetPos);
		addEvent(window, 'resize',
			function() {
				toolbarSetPos();
				if (document.documentElement.scrollHeight>document.body.offsetHeight) {
					if (document.body.style.position!="relative") document.body.style.position="relative";
				} else {
					if (document.body.style.position!="") document.body.style.position="";
				}
			}
		);
		toolbarSetPos();
	}
	initToolbarTabs();
	toolbarSetBodyPaddingBottom();
}
/*
	toolbarSetPos :
	Cette fonction corrige le manque du position:fixed sous IE5/6

 */
function toolbarSetPos() {
	clearTimeout(fnacToolbarTimer);
	if (fnacStartScroll) {
		ifrlayer.hide(fnacToolbar);
		fnacStartScroll=false;
	}
	fnacToolbar.sensZIndex=-fnacToolbar.sensZIndex;
	fnacToolbar.style.zIndex = parseInt(fnacToolbar.currentStyle.zIndex)+fnacToolbar.sensZIndex;
	fnacToolbarTimer=setTimeout(toolbarReplaceIfr,10);
}

function toolbarReplaceIfr() {
	ifrlayer.make(fnacToolbar);
	fnacStartScroll = true;
}

function toolbarSetBodyPaddingBottom() {
	document.body.style.paddingBottom = fnacToolbar.offsetHeight+"px";
	/* sous Opera, il y a un bug de rafraîchessement de la toolbar lorsque celle-ci se reduit. On corrige ce bug en forcant le navigateur a rafraiche le contenu principal */
	if (window.opera) {
		document.documentElement.scrollTop+=1;
		setTimeout(function() {document.documentElement.scrollTop-=1}, 1);
	}

}

function toggleToolbar() {
	if (fnacToolbar.className.match(/\bstate_close\b/)) { openToolbar(); return }
	if (fnacToolbar.className.match(/\bstate_open\b/)) { closeToolbar(); return }
}


function openToolbar() {
	var tb = fnacToolbar;
	tb.style.height="";
	var currentSize = tb.clientHeight;
	tb.className=tb.className.replace(/\bstate_close\b/g,'')+" state_open";
	var endSize = tb.clientHeight;
	tb.style.height = currentSize+"px";

	resize(tb, null, {start:currentSize, end:endSize}, (IE_W3C ? 1 : 3), (IE_W3C ? 15 : 10), (IS_IE ? function() {ifrlayer.move(tb,true);} : null), toolbarSetBodyPaddingBottom);
}

function closeToolbar() {
	var tb = fnacToolbar;
	var startHeight = tb.offsetHeight;
	tb.className = tb.className.replace(/\bstate_open\b/g,'')+" state_close";
	tb.style.height="";

	resize(tb, null, {start:startHeight, end:tb.offsetHeight}, (IE_W3C ? 1 : 3), -(IE_W3C ? 15 : 10), (IS_IE ? function() {ifrlayer.move(tb,true);} : null), toolbarSetBodyPaddingBottom);
}





/* onglets de la toolbar (fonctions) */
function initToolbarTabs() {
	var header;
	var tb = fnacToolbar;
	var div = tb.getElementsByTagName("div");
	for (var i=0; i<div.length; i++) {
		var x = div[i];
		if (x.className.match(/\bheader\b/)) header = x;
	}
	/* liens tabs */
	var a = header.getElementsByTagName("ul")[0].getElementsByTagName("a");
	for (var i=0; i<a.length; i++) {
		var x = a[i];
		x.onclick = function() {
			toolbarSetCurrentTab(this,true);
			return false;
		}
		if (x.parentNode.className.match(/\bcurrent\b/)) {
			toolbarSetCurrentTab(x,false);
		}
	}
}

function toolbarSetCurrentTab(elm, mustOpen) {
	var ul = elm.parentNode.parentNode;
	var contentId = elm.parentNode.id.replace(/\btb_/,'tbc_');
	var li = ul.getElementsByTagName('li');
	for (var i=0; i<li.length; i++) {
		var x = li[i];
		x.className = x.className.replace(/\bcurrent\b/g, '');
	}
	elm.parentNode.className+=' current';
	var content = document.getElementById('toolbar_content');

	for (var i=0; i<content.childNodes.length; i++) {
		var x = content.childNodes[i];
		if (x.nodeType==1 && x.className.match(/\btoolbar_tabs_content\b/)) {
			x.className = x.className.replace(/\bcurrent\b/g,'');
		}
	}
	var currentTab = document.getElementById(contentId);
	if (currentTab) {
		document.getElementById(contentId).className+=' current';
		checkScrollBlocks(contentId);
	}
	if (mustOpen) {
		openToolbar();
	}
}
/* 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() {
	initToolbar(); //initialisation de la toolbar seulement pour IE 5 et 6
	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)
}
/****
  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.color="#CCC";
    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="100px";
    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, 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, 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)
        liInsertById.className="ajouterGhost";
        opacity(liInsertById, 0, 100, 500, 5);
      }
      else
      {
        changeOpac(0,liInsertById)
        liInsertById.className="";
        opacity(liInsertById, 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,nouveauLi)
        nouveauLi.innerHTML=getLabel.innerHTML;
        nouveauLi.className="ajouterGhost";//on le display block car en none en css
        opacity(nouveauLi, 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,nouveauUlli)
        nouveauUlli.innerHTML=getLabel.innerHTML;
        nouveauUlli.className="ajouterGhost"; //on le display block car en none en css
        opacity(nouveauUlli, 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 = "<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; margin-bottom:0px; background-color: #fff; color: #000;'><strong>" + listArt + "</strong></p><span class='toggle'><a href='/' onclick='toggle(1); return false' title='Masquer l explication'>Fermer</a></span>";
			} 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 = "<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; margin-bottom:0px; background-color: #fff; color: #000;'><strong>" + listArt + "</strong></p><span class='toggle'><a href='/' onclick='toggle(1); return false' title='Masquer l explication'>Fermer</a></span>";
			} 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 popinMod(id, posleft, postop) {
    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);}
      elem.style.zIndex = 999;
      elem.style.position = "absolute";
      elem.style.left = posleft+"px";
      elem.style.top = postop+"px";
     //alert(screen.availHeight+" "+hPos);
   }
}

/*function EcrireCookie(nom, valeur)
{
  var argv=EcrireCookie.arguments;
  var argc=EcrireCookie.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=nom+"="+escape(valeur)+
  ((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
  ((path==null) ? "" : ("; path="+path))+
  ((domain==null) ? "" : ("; domain="+domain))+
  ((secure==true) ? "; secure" : "");
}
function getCookieVal(offset)
{
  var endstr=document.cookie.indexOf (";", offset);
  if (endstr==-1) endstr=document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}
function LireCookie(nom)
{
  var arg=nom+"=";
  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 EffaceCookie(nom)
{
  date=new Date;
  date.setFullYear(date.getFullYear()-1);
  EcrireCookie(nom,null,date);
}*/
function SetCookie(name, value, days) {
     var expire = new Date ();
     expire.setTime (expire.getTime() + (24 * 60 * 60 * 1000) * days);
     document.cookie = name + "=" + escape(value) + "; expires=" +expire.toGMTString();
}
function GetCookie(name) {
//     var agt=navigator.userAgent.toLowerCase();
//     var ck_is_opera = (agt.indexOf("opera") != -1);
//     var ck_is_mac = (agt.indexOf("mac")!=-1);
//     var ck_is_konq = (agt.indexOf('konqueror') != -1);
//     var ck_is_safari = ((agt.indexOf('safari')!=-1)
// 		&&(agt.indexOf('mac')!=-1))?true:false;
//     var ck_is_khtml  = (ck_is_safari || ck_is_konq);
//     var ck_is_gecko = ((!ck_is_khtml)&&(navigator.product)
// 		&&(navigator.product.toLowerCase()=="gecko"))?true:false;
//     var ck_is_fb = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
//                  (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
//                  (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
//                  (ck_is_gecko) && (navigator.vendor=="Firebird"));
//     var ck_is_fx = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
//                  (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
//                  (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
//                  (ck_is_gecko) && ((navigator.vendor=="Firefox")||(agt.indexOf('firefox')!=-1)));
//     var ck_is_moz   = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
//                     (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
//                     (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
//                     (ck_is_gecko) && (!ck_is_fb) && (!ck_is_fx) &&
//                     ((navigator.vendor=="")||(navigator.vendor=="Mozilla")||(navigator.vendor=="Debian")));
//     var ck_is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
//                 && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
//                 && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)
//                 && (!ck_is_khtml) && (!(ck_is_moz)) && (!ck_is_fb) && (!ck_is_fx));
//     var ck_is_ie   = ((appVer.indexOf('msie') != -1) && (!ck_is_opera) && (!ck_is_khtml));


     var startIndex = document.cookie.indexOf(name);
     if (startIndex != -1) {
          var endIndex = document.cookie.indexOf(";", startIndex);
          if (endIndex == -1) endIndex = document.cookie.length;
          return unescape(document.cookie.substring(startIndex+name.length+1, endIndex));
     }
     else {
          return null;
     }
}
function DeleteCookie(name) {
     var expire = new Date ();
     expire.setTime (expire.getTime() - (24 * 60 * 60 * 1000));
     document.cookie = name + "=; expires=" + expire.toGMTString();
}
