// Contrôle de données
//==============================================================================

//Contrôle la validité d'une données
function isValid(valeur, format) {
	if (valeur.length==0) return false;

	//A : alphabetique
	if (format=="A") RE = /^([A-Za-z]+[ ]*[-]*[A-Za-z]*)+$/;

	//AN : alphanumerique
	if (format=="AN") RE = /^[A-Za-zàâäéèêëîïôùûç\s\S,'0-9\-]+$/;

	//N : numerique
	if (format=="N") RE = /^\d+$/;

	//CP : code postal francais (5 chiffres)
	if (format=="CP") RE = /^\d{5}$/;

	//D : date (xx/xx/xx ou xx/xx/xxxx ou xx-xx-xx ou xx-xx-xxxx)
	if(format=="D") RE = /^\d{2}([\/]|[\-])+\d{2}([\/]|[\-])+\d{2}(\d{2})*$/;

	//EMAIL : e-mail
	if (format=="EMAIL") RE = /^[A-Za-z0-9\.\-_]+[@][A-Za-z0-9\-\.]+[\.][A-Za-z][A-Za-z][A-Za-z]?$/;

  //TELEPHONE :
	if (format=="TEL") RE = /^\d{10}$/;

  //MOBILE :
	if (format=="MOB") RE = /^06\d{8}$/;

	//PSEUDO : e-mail
	if (format=="PSEUDO") RE = /^[A-Za-z0-9]+$/;

	//Contrôle l'expression régulière
	return RE.test(valeur) ? true : false;
}

function isEmail(value) {
  var re=/^[A-Za-z0-9\.\-_]+[@][A-Za-z0-9\-\.]+[\.][A-Za-z][A-Za-z][A-Za-z]?$/;
  return re.test(value) ? true : false;
}

function isDate(value) {
  var re=/^\d{2}([\/]|[\-])+\d{2}([\/]|[\-])+\d{2}(\d{2})*$/;
  return re.test(value) ? true : false;
}

function isDate(JJ, MM, AAAA) {
  if(JJ<1||JJ>31||MM<1||MM>12) return false;
  if(MM==2) {
    if(JJ==30||JJ==31) return false;
    if(JJ==29) return (AAAA%4==0&&AAAA%100!=0)||AAAA%400==0;
  }
  else if(JJ==31) return !(MM==4||MM==6||MM==9||MM==11);
  return true;
}

function isNumeric(value) {
  var re=/^\d+$/;
  return re.test(value) ? true : false;
}

function isPostalCode(value) {
  var re=/^\d{5}$/;
  return re.test(value) ? true : false;
}

function isLetter(value) {
  var re=/^([A-Za-z]+[ ]*[-]*[A-Za-z]*)+$/;
  return re.test(value) ? true : false;
}
function isMinuscule(chara){
  return /^[a-zàâäéèêëîïôùûç]$/.test(chara) ? true : false;
}
function isMajuscule(chara){
  return /^[A-Z]$/.test(chara) ? true : false;
}
function search(chars, chara){
  for(var i=0; i<chars.length; i++)
    if(chars.charAt(i)==chara) return true;
  return false;
}
//function isSeparationCharacter(chara){
//  return search(" '-", chara);
//}
//function isNumericChar(chara){
//  return search("0123456789", chara);
//}
//function isLatinCharacter(chara){
//  return search("âäàçêëèéîïüûùôö", chara);
//}
function isAlphabetical(value) {
  var re=/^[A-Za-zàâäéèêëîïôùûç\s'\-]+$/;
  return re.test(value) ? true : false;
}

function isAlphanumeric(value) {
  var re=/^[A-Za-zàâäéèêëîïôùûç\s\S,'0-9\-]+$/;
  return re.test(value) ? true : false;
}

function isAlphanumericWord(value) {
  var re=/^[A-Za-z0-9\-]+$/;
  return re.test(value) ? true : false;
}

function isFRPhoneNumber(value) {
  var re=/^\d{10}$/;
  return re.test(value) ? true : false;
}

function isSMSPhoneNumber(value) {
  var re=/^06\d{8}$/;
  return re.test(value) ? true : false;
}

function isCreditCard(st) {
  // Encoding only works on cards with less than 19 digits with Luhn mod-10
  if(st.length>19) return false;
  var sum=0;
  var mul=1;
  var l=st.length;
  for(i=0;i<l;i++) {
    digit = st.substring(l-i-1, l-i);
    tproduct = parseInt(digit, 10)*mul;
    sum += tproduct>=10 ? (tproduct % 10) + 1 : tproduct;
    if(mul==1) mul++; else mul--;
  }
  return (sum % 10)==0?true:false;
}

function isVisa(cc) {
  return (cc.length==16||cc.length==13)&&cc.substring(0,1)==4
    ?isCreditCard(cc):false;
}

function isMasterCard(cc) {
  var firstdig = cc.substring(0,1);
  var seconddig = cc.substring(1,2);
  return cc.length==16&&firstdig==5&&seconddig>=1&&seconddig<=5
    ?isCreditCard(cc):false;
}

function isAmericanExpress(cc) {
  var firstdig = cc.substring(0,1);
  var seconddig = cc.substring(1,2);
  return cc.length==15&&firstdig==3&&(seconddig==4||seconddig==7)
    ?isCreditCard(cc):false;
}

function isAnyCard(cc) {
  if(!isCreditCard(cc)) return false;
  return !isMasterCard(cc)&&!isVisa(cc)&&!isAmericanExpress(cc)?false:true;
}

//==============================================================================
// Récupération des données
//==============================================================================

//radio
function getRadioValue(radioName) {
  var lg = radioName.length;
  var ret = "";
  for(var i=0; i<lg; i++)
    if(radioName[i].checked){ret = radioName[i].value; break;}
  return(ret);
}

//text, password, hidden, textarea, file
function getTextValue(textName) {
  return textName.value;
}

//checkbox
function getCheckboxValue(checkboxName) {
  var lg = checkboxName.length;
  var ret = "";
  for(var i=0; i<lg; i++)
    if(checkboxName[i].checked==true) {ret += checkboxName[i].value + "\n";}
  return(ret);
}

//select
function getSelectVal(selectName) {
  return(sel.options[selectName.selectedIndex].text);
}

//***************************************************************************
// Méthodes utilitaires
//***************************************************************************

//Encode tous les champs de type texte du formulaire
function escapeText(form){
  with(form){
    for(var i=0;i<elements.length;i++)
      if(elements[i].type=="text" || elements[i].type=="textarea")
    elements[i].value=escape(elements[i].value);
  }
}

//Décode tous les champs de type texte du formulaire
function unescapeText(form){
  with(form){
    for(var i=0;i<elements.length;i++)
      if(elements[i].type=="text")
    elements[i].value=unescape(elements[i].value);
  }
}

//Formate tous les champs de type texte du formulaire
function formatText(form){
  with(form){
    for(var i=0;i<elements.length;i++)
      if(elements[i].type=="text")
    elements[i].value=getRegularString(elements[i].value);
  }
}

//Supprime les espaces de début, de fin, et sépare les mots par un espace
function getRegularString(chaine){
  var tab=chaine.split(" ");
  var regularString="";
  for(var i=0; i<tab.length; i++){
    if(tab[i]!=""){
      if(regularString!="") regularString+=" ";
      regularString+=tab[i];
    }
  }
  return regularString;
}





//***************************************************************************
// Fonctions à valider
//***************************************************************************
/*
// Fonction de blocage de la saisie si elle n'est pas conforme
function bloque(formulaire,champ) {
// Creation d'un raccourci pour manipuler le champ
	var controle = eval('document.' + formulaire + '.' + champ);

// On se place sur le champ incrimine
	controle.focus();

// On selectionne le contenu pour faciliter la reprise de la saisie
	controle.select();
	}


// Fonction de controle des champs vides

// Debut du message qui sera affiche en cas d'un ou plusieurs champ(s) vide(s)
var mess = "Les champs suivants sont necessaires au traitement de votre demande :\n";

// Copie pour reinitialisation
var mess_init = "Les champs suivants sont necessaires au traitement de votre demande :\n";

// Variable marquant l'erreur (0 : tout va bien, 1 : blocage demande)
var necessaire = 0;

function vide(formulaire,champ,alerte) {

// Creation d'un raccourci pour manipuler le champ a tester
	var controle = eval('document.' + formulaire + '.' + champ);

// Si c'est un champ 'text'
	if ( controle.type == 'text' ) {

// Et que la valeur du champ comporte moins de 1 caractere (vide)
		if ( controle.value.length < 1 ) {

// On ajoute l'intitule du champ dans le message d'erreur
			mess += alerte;
			mess += "\n";

// On marque qu'il ne faut pas valider le formulaire
			necessaire = 1;
			}
		}

// Si c'est un champ de type mot de passe
	if ( controle.type == 'password' ) {
		if ( controle.value.length < 1 ) {
			mess += alerte;
			mess += "\n";
			necessaire = 1;
			}
		}

// Si c'est un champ de type texte multilignes
	if ( controle.type == 'textarea' ) {
		if ( controle.value.length < 1 ) {
			mess += alerte;
			mess += "\n";
			necessaire = 1;
			}
		}

// Si c'est une liste
	if ( controle.type == 'select-one' ) {

// Si c'est le premier element qui est selectionne (element vide a indiquer dans le HTML)
		if ( controle.options[0].selected ) {
			mess += alerte;
			mess += "\n";
			necessaire = 1;
			}
		}

// Si c'est une case a cocher
	if ( controle.type == 'checkbox' ) {

// Quand elle est cochee, l'etat est 'true', ici on cherche l'inverse (false)
		if (!controle.status) {
			mess += alerte;
			mess += "\n";
			necessaire = 1;
			}
		}
	}

// Fonction pour le test des boutons radio
function vide_radio(formulaire,champ,alerte) {

// Creation d'un raccourci pour manipuler le champ a tester
	var controle = eval('document.' + formulaire + '.' + champ);

// On declare par defaut que les champs ne sont pas coches,
	var non = "hs";
	for ( i = 0; i < controle.length; i++ ) {

// Si on trouve un bouton coche, on le marque
		if (controle[i].status) {
			non = "ok";
			}
		}

// Si on n'a pas marque un champ comme 'coche' (ok)
	if ( non != "ok" ) {
		mess += alerte;
		mess += "\n";
		necessaire = 1;
		}
	}


// Fonction de validation du formulaire
function resultat(formulaire) {

// Si on a marque qu'au moins un champ etait vide
	if ( necessaire == 1 ) {

// Affichage du message d'erreur avec tous les champs en erreur
		alert(mess);
		}

// Si aucun champ n'est vide
	if ( necessaire == 0 ) {
		var formu = eval('document.' + formulaire);

// Validation du formulaire
		formu.submit();
		}

// Quoi qu'il arrive, on re-initialise le message d'erreur pour permettre un autre passage des tests
	mess = mess_init;
	necessaire = 0;
	}


// Fonction de verification d'une plage de nombres (entre X et Y)
function check_num(formulaire,champ,plancher,plafond) {

// Creation d'un raccourci pour manipuler le champ a tester
	var controle = eval('document.' + formulaire + '.' + champ);

// Si la valeur de la saisie est inferieure au plancher demande
	if ( controle.value < plancher ) {

// Envoi d'une alerte
		alert('Votre saisie ne doit pas etre inferieure a ' + plancher + '.');

// On active le blocage du champ
		bloque(formulaire,champ);
		}

// Si la valeur de la saisie est superieure au plafond demande
	if ( controle.value > plafond ) {
		alert('Votre saisie ne doit pas etre superieure a ' + plafond + '.');
		bloque(formulaire,champ);
		}
	}


// Fonction pour verifier la coherence de deux saisies de mot de passe
// Cette fonction se declenche a partir du second champ uniquement
function check_pw(formulaire,champ1,champ2) {
// Creation de deux raccourcis pour manipuler les champ a comparer
	var prems = eval('document.' + formulaire + '.' + champ1);
	var deuze = eval('document.' + formulaire + '.' + champ2);

// Si le premier champ n'est pas rempli
	if (!prems.value) {

// Envoi d'une alerte
		alert('Vous n\'avez pas saisi votre mot de passe');

// On active le blocage du champ
		bloque(formulaire,champ1);
		}

// Si le premier champ est rempli
	else {

// Si la saisie des deux champ est differente
		if ( prems.value != deuze.value ) {

// Envoi d'une alerte
			alert('La confirmation de votre mot de passe n\'est pas exacte.');

// Reinitialisation des deux champs
			deuze.value = "";
			prems.value = "";

// On active le blocage du champ
			bloque(formulaire,champ1);
			}
		}
	}
*/