function bad_email(emailStr) {

  if (emailStr==null||emailStr=="") {
    alert("Veuillez completer votre adresse courriel avant de continuer");
    return true;
  }

  var checkTLD=1;
  var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
  var emailPat=/^(.+)@(.+)$/;
  var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
  var validChars="\[^\\s" + specialChars + "\]";
  var quotedUser="(\"[^\"]*\")";
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
  var atom=validChars + '+';
  var word="(" + atom + "|" + quotedUser + ")";
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

  var matchArray=emailStr.match(emailPat);
  if (matchArray==null) {
    alert("Le format de votre adresse courriel n'est pas valable.");
    return true;
  }
  
  var user=matchArray[1];
  var domain=matchArray[2];
  for (i=0; i<user.length; i++) {
    if (user.charCodeAt(i)>127) {
      alert("Votre adresse courriel contient des caractères non valable.");
      return true;
    }
  }
  for (i=0; i<domain.length; i++) {
    if (domain.charCodeAt(i)>127) {
      alert("Votre adresse courriel contient des caractères non valable.");
      return true;
    }
  }

  if (user.match(userPat)==null) {
    alert("Votre adresse courriel contient des erreurs.");
    return true;
  }

  var IPArray=domain.match(ipDomainPat);
  if (IPArray!=null) {
    for (var i=1;i<=4;i++) {
      if (IPArray[i]>255) {
        alert("Votre adresse courriel contient des erreurs.");
        return true;
      }
    }
  return false;
  }

  var atomPat=new RegExp("^" + atom + "$");
  var domArr=domain.split(".");
  var len=domArr.length;
  for (i=0;i<len;i++) {
    if (domArr[i].search(atomPat)==-1) {
      alert("Votre adresse courriel contient des erreurs.");
      return true;
    }
  }

  if (checkTLD && domArr[domArr.length-1].length!=2 && 
  domArr[domArr.length-1].search(knownDomsPat)==-1) {
    alert("Votre adresse courriel contient des erreurs.");
    return true;
  }

  if (len<2) {
    alert("Votre adresse courriel contient des erreurs.");
    return true;
  }

  return false;
}

function FieldIsEmpty(field) {
  if (field==undefined)
    return true;
  else with (field) {
    if (value==null||value=="")
      return true;
    else
      return false;
  }
}

function BadFieldLen(field, MinSize, MaxSize) {
  if (FieldIsEmpty(field))
    return (MinSize != 0);
  else if ((MaxSize > 0) && (field.value.length > MaxSize))
    return true;
  else
    return false;
}

function text_counter(field, countfield, maxlimit) {
  if (field.value.length > maxlimit)
    field.value = field.value.substring(0, maxlimit);
  else if (countfield!="")
    document.getElementById(countfield).innerHTML = (maxlimit - field.value.length) + " caractères disponibles";
}

function validate_form(thisform) {
  with (thisform) {
    if (validate_id==undefined||validate_id==null||validate_id.value==null)
      form_id = "";
    else
      form_id = validate_id.value;

    if (form_id=="cf") {
      if (BadFieldLen(fookes01,1,40)) {
        fookes01.focus();
	if (FieldIsEmpty(fookes01))
          alert("Veuillez completer votre nom");
	else
          alert("Votre nom ne peut pas excéder 40 caractères");
        return false;
      }
      else if (bad_email(fookes02.value)) {
        fookes02.focus();
        return false;
      }
      else if (BadFieldLen(fookes03,1,74)) {
        fookes03.focus();
	if (FieldIsEmpty(fookes03))
          alert("Veuillez completer le champ Objet pour votre message");
	else
          alert("Le champ Objet ne peut pas excéder 74 caractères");
        return false;
      }
      else if (BadFieldLen(comments,4,2560)) {
        comments.focus();
	if (FieldIsEmpty(comments))
          alert("Votre message est vide");
	else
          alert("Votre message ne peut pas excéder 2560 caractères");
        return false;
      }
      else
        return true;
    }
    else
      return true;
  }
}

