function validateAffiliateSignUpForm(form) {

	hide("errors");
	var returnMessages = new Array();
	var returnIndex = 0;

	function validations(validationElement) {
		var element = validationElement[0];
		var elementName = validationElement[1];
		var validationRules = validationElement[2];

		//only perform one validation per field
		validation:
		for(v = 0; v < validationRules.length; v++ ) {
			if(validationRules[v] == "required" && isBlank(element.value)) {
				returnMessages[returnIndex++] = "Please enter a value for " + elementName + "\n";
				break validation;
			} else if (validationRules[v] == "alphaWithSpaceOrDash" && !isAlpha(element.value,true,true)) {
				returnMessages[returnIndex++] = "Please enter a value for " + elementName + " that contains only alphabetical characters, spaces or hyphens (\"-\")\n";
				break validation;
			} else if (validationRules[v] == "email" && !isValidEmail(element.value)) {
				returnMessages[returnIndex++] = "Please enter a valid e-mail address for " + elementName + "\n";
				break validation;
			} else if (validationRules[v] == "emailIfPresent" && !isBlank(element.value)  && !isValidEmail(element.value)) {
				returnMessages[returnIndex++] = "Please enter a valid e-mail address for " + elementName + "\n";
				break validation;
			} else if (validationRules[v] == "taxFormat" && !isValidTaxNumber(element.value)) {
				returnMessages[returnIndex++] = "Please enter a valid tax ID or social security number (examples: 12-3456789 or 123-45-6789)\n";
				break validation;
			} else if (validationRules[v] == "usPhone") {
				if(!isValidPhone(form.phone.value) && form.country.value == "US") {
					returnMessages[returnIndex++] = "Please enter a valid U.S. phone number (example: 123-456-7890)\n";
					break validation;
				}
			} else if (validationRules[v] == "usZIP") {
				if(!isValidZIP(form.zip.value) && form.country.value == "US") {
					returnMessages[returnIndex++] = "Please enter a valid U.S. ZIP code (example: 12345)\n";
					break validation;
				}
			} else if (validationRules[v] == "passwordMatch") {
				if((form.confirmPassword.value) != (form.password.value)) {
					returnMessages[returnIndex++] = "Please confirm your password by re-entering the value exactly, including case and spaces\n";
					break validation;
				}
			} else if (validationRules[v] == "routingNumber") {
				if(document.getElementById("payByDirectDeposit").checked && isBlank(element.value)) {
					returnMessages[returnIndex++] = "Please enter a value for " + elementName+ "\n";
					break validation;
				} else if(document.getElementById("payByDirectDeposit").checked && !matchesMask(element.value,"#########")) {
					returnMessages[returnIndex++] = "Please enter a valid " + elementName+ "\n";
					break validation;
				}
			} else if (validationRules[v] == "accountNumber") {
				if(document.getElementById("payByDirectDeposit").checked && isBlank(element.value)) {
					returnMessages[returnIndex++] = "Please enter a value for " + elementName+ "\n";
					break validation;
				} else if(document.getElementById("payByDirectDeposit").checked && !matchesMask(element.value,"##########")) {
					returnMessages[returnIndex++] = "Please enter a valid " + elementName+ "\n";
					break validation;
				}
			} else if (validationRules[v] == "bankName") {
				if(document.getElementById("payByDirectDeposit").checked && isBlank(element.value)) {
					returnMessages[returnIndex++] = "Please enter a value for " + elementName+ "\n";
					break validation;
				}
			} else if (validationRules[v] == "termsOfUse") {
				if(!element.checked) {
					returnMessages[returnIndex++] = "Please confirm that you have read and agree to the terms of our affiliate program\n";
					break validation;
				}
			} 
		}		
	}


	var errorMessages = new Array();
	
	var validationFields = new Array(
		new Array(form.name,"first name",new Array("required","alphaWithSpaceOrDash")),
		new Array(form.name2,"last name",new Array("required","alphaWithSpaceOrDash")),
		new Array(form.address,"street address",new Array("required")),
		new Array(form.city,"city",new Array("required")),
		new Array(form.state,"state",new Array("required")),
		new Array(form.zip,"ZIP/postal code",new Array("required","usZIP")),
		new Array(form.country,"country",new Array("required")),
		new Array(form.phone,"phone number",new Array("required","usPhone")),
		new Array(form.company,"company name",new Array("required")),
		new Array(form.industry,"industry",new Array("required")),
		new Array(form.email,"e-mail address",new Array("required","email")),
		new Array(form.password,"password",new Array("required")),
		new Array(form.confirmPassword,"password confirmation",new Array("required","passwordMatch")),
		new Array(form.payto,"payment information (\"Payable To\")",new Array("required")),
		new Array(form.taxid,"tax ID or social security number",new Array("required","taxFormat")),
		new Array(form.friend1,"E-mail #1",new Array("emailIfPresent")),
		new Array(form.friend2,"E-mail #2",new Array("emailIfPresent")),
		new Array(form.friend3,"E-mail #3",new Array("emailIfPresent")),
		new Array(form.friend4,"E-mail #4",new Array("emailIfPresent")),
		new Array(form.friend5,"E-mail #5",new Array("emailIfPresent")),
		new Array(form.friend6,"E-mail #6",new Array("emailIfPresent")),
		new Array(form.b_routing,"bank routing number",new Array("routingNumber")),
		new Array(form.b_account,"bank account number",new Array("accountNumber")),
		new Array(form.b_name,"bank name",new Array("bankName")),
		new Array(form.spam,"terms of use",new Array("termsOfUse"))
	);

	for(z = 0 ; z < validationFields.length; z++) {
		validations(validationFields[z]);
	}
	
	if(returnMessages.length > 0) {
		document.getElementById("errorList").innerHTML = "<li>" + returnMessages.join("</li><li>") + "</li>";
		show("errors");
		window.scrollTo(0,0);
		return false;
	}
	return true;
}
