function validerChamps(refElement, estObligatoire, typeChamp, libelle, lang){
	var	estValide	=	true;
	
	if (estObligatoire)	{
		if(typeChamp == "radio"){
			var ch = false;
			for(i=0; i<refElement.length; i++){
				if(refElement[i].checked){
					ch = true;
					break;
				}
			}
			if(!ch){
				estValide = false;
			}
		}
		else if(typeChamp == "select"){
			if(refElement.selectedIndex == 0){
				estValide = false;
			}
		}
		else{
			if(nullToString(refElement.value, "vide") ==	"vide"){
				estValide = false;
			}
		}
		if(!estValide){
			if(typeChamp == "radio"){
				refElement[0].focus();
				if (lang == 'en'){
					alert(libelle	+	" is required");
				}
				else{
					alert(libelle	+	" est un champ obligatoire");
				}
			}
			else{
				refElement.focus();
				if (lang == 'en'){
					alert(libelle	+	" is required");
				}
				else{
					alert(libelle	+	" est un champ obligatoire");
				}
			}
		}
	}
	
	if (estValide	&& refElement.value	!= "") {
		// valider seulement si	une	valeur a été spécifiée
		if (typeChamp	== "string") {
			//ajouter conditions
		}
		else if	(typeChamp ==	"date")	{
			if (!validerDate(refElement.value))	{
				estValide	=	false;
			}
		}
		else if	(typeChamp ==	"email") {
			var	strReEmailValide;
			strReEmailValide	=	"/^([a-zA-Z0-9._-]+@)";		// utilisateur@
			strReEmailValide +=	"([a-zA-Z0-9.-]+[.])+";		// domaine.
			strReEmailValide +=	"([a-zA-Z0-9.-]{2,4})$/";	// tld
			var	reEmailValide	=	eval(strReEmailValide);
			// vérifie si	l'adresse	est	composée uniquement
			// de	caractères valides et	si elle	est	dans le
			// format	"utilisateur@domaine.tld"
			if (!reEmailValide.test(refElement.value)) {
				if (lang == 'en'){
					alert("Invalid email address. " +
					"Email must be in format: alias@domain.ext");
				}
				else{
					alert("Adresse de courriel invalide. " +
					"Doit être dans le format: alias@domaine.ext");
				}
					estValide	=	false;
			 }
		}
		else if	(typeChamp ==	"codepostal") {			
			var reCodeValide = /^[A-Z][0-9][A-Z] {0,1}[0-9][A-Z][0-9]$/i;
			// vérifie si	le code postal est sous la forme A9A9A9
			if (!reCodeValide.test(refElement.value)) {
				if (lang == 'en'){
					alert("Invalid Postal Code. " +
						"Must be in format: H9H 9H9");
				}
				else{
					alert("Code postal invalide." +
					"Doit être dans le format: H9H 9H9");
				}
				estValide	=	false;
				
			}
		}
		else if	(typeChamp ==	"telephone") {
			var	reTelephoneValide	=	/^\d\d\d[-]\d\d\d[-]\d\d\d\d$/;
			// vérifie si	le numéro	de téléphone
			// est dans	le format	"(999) 999-9999"
			if (!reTelephoneValide.test(refElement.value)) {
				if (lang == 'en'){
					alert("Invalid Phone Number. " +
						"Must be in format: 999-999-9999");
				}
				else{
					alert("Numéro de téléphone invalide. " +
						"Doit être dans le format: 999-999-9999");
				}
				estValide	=	false;
			}
		}
		else if	(typeChamp ==	"url") {
			if ((refElement.value.substring(0,7) !=	"http://") &&
					(refElement.value.substring(0,6) !=	"ftp://")	&&
					(refElement.value.substring(0,7) !=	"mailto:"))	{
					alert("Adresse invalide. " +
								"Doit	commencer	par	http://, ftp://	ou mailto:");
					estValide	=	false;
			}
		}
	}

	if (!estValide)	{
		if(typeChamp != "radio"){
			refElement.focus();
		}
	}

	return estValide;
}


function validerDate(strDate) {
  strDate = ""+strDate;
  var estValide = true;  
  
  var reDateValide = /^\d\d\d\d[-]\d\d[-]\d\d$/; 
  // pour vérifier si la date correspond au format AAAA-MM-JJ
  estValide = reDateValide.test(strDate);  
  
  if (!estValide) {
  	alert("Date invalide. Elle doit être dans le format AAAA-MM-JJ");  	
  }
  else {
    var tabPartiesDate = strDate.split("-");
    var annee = parseInt(tabPartiesDate[0],10);
    var mois  = parseInt(tabPartiesDate[1],10);
    var jour  = parseInt(tabPartiesDate[2],10);
    
    if (mois > 12 || mois == 0) {
    		alert("Le mois est invalide.");
        estValide = false;
    }   
    else if (returnNbJours(mois,annee) < jour) {
    		alert("Le jour est invalide.");
        estValide = false;
    }
  } 
  
      
  return estValide;
}

function estBissextile(annee) {
  var iAnnee = parseInt(annee,10);   
  if (((iAnnee % 4)==0) && ((iAnnee % 100)!=0) || ((iAnnee % 400)==0)) {
    return (true);
  }
  else {
    return (false);
  }
}

function returnNbJours(mois,annee){
  var jours;
  var iMois = parseInt(mois,10);
  if (iMois==1 || iMois==3 || iMois==5 || iMois==7 || iMois==8 || iMois==10 || iMois==12) jours=31;
  else if (iMois==4 || iMois==6 || iMois==9 || iMois==11) jours=30;
    else if (iMois==2)  {
      if (estBissextile(annee)) {
        jours=29;
      }
      else {
      jours=28;
    }
  }
  return (jours);
}

function nullToString(str, valeurDefaut){
	if ((""+str == "null") || (str == null) ||
		(""+str == "undefined") || (""+str == "")) {
		return valeurDefaut;
	}
	else{
		return str;
	}
}

function apostrophe(refElement){
	if (refElement.value.indexOf("'") != -1){
		refElement.focus();
		alert("Please do not use ' in any field");
		return false;
	}
	else{
		return true;
	}
}
