var GlobalPattern_AlphaNumerique = "^[a-zA-Z0-9_\-]+$"

function bCheckIfElementIsReachable(objElementToCheck)
{
    return (objElementToCheck && objElementToCheck.style && (objElementToCheck.style.display != "none"));
}
function checkTextAreaMaxLength(objElement, intMaxCharateresNb){

	if (objElement.value.length > intMaxCharateresNb)
	{
		alert("Veuillez ne saisir qu'au plus " + max + " caractères !");
		objElement.value = objElement.value.substr(0, intMaxCharateresNb);
	}
	
}

function bMailIsValid(emailAddress) {
	
	var re = /^(([^<>()[\]\\.,;: @\"]+(\.[^<>()[\]\\.,;:@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
	return (re.test(emailAddress) && (emailAddress.indexOf(' ') == -1));
	
}

function bVerifRegExp(sStringToCheck, sExpReg) {
	
	var oRegExp = new RegExp(sExpReg,"g");
	
	if (!oRegExp.test(sStringToCheck) )
	{
		alert("L'expression [" + sStringToCheck + "] contient un(des) caractère(s) non autorisé(s).");
		return false;
	}
	
	return true;
}

function bVerifFieldAsForbiddenCharacter(asFormName, asFieldName, asFieldLibelle, asForbidChar){
						
	var oField = eval("document." + asFormName + "." + asFieldName);
	var sFieldContent = oField.value;

	if(sFieldContent.indexOf(asForbidChar) == -1){
		return false;
	}else{
		alert("Le champ '" + asFieldLibelle + "' ne peut pas contenir le caractère '" + asForbidChar + "'");
		oField.focus();
		return true;
	}

}

function bCheckFieldIsNumber(asFormName, asTxtFieldName){

	var oFieldName = eval("document." + asFormName + "." + asTxtFieldName);
	
	if (oFieldName){
	
		var iFieldValue = oFieldName.value;
		if (!isNaN(iFieldValue)){
		
			alert("Vous ne pouvez nommer un tarif sans au moins un caractère alphabétique.");
			oFieldName.focus();
			return false;
			
		}else{
			return true;
		}
		
	} else {
		return true;
	}
}

function bFieldIsEmpty(sForm, sFieldName){

    try{

		var oField = eval("document." + sForm + "." + sFieldName);

		if(oField.tagName && (oField.tagName.toLowerCase() == "select"))
		{
		    if(oField.options.length == 0)
		    {
		        return false;
		    }
			return oField.options[oField.options.selectedIndex].value == "";
		}
		
		if(oField.length > 1){

			var bIsOneChecked = false;
		
			for(var i=0;i<oField.length;i++){
				bIsOneChecked = oField[i].checked || bIsOneChecked;
			}
		
			return !bIsOneChecked;
	    	
		}else if(oField.value == "" && (oField.style.display == "" || oField.style.display != "none")){
			return true;
		}else{
			return false;
		}
	    
	}catch(exp){
	    alert("[bFieldIsEmpty] > " + exp);
	}
}

function checkDate(dateString){

	var position, oldPosition=0;
	var regExp = /^([0-3]\d|\d)\/([0-1]\d|\d)\/(\d{4}|\d{2})$/;
	var test = dateString.match(regExp);
	var jour, mois, annee;

	if(test){
		position = test[0].indexOf("/", oldPosition);
		jour = test[0].substring(oldPosition, position);
		oldPosition = position +1;
								
		position = test[0].indexOf("/", oldPosition);
		mois = test[0].substring(oldPosition, position);
		oldPosition = position +1;
								
		annee = test[0].substring(oldPosition, test[0].length);
		if (mois==2){
			return ((annee%4)==0)? jour <=29: jour<29;
		} else if (mois<8) {
			return ((mois%2)==0)? jour<31: jour<=31;	
		} else if(mois<=12) {
			return ((mois%2)==0)? jour<=31: jour<31;
		}
	} 
	return false;
}

function bCheckFields(sForm, sFieldsNames){

	var bIsOneEmpty = false;
	var sTitleForOneElement = "Veuillez renseigner l'information suivante:\n\n";
	var sTitle = "Veuillez renseigner les informations suivantes:\n\n";
	var sMessage = "";
	var oForm = eval("document." + sForm);
	var sChampValue;
	var oElement;
	var oFirstWrongElement;
	var intNbWrongElements = 0;
	
	for(sFieldLibelle in sFieldsNames){
	
		oElement = eval("oForm." + sFieldsNames[sFieldLibelle]);
	
		sElementValue = (oElement.tagName == "SELECT") ? oElement.options[oElement.options.selectedIndex].value : oElement.value;

		sElementName = sFieldsNames[sFieldLibelle];

		if (bFieldIsEmpty(sForm, sElementName)){
		
			if(!bIsOneEmpty) oFirstWrongElement = oElement;
			bIsOneEmpty = true;
			sMessage += "- " + sFieldLibelle + "\n";
			intNbWrongElements++;
			
		}else if((sFieldLibelle.indexOf("date") != -1) || (sFieldLibelle.indexOf("Date") != -1)){
			
			if(!checkDate(sElementValue)){
			
				alert(sFieldLibelle + " doit être au format jj/mm/aaaa");
				if(bCheckIfElementIsReachable(oElement))
				{
				    oElement.focus();
				}
				return false;
				
			}
		
		}else if((sFieldLibelle.indexOf("email") != -1) || (sFieldLibelle.indexOf("Email") != -1)){
			
			if(!bMailIsValid(sElementValue)){
				
				alert("L'adresse email semble ne pas être correctement formée");
				oElement.focus();
				return false;
				
			}
			
		}
		if(arguments[2] && arguments[2][sFieldLibelle])
		{
		    if(!bCheckFieldsWithPATTERN(arguments[2][sFieldLibelle], oElement, sFieldLibelle))
		    {
		        return false;
		    }
		}
		
	}
	
	if(bIsOneEmpty){
	
	    if(intNbWrongElements == 1){
	        alert(sTitleForOneElement + sMessage);
	    }else{
		    alert(sTitle + sMessage);
		}
		
		if(oFirstWrongElement.focus && !(oFirstWrongElement.type && oFirstWrongElement.type == "hidden")){
			oFirstWrongElement.focus();
		}
		
		return false;
		
	}
	
	return true;
	
}

function bCheckFieldsWithPATTERN(strPatterntoCheck, objFormElement, strNameElementforMessage)
{
	var objMyRegExp_ = new RegExp(strPatterntoCheck, "g");
	arrWrongCharactersMatches_ = objFormElement.value.match(objMyRegExp_);

	if (arrWrongCharactersMatches_!= null)	
	{
		arrWrongCharactersMatches_ = supDoublons(arrWrongCharactersMatches_);

		if (strNameElementforMessage != '')
		{
		    alert("Le champ saisi \'" + strNameElementforMessage + "\' contient un(des) caractère(s) non autorisé(s).\nLes caractères en defaut sont : " + arrWrongCharactersMatches_.join(" "));
		    objFormElement.focus();
		}
		return false;
	}
	else
	{
	    return true;
	}
}

function sCheckFieldsAndSend(sForm, sFieldsNames){

	var bIsOneEmpty = false;
	var sMessage = "Veuillez renseigner le(s) champ(s) suivant(s):\n\n";
	var oForm = eval("document." + sForm);
	var sChampValue;
	var oElement;
	
	for(sFieldLibelle in sFieldsNames){
	
		oElement = eval("oForm." + sFieldsNames[sFieldLibelle]);
	
	    if(oElement.style && (oElement.style.display != "none")){
	
		    sElementValue = oElement.value;
		    sElementName = sFieldsNames[sFieldLibelle];
    	
		    if (bFieldIsEmpty(sForm, sElementName)){
    		
			    bIsOneEmpty = true;
			    sMessage += "- " + sFieldLibelle + "\n";
    			
		    }else if((sFieldLibelle.indexOf("date") != -1) || (sFieldLibelle.indexOf("Date") != -1)){
    			
			    if(!checkDate(sElementValue)){
    			
				    alert("La date doit être au format jj/mm/aaaa");
				    oElement.focus();
				    return;
    				
			    }
    		
		    }else if((sFieldLibelle.indexOf("email") != -1) || (sFieldLibelle.indexOf("Email") != -1)){
    			
			    if(!bMailIsValid(sElementValue)){
    				
				    alert("L'adresse email semble ne pas être correctement formée");
				    oElement.focus();
				    return;
    				
			    }
    			
		    }
		    
		}
		
	}
		
	if(bIsOneEmpty){
		alert(sMessage);
	}else{
		oForm.submit();
	}
	
}

function remplacer(b){
	if(isNaN(b)){
		b = b.replace(",",".");
		if(isNaN(b)){
			b = b.replace(".",",");
		}
	}
	return b;
}	

function verifUserHabilEtDroits(obj ,aFormName, aDestination, aMessage){

	var sTypes = "";
	var sType_champs;
	var bSvceChecked = false;
	var bTransChecked = false;
	var sElmtName;
	var bDecision;
	var sMessage = "";
	var oForm = eval("document."+aFormName);
			
	for(var cpt=0;cpt < oForm.length;cpt++){
	
		sType_champs = oForm.elements[cpt].type;
		sElmtName = oForm.elements[cpt].name;
		
		if(sType_champs == "checkbox" && sElmtName.length > 6 && sElmtName.indexOf("check_")==0){
			if(oForm.elements[cpt].checked){
				bSvceChecked = true;
			}
		}
				
	}
	if(!bSvceChecked && !oForm.check_.checked){
		sMessage = "L'utilisateur n'a aucune habilitation.\n";
	}

	if(sMessage != ""){
		sMessage += aMessage + " l'utilisateur?";
		if(confirm(sMessage)){
			valider(obj,'envoyer(var1,var2)');
		}
	}
	if((bSvceChecked || oForm.check_.checked)){
		
		valider(obj,"envoyer(var1,var2)");
	}
			
}

function valider(obj,action) {	
	obj = eval(obj);
	var cpt,type_champs,F,ok;		
	var ok=true;
	F = eval("document."+obj.form.name);	
	for(var cpt=0;cpt < F.length;cpt++){
		type_champs=F.elements[cpt].type;
		if (type_champs=="text" || type_champs=="textarea") {		
			var objet = F.elements[cpt]; 
			while ((objet=objet.parentElement)!=null) {
				if (objet.tagName=="DIV") {
					if(objet.style.visibility != "hidden"){
						objet = null;						
					}
					break;
				}
			}
			if (objet == null){
				if (F.elements[cpt].value!="" || F.elements[cpt].longueur!="-1"){	
					if (F.elements[cpt].valider=="1") {
						ok = verifier(F.elements[cpt].choix,F.elements[cpt].value,F.elements[cpt].longueur);
						if (!ok) {						
							F.elements[cpt].focus();break;
						}
					}
					else {
						if(F.elements[cpt].value.length < F.elements[cpt].longueur ){
							ok = false;
							alert("Erreur de données dans le champ. Le nombre minimum de caractères pour que le champ soit valide est de "+ F.elements[cpt].longueur);
							F.elements[cpt].focus();break;
						}
					} 								
				}
			}
		}
		
		else {
			if(type_champs=="select-one"){
				if (F.elements[cpt].value=="" && F.elements[cpt].longueur){
					ok = false;
					alert("Erreur de données dans le champ. Vous devez obligatoirement choisir un " + F.elements[cpt].name + " dans le menu " + F.elements[cpt].description);
					F.elements[cpt].focus();break;
				}
			}
		}
	}
	if(ok) {
		action = eval(action);
		action;
		return true;
	}
	else {
		return false;
	}
}

function verifier(choix,chaine,longueur) {
	if (chaine.length < longueur) {
		alert("Erreur de données dans le champ. Le nombre minimum de caractères pour que le champ soit valide est de "+ longueur);
		return false;
	}	
	else {
		return true;
	}
}

function verifier_Tel(Tel) {
	var t="";	
	chaine = "0123456789";
	for(a=0;a<Tel.length;a++){		
		if (chaine.indexOf(Tel.charAt(a),0)!=-1)
			t+=Tel.charAt(a);
	}
	if(t.charAt(0)!="0") {
		alert("Numero non valide. Le numero doit commencer pas 0");
		return(false);
	}
	if(t.charAt(1)!="0") {		
		if(t.length<7) {
			alert("Numero invalide. Numéro trop court.");
			return(false);
		}		
	}	
	return(formater_tel(t));	
}

function formater_tel(tel){
	var t="";
	t = tel.substring(0,2);
	for(a=4;a<=tel.length;a+=2){
		t = t + " " + tel.substring(a-2,a);
	}
		return (t);
}

function verifier_Mail(email) {
	var a = verifier_chaine("mail",email);
	if (!a) {
		return false;
	}	
	var aroba = email.indexOf("@");
	if (aroba == -1) {
		alert("Erreur de données dans le champ. L'adresse email n'est pas valide il manque @.");
		return false;
	}
	var point = email.indexOf(".", aroba);
	if ((point == -1) || (point == (aroba + 1))) {
		alert("Erreur de données dans le champ. L'adresse email n'est pas valide.");
		return false;
	}
	var point = email.lastIndexOf(".");
	if ((point + 1) == email.length) {
		alert("Erreur de données dans le champ. L'adresse email n'est pas valide.");
		return false;
	}
	point = email.indexOf("..")
	if (point != -1) {
		alert("Erreur de données dans le champ. L'adresse email n'est pas valide [ .. ]");
		return false;
	}	
	return email;
}

function verifier_taux(Taux){
	Taux = remplacer(Taux);
	if(Taux.indexOf(".")!=Taux.lastIndexOf(".")){
		alert("Erreur de données dans le champ. La donnée n'est pas une valeur numérique");
		return false;
	}
	if(isNaN(Taux)){
		alert("Erreur de données dans le champ. La donnée n'est pas une valeur numérique");
		return false;
	}
	return Taux;
}

function verifier_numerique(Numerique){
	if(isNaN(Numerique)){
		alert("Erreur de données. La valeur entrée n'est pas numérique");
		return false;
	}
	Numerique = remplacer(Numerique);
	if(Numerique.indexOf(".")!=-1){
		alert("Erreur de données. La valeur entrée n'est pas un entier");
		return false;
	}
	return Numerique;
}

function verifier_chaine(choix,atester) {	
	atester=atester.toLowerCase();
	var numerique = "0123456789";
	var alpha = " abcdefghijklmnopqrstuvwxyz";
	var accent = "âäàçéèêëîïôöûü-'";	
	var ponctuation = ",'@&:+-_.=()";
	var ponctuationid = ",@&:+-_.=()";	
	var point = ".&";
	var chaine;
	switch(choix){
		case "1"		:chaine = numerique + alpha + accent;break;
		case "2"		:chaine = numerique + alpha + accent + ponctuation;break;
		case "3"		:chaine = numerique + alpha;break;
		case "mail"		:chaine = alpha + numerique + "@-_.+";break;
		case "id"		:chaine = numerique + alpha + accent + ponctuationid;break;
		case "password"	:chaine = numerique + alpha + accent + ponctuation;break;
		case "nom"		:chaine = numerique + alpha + accent+point;break;
	}

	for (var i=0;i < atester.length;i++){
		if (chaine.indexOf(atester.charAt(i),0)==-1){
			alert("Erreur de données dans le champ. Le caractère suivant [ " + atester.charAt(i) + " ] est invalide.");
			return false;
		}
	}	
	return (atester);
}
