function validateForm(theForm) {

	var validUsernameChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_';
	for(var x = 0, str = theForm.memberUsername.value; x < str.length; x++) {
		if(validUsernameChars .indexOf(str.charAt(x)) < 0) {
			alert("Your username can only contain letters, numbers, and the underscore ( _ ) symbol");
			theForm.memberUsername.select();
			theForm.memberUsername.focus();
			return false;
		}
	}

	var validNameChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ';
	for(var x = 0, str = theForm.memberFirstName.value; x < str.length; x++) {
		if(validNameChars.indexOf(str.charAt(x)) < 0) {
			alert("Your first name can only contain letters and spaces");
			theForm.memberFirstName.select();
			theForm.memberFirstName.focus();
			return false;
		}
	}
	for(var x = 0, str = theForm.memberLastName.value; x < str.length; x++) {
		if(validNameChars.indexOf(str.charAt(x)) < 0) {
			alert("Your last name can only contain letters and spaces");
			theForm.memberLastName.select();
			theForm.memberLastName.focus();
			return false;
		}
	}

	var validNumbers = '0123456789';
	for(var x = 0, str = theForm.elements['memberDOB[]'][0].value; x < str.length; x++) {
		if(validNumbers.indexOf(str.charAt(x)) < 0) {
			alert("Your date of birth can only contain numbers");
			theForm.elements['memberDOB[]'][0].select();
			theForm.elements['memberDOB[]'][0].focus();
			return false;
		}
	}
	for(var x = 0, str = theForm.elements['memberDOB[]'][2].value; x < str.length; x++) {
		if(validNumbers.indexOf(str.charAt(x)) < 0) {
			alert("Your date of birth can only contain numbers");
			theForm.elements['memberDOB[]'][2].select();
			theForm.elements['memberDOB[]'][2].focus();
			return false;
		}
	}
	for(var x = 0, str = theForm.elements['memberDOB[]'][4].value; x < str.length; x++) {
		if(validNumbers.indexOf(str.charAt(x)) < 0) {
			alert("Your date of birth can only contain numbers");
			theForm.elements['memberDOB[]'][4].select();
			theForm.elements['memberDOB[]'][4].focus();
			return false;
		}
	}
	for(var x = 0, str = theForm.elements['memberPhone[]'][1].value; x < str.length; x++) {
		if(validNumbers.indexOf(str.charAt(x)) < 0) {
			alert("Your phone number can only contain numbers");
			theForm.elements['memberPhone[]'][1].select();
			theForm.elements['memberPhone[]'][1].focus();
			return false;
		}
	}
	for(var x = 0, str = theForm.elements['memberPhone[]'][1].value; x < str.length; x++) {
		if(validNumbers.indexOf(str.charAt(x)) < 0) {
			alert("Your phone number can only contain numbers");
			theForm.elements['memberPhone[]'][1].select();
			theForm.elements['memberPhone[]'][1].focus();
			return false;
		}
	}
	for(var x = 0, str = theForm.elements['memberPhone[]'][3].value; x < str.length; x++) {
		if(validNumbers.indexOf(str.charAt(x)) < 0) {
			alert("Your phone number can only contain numbers");
			theForm.elements['memberPhone[]'][3].select();
			theForm.elements['memberPhone[]'][3].focus();
			return false;
		}
	}
	for(var x = 0, str = theForm.elements['memberPhone[]'][5].value; x < str.length; x++) {
		if(validNumbers.indexOf(str.charAt(x)) < 0) {
			alert("Your phone number can only contain numbers");
			theForm.elements['memberPhone[]'][5].select();
			theForm.elements['memberPhone[]'][5].focus();
			return false;
		}
	}

	if (theForm.memberUsername.value.length < 4) {
		alert ("Please specify a username no less than four (4) characters long");
		theForm.memberUsername.select();
		theForm.memberUsername.focus();
	}
	else if (theForm.memberFirstName.value.length <= 0) {
		alert ("Please provide us with your first name");
		theForm.memberFirstName.select();
		theForm.memberFirstName.focus();
	}
	else if (theForm.memberLastName.value.length <= 0) {
		alert ("Please provide us with your last name");
		theForm.memberLastName.select();
		theForm.memberLastName.focus();
	}
	else if (theForm.memberGameHandle.value.length < 2) {
		alert ("Please specifcy a gaming handle no less than two (2) characters long");
		theForm.memberGameHandle.select();
		theForm.memberGameHandle.focus();
	}
	else if (theForm.memberEmail.value.length < 5) {
		alert ("Please enter a valid email address");
		theForm.memberEmail.select();
		theForm.memberEmail.focus();
	}
	else if (theForm.memberEmail.value != theForm.memberEmail2.value) {
		alert ("The email addresses you entered do not match");
		theForm.memberEmail.select();
		theForm.memberEmail.focus();
	}
	else if (theForm.elements['memberDOB[]'][0].value.length < 2) {
		alert ("Please indicate the month you were born");
		theForm.elements['memberDOB[]'][0].select();
		theForm.elements['memberDOB[]'][0].focus();
	}
	else if (theForm.elements['memberDOB[]'][2].value.length < 2) {
		alert ("Please indicate the day you were born");
		theForm.elements['memberDOB[]'][2].select();
		theForm.elements['memberDOB[]'][2].focus();
	}
	else if (theForm.elements['memberDOB[]'][4].value.length < 4) {
		alert ("Please indicate the year you were born");
		theForm.elements['memberDOB[]'][4].select();
		theForm.elements['memberDOB[]'][4].focus();
	}
	else if (theForm.elements['memberPhone[]'][1].value.length < 3 && theForm.elements['memberAltPhone'].value.length <= 0) {
		alert ("Please provide us with your complete phone number");
		theForm.elements['memberPhone[]'][1].select();
		theForm.elements['memberPhone[]'][1].focus();
	}
	else if (theForm.elements['memberPhone[]'][3].value.length < 3 && theForm.elements['memberAltPhone'].value.length <= 0) {
		alert ("Please provide us with your complete phone number");
		theForm.elements['memberPhone[]'][3].select();
		theForm.elements['memberPhone[]'][3].focus();
	}
	else if (theForm.elements['memberPhone[]'][5].value.length < 3 && theForm.elements['memberAltPhone'].value.length <= 0) {
		alert ("Please provide us with your complete phone number");
		theForm.elements['memberPhone[]'][5].select();
		theForm.elements['memberPhone[]'][5].focus();
	}
	else if (theForm.memberAddress1.value.length <= 0) {
		alert ("Please provide us with your street address");
		theForm.memberAddress1.select();
		theForm.memberAddress1.focus();
	}
	else if (theForm.memberCity.value.length <= 0) {
		alert ("Please provide us with your city");
		theForm.memberCity.select();
		theForm.memberCity.focus();
	}
	else if (theForm.memberState.value.length < 2 && (theForm.memberCountry.value == 'US' || theForm.memberCountry.value == 'CA')) {
		alert ("Please provide us with your state/province");
		theForm.memberState.select();
		theForm.memberState.focus();
	}
	else if (theForm.memberZIP.value.length < 4) {
		alert ("Please provide us with your zip code");
		theForm.memberZIP.select();
		theForm.memberZIP.focus();
	}
	else {
		return true;
	}
	return false;
}

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 ((emailStr=="")||(emailStr=="name@domain.com")){
		return true;
	}
	
	if (matchArray==null){
		alert("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){
			alert("Ths username contains invalid characters.");
			return false;
		}
	}
	
	for (i=0; i<domain.length; i++){
		if (domain.charCodeAt(i)>127){
			alert("Ths domain name contains invalid characters.");
			return false;
		}
	}
	
	if (user.match(userPat)==null){
		alert("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){
				alert("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){
			alert("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){
		alert("The address must end in a well-known domain or two letter " + "country.");
		return false;
	}
	
	if (len<2){
		alert("This address is missing a hostname!");
		return false;
	}
	return true;
}

function verify_username(username)
{
	if (username.length < 3)
	{
		alert('The username must be at least 3 characters long.');
		return false;
	}
	else
	{
		return true;
	}
}

function verify_passwords(password1, password2)
{
	if (password1.value == '' || password2.value == '')
	{
		alert('Please fill out both password fields.');
		return false;
	}
	else if (password1.value != password2.value)
	{
		alert('The entered passwords do not match.');
		return false;
	}
	else if (password1.length < 6)
	{
		alert('The password must be at least 6 characters long.');
		return false;
	}
	else
	{
		md5hash(password1, document.forms.register.password_md5);
		md5hash(password2, document.forms.register.passwordconfirm_md5);
		return true;
	}
	return false;
}

function verify_emails(email1, email2)
{
	if (email1.value == '' || email2.value == '')
	{
		alert('Please fill out both email fields.');
		return false;
	}
	else if (email1.value != email2.value)
	{
		alert('The entered email addresses do not match.');
		return false;
	}
	else
	{
		return true;
	}
	return false;
}

function verify_passwords(password1, password2)
{
	if (password1.value == '' || password2.value == '')
	{
		alert('Please fill out both password fields.');
		return false;
	}
	else if (password1.value != password2.value)
	{
		alert('The entered passwords do not match.');
		return false;
	}
	else
	{
		md5hash(password1, document.forms.register.password_md5);
		md5hash(password2, document.forms.register.passwordconfirm_md5);
		return true;
	}
	return false;
}