	var GFVtest = 0;
	var missing = "";
	var msg = "";
	var invNum = ""; 
	var invPhone = ""; 
	var invEmail = "";
	var invDate = "";
	var iFocus = 0;
	var sDecryptDQ = "\"";
	var sDecryptSQ = "\'";
	var sDecrypt = "";
	var sAlphaNum = "";
	var sSumAlphaNum = ""
	
function Gunters_Form_Validator(frm)
	{//alert (frm.name)
	// 		?/|\!@#$%^&*(){}:.-[],=+_~`'
	if(GFVtest == 1) alert("frm.elements.length = " + frm.elements.length);
	
	for(i=0; i<frm.elements.length; i++) 
    {
    var el = frm.elements[i];
    
		if (GFVtest == 1) alert ("el.value (crypted) = " + el.value);
		sDecrypt = "";
		for (j=0;j<el.value.length; j++)
		{if (el.value.substr(j,1) == sDecryptDQ || el.value.substr(j,1) == sDecryptSQ)
			{	sDecrypt += "`";
			}
			else
			{sDecrypt += el.value.substr(j,1);
			}
		}
		el.value = sDecrypt;
		if (GFVtest == 1) alert ("el.value (decrypted) = " +el.value)      
  	
		if(el.alphanum)                    
      { sSumAlphaNum = ""                             
      	for (j=0;j<el.value.length;j++)
				{	sAlphaNum = el.value.substr(j,1)
					//alert(yy)
					if (sAlphaNum == " " || sAlphaNum =="-" || (sAlphaNum >= "0" && sAlphaNum <= "9")||(sAlphaNum >= "A" && sAlphaNum <= "Z")||(sAlphaNum >= "a" && sAlphaNum <= "z")) sSumAlphaNum += sAlphaNum
				}
				el.value = sSumAlphaNum;
			}
    
		if(el.password)                    
      { sSumPassword = ""                             
      	for (j=0;j<el.value.length;j++)
				{	spassword = el.value.substr(j,1)
					//alert(yy)
					if ((spassword >= "0" && spassword <= "9")||(spassword >= "A" && spassword <= "Z")||(spassword >= "a" && spassword <= "z")) sSumPassword += spassword
				}
				el.value = sSumPassword;
			}
    
		if(el.selected)  //must be selected > 0                   
      {                              
      if(el.value == 0)
        {
        missing += "\n   - " + el.name + " is not selected";
				if(iFocus == 0) {iFocus = i}
        }
      }
    
		if(el.date)
			{
			if(!check_date(el))
				{
				invDate += "\n   - " + el.name + " is not a valid date (mm/dd/yy)"
				if(iFocus == 0)	{iFocus = i}
				}
			}
		
		if(el.required)                     
      {                              
      if(isEmpty(el))
        {
        missing += "\n   - " + el.name + " is a required field";
				if(iFocus == 0) {iFocus = i}
        }
      }
    
		if(el.email)                     
      {                              
      if (!emailCheck(el.value))
        {
        invEmail += "\n   - " + el.value + " is not an email address";
				if(iFocus == 0) {iFocus = i}
        }
      }
    
		if(el.numeric)
      {
      if(notNumeric(el))
        {
        invNum += "\n   - " + el.name + " is not a number";
				if(iFocus == 0) {iFocus = i}
        }
      }
    
		if(el.notNullNumeric)
      {
      if(notNumeric(el))
        {
        invNum += "\n   - " + el.name + " is not a number";
				if(iFocus == 0) {iFocus = i}
        }
				else
				{
					if (parseInt(el.value) == 0)
					{
        	invNum += "\n   - " + el.name + " is 0";
					if(iFocus == 0) {iFocus = i}
        	}
				}
      }
    
		if(el.phone && el.value.length !=0)
      {
      if(invalidPhone(el) || el.value.length > 14)
        {
        invPhone += "\n  - " + el.value + " is not a valid phone number";
				if(iFocus == 0) {iFocus = i}
        }
      }
    }
  
  if(missing.length !=0 || invNum.length != 0 || invPhone.length != 0 || invEmail.length != 0 || invDate.length !=0)
    {
    if(missing.length !=0)
      {
      msg += "\n\nThe following required fields are missing:";
      msg += missing;
      }
    if(invNum.length !=0)
      {
      msg += "\n\nYou entered incorrect numeric data in these fields:";
      msg += invNum;
      }
    if(invPhone.length !=0)
      {
      msg += "\n\nYou entered an incorrect phone/fax number:";
      msg += invPhone;
      }
    if(invDate.length !=0)
      {
      msg += "\n\nYou entered an incorrect date (mm/dd/yy):";
      msg += invDate;
      }
    if(invEmail.length !=0)
      {
      msg += "\n\nYou entered an incorrect email address:";
      msg += invEmail;
      }
    xx = errMsg(msg);    
//	alert("iFocus = " + iFocus)      
//		if (iFocus != 0) {frm.elements[iFocus-1].focus();}
		if (iFocus != 0) {frm.elements[iFocus].focus();}
    else frm.elements[iFocus].focus();
    msg = ""; missing = ""; invNum = ""; invPhone = ""; invEmail = ""; invDate = ""; iFocus = 0;
   	return false;
    }
  else
    {
    return true;
    }
  }

function check_date(field){
var checkstr = "0123456789";
var DateField = field;
var DateValue = "";
var DateTemp = "";
var seperator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
var aDateField = new Array("","","");
//   err = 0;
  DateValue = DateField.value;
  aDateField = DateValue.split('/');
	//alert(DateValue);
	DateValue = "";
	//alert (aDateField.length);
	//alert (aDateField[0].length);
	for (i = 0; i < aDateField.length; i++) 
	{	if (aDateField[i].length == 1)
	 	{	aDateField[i] = "0" + aDateField[i]; 
			//alert (aDateField[i]);
			DateValue += aDateField[i];
			if (i <= 1) DateValue += "/";
		}
		else DateValue += aDateField[i];
	}
		
	//alert("`" + DateValue + "`");
	//test
	//return false
	
	 /* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) 
		{	DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   if (DateField.value == '01/01/1900') {	DateField.value = ""; return true; }
	 /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
//   month = DateValue.substr(2,2); EUR
   month = DateValue.substr(0,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
//   day = DateValue.substr(0,2);	EUR
   day = DateValue.substr(2,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }
   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) {
      DateField.value = month + seperator + day + seperator + year;
			return true;
   }
   /* Error-message if err != 0 */
   else {
			return false
//      alert("Date is incorrect!");
//      DateField.select();
//	  DateField.focus();
   }
}

function isEmpty(field)
  {
  str = field.value;
  if(str == "")
    {
    return true;
    }
  else
    {
    for(j=0; j<str.length; j++)
      {
      if(str.charAt(j) != " ")
        {
        return false;
        }
      }
    }
  return true;
  }

function notNumeric(field)
  {
  var errCount = 0;
  var numdecs = 0;                    
  for(j=0;j<field.value.length;j++)
    {
    c = field.value.charAt(j);        
    if((c >= 0 && c <= 9) || c=="." || (j==0 && c == "-"))
      {
      if(c==".") 
        {
        numdecs++;          
        }
      }
    else
      {
      errCount++;           
      break;                
      }
    }
  if(errCount > 0 || numdecs > 1)
    {
    return true;
    }
  return false;
  }

function stripNonDigits(str)
  {
  newStr = "";
  for(j=0; j<str.length; j++)
    {
    c = str.charAt(j);
    if(c >= "0" && c <= "9")
      {
      newStr += c;
      }
    }
  return newStr;
  }

function invalidPhone(field)
  {
  newStr = stripNonDigits(field.value);
  if(newStr.length == 10)
    {
    return false;
    }
  return true;
  }

function errMsg(msg)
  {
  var theMsg = "You entered incorrect value(s) into the form.\n";
  theMsg += "Please correct your entry and re-submit the form.\n";
  theMsg += "____________________________________________________________________";
  theMsg += msg;
  theMsg += "\n____________________________________________________________________\n";
 	theMsg += "\nYou will be directed automatically to the first incorrect field!\n";
  theMsg += "____________________________________________________________________\n";
  alert(theMsg);
  }

function emailCheck(emailStr) 
{
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) 
{
invEmail += "\n  - The email address seems incorrect (check @ and .'s)";
return false;
}
var user=matchArray[1];
var domain=matchArray[2];

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
invEmail += "\n  - The username contains invalid characters.";
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
invEmail += "\n  - The domain name contains invalid characters.";
return false;
   }
}

if (user.match(userPat)==null) 
{
invEmail += "\n  - The username doesn't seem to be valid.";
return false;
}

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) 
{
for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
invEmail += "\n  - The destination IP address is invalid!";
return false;
   }
}
return true;
}
 
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) {
invEmail += "\n  - The domain name does not seem to be valid.";
return false;
   }
}

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
invEmail += "\n  - The address must end in a well-known domain or two letter country.";
return false;
}

if (len<2) {
invEmail += "\n  - This address is missing a hostname!";
return false;
}

return true;
}

