function validate() {
        var valid = true;
        var errorMsg = "";
        var planRef = document.getElementById("plan");
        var firstNameRef = document.getElementById("firstName");
        var lastNameRef = document.getElementById("lastName");
        var emailAddressRef = document.getElementById("emailAddress");
        var emailAddressConfirmRef = document.getElementById("emailAddressConfirm");
        var phoneAcRef = document.getElementById("phoneAc");
        var phoneNpaRef = document.getElementById("phoneNpa");
        var phoneNxxRef = document.getElementById("phoneNxx");
	var passwordRef = document.getElementById("password");

        var billingFirstNameRef = document.getElementById("billingFirstName");
        var billingLastNameRef = document.getElementById("billingLastName");
        var ccNumberRef = document.getElementById("ccNumber");
        var secCodeRef = document.getElementById("securityCode");
        var expMonthRef = document.getElementById("expirationMonth");
        var expYearRef = document.getElementById("expirationYear");
        var postalCodeRef = document.getElementById("postalCode");
        var termsRef = document.getElementById("termsAndConditionsConfirm");

	var newMemberRef = document.getElementById("newMember");
	var billingInformationRef = document.getElementById("billingInformation");

        var failureBoxRef = document.getElementById("failureBox");
        var failedItemsRef = document.getElementById("failedItems");

	if (firstNameRef.value.length == 0) {
                errorMsg += "<li>" + "First Name is required." + "</li>";
		valid = false;
	}

	if (lastNameRef.value.length == 0) {
                errorMsg += "<li>" + "Last Name is required." + "</li>";
		valid = false;
	}

       	if (emailAddressRef.value.length == 0) {
                errorMsg += "<li>" + "Email is required." + "</li>";
               	valid = false;
       	}
       	else if (!checkEmail(emailAddressRef.value)) {
                errorMsg += "<li>" + "Email is not valid." + "</li>";
               	valid = false;
       	}

        if ( (phoneAcRef.value.length == 0) || (phoneNpaRef.value.length == 0) || (phoneNxxRef.value.length == 0) ) {
		valid = false;
                errorMsg += "<li>" + "Mobile# is not valid." + "</li>";
	}
        else {
                if (!checkPhone(phoneAcRef.value,phoneNpaRef.value,phoneNxxRef.value)) {
                        valid = false;
                	errorMsg += "<li>" + "Mobile# is not valid." + "</li>";
                }
	}

        if (passwordRef.value.length == 0) {
                errorMsg += "<li>" + "Password is required." + "</li>";
                valid = false;
        }
	if (planRef.value != "free") {
		//alert("CHECKING Billing");

		if (billingFirstNameRef.value.length == 0) {
                	errorMsg += "<li>" + "Billing First Name is required." + "</li>";
			valid = false;
		}

		if (billingLastNameRef.value.length == 0) {
                	errorMsg += "<li>" + "Billing Last Name is required." + "</li>";
			valid = false;
		}

		if (ccNumberRef.value.length == 0) {
                	errorMsg += "<li>" + "Card Number is required." + "</li>";
			valid = false;
		}

		if (secCodeRef.value.length == 0) {
                	errorMsg += "<li>" + "Security Code is required." + "</li>";
			valid = false;
		}

		if (postalCodeRef.value.length == 0) {
                	errorMsg += "<li>" + "Postal Code/Zip is required." + "</li>";
			valid = false;
		}
	}
	//alert("TERMS REF VALUE: " + termsRef.value);

	if (!termsRef.checked) {
                errorMsg += "<li>" + "Terms and Conditions must be accepted." + "</li>";
		valid = false;
	}

	if (planRef.value != "free") {
		//alert("Validating additional members");
		// validate additional member info
		addErrorMsg = validateAdditionalMemberInfo();
		if (addErrorMsg.length > 0) {
			errorMsg += addErrorMsg;
			valid = false;
		}
	}

	//alert("VALID: " + valid);
	//valid = true;
        if (!valid) {
                // set errors
                failureBoxRef.style.display = "";
                failedItemsRef.innerHTML = errorMsg;
                window.location="#failureBox";
        }

	return valid;
	}


	function validateAdditionalMemberInfo() {
		var errorMsg = "";
		var spaces = "&nbsp;&nbsp;&nbsp;&nbsp;";
		valid = true;
		// check for 5 members
		var j=1;
		for(i=1;i<=5;i++) {
			var memberString = "Additional Member #" + j;
			//alert("Checking member " + memberString);
			var firstNameRef = eval("document.getElementById('firstName" + i + "')");
			if (firstNameRef != null) {
				var lastNameRef = eval("document.getElementById('lastName" + i + "')");
				var emailAddressRef = eval("document.getElementById('emailAddress" + i + "')");
				var phoneAcRef = eval("document.getElementById('phoneAc" + i + "')");
				var phoneNpaRef = eval("document.getElementById('phoneNpa" + i + "')");
				var phoneNxxRef = eval("document.getElementById('phoneNxx" + i + "')");
				if (firstNameRef.value.length == 0) {
                			errorMsg += "<li>" + memberString + " First Name is required." + "</li>";
					valid = false;
				}
				if (lastNameRef.value.length == 0) {
                			errorMsg += "<li>" + memberString + " Last Name is required." + "</li>";
					valid = false;
				}
       				if (emailAddressRef.value.length == 0) {
                			errorMsg += "<li>" + memberString + " Email is required." + "</li>";
               				valid = false;
       				}
       				else if (!checkEmail(emailAddressRef.value)) {
                			errorMsg += "<li>" + memberString + " Email is not valid." + "</li>";
               				valid = false;
       				}
				//alert(memberString + " PhoneAC: " + phoneAcRef.value);
				//alert(memberString + " PhoneNpa: " + phoneNpaRef.value);
				//alert(memberString + " PhoneNxx: " + phoneNxxRef.value);
        			if ( (phoneAcRef.value.length == 0) || (phoneNpaRef.value.length == 0) || (phoneNxxRef.value.length == 0) ) {
					valid = false;
                			errorMsg += "<li>" + memberString + " Mobile# is not valid." + "</li>";
				}
        			else {
                			if (!checkPhone(phoneAcRef.value,phoneNpaRef.value,phoneNxxRef.value)) {
                        			valid = false;
                				errorMsg += "<li>" + memberString + " Mobile# is not valid." + "</li>";
                			}
				}
				//alert("Checking " + memberString);
				j++;
			}
		}
		//alert("Additional error message: " + errorMsg);
		return errorMsg;
	}

	function disablePurchaseInfo(type) {
		var newMemberRef = document.getElementById("newMember");
		var billingInformationRef = document.getElementById("billingInformation");
		var addMemberRef = document.getElementById("addMember");
		var totalPriceRef = document.getElementById("totalPrice");

		var planRef = document.getElementById("plan");
		planRef.value = 'free';
		var cycleRef = document.getElementById("cycle");
		cycleRef.value = '7d';
		var addMemberRef = document.getElementById("addMember");

		//alert("TYPE: " + type);

        	var failureBoxRef = document.getElementById("failureBox");
        	var failedItemsRef = document.getElementById("failedItems");
		failureBoxRef.style.display = "none";
                failedItemsRef.innerHTML = "";
		
                newMemberRef.style.display = "none";
                billingInformationRef.style.display = "none";
                addMemberRef.style.display = "none";
                totalPriceRef.style.display = "none";
		return true;
	} 

	function enablePurchaseInfo(type) {
		var newMemberRef = document.getElementById("newMember");
		var billingInformationRef = document.getElementById("billingInformation");
		var addMemberRef = document.getElementById("addMember");
		var totalPriceRef = document.getElementById("totalPrice");

		var freeTextRef = document.getElementById("freeText");
		//alert("Free Text Ref: " + freeTextRef);

                newMemberRef.style.display = "";
                billingInformationRef.style.display = "";
                addMemberRef.style.display = "";
                totalPriceRef.style.display = "";

		var planRef = document.getElementById("plan");
		var cycleRef = document.getElementById("plan");


        	var failureBoxRef = document.getElementById("failureBox");
        	var failedItemsRef = document.getElementById("failedItems");
		failureBoxRef.style.display = "none";
                failedItemsRef.innerHTML = "";
		//alert("TYPE: " + type);
		if (type == "myassist_yr") {
			planRef.value = "myassist";
			cycleRef.value = "yr";
			freeTextRef.innerHTML = "";
		}
		else if (type == "myassist_mo") {
			planRef.value = "myassist";
			cycleRef.value = "mo";
			freeTextRef.innerHTML = " (after the first free month)";
		}
		else if (type == "lite_yr") {
			planRef.value = "lite";
			cycleRef.value = "yr";
			freeTextRef.innerHTML = "";
		}
		else if (type == "lite_mo") {
			planRef.value = "lite";
			cycleRef.value = "mo";
			freeTextRef.innerHTML = "";
		}
		return true;

	} 
