function Verifchampvalide(frm,chmps){

	vl=document.forms[frm].elements[chmps].value;
	date=VerifDate(vl,"/");
	if(date==0){
		document.forms[frm].elements[chmps].focus();	
		return false;
	}else{
		window.document.forms[frm].submit(); 
	}

}

//***  VerifDate *************************************************************************************
//***
//*** Permet de vérifier le format JJ/MM/AAAA saisi et la validité de la date.
//***  Le séparateur est défini dans la variable separateur
//***
//*** Parametres:
//***				date	 :	date saisie
//*** 				sep      :  séparateur utilisé dans le format de date saisi
//*** Retour:
//***				ok

function VerifDate(d,sep) {

	//var amin=1999; // année mini
	//var amax=2005; // année maxi
	
	var j=(d.substring(0,2));
	var m=(d.substring(3,5));
	var a=(d.substring(6));
	var ok=1;
		
	if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
		alert("Le jour n'est pas correct. Le format de date est JJ/MM/AAAA"); 
	 	ok=0;
	}
	if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
		alert("Le mois n'est pas correct. Le format de date est JJ/MM/AAAA"); 
		ok=0;
	}
	//if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) {
	//   alert("L'année n'est pas correcte."); ok=0;
	//}
	
	if ( ((d.substring(2,3)!=sep)||(d.substring(5,6)!=sep)) && (ok==1) ) {
		alert("Les séparateurs doivent être des "+sep+". Le format de date est JJ/MM/AAAA"); 
 		ok=0;
	}
	if (ok==1) {
		var d2=new Date(a,m-1,j);
		j2=d2.getDate();
		m2=d2.getMonth()+1;
		a2=d2.getFullYear();
		//if (a2<=2000) {a2=1900+a2}
		if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
			alert("La date "+d+" n'existe pas !");
			ok=0;
			alert ("la date est OK !");
		}
	}
	return ok;
}

//***  VerifHeure ***************************************************************************************
//***
//*** Permet de vérifier le format HH:MM saisi et la validité de l'heure.
//***  Le séparateur est défini dans la variable separateur
//***
//*** Parametres:
//***					hr			 :	date saisie
//*** 				sep      :  séparateur utilisé dans le format de date saisi
//*** Retour:
//***				ok
//***
function VerifHeure(hr,sep) {

	
	var h=(hr.substring(0,2));
	var m=(hr.substring(3,5));

	var ok=1;
		
//	if ( ((isNaN(h))||(h<1)||(h>23)) && (ok==1) ) {
	if ( ((isNaN(h))||(h>23)) && (ok==1) ) {
		alert("L'heure n'est pas correcte. Le format d'heure est HH:MM"); 
	 	ok=0;
	}
//	if ( ((isNaN(m))||(m<1)||(m>59)) && (ok==1) ) {
	if ( ((isNaN(m))||(m>59)) && (ok==1) ) {
		alert("Les minutes ne sont pas correctes. Le format de l'heure est HH:MM"); 
		ok=0;
	}
	
	if ( ((hr.substring(2,3)!=sep)) && (ok==1) ) {
		alert("Le séparateur doit être un "+sep+". Le format de l'heure est HH:MM"); 
 		ok=0;
	}

	return ok;

}
   
//*** VerifDateNaiss ********************************************************************************
//***
//*** Permet de vérifier le format JJ/MM/AAAA saisi et la validité de la date de la date de naissance saisie
//*** afin de pouvoir afficher le formulaire adh convenant à la personne en fonction de son âge (enfant / //*** adulte)
//*** Parametres:
//***				frm	 :	formulaire en cours
//*** Retour:
//***				néant
function VerifDateNaiss(frm){
	vl=document.forms[frm].elements['datenaiss'].value;
	date=VerifDate(vl,"/");
	if(date==0){
		//document.forms[frm].elements['datenaiss'].value="";
		document.forms[frm].elements['datenaiss'].focus();
	}
}

function VerifMail(courriel){
 
   var place = courriel.indexOf("@",1); 
   var point = courriel.indexOf(".",place+1); 
   if ((place > -1)&&(courriel.length >2)&&(point > 1))
   { 
      return true; 
   }else{ 
       return false; 
   } 

}

//*** isAlpha ***************************************************************************************
//***
//*** Verifie si le caractere envoye est une lettre (majuscule ou minuscule)
//***
//*** Parametres:
//***						ch	:	Caractere à tester
//*** Retour:
//***						ture si c'est une lettre false sinon
//***
/******* fonction de philippe *******************
function isAlpha(ch){

	as = parseInt(ch.charCodeAt(0),10);
	if((as>=65 && c<=90) || (as>=97 && as<=122)){
		return true;
	}else{
		return false;
	}
}*/
//******* fonction de Anna *******************
function isAlpha(ch){

	as = parseInt(ch.charCodeAt(0),10);
	if( (as>=65 && c<=90) || (as>=97 && as<=122) || (as==32) || (as==39) || (as==44)){
	//if((as>=65 && c<=90) || (as>=97 && as<=122)||(as==32)||(as==39)){ // ici pb avec les ' pour l'insertion
		return true;
	}else{
		return false;
	}
}

function isAlpha2(ch){

	as = parseInt(ch.charCodeAt(0),10);
	if( as>=32 && as<=255) {

		return true;
	}else{
		return false;
	}
}

//*** ValidateField *********************************************************************************
//***
//*** Valide les données d'un champ en fonction du format attendu
//***
//*** Parametres:
//***							frm		:	Formulaire contenant le champ à verifier
//***							field : Champ à valider
//***							fma		: Format attendu pour ce champ
//***											#DATE# pour valider un champ Date 00/00/0000
//***											Z pour une lettre obligatoire
//***											z pour une lettre non obligatoire
//***											0	pour un chiffre obligatoire
//***											
//*** Retour:
//***							true pour un format valide ou false sinon
//***
function ValidateField(frm, field, fma){

	//alert("Formulaire : "+frm+" - Champ : "+field+" - "+" Format : "+fma);
	if(fma != ""){

		//*** un format est bien specifie ***
		//alert(fma + " pour " + document.forms[frm].elements[field].value);
		//alert(fma);
		if(fma.charAt(0) == "U"){
			//*** convertir en Majuscules ***
			//alert("convertion majuscules");
			document.forms[frm].elements[field].value = document.forms[frm].elements[field].value.toUpperCase();
			fma = fma.substr(1,fma.length);
		}
		if(fma.charAt(0) == "L"){
			//*** convertir en Minuscules ***
			//alert("convertion minuscules");
			document.forms[frm].elements[field].value = document.forms[frm].elements[field].value.toLowerCase();
			fma = fma.substr(1,fma.length);
		}
		//alert(fma);
		//*** la valeur est elle obligatoire ? ***
		if(fma.charAt(0) == "#"){
			oblig = true;	// valeur obligatoire pour ce champ
		}else{
			oblig = false;	// valeur optionnelle pour ce champ
		}
		fma = fma.substring(1, fma.length);
		vl = document.forms[frm].elements[field].value;
		switch(fma){
		
			case "MONETAIRE":	//**** gestion des formats monetaire ***

												if(vl==""){
													if(oblig){
														document.forms[frm].elements[field].focus();
														return false;
													}
													return true;
												}else{
													for(c=0; c<vl.length;c++){
														cr = vl.charAt(c);
														
														//alert(cr + "  ==>  ALPHA : " + isAlpha(cr) + " NUM : " + !isNaN(cr));											
													
														if(cr == ','){
														//*** change les ',' en '.' pour les valeurs  
														//*** décimal dans la base mySQL ***			  
															nv = vl.substr(0,c) + "." + vl.substr(c+1, vl.length-(c+1));															
															document.forms[frm].elements[field].value = nv;	
														}
														//avt if(!isAlpha(cr) && isNaN(cr) && cr != '.' ){
														if(!isAlpha(cr) && isNaN(cr) && cr != '.' && cr != '-' ){// modifié le 040105 
															document.forms[frm].elements[field].focus();
															return false;
														}
													}
												}
												return true;
			
												break;
												
			case "DATE":	//***gestion des formats DATE ***
											//alert("Verification de " + vl);
											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												if(VerifDate(vl,"/")){
													return true;
												}
												document.forms[frm].elements[field].focus();
												return false;
											}
											break;

			case "HEURE":	//***gestion des formats HEURE ***
											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												if(VerifHeure(vl,":")){
													return true;
												}
												document.forms[frm].elements[field].focus();
												return false;
											}
											break;


			case "COURRIEL":	//*** gestion des formats COURRIEL ***
											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												if(VerifMail(vl)){
													return true;
												}
											}
											//alert("echec courriel!!!!!");
											document.forms[frm].elements[field].focus();
											return false;
											break;

		
			case "ALPHA": //*** gestion d'un format alpha uniquement ***

											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												for(c=0; c<vl.length;c++){
													if(!isAlpha(vl.charAt(c)) && (vl.charAt(c)!="-")){
														document.forms[frm].elements[field].focus();
														return false;
													}
												}					
												return true;
											}
											break;

			case "NUM":		//*** gestion d'un format numerique uniquement ***
										
											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												for(c=0; c<vl.length;c++){
													cr = vl.charAt(c);
													if( isNaN(cr) ){
														document.forms[frm].elements[field].focus();
														return false;
													}

												}
												
											}
											return true;
											break;
			case "NUMNONZERO":		//*** gestion d'un format numerique uniquement ***
										
											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												for(c=0; c<vl.length;c++){
													cr = vl.charAt(c);
													if( isNaN(cr) ){
														document.forms[frm].elements[field].focus();
														return false;
													}
												}
												//alert (vl);
												if(vl<1){
													return false;
												} 
											}
											return true;
											break;
											
											
			//*** cas ajouté par Anna ***************************************************************
			case "FLOAT": 		//*** gestion d'un format numerique decimal  ***
			
			
							if(vl==""){
								if(oblig){
									document.forms[frm].elements[field].focus();
									return false;
								}
								return true;
							}else{
								//*** on regarde si la valeur a une virgule ...
								//*** si oui => la transformer en point ...
								for(c=0; c<vl.length;c++){
									cr = vl.charAt(c);

									//alert(cr + "  ==>  ALPHA:" + isAlpha(cr) +" NUM : " + !isNaN(cr));
									//*** change les ',' en '.' pr les valeurs décimal dans la base mySQL 
									if(cr == ','){
									
										nv = vl.substr(0,c) + "." + vl.substr(c+1, vl.length-(c+1));															
										document.forms[frm].elements[field].value = nv;
										
									}
								}
								//**********************************************
								floatValue=parseFloat(vl);
								if(isNaN(floatValue)){
									//notFloat();
									return false;
								}else{
									//isFloat();
									return true;
								}
							}
							return true;
							break;
			//***************************************************************************************
											
			case "ALPHANUM":	//*** Gestion d'un format Alphanumerique donc lettres et chiffres ***

											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												for(c=0; c<vl.length;c++){
													cr = vl.charAt(c);

													//alert(cr + "  ==>  ALPHA : " + isAlpha(cr) + " NUM : " + !isNaN(cr));
													
													//if(!isAlpha(cr) && isNaN(cr) && (vl.charAt(c)!="-") && (vl.charAt(c)!="/") && (vl.charAt(c)!=".") && (vl.charAt(c)!=",") && (vl.charAt(c)!=":") && (vl.charAt(c)!="+")){// avant 
													if(!isAlpha(cr) && isNaN(cr) && (vl.charAt(c)!="-") && (vl.charAt(c)!="/") && (vl.charAt(c)!=".") && (vl.charAt(c)!=",") && (vl.charAt(c)!=":") && (vl.charAt(c)!="+") && (vl.charAt(c)!="*")){ //***modif le 040105 
														document.forms[frm].elements[field].focus();
														return false;
													}
												}
											}
											return true;
											break;

			//***************************************************************************************
											
			case "ALPHANUM2":	//*** Gestion d'un format Alphanumerique2 donc lettres et chiffres ***

											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{
												for(c=0; c<vl.length;c++){
													cr = vl.charAt(c);
													if(!isAlpha2(cr) && isNaN(cr) && (vl.charAt(c)!="-") && (vl.charAt(c)!="/") && (vl.charAt(c)!=".") && (vl.charAt(c)!=",") && (vl.charAt(c)!=":") && (vl.charAt(c)!="+") && (vl.charAt(c)!="*")){ //***modif le 040105 
														document.forms[frm].elements[field].focus();
														return false;
													}
												}
											}
											return true;
											break;

                      			
			default:				//alert("par defaut");
											if(vl==""){
												if(oblig){
													document.forms[frm].elements[field].focus();
													return false;
												}
												return true;
											}else{

												if(vl.length != fma.length ){
													//*** la taille de la valeur doit etre obligatoirement ***
													//*** identique au format ***
													document.forms[frm].elements[field].focus();
													return false;
												}else if(vl.length < fma.length){
													while(vl.length < fma.length){
														vl = " "+vl;
													}
												}
									
												for(c=1; c<fma.length; c++){			
													f = fma.charAt((fma.length)-c);	//substring(fma.length-c,(fma.length-c)+1);
													v = vl.charAt((fma.length)-c); //substring(fma.length-c,(fma.length-c)+1);
													//alert("Compare "+f+" et "+v);
													//alert("compare '"+f+"' et '"+v+"'");
													//*** analyse suivant le schema ci dessous: ***
													//*** Z = une lettre majuscule ou minuscule ***
													//*** 0 un chiffre de 0 à 9
													//*** 
													switch (f){
													
														case 'Z':
															//*** Lettre obligatoire ***
															if(!isAlpha(v)){ return false }	//*** une lettre de l'alphabet attendu ***
															break;
															
														case 'z':
															//*** Lettre ou rien ***
															if(v != " "){
																if(!isAlpha(v)){ return false }	//*** une lettre de l'alphabet attendu ***						
															}
															break;
															
														case '0':
															//alert(isNaN(v));
															if(isNaN(v) == true){ return false }		//*** un chiffre attendu ***
															break;
														
														case " ":
																break;
																
														default:
															if(f != v){ return false}			//*** caractere identique attendu ***
															
													}
									
												}
											
												return true;
											}								
		}

	}

}

//*** ValidateForm **********************************************************************************
//***
//*** Validation d'un formulaire en fonction d'un tableau
//***
//*** Parametres:
//***							frm	:	Formulaire a valider
//***							tbc:	Tableau des champs
//***							tbf	:	Tableau des formats a valider pour les champs du tableau tbc
//***										les format commence soit par # soit par ?
//***											# signifie que le champ doit etre obligatoirement remplis au format spécifié
//***											? signifie que le champ, si il est remplis, doit avoir le format spécifié
//***                   ensuite se trouve le format proprement dit
//***											Z pour une lettre obligatoirement
//***											z une lettre ou un espace
//***											0 pour un chiffre obligatoirement
//***										Des format speciaux peuvent etre utilisés
//***											DATE verifie la validite d'une date
//***											ALPHA verifie un champ uniquement en lettres
//***											NUM verifie un champ uniquement en numerique
//***											COURRIEL verifie un champ adresse courriel
//***											
//*** Retour:
//***							true formualire valider, false un champ au moins, est incorrect
//***
function ValidateForm(frm, tbc, tbf){

	//alert("Validation du formulaire : "+frm+" avec le tableau "+tbc);
	for(vc=0; vc<tbc.length; vc++){
	
		if(tbf[vc] != ""){
			//alert("Valide le champ : "+tbc[vc]+" au format : "+tbf[vc]);
			if( !ValidateField(frm, tbc[vc], tbf[vc]) ){
				alert("Le formulaire ne peut être validé.\nVérifiez vos entrées avant de tenter une autre validation\n" + tbc[vc] + " => (" + document.forms[frm].elements[tbc[vc]].value+")\nLe curseur va être placé sur le champ incorrect");
				return false;
			}
		}
		
	}
	//alert("Formulaire correctement valide");
	return true;
}



