///////////////////////////////////////////////////////
//fonction permettant de rediriger la page vers url  //
///////////////////////////////////////////////////////
function redirige(url){
	document.location.href=url;
}

///////////////////////////////////////
//gestion des cookies//////////////////
///////////////////////////////////////

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 change_classe(formulaire,champ,etat) {
  eval("document." + formulaire + "." + champ).className = etat;
}

function changeto(e,highlightcolor){

	source=e.srcElement||e.target;
	
	if (source.tagName=="TD"||source.tagName=="TABLE")return;
	
	while(source.tagName!="TD")source=source.parentNode;
	
	if (source.className!=highlightcolor&&source.id!="ignore")source.className=highlightcolor;

}

function changeback(e,highlightcolor){

	source=e.srcElement||e.target;
	
	if (source.tagName=="TD"||source.tagName=="TABLE")return;
	
	while(source.tagName!="TD")source=source.parentNode;
	
	if (source.className=highlightcolor&&source.id!="ignore")source.className=highlightcolor;

}

//////////////////////////////////////////////////////////////////
//test de validité des données entrées dans le formulaire/////////
//////////////////////////////////////////////////////////////////

String.prototype.trim = function() {

 // skip leading and trailing whitespace
 // and return everything in between
  var x=this;
  x=x.replace("/^\s*(.*)/", "$1");
  x=x.replace("/(.*?)\s*$/", "$1");
  return x;
}


function emailValidation(entered, alertbox){
	with (entered){
		apos=value.indexOf("@"); 
		dotpos=value.lastIndexOf(".");
		lastpos=value.length-1;
		if (apos < 1 || dotpos-apos < 2 || lastpos-dotpos > 3 || lastpos-dotpos < 2 || lastpos>49) 
		{
			if (alertbox) {alert(alertbox);}
			return false;
		}else {
			return true;
		}
	} 
}

// Vérification d'un date
function isDate(d) {
  // Cette fonction permet de vérifier la validité d'une date au format jj/mm/aa ou jj/mm/aaaa
  // Par Romuald
  
  if (d == "") // si la variable est vide on retourne faux
    return false;
  
  e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
  
  if (!e.test(d)) // On teste l'expression régulière pour valider la forme de la date
    return false; // Si pas bon, retourne faux

  // On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier
  j = parseInt(d.split("/")[0], 10); // jour
  m = parseInt(d.split("/")[1], 10); // mois
  a = parseInt(d.split("/")[2], 10); // année

  // Si l'année n'est composée que de 2 chiffres on complète automatiquement
  if (a < 1000) {
    if (a < 89)  a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
    else a+=1900;
  }

  // Définition du dernier jour de février
  // Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400
  if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
  else fev = 28;

  // Nombre de jours pour chaque mois
  nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);

  // Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
  return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
}


// Vérifié qu'il s'agit bien d'une date
// entered : objet contenant la date
// alertbox : le mesage en cas d'erreur
function dateValidation(entered, alertbox){

	with (entered){
		if (isDate(entered.value) == false){
			if (alertbox!="") {alert(alertbox+"\n"+" Le format est (JJ/MM/AAAA) ou (JJ/MM/AA)");} 
			return false;
		}
		else {return true;}
	}	
}

// Vérifie que l'Objet donné est bien renseigné TRUE si c'est rempli
// entered : l'objet a vérifier
// alertbox : le message en cas d'erreur
function emptyValidation(entered, alertbox){
	with (entered){
		if (value==null || value==""){
			if (alertbox!="") {alert(alertbox);} 
			return false;
		}
		else {return true;}
	}
}


function listeValidation(entered, alertbox){
	with (entered){

		checkValue = "";
		isNumber = true;

  		MyArrayOfS=value.split(",");
		
		
		// On enleve tous les caractères non numériques
		for (i = 0; i<MyArrayOfS.length ; i = i+1){
			c = MyArrayOfS[i];
			if (isNaN(c) == true || c.trim() == ""){
				if (alertbox) {alert(alertbox);}
				return false;
			}
			
		}
		
		return true;
	}
}

// Vérifie que la valeur se trouve bien dans l'interval entre min et max
function digitValidation(entered, min, max, alertbox){
	with (entered){

		checkValue = "";
		// On enleve tous les caractères non numériques
		for (i = 0; i<value.length ; i = i+1){
			c = value.charAt(i);
			if ((isNaN(c) == false) && (c != " ")){
				checkValue = checkValue+value.charAt(i);
			}
			
		}
		
		if ((checkValue.length < min) || (checkValue.length > max) || isNaN(checkValue)){
			if (min != max){
				if (alertbox!="") {alert(alertbox+"\n"+"Le champ doit comporter entre "+min+" et "+max+" chiffres");} 
				return false;
			}
			else{
				if (alertbox!="") {alert(alertbox+"\n"+"Le champ doit comporter exactement "+min+" chiffres");} 
				return false;
			}
			
		}
		else {return true;}
	}
} 

function digitValidationStrict(entered, min, max, alertbox){
	with (entered){

		checkValue = "";
		// On enleve tous les caractères non numériques
		for (i = 0; i<value.length ; i = i+1){
			c = value.charAt(i);
			
			if ((isNaN(c) == false) && (c != " ")){
				checkValue = checkValue+value.charAt(i);
			}
			else {
				if (c != " "){
				 
					if (alertbox!="") {alert(alertbox+"\n"+"Le champ doit comporter entre "+min+" et "+max+" chiffres");} 
					return false;			
				}
			}
			
		}
		
		if ((checkValue.length < min) || (checkValue.length > max) || isNaN(checkValue)){
			if (min != max){
				if (alertbox!="") {alert(alertbox+"\n"+"Le champ doit comporter entre "+min+" et "+max+" chiffres");} 
				return false;
			}
			else{
				if (alertbox!="") {alert(alertbox+"\n"+"Le champ doit comporter exactement "+min+" chiffres");} 
				return false;
			}
			
		}
		else {return true;}
	}
} 

function digitValidationStrict2(entered, min, max){
	with (entered){

		checkValue = "";
		// On enleve tous les caractères non numériques
		for (i = 0; i<value.length ; i = i+1){
			c = value.charAt(i);
			
			if ((isNaN(c) == false) && (c != " ")){
				checkValue = checkValue+value.charAt(i);
			}
			else {
				if (c != " "){
				 
					alert("Le code postal doit comporter "+min+" ou "+max+" chiffres (departement ou ville)."); 
					return false;			
				}
			}
			
		}
		
		if (((checkValue.length != min) && (checkValue.length != max)) || isNaN(checkValue)){
			alert("Le code postal doit comporter "+min+" ou "+max+" chiffres (departement ou ville).");
			return false;
		}
		else {return true;}
	}
} 

// Fonction permettant de vérifier une valeur numérique
// ----------------------------------------------------
// - Si min != max : vérifie que le nombre est bien dans la fourchette donnée
// - Si la valeur contient un ',' il est remplacé par '.'
// - vérifcation qu'il ne s'agit pas d'un NaN, avec datatype non renseigné
// ----------------------------------------------------
// entered : l'OBJET contenant la valeur
// min : la valeur minimal
// max : la valeur maximale
// alertbox : est le texte retourné en cas d'erreur
// datatype : une vérification au niveau du type
// 
function valueValidation(entered, min, max, alertbox, datatype){
	
	
	
	with (entered){
	
		valeur = value.replace(/\,/g,".");
				
		if (isNaN(valeur) == true) {
					
				if (alertbox != "" && alertbox != null) {
					
						alert(alertbox);
						return false;
						
				} 
					
				return false;
		}
		checkvalue=parseFloat(valeur);
		if (datatype){
			
			smalldatatype=datatype.toLowerCase();
			
			if (smalldatatype.charAt(0)=="i") {
				checkvalue=parseInt(valeur);
			}
			
			if (min != max) {
				if ((parseFloat(min)==min && checkvalue < min) || (parseFloat(max)==max && checkvalue > max) || value!=checkvalue){
					if (alertbox!="" && alertbox != null) {
						alert(alertbox+"\n"+"Le champ doit être compris entre "+min+" et "+max);
					} 
					return false;
				}
				return true;
			
			}
			else return true;
			
			
		}
		else {return true;}
	}
	
}

////////////////////////////////////////////////////////////////
// fonction permettant d'interdire les caractères autre que 0-9 
////////////////////////////////////////////////////////////////
function valideInteger(obj,e){
	var code;
	if(document.all)code=e.keyCode;
	else code=e.which;
	
	//soit [0-9] ou autre touche F1 ... ou backspace
	if((code>=48 && code<=57) || code==0 || code==8 || code==9){
		return true;
	}else{
		return false;
	}
} 


//////////////////////////////////////////////////////////////////////////
// fonction permettant d'interdire les caractères autre que 0-9 + - et .
///////////////////////////////////////////////////////////////////////////
function valideFloat(obj,e){
	//var reg_point =  /(\d*)\.(\d*)/;
	//var reg_plus_moins =  /((\+)|(\-))(\d*)(\.(\d*)?)?/;
	var reg_float= /(\d*)\.(\d\d)/;
    var reg_point =  /(\d*)\.(\d?\d?)/;
    var reg_plus_moins =  /((\+)|(\-))(\d*)(\.(\d?\d?)?)?/;

    var is_safari=(navigator.vendor=="Apple Computer, Inc." && navigator.vendor!="Firefox");
    
	var code;
	if(document.all)code=e.keyCode;
	else code=e.which;
	//alert(code);
	//transformation de la , en .
	if(code==44 && !reg_point.test(obj.value)){
		
  		if(typeof document.selection != 'undefined') {
    		/* Insertion du code de formatage */
    		var range = document.selection.createRange();
    		var insText = range.text;
    		range.text = String.fromCharCode(46);
   		}	
		/* pour navigateurs plus récents basés sur Gecko*/
		else if(typeof obj.selectionStart != 'undefined')
		{
		    /* Insertion du code de formatage */
		    var start = obj.selectionStart;
		    var end = obj.selectionEnd;
		    var insText = obj.value.substring(start, end);
		    obj.value = obj.value.substr(0, start) + String.fromCharCode(46) + obj.value.substr(end);
		    /* Ajustement de la position du curseur */
		    var pos;
		    if (insText.length == 0) {
		      pos = start + 1;
		    } else {
		      pos = start + 1;
		    }
		    obj.selectionStart = pos;
		    obj.selectionEnd = pos;
  		}else if(is_safari){
  			
  			/*var gs=document.getSelection();
  			alert(gs);
  			var range = gs.createRange();
    		var insText = range.text;
    		range.text = String.fromCharCode(46);*/
  			obj.value=obj.value+String.fromCharCode(46);
  		}
  		return false;
	}
	
	if(code==63234 || code==63235){
		return true;
	}
	
	//soit [0-9] ou autre touche F1 ... ou backspace ou . ou tabulation ou + ou -	
	if( (code>=48 && code<=57) || code==0 || code==8 || code==9 || (code==46 && !reg_point.test(obj.value)) || ((code==43 ||code==45) && !reg_plus_moins.test(obj.value)) ){
		if(code==43 || code==45){
			obj.value=String.fromCharCode(code)+obj.value;
			return false;
		}
		if((code>=48 && code<=57) && reg_float.test(obj.value)){
			return false	
		}
		return true;
	}else{
		if(code==43 || code==45){
			obj.value=String.fromCharCode(code)+obj.value.substr(1);	
		}
		return false;
	}
}


//////////////////////////////////////////////////////////////////////////
// fonction permettant de changer la class css d'un élément
///////////////////////////////////////////////////////////////////////////
function swap_css(elt_name,nb_elt,class1,class2){
		
	for(i=1;i<=nb_elt;i++){
			
		element=document.getElementById(elt_name+i);
	
		if(element!=null){
			
			if(element.className==class1 || element.className==class2){
			
				if(element.className==class1){
		
					element.className=class2;
					
				}else{
					
					element.className=class1;	
				}
			
			}
			
		}
		
	}
	
	setTimeout('swap_css(\''+elt_name+'\',\''+nb_elt+'\',\''+class1+'\',\''+class2+'\')',200);
	
}

function chargement() {
	
}

function autoSave(a, form_name, button) {

	if (!confirm("Enregistrer les éléments de cette page ?")) {
		return true;	
	}

	form = document.getElementById(form_name);

	var objHTML = document.createElement("INPUT");
	objHTML.type = "hidden";
	objHTML.name = "__autoLoad";
	objHTML.value = a.href;
	objHTML.id = "__autoLoad";
	
	form.appendChild(objHTML);	
	
	if (button != null) {
	
		button_obj = document.getElementById(button);
		
		evt = document.createEvent("MouseEvents");
		evt.initEvent("click", false, false);
		var res = button_obj.dispatchEvent(evt);
		
	}  else {
	
		form.submit();
		
	}

	return false;

}

function swap_nouveaute(){
	
	}
	
	 function getAbsoluTop(myTarget){

	var top = 0;	

	while(myTarget!= document.body) { 
		{
			top += myTarget.offsetTop;
		}
		 myTarget = myTarget.offsetParent;   
	} 
	return top;
} 

//fonction retournant l'abscisse absolue d'un objet
function getAbsoluLeft(myTarget){

	var Left = 0;	

	while(myTarget!= document.body) {
		{
			Left += myTarget.offsetLeft;     	
		}
		 myTarget = myTarget.offsetParent;
	}   
	return Left;

} 

//fonction retournant l'ordonnée absolue d'un objet 
function getAbsoluTop(myTarget){

	var top = 0;	

	while(myTarget!= document.body) { 
		{
			top += myTarget.offsetTop;
		}
		 myTarget = myTarget.offsetParent;   
	} 
	return top;
} 

////////////////////////////////////////////////////////////////
// fonction permettant de vérifier un code postal
////////////////////////////////////////////////////////////////
function valideCP(value){
	var reg = new RegExp("^[0-9]{5}$");
	
	return reg.test(value);
	
}

// JavaScript Document
// Le reference est pour le placer a partir de quoi !
// Le reference est pour le placer a partir de quoi !
  function flottementMenu(id_name, posX, posY, positionHorizontal, positionVerticale, vitesse, reference, auto){
	var ns = (navigator.appName.indexOf("Netscape") != -1);
    var doc = document;
	
	function init(elt) {
		 
	var elemRef;	  

	if (reference != "") {
		elemRef = support(reference);
		elt.y = getAbsoluTop(elemRef)+posY;
		elt.x = getAbsoluLeft(elemRef)+posX;
	} else {
		
		elt.y = posY;
		elt.x = posX;	
	
	}

      //  Activer ca  ce qui suit pour positionner l'initalisation de l'emplacement du diff au debut
	  // Sinoni içl risque de parcourir tout l'écran ... au démarrage de la page
	  // Cela permet aussi de faire des effets de travelling sympa :-) si on est en 0,0
		
	  
	  if (positionHorizontal == "droite") {
		if (reference == "") {		
		   elt.x = ns?pageXOffset+innerWidth: document.body.scrollLeft+document.body.clientWidth;
		   elt.x -=posX + elt.offsetWidth;
		} else {
		   elt.x -=posX - elt.offsetWidth;
		}
	   }
	  if (positionHorizontal == "gauche") {
		if (reference != "") {		
		   elt.x -=posX + elemRef.offsetWidth;
		}
	   }
	  
	   if (positionVerticale=="bas") {
      		if (reference == "") {		
			   elt.y=ns?pageYOffset+innerHeight:document.body.scrollTop+document.body.clientHeight;
        	   elt.y -=posY + elt.offsetHeight;
			}else {
        	   elt.y -=posY + elt.offsetHeight;
			}	
       }

	  if (positionVerticale=="haut") {
      		if (reference != "") {		
        	   elt.y -=posY - elt.offsetHeight;
			}	
      }	  
	  
	}
	
    function support(id){
      var elt=doc.getElementById?doc.getElementById(id):
                              doc.all?doc.all[id]:doc.layers[id];
    
      elt.sP=function(x,y){
		  this.style.left=x+"px";
		  this.style.top=y+"px";
	  };
     
	  return elt;
    }
    window.stabilisation=function(id_name, posX, posY, positionVerticale, positionHorizontal, vitesse, reference, auto){
      var ftlObj = support(id_name);
      var elemRef;	  

	if (reference != "") {
		elemRef = support(reference);
	}



	  pY = 0;
 	  pX = 0;
	 
	 
	  if (positionVerticale=="haut"){
         if (reference == "") {
			 pY = ns ? pageYOffset : document.body.scrollTop;
		} else {
   		   pY=getAbsoluTop(elemRef) - ftlObj.offsetHeight;
		 }
		ftlObj.y += (pY + posY- ftlObj.y)/vitesse;
      }
      else{
		  if (positionVerticale=="bas"){
		  if (reference == "") {
		   pY=ns?pageYOffset+innerHeight: document.body.scrollTop+document.body.clientHeight;
		   pY-= ftlObj.offsetHeight;
		  } else {
   		   pY=getAbsoluTop(elemRef)+elemRef.offsetHeight;
		  }
	       ftlObj.y += (pY - posY- ftlObj.y)/vitesse;
		}
      }
	 
	  if (positionHorizontal=="gauche"){
        if (reference == "") {
			pX = ns ? pageXOffset : document.body.scrollLeft;
		} else {
            pX=getAbsoluLeft(elemRef)-elemRef.style.width - ftlObj.offsetWidth;
		}
      	ftlObj.x += (pX + posX - ftlObj.x)/vitesse;
      }
      else{
 		  if (positionHorizontal=="droite"){
		  	// A vérifier pour Moz car il semble que ce la merde !!
		     if (reference == "") {
		  	  pX=ns?pageXOffset+innerWidth: document.body.scrollLeft+document.body.clientWidth;
			  pX-=ftlObj.offsetWidth;
		    } else {
	      	   pX=getAbsoluLeft(elemRef)+elemRef.offsetWidth;
		    }
        	ftlObj.x += (pX - posX - ftlObj.x)/vitesse;
		}
      }
	 
      ftlObj.sP(ftlObj.x, ftlObj.y);
	  
      if (auto) setTimeout("stabilisation('"+id_name+"',"+posX+", "+posY+", '"+positionVerticale+"', '"+positionHorizontal+"', "+vitesse+", '"+reference+"' , "+auto+" )",0);
    }
	init(support(id_name));
    stabilisation(id_name, posX, posY, positionVerticale,positionHorizontal, vitesse, reference, auto);
	var elt=doc.getElementById?doc.getElementById(id_name):doc.all?doc.all[id_name]:doc.layers[id_name];
		
	elt.style.visibility = "visible";
 }
	
 function getAbsoluTop(myTarget){

	var top = 0;	

	while(myTarget!= document.body) { 
		{
			top += myTarget.offsetTop;
		}
		 myTarget = myTarget.offsetParent;   
	} 
	return top;
} 

//fonction retournant l'abscisse absolue d'un objet
function getAbsoluLeft(myTarget){

	var Left = 0;	

	while(myTarget!= document.body) {
		{
			Left += myTarget.offsetLeft;     	
		}
		 myTarget = myTarget.offsetParent;
	}   
	return Left;

} 
