// Verifie si une adresse email correspond au format X@XX.XX
function verifmail(adresse)
{
 // Recherche position du @ à partir du 2nd caractere
 var place = adresse.indexOf("@",1);
 // Recherche position du point à partie du 3eme caractere aprés l'@
 var point = adresse.indexOf(".",place+3);
 // Teste les resultats des recherches
 // Verifie si il reste 2 caractere aprés le point
 if ((place > -1) && (point > 1) && (point+2 < adresse.length)) return true;
}

// Verifie l'extension du fichier
function verifext(path,ext)
{
 if (ext.indexOf(path.substring(path.lastIndexOf("."),path.length).toLowerCase(),0) > -1) return true;
}

// Verifie la validité d'une date
function verifdate(champ)
{
	// Recupère les  3 champs jour, mois, annee dans un tableau
	var ladate = champ.parentNode.getElementsByTagName("select");
	// Créer la date correspondante. Attention, les mois sont étalonnés de 0 à 11
 var unedate = new Date(eval(ladate[2].value),eval(ladate[1].value)-1,eval(ladate[0].value));
 // Vérifier si le jour, le mois et l'année obtenus sont les mêmes que ceux saisis par l'utilisateur.
 return ((unedate.getDate() == eval(ladate[0].value)) && (unedate.getMonth() == eval(ladate[1].value)-1) && (unedate.getFullYear() == eval(ladate[2].value)));
}

// Encadre un paragraphe, insere un message d'alerte et renvoie le focus sur le champ 
function insertmsg(label,textmsg,champ)
{
 // Mise en valeur du champ
 label.parentNode.className = "alerte";
 // Création du message d'alerte
 var message = document.createElement("div");
 message.id = "alerte";
 message.innerHTML = textmsg;
 // Insertion du message 
 label.parentNode.insertBefore(message,label);
 // Renvoie le focus sur le champ
 champ.focus();
}

// Verifie la validité du formulaire
function veriform(idform)
{
 if (document.getElementById)
 {
  // Efface le message d'alerte précedent si il existe
  if (document.getElementById("alerte"))
  {
   var message = document.getElementById("alerte");
   message.parentNode.removeAttribute("class");
   message.parentNode.removeChild(message);
  }
  // Recupere le formulaire à verifier
  var formulaire = document.getElementById(idform);
  // Recupere un tableau contenant les labels du formulaire
  var labels = formulaire.getElementsByTagName("label");
  // Parcours les labels du formulaire
  for (var i = 0; i < labels.length; i++)
  {
   // Recupere l'id du champ associé au label
   if (document.all)
   {
    // Internet explorer
    var idchamp = labels[i].getAttribute("htmlFor");
   }else{
    // Gecko
    var idchamp = labels[i].getAttribute("for");
   }  
   // Recupere l'input associé au label
   var champ = document.getElementById(idchamp); 
   // Verifie si le champ est vide
   if (champ.value == "")
   {
    // Verifie si le champ est obligatoire
    if (labels[i].className == "oblig")
    {
     insertmsg(labels[i],"Ce champ est obligatoire!",champ);
     break;
    }
   }else{
    // Verifie si le champ est du type email et si l'adresse est valide
    if (champ.getAttribute("type") == "email")
    {
     if (!verifmail(champ.value)) {insertmsg(labels[i],"L'adresse e-mail n'est pas valide!",champ);break;}
    }
    // Verifie l'extension du fichier 
    if (champ.getAttribute("type") == "file")
    {
     if (!verifext(champ.value,champ.getAttribute("ext")))
     {
      insertmsg(labels[i],"Ce format n'est pas pris en charge!",champ);
      break;
     }
    }
	// Verifie si le champ est du type date et si la date est valide
	if (champ.getAttribute("type") == "date")
	{
	 if (!verifdate(champ)) {insertmsg(labels[i],"La date n'est pas valide!",champ);break;}
	}
   }
  }
  // Verifie si le formulaire contient un message d'alerte
  if (!document.getElementById("alerte")) formulaire.submit();
 }
}

// Renvoie le focus sur le premier champ du formulaire
function posCursor()
{
 document.getElementsByTagName("input") [0].focus();
}

addToStart(posCursor);
