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

function isEmail(value){
  var re=/^[a-z](\.?[a-z0-9_-])*[@]([a-z0-9_-]+\.)+([a-z]{2,3})$/i;
  return re.test(value)?true:false;
}
function isFRPhoneNumber(value){
  var re=/^(\d{2}(\ |-)?){5}$/;
  return re.test(value)?true:false;
}
function isNumeric(value){
  var re=/^\d+$/;
  return re.test(value)?true:false;
}
function isFRPostalCode(value){
  var re=/^\d{5}$/;
  return re.test(value)?true:false;
}
function isLetter(value){
  var re=/^[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝa-zàáâãäåçèéêëìíîïñòóôõöùúûüýÿ][A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝa-zàáâãäåçèéêëìíîïñòóôõöùúûüýÿ\ \-']*$/;
  return re.test(value)?true:false;
}
function getFRDateObject(sDate){
  var t1=sDate.split("/");
  return new Date(t1[2], t1[1]-1, t1[0]);
}
function getFRDateString(dDate){
  return (dDate.getDate()<10?"0":"")+dDate.getDate()
    +"/"+((dDate.getMonth()+1)<10?"0":"")+(dDate.getMonth()+1)
    +"/"+dDate.getFullYear();
}
function isFRDateEqual(sDate1, sDate2){
  if(!isFRDate(sDate1)||!(isFRDate(sDate2))) return false;
  return isDateEqual(getFRDateObject(sDate1), getFRDateObject(sDate2));
}
function isDateEqual(dDate1, dDate2){
  return dDate1.getTime()==dDate2.getTime();
}
function isFRDateBefore(sDate1, sDate2){
  if(!isFRDate(sDate1)||!(isFRDate(sDate2))) return false;
  return isDateBefore(getFRDateObject(sDate1), getFRDateObject(sDate2));
}
function isDateBefore(dDate1, dDate2){
  return dDate1.getTime()<dDate2.getTime();
}
function isFRDateAfter(sDate1, sDate2){
  if(!isFRDate(sDate1)||!(isFRDate(sDate2))) return false;
  return isDateAfter(getFRDateObject(sDate1), getFRDateObject(sDate2));
}
function isDateAfter(dDate1, dDate2){
  return dDate1.getTime()>dDate2.getTime();
}
function isFRDate(value){
  if(!/^(\d{1,2}\/){2}\d{4}$/.test(value)) return false;
  var v=value.split("/");
  return isDate(v[0], v[1], v[2]);
}
function isDate(jj, mm, aaaa){
  if(!isNumeric(jj)||!isNumeric(mm)||!isNumeric(aaaa)) return false;
  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 isMinuscule(chara){
  return /^[a-zàáâãäåçèéêëìíîïñòóôõöùúûüýÿ]$/.test(chara)?true:false;
}
function isMajuscule(chara){
  return /^[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]$/.test(chara)?true:false;
}
function isAlphabetical(value){
  var re=/^[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝa-zàáâãäåçèéêëìíîïñòóôõöùúûüýÿ\s'\-]+$/;
  return re.test(value)?true:false;
}
function isAlphanumeric(value){
  var re=/^[A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝa-zàáâãäåçèéêëìíîïñòóôõöùúûüýÿ\s\S,'0-9\-]+$/;
  return re.test(value)?true:false;
}

//==============================================================================
// 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 getSelectValue(selectName){
  return(sel.options[selectName.selectedIndex].text);
}

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

//Convertit les centimes d'euro en euros
function convertCtsToEuros(cts){
  var l=cts.length;
  switch(l){
    case 0:  return "0,00";
    case 1:  return "0,0"+cts;
    case 2:  return "0,"+cts;
    default: return cts.substr(0, l-2)+","+cts.substr(l-2, l);
  }
}

//Initialise tous les objets du formulaire
function initialize(form){
  with(form){
    for(var i=0;i<elements.length;i++)
      if(elements[i].type=="text"||elements[i].type=="textarea")
        elements[i].value="";
      else if(elements[i].type.substring(0,6)=="select")
        elements[i].selectedIndex=0;
  }
}

//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].type=="textarea")
        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].type=="textarea")
        elements[i].value=getTrim(elements[i].value);
  }
}

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

//Retourne le dernier élément de la pile sous forme de chaîne de caractères, et la mise à jour de la pile
//Le résultat est un tableau :
//  - indice 0 : dernier élément,
//  - indice 1 : la pile otée du dernier élément.
function removeLast(stack, delimiter){
  var i=stack.lastIndexOf(delimiter);
  return i==-1
    ? new Array(stack, "")
    : new Array(stack.substr(i+1,stack.length), stack.substr(0,i));
}
function removeFirst(stack, delimiter){
  var i=stack.indexOf(delimiter);
  return i==-1
    ? new Array(stack, "")
    : new Array(stack.substr(0,i), stack.substr(i+1,stack.length));
}


