<!--



/**
 *
 * Fonction qui transforme un pictogramme (utilisé lors des événements onmouveover
 * et onmouseout sur les pictos du menu du haut).
 *
 */
setPicto = function( me, picto )
{
	me.src = "/site/img/" + picto;

	if( picto.match( /^minipicto.*/ ) )
	{
		document.getElementById( "pictotitle" ).innerHTML = "&nbsp;";
		me.style.marginTop = "7";
	}
	else
	{
		document.getElementById( "pictotitle" ).innerHTML = me.title;
		me.style.marginTop = "0";
	}
}






/**
 *
 * Fonction de vérification des options avant mise au panier
 *
 * Pour chaque article dont on prend au moin une unité, les options doivent
 * être sélectionnées. La même vérification doit se passer côté serveur.
 *
 */ 
function buy()
{
	var parametres = document.achat.elements;
		
	var options = debug = "";
	var valide = true;

	//for( var i in parametres )
	for(var i=0; i< (parametres.length); i++) 
	{
		noeud = parametres[i];
		
		if( noeud.nodeName )
		{
			if( (noeud.nodeName == "SELECT") || ((noeud.nodeName == "INPUT")&&(noeud.name.match("option_qte"))) )
			{
	//			debug += noeud.nodeName + "=" + noeud.name + "=" + noeud.selectedIndex + "\t\t\t\ttype=" + noeud.type + "\n";

				if( (noeud.nodeName == "SELECT") && (noeud.name.match("qte") || noeud.name.match("option_qte")) )
				{
					// Chaque SELECT contient-il qq chose ?
					if( ( options != "" ) && ( noeud.options[ noeud.selectedIndex ].value != 0 ) )
					{
						valide = false;
					}
					options = "";
				}
				
				else
				{
					if( (noeud.nodeName == "INPUT") && (noeud.name.match("option_qte_spe")) )
					{
						// Chaque SELECT contient-il qq chose ?
						//alert("qtet input : "+noeud.checked);
						if( ( options != "" ) && ( noeud.checked == true ) )
						{
							valide = false;
						}
						options = "";
					}
					
					
					
					else
					{
						// Si une option n'est pas remplie
						if( noeud.options )
						{
							if( ( noeud.options[ noeud.selectedIndex ].value == "" ) )
							{
								options += "#";
							}
						}
					}
					
				}
				
			}
		}
//		if( noeud.type=="hidden" ) noeud.setAttribute( "type", "text" );
	}


	if( valide ) {	
		document.achat.submit();
		//alert("ok");
	} else {	
		alert( "Veuillez sélectionner les options nécessaires !" );	
	}
	
//	alert( debug );
		
}







/**
 *
 * Cette fonction javascript(appelée au survol du bouton calendrier [...] si ce bouton existe dans la page) 
 * permet d'appeler les fonctions d'affichage du calendrier selon les identifiants des chmaps de la date choisie
 *
 */
function calendrier(name_champsdate, name_champsbouton) {
	Calendar.setup(
		{	
			inputField : name_champsdate, // ID of the input field
			ifFormat : "%d/%m/%Y", // the date format
			button : name_champsbouton // ID of the button
		}
	);
}








/* JavaScript Document*/
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if(0<(p=n.indexOf("?"))&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function montre(id) {
	var d = document.getElementById('smenu'+id);
	var t = document.getElementById('tmenu'+id);
	for (var i = 1; i<=20; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
		if (document.getElementById('tmenu'+i)) {document.getElementById('tmenu'+i).className='menu_off';}
	}
	if (d) {d.style.display='block';}
	if (t) {t.className='menu_on';}
}

function ChangeMessage(message,champ)  {
	if(document.getElementById)
	    document.getElementById(champ).innerHTML = message;
}

function MM_openBrWindow(theURL,winName,features) { //v2.0 
 	window.winName = window.open(theURL,winName,features);
	window.winName.focus();
}

function zoom_menu(menu) {
		if (menu=='menu_int') {
			mini_menu_int.style.display='none';
			menu_int.style.display='block';
			mini_menu_ext.style.display='block';
			menu_ext.style.display='none';
		} else if (menu=='menu_ext') {
			mini_menu_int.style.display='block';
			menu_int.style.display='none';
			mini_menu_ext.style.display='none';
			menu_ext.style.display='block';		
		}		
	}

/****/
//Désérialisation Javascript
//Le script crée un objet (ici PhpArray2Js), qui transforme la chaîne en un tableau Javascript.
//La propriété tabjs de cet objet est notre tableau Javascript résultant.

//Pour appeler cette fonction voici comment faire
//		var tableau = new PhpArray2Js('<?php echo htmlspecialchars(serialize($tab_options), ENT_QUOTES); ?>');
//		var tab_converti = tableau.retour();


//Le script
function PhpArray2Js(tabphp_serialise) {
   this.php = corrigerChainePHP(tabphp_serialise);
   var dim = this.extraireDimTab();
   this.tabjs = this.transformer(dim);
}

PhpArray2Js.prototype.retour = function() {
        // retourne le tableau JS
        return this.tabjs;
}

PhpArray2Js.prototype.transformer = function(dim) {
   // méthode principale qui transforme la chaîne sérialisée en un tableau Javascript
        // dim est la dimension du tableau PHP
   var tab = new Array();
   // extrait un groupe de dim données (indice - valeur)
   for (var i=0;i<dim;i++) {
       // extrait un indice : numérique ou littéral
       var indice = this.extraireIndice();
       if (indice == -1) return;
       // extrait une valeur : tableau, null, booléen, numérique ou littéral
       var valeur = this.extraireValeur();
       if (valeur == -1) tab[indice] = undefined;
       else {
           switch (valeur[0]) {
               case "N" : tab[indice] = null; break;
               case "b" : tab[indice] = valeur[1] ? true : false; break;
               case "i" : tab[indice] = parseInt(valeur[1]); break;
               case "d" : tab[indice] = parseFloat(valeur[1]); break;
               case "s" : tab[indice] = valeur[1]; break;
               case "a" : tab[indice] = this.transformer(valeur[1]); break;
               default  : tab[indice] = undefined;
           }
       }
   }
   // en fin de groupe de données, supprime le "}" final
   this.php = this.php.substring(1);
   return tab;
}

PhpArray2Js.prototype.extraireDimTab = function() {
   // extrait la dimension N du tableau de "a:N:{"
   var reg = this.php.match(/^a:(\d+):\{/);
   if (reg != -1) {
       // on coupe le texte de l'entité détectée
       this.php = this.php.substring(reg[0].length);
       return reg[1];
   }
   else return -1;
}

PhpArray2Js.prototype.extraireIndice = function() {
   // extrait l'indice d'un tableau
   // cet indice peut être de la forme "i:\d+" ou "s:\d+:\"\w+\""
   var retour;
   var reg = this.php.match(/^((i):(\d+);|(s):\d+:"([^"]+)";)/);
   if (reg != -1) {
       // on coupe le texte de la chaîne détectée
       this.php = this.php.substring(reg[0].length);
       if (reg[2] == "i") retour = reg[3];
       else if (reg[4] == "s") retour = reg[5];
       else retour = -1;
   }
   else retour = -1;
   return retour;
}

PhpArray2Js.prototype.extraireValeur = function() {
   // extrait une valeur au début de this.php
   // cette valeur est de type "a:\d+:{" ou "N" ou "b:[01]" ou "i:\d+" ou "i:[\d\.]+" ou "s:\d+:\"\w+\""
   // on tente de détecter une valeur en tête de texte
   var retour;
   var reg = this.php.match(/^((N);|(b):([01]);|(i):(\d+);|(d):([\d\.]+);|(s):\d+:"([^"]*)";|(a):(\d+):\{)/);
   if (reg != -1) {
       // on coupe le texte de la valeur détectée
       this.php = this.php.substring(reg[0].length);
       // retour est un tableau contenant le type et la valeur de la donnée détectée dans la chaîne
       if (reg[2] == "N") retour = new Array("N", null); // valeur nulle
       else if (reg[3] == "b") retour = new Array("b", reg[4]); // booléen (true/false)
       else if (reg[5] == "i")  retour = new Array("i", reg[6]); // entier
       else if (reg[7] == "d")  retour = new Array("d", reg[8]); // entier double ou flottant
       else if (reg[9] == "s") retour = new Array("s", remplacerQuotes(reg[10])); // chaîne de caractères
       else if (reg[11] == "a") retour = new Array("a", reg[12]); // sous-tableau
       else retour = -1;
   }
   else retour = -1;
   return retour;
}

function corrigerChainePHP(chaine) {
   // remplace les &quot; en " uniquement autour des chaînes de caractères
   chaine = chaine.replace(/:&quot;/g, ':"');
   chaine = chaine.replace(/&quot;;/g, '";');
   return chaine;
} 

function remplacerQuotes(chaine) {
   // remplace les &quot; à l'intérieur des chaînes de caractères
   return chaine.replace(/&quot;/g, '\"');
}

//Affichage du tableau
//Pour afficher le tableau, voici une méthode et une fonction qui simule (en plus simple) la fonction PHP var_dump() :
PhpArray2Js.prototype.var_dump = function() {
   // affiche le tableau
   return var_dump(this.tabjs);
}

function var_dump(tab) {
   // fonction analogue à var_dump en PHP, mais plus simple
   if (arguments.length == 2) var indent = arguments[1] + "\t";
   else var indent = "\t";
   var i = 0;
   var elements = "";
   for (var elt in tab) {
       elements += (i ? ",\n " : " ") + indent + "[" + elt + "]:";
       switch (typeof tab[elt]) {
           case "string" : 
               elements += "\"" + tab[elt] + "\""; break;
           case "number" :
               elements += tab[elt]; break;
           case "object" :
               if (tab[elt] == null) elements += "*null*";
               else if (tab[elt]) elements += var_dump(tab[elt], indent); break;
           case "undefined" :
               elements += "*undefined*"; break;
           default : elements += tab[elt];
       }
       i++;
   }
   return "tableau(" + i + "){\n" + elements + "\n" + (arguments[1] ? arguments[1] : "") + "}";
}

//Pour appeler cette fonction voici comment faire
//SOIT :
//		document.write("<pre>" + tableau.var_dump() + "</pre>");
//SOIT : 
//	var tableau=new PhpArray2Js('<?php echo htmlspecialchars(serialize($tab),ENT_QUOTES); ?>');						
//	alert(tableau.var_dump());
//	var tableau_converti = tableau.retour();


/* *** */

//info bulle pour explication ecotaxe 
function montre_ecotaxe(id) {
var d = document.getElementById('infos_art_'+id);
	if (d) {d.style.display='block';}
}

function cache_ecotaxe(id) {
var d = document.getElementById('infos_art_'+id);
	if (d) {d.style.display='none';}
}





/**
 *functions de test de chaine, variables ...
 */
//----------------------------------------------------------------------//
// Fonction : 12/12/2006 par Flavie BRU									//
// Fonction qui verifie le format d'une date et si la date existe 	 	//
//----------------------------------------------------------------------//
function CheckDate(t) {
	var tab_date = t.split(/[/]/);	
	var j = parseInt(tab_date[0], 10);
    var m = parseInt(tab_date[1], 10);   
    var a = parseInt(tab_date[2], 10);

	/*verification format*/
	if (t.search(/^[0-9]{1,2}\/[01]?[0-9]\/[0-9]{4}( [0-2]?[0-9]:[0-5][0-9]:[0-5][0-9])*$/) == -1) {
		return false;
	}
	/*verification date valide*/
    else if ( j >= 0 && j <= 31 && m >= 0 && m <= 12 && a >= 1970 && a < 2100 ) {    
    	 var d2=new Date(a,m-1,j);
         j2=d2.getDate();
         m2=d2.getMonth()+1;
         a2=d2.getFullYear();
         if ( (j!=j2)||(m!=m2)||(a!=a2) ) { return false; } 
		 else { return true; }
	} else {
		return false;
	}
}

//juste pour laffichage texte
function CheckDate2(t) {
	var tab_date = t.split(/[/]/);	
	var j = parseInt(tab_date[0], 10);
    var m = parseInt(tab_date[1], 10);   
    var a = parseInt(tab_date[2], 10);

	/*verification format*/
	if (t.search(/^[0-9]{1,2}\/[01]?[0-9]\/[0-9]{4}( [0-2]?[0-9]:[0-5][0-9]:[0-5][0-9])*$/) == -1) {
		alert("Erreur, la date doit être du format jj/mm/aaaa !");return false;
	}
	/*verification date valide*/
    else if ( j >= 0 && j <= 31 && m >= 0 && m <= 12 && a >= 1970 && a < 2100 ) {    
    	 var d2=new Date(a,m-1,j);
         j2=d2.getDate();
         m2=d2.getMonth()+1;
         a2=d2.getFullYear();
         if ( (j!=j2)||(m!=m2)||(a!=a2) ) {alert("Erreur, la date saisie n'existe pas !"); return false; } 
		 else { return true; }
	} else {
		 alert("Erreur, la date saisie n'existe pas !"); return false;
	}
}

//fonction qui convertit une date passée vers date en javascript
//On suppose que la date entrée a été validée auparavant
//au format dd/mm/yyyy
function getDate_JS(strDate){	  
	day = strDate.substring(0,2);
	month = strDate.substring(3,5);
	year = strDate.substring(6,10);
	d = new Date(0);
	d.setDate(day);
	d.setMonth(month-1);
	d.setFullYear(year); 
	//alert("date retour : "+d); 
	return d;  
}


 //fonction qui permet de comparer deux dates javascript et retourne la difference entre les 2
//Retourne:
//(0 si date_1=date_2) ( 1 si date_1>date_2) (-1 si date_1<date_2)  => avec (diff==0?diff:diff/Math.abs(diff))
function compare_date(date_1, date_2){
	 difference = date_1.getTime()-date_2.getTime();
	return (difference==0?difference:difference/Math.abs(difference));
}



 
		
function verif_num(chaine) {
	var exp=new RegExp("^[0-9]*$","g");
	return exp.test(chaine);
}
		
		
		
		
		//Rechercher une occurence
		//retourne true si la chaine correspond au model, sinon rretourne false
		function occurence(chaine, sousch) {
			var exp=new RegExp(sousch,"g");
			if (exp.test(chaine)) {
				return true;
			} else {
				return false;
			}
		}
		
		
		
		//Cette fonction recherche dans une chaîne expr toutes les occurrences 
		//d'une sous-chaîne a et les remplace par une sous-chaîne b.
		//Ce script fonctionne pour toutes les versions de navigateurs au-delà de 3.
		function Remplace(expr,a,b) {
		  var i=0
		  while (i!=-1) {
			 i=expr.indexOf(a,i);
			 if (i>=0) {
				expr=expr.substring(0,i)+b+expr.substring(i+a.length);
				i+=b.length;
			 }
		  }
		  return expr;
		}



/**
 *  
 * Fonction JS qui ouvre une popup centree
 *   
 */
function openPopup(url, nom, width, height, scrollbars, rezisable, options) {
    
	if (!scrollbars || scrollbars != "yes") {
        var scrollbars = 'no';
    }
    if (!rezisable || rezisable != "yes") {
        var resizable = 'no';
    }
    if (!options) {
        var options = 'toolbar = no, location = no, directories = no, status = no, menubar = no, scrollbars = ' + scrollbars + ', rezisable = ' + resizable + ', dependant = yes';
    }
    var top = (screen.height - height)/2;
    var left = (screen.width - width)/2;
    
	// Ouvrir le popUp
  	neo=window.open(url,'',"top="+top+",left="+left+",width="+width+",height="+height+","+options);
	
  	// Forcer le focus sur un PopUp déjà ouvert
  	if(neo.window.focus){neo.window.focus();}
	
}






/**
 * Librairies de fonctions JS pour manipulations des boites HTML : SELECT et OPTION
 */
function _setMenuChangeHandler(menu_id, handler) {
	var menu = document.getElementById(menu_id);

	if( typeof(menu) == "object" )
	{
		menu.onchange = handler;
	}
}

function _getMenuCurValue(menu_id)
{
	var menu;

	if( typeof(menu_id) == "object" )
	{
		menu = menu_id;
	}
	else
	{
		menu = document.getElementById(menu_id);
	}

	return menu.options[menu.selectedIndex].value;
}



function emptyMenuItems (menu) {
   if (typeof(menu) != "object") {
       menu = document.getElementById(menu);
   }
   
   if (typeof(menu) == "object") 
   {
     var len_options = menu.options.length;
     for(var key = 0; key < len_options; key++) 
	 {
           menu.options[0] = null;
       
	 }
   }
}

/* Remplissage d'une liste deroulante
*  menu = identifiant du select considere
*  items =  tableau associatif
*           key = value de l'option
*           items[key] = texte de l'option
* first_value = valeur du premier element de la liste
* first_text = texte de la 1ere option*/ 


function setMenuItems(menu, items, first_value, first_text) {
   if (typeof(menu) != "object") {
       menu = document.getElementById(menu);
   }
   if (typeof(menu) == "object") {
       if (first_text) {
           menu.options[0] = new Option (first_text, first_value);
           var i = 1;
       }
       else {
           var i = 0;
       }
       for (var key in items) {
           opt = new Option (items[key], key);
           menu.options[i++] = opt;
       }
   }
}



/* Mise en place d'une liste deroulante
*  menu = identifiant du select considere
*  values =  tableau associatif
*           key = value de l'option
*           value[key] = texte de l'option
*  first_value = valeur du premier element de la liste
*  first_text = texte de la 1ere option*/ 


function fillInMenu(menu, values, first_value, first_text) {
   if (typeof(menu) != "object") {
       menu = document.getElementById(menu);
   }
   if (typeof(menu) == "object") {
       emptyMenuItems(menu);
       setMenuItems(menu, values, first_value, first_text);
   }
}
/****/


/** APPARENCE DU SITE ***/
/* fonction pour remplacer str1 par str2 dans strz */
function str_replace(str1,str2,strz)
{
	var i=0
	while (i!=-1)
	{
	i=strz.indexOf(str1,i);
	if (i>=0)
	{
	strz=strz.substring(0,i)+str2+strz.substring(i+str1.length);
	i+=str2.length;
	}
	}
	return strz
}

/* fonction permettant d'appliquer à interval régulier une css particulière au menu */
function blink_(modulo) {
	
	if (modulo == 1) {
		modulo2 = 0;
	} else {
		modulo2 = 1;
	}		
	//alert("modulo (j="+j+")="+modulo+" et modulo2="+modulo2);
				
	//if ((navigator.appName == "Microsoft Internet Explorer")||(navigator.appName == "opera")) {
		
		var spans = document.getElementsByTagName('a');
     	y = spans.length;
		for(var j=0; j<y; j++) {
        	
				
			var element = spans[j].getAttribute("name");
			if ((element == "misenavant_cat_off") || (element == "misenavant_cat_on")) {
				
				if (modulo2 == 1) {
					var test2 = str_replace("misenavant_cat_off","misenavant_cat_on",spans[j].className);
					spans[j].className = test2;
				} else {
					var test2 = str_replace("misenavant_cat_on","misenavant_cat_off",spans[j].className);
					spans[j].className = test2;
				}
				j++;				
				
				//alert ("fin modulo2 (j="+j+": "+modulo2);					
				clearInterval(c);
				c = setInterval("blink_("+modulo2+")", 1500); // Appel toutes les secondes
				
			}
		}
	//}		
}
c = setInterval("blink_(0)", 1000); // Appel toutes les secondes


/**
 * Fonction qui permet de retourner la valeur du bouton radio choisi
 */
function testerRadio(radio) {
	for (var i=0; i<radio.length;i++) {
		if (radio[i].checked) {
			return radio[i].value;
		}
	}
}

/**
 * Fonction qui permet de retourner l'indice de la ième valeur cochée pour un ensemble de boutons radio 
 */
function indiceBtnRadioCoche(radio) {
	for (var i=0; i<radio.length;i++) {
		if (radio[i].checked) {
			return i;
		}
	}
}