//
// Form validation functions for web pages
//

//
// validateMlist
//
// Validates form in maillist.htm
//
function validateMlist(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    pageForm.maillistError.value = "";
    pageForm.emailError.value = "";

    if (pageForm.maillist[0].checked != 1 &&
	pageForm.maillist[1].checked != 1) {
        valid = false;

        pageForm.maillistError.value = "Select a mailing list";
    }
    else {
        pageForm.maillistError.value = "";
    }

    if (isValidEmail(pageForm.email.value)) {
	pageForm.emailError.value = "";
    }
    else {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.email.focus();
	    alreadyFocused = true;
	}

  	if (pageForm.email.value == "") {
            pageForm.emailError.value = "Enter E-mail address";
        }
        else {
	    pageForm.emailError.value = "Enter VALID E-mail";
        }
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;

}

//
// validateMchangeC
//
// Validates the change form in mailchange.htm
//
function validateMchangeC(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    //
    // Clear the errors on this form before we start, but also
    // clear the error on the other form as well.
    //
    pageForm.emailOldError.value = "";
    pageForm.emailNewError.value = "";
    document.forms[2].emailError.value = "";


    if (isValidEmail(pageForm.emailold.value)) {
	pageForm.emailOldError.value = "";
    }
    else {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.emailold.focus();
            alreadyFocused = true;
	}

  	if (pageForm.emailold.value == "") {
            pageForm.emailOldError.value = "Enter E-mail address";
        }
        else {
	    pageForm.emailOldError.value = "Enter VALID E-mail";
        }
    }

    if (isValidEmail(pageForm.emailnew.value)) {
	pageForm.emailNewError.value = "";
    }
    else {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.emailnew.focus();
            alreadyFocused = true;
	}

  	if (pageForm.emailnew.value == "") {
            pageForm.emailNewError.value = "Enter E-mail address";
        }
        else {
	    pageForm.emailNewError.value = "Enter VALID E-mail";
        }
    }

    if (pageForm.emailnew.value == pageForm.emailold.value &&
	valid == true) {
	pageForm.emailNewError.value = "Addresses are the same";
	valid = false;
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;
}

//
// validateMchangeU
//
// Validates the unsubscribe form in mailchange.htm
//
function validateMchangeU(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    document.forms[1].emailNewError.value = "";
    document.forms[1].emailOldError.value = "";
    pageForm.emailError.value = "";

    if (isValidEmail(pageForm.email.value)) {
	pageForm.emailError.value = "";
    }
    else {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.email.focus();
            alreadyFocused = true;
	}

  	if (pageForm.email.value == "") {
            pageForm.emailError.value = "Enter E-mail address";
        }
        else {
	    pageForm.emailError.value = "Enter VALID E-mail";
        }
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;
}

//
// validateWZOptOut
//
// Validates the unsubscribe form in optout.htm
//
function validateWZOptOut(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    pageForm.emailError.value = "";

    if (isValidEmail(pageForm.email.value)) {
	pageForm.emailError.value = "";
    }
    else {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.email.focus();
            alreadyFocused = true;
	}

  	if (pageForm.email.value == "") {
            pageForm.emailError.value = "Enter E-mail address";
        }
        else {
	    pageForm.emailError.value = "Enter VALID E-mail";
        }
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;
}


//
// validateX
//
// Validates forms in xtech.htm, xsuggest.htm, betaprob.htm, feedback.htm
//
function validateX(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    pageForm.nameError.value = "";
    pageForm.fromError.value = "";
    pageForm.descriptError.value = "";

//    if (pageForm.Name.value == "") {
//	valid = false;
//
//	if (alreadyFocused == false) {
//	    pageForm.Name.focus();
//            alreadyFocused = true;
//	}
//
//	pageForm.nameError.value = "Enter Name";
//    }
//    else {
//        pageForm.nameError.value = "";
//    }


    if (isValidEmail(pageForm.From.value)) {
        pageForm.fromError.value = "";
    }
    else {
        valid = false;

	if (alreadyFocused == false) {
	    pageForm.From.focus();
            alreadyFocused = true;
	}

        if (pageForm.From.value == "") {
            pageForm.fromError.value = "Enter E-mail address";
        }
        else {
            pageForm.fromError.value = "Enter VALID E-mail";
        }
    }

    if (pageForm.Descript.value == "") {
         valid = false;

        if (alreadyFocused == false) {
	    pageForm.Descript.focus();
            alreadyFocused = true;
	}

	//
	// This script is used to validate several forms.
	// Grab the hidden field passed in to the CGI
	// to find out what the name of the htm page is
	// and set the error message accordingly.
	//
	if (pageForm.Page.value == "xsuggest.htm") {
	    pageForm.descriptError.value = "Enter Suggestion";
	}
	else if (pageForm.Page.value == 'send_page.htm') {
		pageForm.descriptError.value = "Enter Email Addresses";
	}
	else if (pageForm.Page.value == "xsales.htm") {
	    pageForm.descriptError.value = "Enter Question";
        }
	else {
            pageForm.descriptError.value = "Enter Description";
	}
    }
    else {
        pageForm.descriptError.value = "";
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }


    return valid;

}

//
// validateXreg
//
// Validates form on xregprob.htm
//
function validateXreg(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    pageForm.nameError.value = "";
    pageForm.fromError.value = "";

    if (pageForm.Name.value == "") {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.Name.focus();
            alreadyFocused = true;
	}

	pageForm.nameError.value = "Enter Name";
    }
    else {
        pageForm.nameError.value = "";
    }

    if (isValidEmail(pageForm.From.value)) {
        pageForm.fromError.value = "";
    }
    else {
        valid = false;

	if (alreadyFocused == false) {
	    pageForm.From.focus();
            alreadyFocused = true;
	}

        if (pageForm.From.value == "") {
            pageForm.fromError.value = "Enter E-mail address";
        }
        else {
            pageForm.fromError.value = "Enter VALID E-mail";
	}
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;
}

//
// validateXaddr
//
// Validates form on xaddr.htm
//
function validateXaddr(pageForm) {
    var valid = true;
    var alreadyFocused = false;
    var emailChange = false;
    var uspsChange = false;


    pageForm.nameError.value = "";
    pageForm.cEmailError.value = "";
    pageForm.nEmailError.value = "";
    pageForm.newAddrError.value = "";
    pageForm.oldAddrError.value = "";

    if (pageForm.Name.value == "") {
        valid = false;

	if (alreadyFocused == false) {
	    pageForm.Name.focus();
            alreadyFocused = true;
	}

	pageForm.nameError.value = "Enter Name";
    }
    else {
        pageForm.nameError.value = "";
    }


    //
    // Must have a current Email address to track
    // this email (and find the user).
    //
    if (isValidEmail(pageForm.cEmail.value)) {
        pageForm.cEmailError.value = "";
    }
    else {
        valid = false;

        if (alreadyFocused == false) {
	    pageForm.cEmail.focus();
            alreadyFocused = true;
	}

        if (pageForm.cEmail.value == "") {
            pageForm.cEmailError.value = "Enter E-mail Address";
        }
        else {
            pageForm.cEmailError.value = "Enter VALID E-mail";
        }
    }

    //
    // If current email and new email have values, validate them, as we must
    // assume this is a change of email address.
    //
    if (pageForm.nEmail.value != "") {
	emailChange = true;

        if (isValidEmail(pageForm.nEmail.value)) {
	    if (pageForm.nEmail.value == pageForm.cEmail.value) {
		valid = false;

	        if (alreadyFocused == false) {
	            pageForm.nEmail.focus();
                    alreadyFocused = true;
	        }

		pageForm.nEmailError.value = "Addresses are the same";
	    }
	    else {
                pageForm.nEmailError.value = "";
            }
        }
        else {
            valid = false;

	    if (alreadyFocused == false) {
	        pageForm.nEmail.focus();
                alreadyFocused = true;
	    }

            if (pageForm.nEmail.value == "") {
                pageForm.nEmailError.value = "Enter E-mail Address";
            }
            else {
                pageForm.nEmailError.value = "Enter VALID E-mail";
            }
        }
    }

    if (emailChange == false && pageForm.Name.value != ""
        && pageForm.cEmail.value != "") {

        if (pageForm.Old_addr.value == "" ) {
            valid = false;

	    if (alreadyFocused == false) {
	        pageForm.Old_addr.focus();
                alreadyFocused = true;
	    }

	    pageForm.oldAddrError.value = "Enter Old address";
        }
        else {
            pageForm.oldAddrError.value = "";
        }


        if (pageForm.New_addr.value == "" ) {
            valid = false;

	    if (alreadyFocused == false) {
	        pageForm.New_addr.focus();
                alreadyFocused = true;
	    }

	    pageForm.newAddrError.value = "Enter New address";
        }
        else {
            pageForm.newAddrError.value = "";
        }
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;

}

//
// validateUpgrade
//
// Validates form on upgrade.htm
//
function validateupgrade(pageForm) {
    var valid = true;
    var alreadyFocused = false;
    var emailChange = false;
    var uspsChange = false;

    pageForm.nameError.value = "";
    pageForm.cEmailError.value = "";
    pageForm.nEmailError.value = "";
    pageForm.newAddrError.value = "";
    pageForm.oldAddrError.value = "";
    pageForm.numberError.value = "";
    pageForm.RegcodeError.value = "";

    if (pageForm.Name.value == "") {
        valid = false;

        if (alreadyFocused == false) {
            pageForm.Name.focus();
            alreadyFocused = true;
        }

        pageForm.nameError.value = "Enter Name";
    }
    else {
        pageForm.nameError.value = "";
    }

    if (pageForm.User[1].checked == true) {
        if (!isInteger(pageForm.Number.value)) {
            valid = false;
            pageForm.numberError.value = "Enter a number";
        }
    }
    else {
        pageForm.Number.value = "";

        //
        // Must have a valid 9.0 reg code
        //
        if (isValidRegcode(pageForm.Regcode.value)) {
            pageForm.RegcodeError.value = "";
        }
        else {
            valid = false;

            if (alreadyFocused == false) {
                pageForm.Regcode.focus();
                alreadyFocused = true;
            }

            if (pageForm.Regcode.value == "") {
                pageForm.RegcodeError.value = "Enter Reg Code";
            }
            else {
                pageForm.RegcodeError.value = "Enter VALID Reg Code";
            }
        }
    }

    //
    // Must have a current Email address to track
    // this email (and find the user).
    //
    if (isValidEmail(pageForm.cEmail.value)) {
        pageForm.cEmailError.value = "";
    }
    else {
        valid = false;

        if (alreadyFocused == false) {
            pageForm.cEmail.focus();
            alreadyFocused = true;
        }

        if (pageForm.cEmail.value == "") {
            pageForm.cEmailError.value = "Enter E-mail Address";
        }
        else {
            pageForm.cEmailError.value = "Enter VALID E-mail";
        }
    }

    //
    // If current email and new email have values, validate them, as we must
    // assume this is a change of email address.
    //
    if (pageForm.nEmail.value != "") {
        emailChange = true;

        if (isValidEmail(pageForm.nEmail.value)) {
            if (pageForm.nEmail.value == pageForm.cEmail.value) {
                valid = false;

                if (alreadyFocused == false) {
                    pageForm.nEmail.focus();
                    alreadyFocused = true;
                }

                pageForm.nEmailError.value = "Addresses identical";
            }
            else {
                pageForm.nEmailError.value = "";
            }
        }
        else {
            valid = false;

            if (alreadyFocused == false) {
                pageForm.nEmail.focus();
                alreadyFocused = true;
            }

            if (pageForm.nEmail.value == "") {
                pageForm.nEmailError.value = "Enter E-mail Address";
            }
            else {
                pageForm.nEmailError.value = "Enter VALID E-mail";
            }
        }
    }

    if (emailChange == false && pageForm.Name.value != ""
        && pageForm.cEmail.value != "")
    {

/*****        if (pageForm.Old_addr.value == "" ) {
            valid = false;

	    if (alreadyFocused == false) {
	        pageForm.Old_addr.focus();
                alreadyFocused = true;
	    }

	    pageForm.oldAddrError.value = "Enter Old address";
        }
        else {
            pageForm.oldAddrError.value = "";
        }


        if (pageForm.New_addr.value == "" ) {
            valid = false;

	    if (alreadyFocused == false) {
	        pageForm.New_addr.focus();
                alreadyFocused = true;
	    }

	    pageForm.newAddrError.value = "Enter New address";
        }
        else {
            pageForm.newAddrError.value = "";
        }
******/
    }

    if (valid == true) {
        disableSubmit(pageForm);
    }

    return valid;

}


//
// validateA
//
// Validates form on aes_info.htm
//
function validateA(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    pageForm.emailError.value = "";


    if (isValidEmail(pageForm.email.value)) {
	pageForm.emailError.value = "";
    }
    else {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.email.focus();
            alreadyFocused = true;
	}

  	if (pageForm.email.value == "") {
            pageForm.emailError.value = "Enter E-mail address";
        }
        else {
	    pageForm.emailError.value = "Enter VALID E-mail";
        }
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;
}

//
// validateZ
//
// Validates form on zip2.htm
//
function validateZ(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    pageForm.emError.value = "";
    pageForm.kzcError.value = "";
    pageForm.kzlError.value = "";
    pageForm.vcbError.value = "";
    pageForm.vneError.value = "";

    //
    // Need to select a version...
    //
    if (
        !pageForm.Release[0].checked &&
        !pageForm.Release[1].checked &&
        !pageForm.Release[2].checked &&
        !pageForm.Release[3].checked &&
        !pageForm.Release[4].checked &&
        !pageForm.Release[5].checked &&
        !pageForm.Release[6].checked &&
        !pageForm.Release[7].checked )
    {
        valid = false;
        if (alreadyFocused == false) {
           pageForm.Release[0].focus;
           alreadyFocused = true;
        }

        pageForm.vcbError.value = "Select version";
    }



    //
    // If Release 9.0 beta is checked, and the
    // VersionNeededToExtract text box is empty,
    // let them know.
    //
    if ((pageForm.Release[3].checked ||
         pageForm.Release[4].checked) &&
        pageForm.VersionNeededToExtract.value == "") {
	valid = false;
	if (alreadyFocused == false) {
            pageForm.VersionNeededToExtract.focus();
            alreadyFocused = true;
        }
	pageForm.vneError.value = "Enter version";
    }

    //
    // If they say "Yes" to knowing what Zip utility
    // was used, and they didn't enter it, let them
    // know.
    //
    if (pageForm.ZipCreate.value == "" &&
        pageForm.KnowZipCreate[0].checked) {
	valid = false;
	if (!alreadyFocused) {
	    pageForm.ZipCreate.focus();
            alreadyFocused = true;
        }
	pageForm.kzcError.value = "Enter name";
    }

    //
    // If they say Yes, the file is available, and
    // they don't say where, let them know.
    // (The "No" choices will be disabled by an onChange)
    //
    if (pageForm.KnowZipLocation[0].checked &&
        pageForm.ZipLocation.value == "") {
	valid = false;
	if (!alreadyFocused) {
  	    pageForm.ZipLocation.focus();
            alreadyFocused = true;
        }
	pageForm.kzlError.value = "Enter location";
    }

    //
    // If it is a blank email or invalid email,
    // let them know.
    //
    if (isValidEmail(pageForm.ContactEmail.value)) {
	pageForm.emError.value = "";
    }
    else {
	valid = false;
	if (!alreadyFocused) {
	    pageForm.ContactEmail.focus();
            alreadyFocused = true;
        }
  	if (pageForm.ContactEmail.value == "") {
            pageForm.emError.value = "Enter E-mail address";
        }
        else {
	    pageForm.emError.value = "Enter VALID E-mail";
        }
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;
}


//
// validateBetaA
//
// Validates form in betapply.htm
//
function validateBetaA(pageForm) {
    var valid = true;
    var alreadyFocused = false;

    pageForm.nameError.value = "";
    pageForm.paddr1Error.value = "";
    pageForm.cityError.value = "";
    pageForm.stateError.value = "";
    pageForm.phoneError.value = "";
    pageForm.emailError.value = "";


    if (pageForm.Name.value == "") {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.Name.focus();
            alreadyFocused = true;
	}

	pageForm.nameError.value = "Enter Name";
    }
    else {
        pageForm.nameError.value = "";
    }

    if (pageForm.PAddr1.value == "") {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.PAddr1.focus();
            alreadyFocused = true;
	}

	pageForm.paddr1Error.value = "Enter Postal address";
    }
    else {
        pageForm.nameError.value = "";
    }

    if (pageForm.City.value == "") {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.City.focus();
            alreadyFocused = true;
	}

	pageForm.cityError.value = "Enter City";
    }
    else {
        pageForm.cityError.value = "";
    }

    if (pageForm.State.value == "") {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.State.focus();
            alreadyFocused = true;
	}

	pageForm.stateError.value = "Enter State";
    }
    else {
        pageForm.stateError.value = "";
    }

    if (pageForm.Phone.value == "") {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.Phone.focus();
            alreadyFocused = true;
	}

	pageForm.phoneError.value = "Enter Phone";
    }
    else {
        pageForm.phoneError.value = "";
    }

    if (isValidEmail(pageForm.EmAddr.value)) {
        pageForm.emailError.value = "";
    }
    else {
        valid = false;

	if (alreadyFocused == false) {
	    pageForm.EmAddr.focus();
            alreadyFocused = true;
	}

        if (pageForm.EmAddr.value == "") {
            pageForm.emailError.value = "Enter E-mail address";
        }
        else {
            pageForm.emailError.value = "Enter VALID E-mail";
        }
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;

}

//
// validateC
//
// Validates forms created via template in c.cgi, a
// mailing campaign change of address form.
//
function validateC(pageForm) {

    var valid = true;
    var alreadyFocused = false;

    pageForm.nameError.value = "";
    pageForm.emailError.value = "";
    pageForm.addrError.value = "";

    if (pageForm.Name.value == "") {
	valid = false;

	if (alreadyFocused == false) {
	    pageForm.Name.focus();
            alreadyFocused = true;
	}

	pageForm.nameError.value = "Enter Name";
    }
    else {
        pageForm.nameError.value = "";
    }


    if (isValidEmail(pageForm.Email.value)) {
        pageForm.emailError.value = "";
    }
    else {
        valid = false;

	if (alreadyFocused == false) {
	    pageForm.Email.focus();
            alreadyFocused = true;
	}

        if (pageForm.Email.value == "") {
            pageForm.emailError.value = "Enter E-mail address";
        }
        else {
            pageForm.emailError.value = "Enter VALID E-mail";
        }
    }

    if (pageForm.Address.value == "") {
         valid = false;

        if (alreadyFocused == false) {
	    pageForm.Address.focus();
            alreadyFocused = true;
	}

        pageForm.addrError.value = "Enter Address";
    }
    else {
        pageForm.addrError.value = "";
    }

    if (valid == true) {
	disableSubmit(pageForm);
    }

    return valid;

}


//
// disableSubmit
//
// Disables the submit button in successful form validation
// to prevent double click submits.
//
function disableSubmit(pageForm) {
    if (document.all || document.getElementById) {
	for (i = 0; i < pageForm.length; i++) {
	    var tempobj = pageForm.elements[i];
	    if (tempobj.type.toLowerCase() == "submit")
		tempobj.disabled = true;
        }
    }
}

function isValidRegcode(regcode) {
    var re = /^[0-9A-Za-z\-]+$/

    while (regcode.charAt(0) == " ") {
        regcode = regcode.substring(1,regcode.length);
    }

    while (regcode.charAt(regcode.length-1) == " ") {
        regcode = regcode.substring(0,regcode.length - 1);
    }

    return re.test(regcode);
}
function isValidEmail(emailAddress) {
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

    //
    // Strip leading and trailing spaces off of the email
    // address
    //
    while (emailAddress.charAt(0) == " ") {
        emailAddress = emailAddress.substring(1,emailAddress.length);
    }

    while (emailAddress.charAt(emailAddress.length-1) == " ") {
        emailAddress = emailAddress.substring(0,emailAddress.length - 1);
    }

    return re.test(emailAddress);
}

function isInteger(val) {
    if (isBlank(val)) {
        return false;
    }
    for (var i = 0; i < val.length; i++) {
        if (!isDigit(val.charAt(i))) {
            return false;
        }
    }
    return true;
}

function isBlank(val){
    if (val == null) {
        return true;
    }
    for (var i = 0; i < val.length; i++) {
        if ((val.charAt(i) != ' ') &&
            (val.charAt(i) != "\t") &&
            (val.charAt(i) != "\n") &&
            (val.charAt(i) != "\r")) {
            return false;
        }
    }
    return true;
}

function isDigit(num) {
    if (num.length > 1) {
        return false;
    }
    var string = "1234567890";

    if (string.indexOf(num) != -1) {
        return true;
    }
    return false;
}
