function validateRegistration(theForm) {
	var message = "";

	invalidCharacters = "/:;_,0123456789.<>?!@#$%^&*(){}[]\"\\=|'~`-+";  //invalid characters for name, city
	invalidZipCharacters = "/:;_,.<>?!@#$%^&*(){}[]\"\\=|'~`+";  //invalid characters for zip code
	invalidEmailCharacters = " /:,;";  //invalid characters for email address

	first_name = theForm.first_name.value;
	
	if (first_name == "" || first_name == null) {
		message += "Please enter your first name.\n";
	}else {
		invalidString = false;

		for (i=0;i<invalidCharacters.length;i++) {  //check for presence of bad characters
			badChar = invalidCharacters.charAt(i);

			if (first_name.indexOf(badChar,0) > -1) {
				invalidString = true;
			}
		}

		if (invalidString == true) {
			message += "First name contains invalid characters. \n";
		}
	}

	last_name = theForm.last_name.value;

	if (last_name == "" || last_name == null) {
		message += "Please enter your last name.\n";
	}else {
		invalidString = false;

		for (i=0;i<invalidCharacters.length;i++) {  //check for presence of bad characters
			badChar = invalidCharacters.charAt(i);
			if (last_name.indexOf(badChar,0) > -1) {
				invalidChar = true;
			}
		}
		if (invalidChar == true) {
			message += "Last name contains invalid characters. \n";
		}
	}

	company = theForm.company.value;

	if (company == "" || company == null) {
		message += "Please enter your company name. \n";	
	}

	address = theForm.address_field.value;

	if (address == "" || address == null) {
		message += "Please enter your address. \n";	
	}

	city = theForm.city.value;

	if (city == "" || city == null) {
		message += "Please enter your city.\n";
	}else {
		invalidString = false;

		for (i=0;i<invalidCharacters.length;i++) {  //check for presence of bad characters
			badChar = invalidCharacters.charAt(i);
			if (city.indexOf(badChar,0) > -1) {
				invalidChar = true;
			}
		}
		if (invalidChar == true) {
			message += "City contains invalid characters. \n";
		}
	}

	zip = theForm.zip.value;

	if (zip == "" || zip == null) {
		message += "Please enter your zip.\n";	
	} else {
		if (zip.length < 5) {
			message += "Zip code must be at least 5 characters";	
		} else {
			invalidString = false;

			for (i=0;i<invalidZipCharacters.length;i++) {  //check for presence of bad characters
				badChar = invalidZipCharacters.charAt(i);
				if (zip.indexOf(badChar,0) > -1) {
					badChar = true;
				}
			}
			if (invalidChar == true) {
				message += "Zip code contains invalid characters. \n";
			}	
		}
	}

	country = theForm.country.value;

	if (country == "" || country == null) {
		message += "Please enter your country.\n";
	}else {
		invalidString = false;

		for (i=0;i<invalidCharacters.length;i++) {  //check for presence of bad characters
			badChar = invalidCharacters.charAt(i);
			if (country.indexOf(badChar,0) > -1) {
				invalidChar = true;
			}
		}
		if (invalidChar == true) {
			message += "Country contains invalid characters. \n";
		}
	}

	area_code = theForm.area_code.value;

	if (area_code == "" || area_code == null) {
		message += "Please enter your area code.\n";
	} else {
		if (isNaN(area_code)) {
			message += "Area code can only contain numbers.\n";	
		}
	}

	phone1 = theForm.phone_1.value;

	if (phone1 == "" || phone1 == null) {
		message += "Please enter the first three digits of your phone number.\n";
	} else {
		if (isNaN(phone1)) {
			message += "Phone number can only contain numbers.\n";	
		}
	}

	phone2 = theForm.phone_2.value;

	if (phone2 == "" || phone2 == null) {
		message += "Please enter the last four digits of your phone number.\n";
	} else {
		if (isNaN(phone2)) {
			message += "Phone number can only contain numbers.\n";	
		}
	}

	email = theForm.email.value;

	if (email == "" || email == null) {
		message += "Please enter your email.\n";
	} else {
		if (form.email.value != "") { //check for presence of email address
			badEmail = false;
			for (i=0;i<invalidEmailCharacters.length;i++) {  //check for presence of bad characters
				badChar = invalidEmailCharacters.charAt(i);
				if (email.indexOf(badChar,0) > -1) {
					badEmail = true;
				}
			}
			if (badEmail == true) {
				message += "Email address contains invalid characters \n";
			}
		
			atPos = email.indexOf("@",1);
			if (atPos == -1) {  //if no @ symbol is present
				message += "Email address must contain 1 '@' symbol \n";
			}
		
			if (email.indexOf("@",atPos+1) != -1) { //if email contains more than one @ symbol
				message += "Email address may only contain 1 '@' symbol \n";
			}
		
			periodPos = email.indexOf(".",atPos);
			if (periodPos == -1) {
				message += "Email address must have atleast 1 '.' after the @ symbol\n";
			}
		
			if (periodPos+3>email.length) {
				message += "Email address must have atleast 2 characters after the '.' \n";
			}
		}
	}

	username = theForm.username.value;

	if (username == "" || username == null) {
		message += "Please enter a username.\n";	
	}

	password = theForm.password.value;
	password2 = theForm.password2.value;

	if (password == "" || password == null || password2 == "" || password2 == null) {
		message += "Please enter and confirm your password.\n";	
	} else {
		if (password.length < 8) {
			message += "Password must be at least 8 characters long.\n";	
		} else {
			containsNumbers = false;
			containsLetters = false;
			
			for (i=0;i<password.length;i++) {  //check for presence of bad characters
				char = password.charAt(i);
				
				if (isNaN(char)) {
					containsLetters = true;	
				} else {
					containsNumbers = true;	
				}
				
				if (containsLetters && containsNumbers) {
					break;	
				}
			}
			
			if (!containsLetters || !containsNumbers) {
				message += "Password must contain both letters and numbers.\n";	
			}
		}
	}

	hint = theForm.hint.value;

	if (hint == "" || hint == null) {
		message += "Please choose a password hint.\n";	
	}

	if (message == "") {
		return true;	
	}

	alert(message);
	return false;
}
