/*
Definition de la fonction JavaScript de verification des champs
d'un formulaire du cote client
*/

// Pour l'affichage formate sur 2 digits des nombres
function ajoute0(entier)
{
  var chaine = new String(entier);
  return (chaine.length == 1 ? '0'+entier : entier);
}
function verifInput(input, valeurInitiale, type)
{
  // Si "valeurInitiale" n'est pas definie, la mettre a '' (je fais
  // ceci car les valeurs par defaut aux parametres ne sont pas permises
  // en JavaScript)
  if(valeurInitiale == null)
    valeurInitiale = '';
  switch(type)
  {
  // Tres bon tutoriel sur les dates: http://www.asp-php.net/tutorial/scripting/dates.php
  case 'date':
  case 'datetime':
    // Saisie fausse
    var date = parseDate(input.value);
    if(isNaN(date))
      input.value = valeurInitiale;
    // Saisie correcte
    else
    {
      input.value = '';
      switch(type)
      {
      case 'datetime':
        input.value = ' '+ajoute0(date.getHours())+':'+ajoute0(date.getMinutes())+':'+ajoute0(date.getSeconds());
      case 'date':
	    input.value = ajoute0(date.getDate())+'.'+ajoute0(date.getMonth()+1)+'.'+date.getFullYear()+input.value;
	    break;
	  }
    }
    break;
  case 'int':
    var entier = parseInt(input.value);
    if(isNaN(entier))
	  input.value = valeurInitiale;
	else
	  input.value = entier;
	break;
  case "float":
    var flottant = parseFloat(input.value);
    if(isNaN(flottant))
	  input.value = valeurInitiale;
	else
	  input.value = flottant;
	break;
  }
}

// Parse une date au format europeen. Retourne la date
// sous forme d'un objet Date si le parsing s'est effectue
// correctement et NaN sinon
function parseDate(chaineDateEuropeenne)
{
  // Mettre la date au format americain
  var temp = chaineDateEuropeenne.split('.');
  var chaineJour = temp[0];
  var chaineMois = temp[1];
  var chaineReste = temp[2];
  var chaineDateAmericaine = chaineMois+'/'+chaineJour+'/'+chaineReste;
  // Verifier la validite de la date
  var date = new Date();
  date.setTime(Date.parse(chaineDateAmericaine));
  return date;
}


function emailOK(email)
{
  email=email.toLowerCase();
  charOk="abcdefghijklmnopqrstuvwxyz0123456789_@.-";
  test=false;
  if (email.length>0 && email.length<6){return false;}// Si l'email fait moins de 6 caracteres mais au moins 1
  if (email.indexOf('@')<0){return false;}// Si l'email ne contient pas d'@'
  if (email.indexOf('.')<0){return false;}// Si l'email ne contient pas de '.'
  if (((email.indexOf('.', (((email.indexOf('@'))+1)))))==(email.indexOf('@')+1)){return false;}// Si l'email as un '.' apres l'@
  if (((email.indexOf('.', (((email.indexOf('@'))-1)))))==(email.indexOf('@')-1)){return false;}// Si l'email as un '.' avant l'@
  if ((email.indexOf('.'))==0){return false;}// Si l'email as un '.' au debut
  if ((email.charAt((email.length-1))=='.')){return false;}// Si l'email a un '.' a la fin
  if ((email.indexOf('@'))==0){return false;}// Si l'email as un '@' au debut
  if ((email.charAt((email.length-1))=='@')){return false;}// Si l'email a un '@' a la fin
  // Si l'email n'a pas de '.' un peu apres le '@'
  tmp=false;
  for (i=1;i<(email.length-(email.indexOf('@')));i++)
  {
      if (email.charAt((email.indexOf('@'))+i)=='.')
      {
        tmp=true;
        i=(email.length);
      }
  }
  if (tmp==false){return false;}
  // Si l'email a plusieurs '@'
  for (i=0;i<email.length;i++)
  {
    if (email.charAt(i)=='@')
    {
      for (j=i+1;j<email.length;j++)
        {if (email.charAt(j)=='@'){return false;}}
    }       
  }
  // Si l'email a 2 '.' d'affilé
  for (i=0;i<(email.length-1);i++)
  {if ((email.charAt(i)=='.') && (email.charAt(i+1)=='.')){return false;}}
  // Si l'email contient un caractere interdis
  for (i=0;i<email.length;i++)
  {
    for (j=0;j<charOk.length;j++)
    {
      if ((email.charAt(i))==(charOk.charAt(j)))
      {
        test=true;
        j=(charOk.length);
      }
      else {test=false;}
    }
    if (test==false){return test;}
  }
  return test;
}



// Retourne "true" ou "false" si la "balise" est correcte ou non
function verif(balise, type, minLength, maxLength)
{
  //alert(balise.value.length+' < '+minLength+' || '+balise.value.length+' > '+maxLength);
  //alert(balise.value.length < minLength || (maxLength != -1 && balise.value.length > maxLength));
  // Quels que soient les types, verifier les longueur minimales et maximales
  if(balise.value.length < minLength || (maxLength != -1 && balise.value.length > maxLength))
    return false;
  // Si le champ est obligatoire ou s'il a quelque chose,
  // en verifier le type
  if(minLength > 0 || balise.value.length > 0)
  {
    // Verification en fonction du type
    switch(type)
    {
    case "text":
    case "password":
    case "textarea":
      return true;
    case "int":
      return !isNaN(parseInt(balise.value));
    case "float":
      return !isNaN(parseFloat(balise.value));
    case "email":
      return emailOK(balise.value);
    case "date":
    case "datetime":
      return !isNaN(parseDate(balise.value));
    default: // On est dans le cas d'un fichier
      // Isoler l'extension du fichier introduit
      var temp = balise.value.split('.');
	  var extensionFichierIntroduit = temp[1];
      var extensionTrouvee = false;
      // Verifier chaque extension de fichier
      extensions = type.split(',');
      var i;
      for(i in extensions)
        extensionTrouvee = (extensionTrouvee || (extensionFichierIntroduit == extensions[i]));
      return extensionTrouvee;
    }
  }
  return true;
}
