var ok = "#FFFFFF";
var nok = "#F3A794";

function verif_remplissage_champ(champ) {
	var i = 0;
	if(!champ.value && !i) {
		champ.style.background = nok;
		return false;
	}
	else { champ.style.background = ok; }
	return true;
}

function verif_remplissage(champs) {
   var j;
   var i = 0;
   for(j=0; j<champs.length; j++) { 
      if(!champs[j].value || champs[j].value == '+') {
		  champs[j].style.background = nok;
		  
	     //alert("Vous n'avez pas rempli tous les champs obligatoires !");

		  return false;
	  }
	    else { champs[j].style.background = ok; }
   }
	return true;
}


function verif_liste(champ, descriptif) {
	if(champ.options[champ.selectedIndex].value == "") {
		alert("Vous devez indiquer "+descriptif+" !");
		return false;
	}
	return true;
}


function verif_cases(champs, descriptif) {
	var i = 0, j; 
	for(j=0; j<champs.length; j++)
		if(!champs[j].checked)
			i++;
	if(i==champs.length){
		alert("Vous devez cocher au moins "+descriptif+"...");
		return false;
	}
	return true;
}

function verif_mail(champ, lang) {
	var syntaxe_mail = new RegExp("^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\._]*@[\-a-zA-Z0-9\._]+[\.]{1}[a-zA-Z]{2,4}$", "");
	if(!syntaxe_mail.test(champ.value)) {
		champ.style.background = nok;
		var msg = "";
		if(lang=="fr"){
			var msg = "Erreur de syntaxe dans l'adresse mail !";
		}else
		if((lang!="fr")&&(lang!="null")){
			var msg = "Syntax error in your e-mail !";
		}
		if(msg!=""){
			alert(msg);
		}
		return false;
	}
	else
	{
	champ.style.background = ok;
	return true;
	}
}

function verif_dn(champ,lang) {
	var syntaxe1 = new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$", "");
	if(!syntaxe1.test(champ.value)) {
		champ.style.background = nok;
		if((lang=="fr")||(lang=="")){
		var msg = "Erreur de syntaxe dans la date de naissance !\nModèle : jj/mm/aaaa";
		}else
		if(lang!="fr"){
			var msg = "Syntax error in your birth date !\nPattern : dd/mm/yyyy";
		}
		alert(msg);
		return false;
	}
	else{
		champ.style.background = ok;
		return true;
	}
}



function verif_distance(champ, lang) {
	var syntaxe_float = new RegExp("^[0-9.]*$", "");
	if(!syntaxe_float.test(champ.value)||(champ.value == "")) {
		if((lang=="fr")||(lang=="")){
			var msg = "La distance doit être un nombre entier positif !";
		}else
		if(lang!="fr"){
			var msg = "The distance must be a positive integer !";
		}
		alert(msg);
		return false;
   }
	return true;
}

function verif_login_pwd(champ) {
	var syntaxe_login_pwd = new RegExp("^[a-zA-Z0-9]{6,}$", "");
	if(!syntaxe_login_pwd.test(champ.value)) {
		alert("Le login comme le mot de passe doivent être composés d'au moins 6 caractères alphanumériques !");
		return false;
	}
	return true;
}



function verif_pwd(champ,lang) {
	var syntaxe_login_pwd = new RegExp("^[a-zA-Z0-9]{6,}$", "");
	if(!syntaxe_login_pwd.test(champ.value)) {
		champ.style.background = nok;
		if((lang=="fr")||(lang=="")){
			var msg = "Le mot de passe doit être composé d'au moins 6 caractères alphanumériques !";
		}else
		if(lang!="fr"){
			var msg = "Syntax error in your password";
		}
		alert(msg);
		return false;
	}
	champ.style.background = ok;
	return true;
}

function verif_match_pwd(champ1, champ2,lang) {
	
	if((champ1.value)!=(champ2.value)) {
		champ1.style.background = nok;
		champ2.style.background = nok;
		if((lang=="fr")||(lang=="")){
			var msg = "Les mots de passe doivent être identiques !";
		}else
		if(lang!="fr"){
			var msg = "Error in confirmation passwords";
		}
		alert(msg);
		return false;
	}
	else
	{
	champ1.style.background = ok;
	champ2.style.background = ok;
	return true;
	}
}

function verif_JPEG(champ,lang) {
	if(champ) {
		var format_tof = new RegExp("(jpg|jpeg|JPG|JPEG)$", "");
		if(!format_tof.test(champ.value)) {
			champ.style.background = nok;
			if((lang=="fr")||(lang=="")){
				var msg = "La photo doit être au format JPEG !";
			}else
			if(lang!="fr"){
				var msg = "The picture has to be a JPEG file !";
			}
			alert(msg);
			return false;
		}
		champ.style.background = ok;
		return true;
	}
}

function verif_PDF(champ,lang) {
	if(champ) {
		var format_tof = new RegExp("(pdf|PDF|Pdf)$", "");
		if(!format_tof.test(champ.value)) {
			champ.style.background = nok;
			if((lang=="fr")||(lang=="")){
				var msg = "Le document doit être au format PDF !";
			}else
			if(lang!="fr"){
				var msg = "The document has to be a PDF file !";
			}
			alert(msg);
			return false;
		}
		champ.style.background = ok;
		return true;
	}
}

//

function verif_2_champs(champ1, champ2) {
	
	if((champ1.value)!=(champ2.value)) {
		alert("Les deux saisies doivent être identiques !");
		return false;
	}
	return true;
}

function verif_jour(champ) {
	if(isNaN(champ.value) || champ.value > 31 || champ.value < 1) {
		alert("Erreur dans la date !");
		return false;
	}
	return true;
}

function verif_mois(champ) {
	if(isNaN(champ.value) || champ.value > 12 || champ.value < 1) {
		alert("Erreur dans la date !");
		return false;
	}
	return true;
}

function verif_annee(champ) {
	if(isNaN(champ.value) || champ.value < 2005) {
		alert("Erreur dans la date !");
		return false;
	}
	return true;
}

function verif_heure(champ) {
	if(isNaN(champ.value) || champ.value > 23 || champ.value < 0) {
		alert("Erreur dans l'heure !");
		return false;
	}
	return true;
}

function verif_minute(champ) {
	if(isNaN(champ.value) || champ.value > 59 || champ.value < 0) {
		alert("Erreur dans les minutes !");
		return false;
	}
	return true;
}



function verif_float(champ, descriptif) {
	var syntaxe_float = new RegExp("^[0-9.]*$", "");
	if(!syntaxe_float.test(champ.value)) {
		alert(descriptif+" doit être un nombre !");
		return false;
   }
	return true;
}

function verif_int(champ, descriptif) {
	var syntaxe_float = new RegExp("^[0-9]*$", "");
	if(!syntaxe_float.test(champ.value)) {
		champ.style.color = couleur_alerte;
		alert(descriptif+" doit être un nombre entier !");
		return false;
   }
	return true;
}

function verif_url(champ) {
	var syntaxe_url = new RegExp("^https?://*", "");
	if(!syntaxe_url.test(champ.value))
		champ.value = "http://" + champ.value;
}

function verif_tof(champ) {
	if(champ) {
		var format_tof = new RegExp("(jpg|jpeg)$", "");
		if(!format_tof.test(champ.value)) {
			alert("La photo doit être au format JPEG !");
			return false;
		}
	}
}

function verif_cv(champ) {
	if(champ) {
		var format_tof = new RegExp("(doc|DOC|pdf|PDF)$", "");
		if(!format_tof.test(champ.value)) {
			alert("Le CV doit être au format .doc ou .pdf !");
			return false;
		}
	}
}

function majuscules(champ) {
	champ.value = champ.value.toUpperCase();
}

function minuscules(champ) {
	champ.value = champ.value.toLowerCase();
}

function majFirst(champ) {
	var index;
	var tmpStr;
	var tmpChar;
	var preString;
	var postString;
	var strlen;
	
	tmpStr = champ.value.toLowerCase();
	strLen = tmpStr.length;
	
	if (strLen > 0)  {
		for (index = 0; index < strLen; index++)  {
			if (index == 0)  {
				tmpChar = tmpStr.substring(0,1).toUpperCase();
				postString = tmpStr.substring(1,strLen);
				tmpStr = tmpChar + postString;
			}
			else {
				tmpChar = tmpStr.substring(index, index+1);
				if ((tmpChar == " " || tmpChar == "-") && 
					  (tmpStr.substring(index+1, index+3) != "le" && tmpStr.substring(index+1, index+3) != "la" && 
						tmpStr.substring(index+1, index+3) != "du" && tmpStr.substring(index+1, index+3) != "de" && 
						tmpStr.substring(index+1, index+4) != "des" && tmpStr.substring(index+1, index+4) != "rue" && index < (strLen-1)))  {
					tmpChar = tmpStr.substring(index+1, index+2).toUpperCase();
					preString = tmpStr.substring(0, index+1);
					postString = tmpStr.substring(index+2,strLen);
					tmpStr = preString + tmpChar + postString;
				}
			}
		}
	}
	champ.value = tmpStr;
}

function majFirstOnly(champ) {
	champ.value = champ.value.substring(0, 1).toUpperCase() + champ.value.substring(1);
}

/*     Fonctions de contrôle de champs de formulaires coté client   */

//Diverses expressions régulières utiles

// Expressions régulières de test de longueur
var regExpEmpty=/^$/g;					// Accepte une chaine vide
var regExp8Chars=/^[0-9a-zA-Z]{8,}$/g;			// Accepte une chaine d'au moins 8 carctères alphanumeriques (pour un mot de passe par exemple).

// Expressions régulières de test de type de caractère
var regExpAlphanumeric=/[0-9a-zA-Z]+/g;			// Accepte une chaine alphanumérique
var regExpAlphanumericWithWhitespace=/[0-9a-zA-Z ]+/g;	// Accepte une chaine alphanumérique + ' '
var regExpAlphabetic=/[a-zA-Z]+/g;			// Accepte une chaine alphabétique
var regExpNumeric=/[0-9]+/g;				// Accepte une chaine numérique

// Expressions régulières de test de type
var regExpInt=/^[0-9]+$/g;				// Accepte une chaine de type 'int'
var regExpDouble=/^[-+]?[0-9]+(\.[0-9]+)?$/g;		// Accepte une chaine de type 'double'
var regExpFloat=/^[-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/g;	// Accepte une chaine de type 'float'
var regExpTime=/^([01][0-9]|2[0123])\:([012345][0-9])(\:([012345][0-9])(.([0-9]{3})+)?)?$/g;		 // Accepte une chaine de type 'time'. Ex : 12:51 ou 21:45:35.654
var regExpFrenchDate=/^(0[1-9]|[12][0-9]|3[01])[\- \/\.](0[1-9]|1[012])[\- \/\.](19|20)\d\d$/g;  // date au format jj/mm/aaaa ou jj-mm-aaaa ou jj mm aaaa ou jj.mm.aaaa avec aaaa compris entre 1900 et 2099.
var regExpEnglishDate=/^(19|20)\d\d[\- \/\.](0[1-9]|1[012])[\- \/\.](0[1-9]|[12][0-9]|3[01])$/g; // idem ci-dessus mais format anglais (Ex : aaaa/mm/jj)
var regExpBoolean=/^true|false$/g;			// Accepte une chaine de type 'boolean'

// Expressions régulières de test de types administratifs français
var regExpCodePostal=/^([A-Z]+[A-Z]?\-)?[0-9]{1,2} ?[0-9]{3}$/g;							// Accepte une chaine de type 'code postal'. Ex : F-33370 ou 33 370 ou 33370 ou F-1 370
var regExpTelephoneFixe=/^(01|02|03|04|05)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g;		// Accepte un numero de téléphone de type 'fixe'. Ex : 01.34.12.52.30 ou 0134125230
var regExpTelephonePortable=/^(06)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g;			// Accepte un numero de téléphone de type 'portable'.
var regExpTelephoneNational=/^(0[12345689])[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g;		// Accepte un numero de téléphone de type 'national' y compris numéros en '08'.
var regExpTelephoneInternational=/^(\+[0-9]{2})[ \.\-]?[0-9][ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g;	// Accepte un numero de téléphone de type 'international'. Ex : (+33) 1 34 12 52 30
var regExpTelephoneInternational=/^\+[0-9]{2}[.]?[0-9]{9}$/g;	// Accepte un numero de téléphone de type 'international'. Ex : +33.134125230
var regExpTelephoneInternational=/^(\+[0-9]{2})[ ]?[0-9][ ]?[0-9]{2}[ ]?[0-9]{2}[ ]?[0-9]{2}[ ]?[0-9]{2}$/g;	// Accepte un numero de téléphone de type 'international'. Ex : (+33) 1 34 12 52 30
																

var regExpNumeroSecuriteSociale=/^[12][ \.\-]?[0-9]{2}[ \.\-]?(0[1-9]|[1][0-2])[ \.\-]?([0-9]{2}|2A|2B)[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{2}$/g; // Accepte un numero de sécurité sociale français. Ex : 1 85 34 33 354 450 45

var regExpTVAIntracommunautaire=/^[A-Z]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}$/g;		// Accepte un numero de TVA Intra-communautaire. Ex : FR 02 254 254 254
var regExpNumeroSiren=/^[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}$/g;							// Accepte un numero SIREN. Ex : 254 254 254
var regExpNumeroSiret=/^[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{3}[ \.\-]?[0-9]{5}$/g;					// Accepte un numero SIRET. Ex : 254 254 254 12345
var regExpCodeApe=/^[0-9]{2}[ \.\-]?[0-9]{1} ?[a-zA-Z]$/g;								// Accepte un code APE. Ex : 25.4Z

// Expressions régulières de test de types liés à internet

var regExpEmailAdress=/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/g;										// Accepte une adresse email. Ex : toto@toto.com
var regExpIpAdress=/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g;	// Accepte une adresse ip. Ex : 192.168.0.1
var regExpDomainName=/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/g;													// Accepte un nom de domaine. Ex : toto.com
var regExpUrl=/^(((ht|f)tp(s?))\:\/\/)?(([a-zA-Z0-9]+([@\-\.]?[a-zA-Z0-9]+)*)(\:[a-zA-Z0-9\-\.]+)?@)?(www.|ftp.|[a-zA-Z]+.)?[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,})(\:[0-9]+)?\/?/g;			// Accepte une url ftp, http ou https, avec ou sans login/mot de passe, avec ou sans numero de port. Ex : http://www.toto.com, ftp://toto:toto@ftp.toto.com:21/

var regExpHexColor=/^#[0-9A-Fa-f]{6}$/g; // Accepte une couleur hexadécimale

//Les deux fonction suivantes servent à identifier si une chaine de caractère est compatible ou non avec une expression régulière passée en paramètre
function matchRegularExpression(valeur, regularExpression)
{
	var resultat = valeur.match(regularExpression);
	if(resultat!=null && resultat.length==1) return true;
	else return false;
}

function doesntMatchRegularExpression(valeur, regularExpression)
{
	if(matchRegularExpression(valeur, regularExpression)) return false;
	else return true;
}

/*
les fonctions de contrôle suivantes prennent toutes comme argument la valeur de l'attribut "value" d'un champ de formulaire de type "text" ou "password"
*/
function isEmpty(valeur)
{
	return matchRegularExpression(valeur, regExpEmpty);
}

function isNotEmpty(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpEmpty);
}

function isNot8CharsLength(valeur)
{
	return doesntMatchRegularExpression(valeur, regExp8Chars);
}

function isNotAlphanumeric(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpAlphanumeric);
}

function isNotAlphanumericWithWhitespace(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpAlphanumericWithWhitespace);
}

function isNotAlphabetic(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpAlphabetic);
}

function isNotNumeric(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpNumeric);
}

function isNotInt(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpInt);
}

function isNotDouble(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpDouble);
}

function isNotFloat(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpInt);
}

function isNotBoolean(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpBoolean);
}

function isNotTime(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpTime);
}

function isNotDate(valeur, mode)
{
	switch (mode)
	{
		case "fr" : 
			return doesntMatchRegularExpression(valeur, regExpFrenchDate);
			break;
		case "en" :
			return doesntMatchRegularExpression(valeur, regExpEnglishDate);
			break;
		default : 
			return doesntMatchRegularExpression(valeur, regExpFrenchDate);
			break;
	}
}

function isNotCodePostal(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpCodePostal);
}

function isNotTelephone(valeur, mode)
{ 
	switch (mode)
	{
		case "fixe" : 
			return doesntMatchRegularExpression(valeur, regExpTelephoneFixe);
			break;
		case "port" :
			return doesntMatchRegularExpression(valeur, regExpTelephonePortable);
			break;
		case "nati" :
			return doesntMatchRegularExpression(valeur, regExpTelephoneNational);
			break;
		case "inte" :
			return doesntMatchRegularExpression(valeur, regExpTelephoneInternational);
			break;
		default : 
			return doesntMatchRegularExpression(valeur, regExpTelephoneNational);
			break;
	}
}

function isNotNumeroSecuriteSociale(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpNumeroSecuriteSociale);
}

function isNotTVAIntracommunautaire(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpTVAIntracommunautaire);
}

function isNotNumeroSiren(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpNumeroSiren);
}

function isNotNumeroSiret(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpNumeroSiret);
}

function isNotCodeApe(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpCodeApe);
}

function isNotEmailAdress(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpEmailAdress);
}

function isNotIpAdress(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpIpAdress);
}

function isNotDomainName(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpDomainName);
}

function isNotUrl(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpUrl);
}

function isNotHexColor(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpHexColor);
}