function isEmail(x) 
{ 
	var emailStr=x.value; 
	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) 
	  return "The email address seems incorrect (check @ and .'s)"; 

	var user=matchArray[1]; 
	var domain=matchArray[2]; 
	if (user.match(userPat)==null) 
	   return "The email address username doesn't seem to be valid"; 

	var IPArray=domain.match(ipDomainPat); 
	if (IPArray!=null) 
	{ 
		for (var i=1;i<=4;i++) { 
		   if (IPArray[i]>255) 
				return "The email address destination IP address is invalid"; 
		} 
		return ""; 
	}

	var domainArray=domain.match(domainPat); 
	if (domainArray==null) 
		return "The email address domain name doesn't seem to be valid."; 

	var atomPat=new RegExp(atom,"g"); 
	var domArr=domain.match(atomPat); 
	var len=domArr.length; 

	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>4) 
	   return "The email address must end in a three or four letter domain, or two letter country."; 

	if (len<2) 
	   return "The email address is missing a hostname"; 

	return "";
} 


function valIsNumber(x) {
	if (getLength(x) > 0) {
		if (isNaN(getValue(x)))
			return "must be a number";
		else if (parseInt(getValue(x))>=0)
			return "";
		else
			return "must be a number";
	} else {
		return "";
	}
}

function getValue(x) {
	if (x.type.substr(0,6)=="select") //a hack thanks to Netscape
		return x.options[x.selectedIndex].value;
	else
		return x.value;
}

function getLength(x) {
	if (x.type.substr(0,6)=="select") //a hack thanks to Netscape
		if (x.selectedIndex > -1)
			return x.options[x.selectedIndex].value.length;
		else
			return 0;
	else {
		x.value = trimString(x.value);
		return x.value.length;
	}
}

function trimString(theString) {
	var newString = theString;
	while (newString.charAt(0) == " ") {
		newString = newString.substring(1,newString.length);
	}
	while (newString.charAt(newString.length - 1) == " ") {
		newString = newString.substring(0,newString.length - 1);
	}
	return newString;
}