function bad_email(emailStr) {

  if (emailStr==null||emailStr=="") {
    alert("Please enter your email address before continuing");
    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("Your email address seems incorrect (check @ and .'s)");
    return true;
  }
  
  var user=matchArray[1];
  var domain=matchArray[2];
  for (i=0; i<user.length; i++) {
    if (user.charCodeAt(i)>127) {
      alert("Your email username contains invalid characters.");
      return true;
    }
  }
  for (i=0; i<domain.length; i++) {
    if (domain.charCodeAt(i)>127) {
      alert("Your email domain name contains invalid characters.");
      return true;
    }
  }

  if (user.match(userPat)==null) {
    alert("Your email username doesn't seem to be valid.");
    return true;
  }

  var IPArray=domain.match(ipDomainPat);
  if (IPArray!=null) {
    for (var i=1;i<=4;i++) {
      if (IPArray[i]>255) {
        alert("Your email destination IP address is invalid!");
        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("Your email domain name does not seem to be valid.");
      return true;
    }
  }

  if (checkTLD && domArr[domArr.length-1].length!=2 && 
  domArr[domArr.length-1].search(knownDomsPat)==-1) {
    alert("Your email address must end in a well-known domain or two letter country.");
    return true;
  }

  if (len<2) {
    alert("Your email address is missing a hostname!");
    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) + " characters left";
}

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=="product") {
      if (BadFieldLen(product,3,4)) {
        product.focus();
        alert("Please select a product name from the list");
        return false;
      }
      else if (BadFieldLen(topic,3,10)) {
        topic.focus();
        alert("Please select a topic from the list");
        return false;
      }
      else
        return true;
    }
    else if (form_id=="code") {
      if (BadFieldLen(code,7,15)) {
        code.focus();
        alert("Please enter your activation code");
        return false;
      }
      else
        return true;
    }
    else if (form_id=="details") {
      if (BadFieldLen(version,1,8)) {
        version.focus();
        alert("Please enter your Aid4Mail version number");
        return false;
      }
      else if (BadFieldLen(windows,3,7)) {
        windows.focus();
        alert("Please select your Windows version from the list");
        return false;
      }
      else if (BadFieldLen(outlook,0,10)) {
        windows.focus();
        alert("Please select your MS Outlook version from the list");
        return false;
      }
      else if (BadFieldLen(error,0,80)) {
        windows.focus();
        alert("The error text may not exceed 80 characters");
        return false;
      }
      else
        return true;
    }
    else if (form_id=="cf") {
      if (BadFieldLen(fookes01,0,40)) {
        fookes01.focus();
        alert("Your name may not exceed 40 characters");
        return false;
      }
      else if (bad_email(fookes02.value)) {
        fookes02.focus();
        return false;
      }
      else if (BadFieldLen(fookes03,1,74)) {
        fookes03.focus();
	if (FieldIsEmpty(fookes03))
          alert("Please enter a meaningful message subject before continuing");
	else
          alert("Your subject may not exceed 74 characters");
        return false;
      }
      else if (BadFieldLen(comments,4,2560)) {
        comments.focus();
	if (FieldIsEmpty(comments))
          alert("Please type your message before continuing");
	else
          alert("Your message may not exceed 2560 characters");
        return false;
      }
      else
        return true;
    }
    else
      return true;
  }
}
