function validate_blank(s) {
 for(var i=0; i<s.length; i++) {
  var c=s.charAt(i);
  if((c!=' ') && (c!='\n') && (c!='\t')) return false;
 }
 return true;
}

function validate_mail(s) {
 var pattern=/^[a-zA-Z0-9\.\_-]+\@[^\.]+\..+/;
 return s.match(pattern);
}

function validate_numbers(s) {
 var pattern=/^\d*$/;
 return s.match(pattern);
}

function validate_chars(s) {
 var pattern=/^[a-zA-Z]*$/;
 return s.match(pattern);
}

function validate_phone(s) {
 var pattern=/^(\+\d+)?[\d\(\)\-\/ ]{7,}$/;
 return s.match(pattern);
}

function validate_usphone(s) {
 var pattern=/^(\+1([\s\-\/]*))?\(?([\d]{3,})\)?([\-\/\s]*)([\d\s\-\/]{3,})$/;
 return s.match(pattern);
}

function validate_dephone(s) {
 var pattern=/^(\+49([\s\-\/]*))?\(?([\d]{3,})\)?([\-\/\s]*)([\d\s\-\/]{3,})$/;
 return s.match(pattern);
}

function validate_comment(s) {
 var pattern=/\w+\s+\w+/;
 return s.match(pattern);
}

function validate_form(f, lang) {
 var err_blank='';
 var err_mail='';
 var err_numbers='';
 var err_chars='';
 var err_minthree='';
 var err_phone='';
 var err_dephone='';
 var err_usphone='';
 var err_comment='';
 var msg='';

 function validate_field(e) {

  if((e.value==null) || (e.value=="") || validate_blank(e.value)) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_blank+="\n         "+e.name; } else { err_blank+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="mail") && (!validate_mail(e.value))) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_mail+="\n         "+e.name; } else { err_mail+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="minthree") && (e.value.length<3)) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_minthree+="\n         "+e.name; } else { err_minthree+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="numbers") && (!validate_numbers(e.value))) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_numbers+="\n         "+e.name; } else { err_numbers+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="chars") && (!validate_chars(e.value))) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_chars+="\n         "+e.name; } else { err_chars+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="phone") && (!validate_phone(e.value))) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_phone+="\n         "+e.name; } else { err_phone+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="usphone") && (!validate_usphone(e.value))) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_usphone+="\n         "+e.name; } else { err_usphone+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="dephone") && (!validate_dephone(e.value))) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_dephone+="\n         "+e.name; } else { err_dephone+="\n         "+e.desc; }
   return;
  }

  if((e.rule=="comment") && (!validate_comment(e.value))) {
   if((e.desc==null) || (e.desc=="") || validate_blank(e.desc)) { err_comment+="\n         "+e.name; } else { err_comment+="\n         "+e.desc; }
   return;
  }
 }

 if(navigator.appName == "Netscape") {
  for(var i=0; i<f.length; i++) {
   var e=f.elements[i];
   if(((e.type=="text") || (e.type="textarea")) && e.rule) {
    validate_field(e);
   }
  }
 }

 if(navigator.appName == "Microsoft Internet Explorer") {
  for(var i=0; i<document.all.length; i++) {
   var e=document.all[i];
   if(/^text/.test(e.type) && e.rule) {
    validate_field(e);
   }
  }
 }
 
 if(!err_blank && !err_mail && !err_minthree && !err_numbers && !err_chars && !err_phone && !err_dephone && !err_usphone && !err_comment) return true;

 if(lang=='de') {
  msg="Das Formular wurde wegen der folgenden Fehler nicht uebermittelt:\n";
  if(err_blank) msg+="\nFolgende Felder wurden nicht ausgefuellt:\n"+err_blank+"\n____________________________________________________\n";
  if(err_mail) msg+="\nDiese Felder enthalten keine gueltigen E-Mail Adressen:\n"+err_mail+"\n\nE-Mail Adressen haben die Form 'user@host.domain',\nz.B.: 'john.doe@www.de'.\n____________________________________________________\n";
  if(err_minthree) msg+="\nDiese Felder muessen mindestens drei Zeichen enthalten:\n"+err_minthree+"\n____________________________________________________\n";
  if(err_numbers) msg+="\nDiese Felder duerfen nur Ziffern enthalten:\n"+err_numbers+"\n____________________________________________________\n";
  if(err_chars) msg+="\nDiese Felder duerfen nur Textzeichen enthalten:\n"+err_chars+"\n____________________________________________________\n";
  if(err_phone) msg+="\nDiese Felder enthalten keine gueltige Telefonnummer im Format '+xx xxxx xxxxx'':\n"+err_phone+"\n____________________________________________________\n";
  if(err_usphone) msg+="\nDiese Felder enthalten keine amerikanische Telefonnummer:\n"+err_usphone+"\n\nAmerikanische Telefonnummern haben die Form +1 Vorwahl Nummer,\nz.B.: '+1 (123) 123-4567', Klammern, Minuszeichen und Schraegstriche sind erlaubt.\n____________________________________________________\n";
  if(err_dephone) msg+="\nDiese Felder enthalten keine deutsche Telefonnummer:\n"+err_dephone+"\n\nDeutsche Telefonnummern haben die Form +49 Vorwahl Nummer,\nz.B.: '+49 (1234) 12345', Klammern, Minuszeichen und Schraegstriche sind erlaubt.\n____________________________________________________\n";
  if(err_comment) msg+="\nDiese Felder muessen mindestens zwei Worte enthalten:\n"+err_comment+"\n____________________________________________________\n";
  msg+="\nBitte korrigieren Sie diese Felder und senden das Formular erneut.\n";
 } else {
  msg="The form was not submitted because of the following error(s):\n";
  if(err_blank) msg+="\nThese required fields are empty:\n"+err_blank+"\n____________________________________________________\n";
  if(err_mail) msg+="\nThese fields must contain valid e-mail addresses:\n"+err_mail+"\n\nA valid e-mail address must have the form 'user@host.domain',\ne/g: 'john.doe@www.net'.\n____________________________________________________\n";
  if(err_minthree) msg+="\nThese fields must contain at least three characters:\n"+err_minthree+"\n____________________________________________________\n";
  if(err_numbers) msg+="\nThese fields must contain only numbers:\n"+err_numbers+"\n____________________________________________________\n";
  if(err_chars) msg+="\nThese fields must contain only word characters:\n"+err_chars+"\n____________________________________________________\n";
  if(err_phone) msg+="\nThese fields must contain valid phone numbers:\n"+err_phone+"\n____________________________________________________\n";
  if(err_usphone) msg+="\nThese fields must contain american phone numbers:\n"+err_usphone+"\n\nAmerican phone numbers have the form +1 area-code local-number,\ne/g: '+1 (123) 123-4567', brackets, the minus sign and slashes are allowed.\n____________________________________________________\n";
  if(err_dephone) msg+="\nThese fields must contain german phone numbers:\n"+err_dephone+"\n\nGerman phone numbers have the form +49 area-code local-number,\ne/g: '+49 (1234) 12345', brackets, the minus sign and slashes are allowed.\n____________________________________________________\n";
  if(err_comment) msg+="\nThese fields must contain a comment of at least two words:\n"+err_comment+"\n____________________________________________________\n";
  msg+="\nPlease correct these fields and re-submit.\n";
 }
 
 alert(msg);

 return false;
}

