// vérifie qu'un champ texte n'est pas vide
function control_is_textfield_filled(textfield_name) {
   
   return (eltform_get_textfield_value(textfield_name) != "");
}


// vérifie qu'un champ texte contient au minimum un nombre de caractères
function control_is_textfield_filled_with_min_chars(textfield_name, minimum_chars) {
   
   return (eltform_get_textfield_length(textfield_name) >= minimum_chars);
}


// vérifie qu'au moins un champ texte sur deux champs texte n'est pas vide
function control_is_1on2_textfields_filled(textfield1_name, textfield2_name) {
   
   return ((eltform_get_textfield_value(textfield1_name) != "") || (eltform_get_textfield_value(textfield2_name) != ""));
}


// vérifie qu'aucun de trois champs texte n'est vide
function control_is_all3_textfields_filled(textfield1_name, textfield2_name, textfield3_name) {
   
   return ((eltform_get_textfield_value(textfield1_name) != "") && (eltform_get_textfield_value(textfield2_name) != "") && (eltform_get_textfield_value(textfield3_name) != ""));
}


// vérifie qu'une adresse email est valide
function control_is_email_valid(email_name) {
   
   var email_value = email_name.value;

   var email_text = new Array(2);	// tableau qui va contenir les chaines avant et apres l'arobase
   var email_arob;				      // va contenir l'index de l'arobase dans la chaine
   var email_temp;					   // caractere temporaire
   
   email_arob = email_value.indexOf("@");

   if (email_arob > 0 &&							         // l'arobase ne doit pas etre en premier...
      email_arob != (email_value.length - 1) &&		   // ... ni en dernier...
      email_arob == email_value.lastIndexOf("@") &&	// ... et il ne peut en rester qu'un
      email_value.indexOf("..") < 0) {					   // il ne peut y avoir ".."

			email_text[0] = email_value.substring(0,email_arob);					         // prend la chaine avant l'arobase <=> nom
			email_text[1] = email_value.substring(email_arob + 1, email_value.length); // prend la chaine apres l'arobase <=> adresse

			if ((email_text[0].indexOf(".") != 0) &&							            // pas de point en debut de chaine
				(email_text[1].indexOf(".") > 0) &&								            // idem
				(email_text[0].lastIndexOf(".") < (email_text[0].length - 1)) &&	   // ni en fin de chaine
				(email_text[1].lastIndexOf(".") < (email_text[1].length - 2))) {		// pas un des 2 derniers caracteres

				for (var email_nbr = 0; email_nbr < 2; email_nbr++)		            // boucle sur les deux chaines
      			for (var email_char_nbr = 0; email_char_nbr < email_text[email_nbr].length; email_char_nbr++) {

					   email_temp = email_text[email_nbr].charAt(email_char_nbr);     // si le caractere recupere

					   if ((email_temp < '0' || email_temp > '9') &&		// n'est pas un chiffre
						   (email_temp < 'a' || email_temp > 'z') &&		   // n'est pas une minuscule
						   (email_temp < 'A' || email_temp > 'Z') &&		   // n'est pas une majuscule
						   email_temp != '.' && email_temp != '_' &&		   // ni un autre caractere
						   email_temp != '-')                              // autorise...

							return false;						                 // alors l'adresse est invalide
				   }
            
				return true;
            
			}
      
   }
   
   return false;
}


// vérifie qu'une adresse email est vide ou alors valide
function control_is_email_empty_or_valid(email_name) {

   // si le champ n'est pas rempli alors email ok car champ non obligatoire, sinon on vérifie si l'email est valide
   if (eltform_get_textfield_value(email_name) == "") {
      return true;
   } else {
      return control_is_email_valid(email_name);
   }
}


// vérifie qu'une adresse de site web est valide
function control_is_website_valid(website_name) {
   
   var website_value = website_name.value;

   var website_http;				      // va contenir l'index de http:// dans la chaine
   var website_dot;				      // va contenir l'index du point dans la chaine
   
   website_http = website_value.indexOf("http://");
   website_dot = website_value.indexOf(".");
   
   return ((website_http == 0) && (website_dot > 7));
}


// vérifie qu'une adresse de site web est vide ou alors valide
function control_is_website_empty_or_valid(website_name) {

   // si le champ n'est pas rempli alors site web ok car champ non obligatoire, sinon on vérifie si l'adresse est valide
   if (eltform_get_textfield_value(website_name) == "") {
      return true;
   } else {
      return control_is_website_valid(website_name);
   }
}


// vérifie qu'un numéro de sécurité sociale est valide (ex: 1 73 04 92 048 019 60)
function control_is_numss_valid(numss_name) {
   
   var numms_value = numss_name.value;
   
   var txt_sexe  = numms_value.substr(0, 1); // sexe (1 chiffre)
   var txt_annee = numms_value.substr(1, 2); // année de naissance (2 chiffres)
   var txt_mois  = numms_value.substr(3, 2); // mois de naissance (2 chiffres)
   var txt_dept  = numms_value.substr(5, 2); // n° de département de naissance (2 chiffres)
   var txt_ville = numms_value.substr(7, 3); // n° de ville dans ce département (3 chiffres)
   var txt_ordre = numms_value.substr(10, 3); // n° d'ordre sur le registre d'état civil (3 chiffres)
   var txt_cle   = numms_value.substr(13, 2); // clé de vérification du reste des infos (2 chiffres)
   
   // spécificité pour la Corse (2A ou 2B)
   var txt_dept_ref;
   if (txt_dept.toUpperCase()=="2A" || txt_dept.toUpperCase()=="2B") {
      txt_dept_ref = "20";
   } else {
      txt_dept_ref = txt_dept;
   }
   
   var int_sexe  = parseInt(txt_sexe, 10);     // sexe (1 chiffre)
   var int_annee = parseInt(txt_annee, 10);    // année de naissance (2 chiffres)
   var int_mois  = parseInt(txt_mois, 10);     // mois de naissance (2 chiffres)
   var int_dept  = parseInt(txt_dept_ref, 10); // n° de département de naissance (2 chiffres)
   var int_cle   = parseInt(txt_cle, 10);      // clé de vérification du reste des infos (2 chiffres)

   var numms_value_ref = txt_sexe + txt_annee + txt_mois + txt_dept_ref + txt_ville + txt_ordre + txt_cle;
   var int_numss = parseInt(numms_value_ref.substr(0, 13), 10); // n° de sécurité sociale sans clé (13 chiffres)
   
    // spécificité pour la Corse (2A ou 2B)
    var int_numss_ref;
   if (txt_dept.toUpperCase()=="2A") {
      int_numss_ref = int_numss - 1000000;
   } else if (txt_dept.toUpperCase()=="2B") {
      int_numss_ref = int_numss - 2000000;
   } else {
      int_numss_ref = int_numss;
   }
   
   var int_numss_cle = 97 - int_numss_ref % 97; // clé de vérification du numéro de sécurité sociale (2 chiffres)

   // comme l'année n'est composée que de 2 chiffres, on la complète
   if (int_annee < 100) {
      int_annee += 1900;
   }
   
   // définition de l'année courante
   var cur_annee = new Date().getYear();
   
   return ((int_sexe==1 || int_sexe==2) && ((int_dept>=1 && int_dept<=95) || int_dept==97) && (int_annee>=1900 && int_annee<=cur_annee) && (int_mois>=1 && int_mois<=12) && (int_cle==int_numss_cle));
}


// vérifie qu'un numéro d'identité bancaire est valide
function control_is_idban_valid(idban_num_value) {
   
   var reg_exp = new RegExp("^[0-9]{5}\/[0-9]{5}\/([0-9]{11}\/[0-9]{2})$");
   
   if (!reg_exp.test(idban_num_value)) // test de l'expression régulière pour valider la forme du n° d'identité bancaire
      return false;
   
   var txt_banque = idban_num_value.split("/")[0]; // code banque (5 chiffres)
   var txt_agence = idban_num_value.split("/")[1]; // code agence (5 chiffres)
   var txt_compte = idban_num_value.split("/")[2]; // n° de compte (11 chiffres)
   var txt_clerib = idban_num_value.split("/")[3]; // clé de vérification du reste des infos (2 chiffres)
   var int_clerib    = parseInt(txt_clerib, 10);   // clé de vérification du reste des infos (2 chiffres)
   var idban_num_value_ref = txt_banque + txt_agence + txt_compte;
	var int_idban_ref = 0; // n° d'identité bancaire sans clé (21 chiffres)
	
	// calcul de la clé RIB selon la méthode suivante, car conversion chaine -> entier impossible, entier trop long pour JavaScript
	// méthode : A = xxxxxxx, B = xxxxxxx, C = xxxxxxx, yy = 97 - (62*A+34*B+3*C) mod 97 (x = chiffre de l'idban, y = chiffre de la clé)
	var temp;
	var coef = new Array(62, 34, 3);
 	for (i=0; i<3; i++) {
 	   temp = idban_num_value_ref.substr(7*i, 7);
 	   int_idban_ref += temp * coef[i];
 	}
   
   var int_idban_clerib = 97 - int_idban_ref % 97; // clé de vérification du numéro d'identité bancaire (2 chiffres)
   return (int_clerib == int_idban_clerib);
}


// vérifie qu'un numéro d'identité bancaire est vide ou alors valide
function control_is_idban_empty_or_valid(idban_num_value) {
   
   var txt_nom_banque  = idban_num_value.split("/")[0]; // nom banque
   var txt_nom_agence  = idban_num_value.split("/")[1]; // nom agence
   var txt_code_banque = idban_num_value.split("/")[2]; // code banque (5 chiffres)
   var txt_code_agence = idban_num_value.split("/")[3]; // code agence (5 chiffres)
   var txt_num_compte  = idban_num_value.split("/")[4]; // n° de compte (11 chiffres)
   var txt_clerib      = idban_num_value.split("/")[5]; // clé de vérification du reste des infos (2 chiffres)
   
   // si aucun des champ n'est rempli alors idban ok car champs non obligatoires, sinon on vérifie si l'idban est valide
   if ((eltform_get_text_value(txt_nom_banque) == "") && (eltform_get_text_value(txt_nom_agence) == "") && (eltform_get_text_value(txt_code_banque) == "") && (eltform_get_text_value(txt_code_agence) == "") && (eltform_get_text_value(txt_num_compte) == "") && (eltform_get_text_value(txt_clerib) == "")) {
      return true;
   } else {
      var idban_num_value_val = txt_code_banque + "/" + txt_code_agence + "/" + txt_num_compte + "/" + txt_clerib;
      return control_is_idban_valid(idban_num_value_val);
   }
}


// vérifie qu'une date jour/mois/année est valide
function control_is_date_valid(date_value) {
   
   var reg_exp = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
   
   if (!reg_exp.test(date_value)) // test de l'expression régulière pour valider la forme de la date
      return false;
   
   // séparation de la date en 3 variables pour vérification
   var int_jour  = parseInt(date_value.split("/")[0], 10); // jour
   var int_mois  = parseInt(date_value.split("/")[1], 10); // mois
   var int_annee = parseInt(date_value.split("/")[2], 10); // année
   
   // si l'année n'est composée que de 2 chiffres, on complète automatiquement
   if (int_annee < 100) {
      int_annee += 1900;
   }
   
   // définition de l'année courante
   var cur_annee = new Date().getFullYear();
   
   // définition du dernier jour de février
   var nbr_fevr;
   if ((int_annee%4 == 0) && (int_annee%100 != 0) || (int_annee%400 == 0))
      nbr_fevr = 29;
   else
      nbr_fevr = 28;
   
   // nombre de jours pour chaque mois
   var nbr_jours = new Array(31, nbr_fevr, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
   
   // enfin, retourne vrai si le n° de jour, de mois et d'année sont corrects
   return ((int_jour>=1 && int_jour<=nbr_jours[int_mois-1]) && (int_mois>=1 && int_mois<=12) && (int_annee>=1900 && int_annee<=cur_annee));
}


// vérifie qu'une date jour/mois/année est vide ou alors valide
function control_is_date_empty_or_valid(date_value) {
   
   // séparation de la date en 3 variables pour vérification
   var txt_jour  = date_value.split("/")[0]; // jour
   var txt_mois  = date_value.split("/")[1]; // mois
   var txt_annee = date_value.split("/")[2]; // année
   
   // si aucun des champ n'est rempli alors date ok car champ non obligatoire, sinon on vérifie si la date est valide
   if ((eltform_get_text_value(txt_jour) == "") && (eltform_get_text_value(txt_mois) == "") && (eltform_get_text_value(txt_annee) == "")) {
      return true;
   } else {
      return control_is_date_valid(date_value);
   }
}


// vérifie qu'une date jour/mois/année n'est pas vide et est valide
function control_is_date_not_empty_and_valid(date_value) {
   
   // séparation de la date en 3 variables pour vérification
   var txt_jour  = date_value.split("/")[0]; // jour
   var txt_mois  = date_value.split("/")[1]; // mois
   var txt_annee = date_value.split("/")[2]; // année
   
   // si aucun des champ n'est rempli alors date ko car champ obligatoire, et si oui on vérifie si la date est valide
   if ((eltform_get_text_value(txt_jour) == "") || (eltform_get_text_value(txt_mois) == "") || (eltform_get_text_value(txt_annee) == "")) {
      return false;
   } else {
      return control_is_date_valid(date_value);
   }
}


// vérifie qu'une condition demandée est acceptée
function control_is_condition_accepted(cond_name) {
   
   return eltform_is_checkbox_checked(cond_name);
}


// vérifie si un service a été demandé
function control_is_service_asked(serv_name) {
   
   return eltform_is_radio_selected(serv_name, "Oui");
}


// vérifie qu'il s'agit de l'action demandée
function control_is_action_asked(action_name, action_value) {
   
   var return_value = eltform_is_radio_selected(action_name, action_value);
   
   return return_value; 
}

// vérifie qu'une valeur décimale est valide (pas de "," mais un ".")
function control_is_decimal_valid(number_name) {
   
   var number_value = number_name.value;
   number_virg = number_value.indexOf(",");
   
   return (number_virg < 0);
   
}

// vérifie qu'une valeur est bien positive (pas de "-")
function control_is_positive_valid(number_name) {
   
   var number_value = number_name.value;
   number_minus = number_value.indexOf("-");
   
   return (number_minus < 0);
   
}
