// javascript functions to check processing of payment entry form
// rewritten to use faster and more reliable regular expressions

function ValidatePayPal()
{
    var paypalform = document.getElementById("paypal_form");
    return ValidateForm(paypalform);
}

function ValidateCredit()
{
    var ccardform = document.getElementById("creditcard_form");
    return ValidateForm(ccardform);
}

function ValidateForm(form) 
{    

    var firstname = form.Contact0FirstName;
    var firstval = firstname.value;
    if ( firstval.length == 0 ) {
        alert("Please provide your First Name");
        firstname.focus();
        return false;
    }

    var re = /^([a-zA-Z])([a-zA-Z'-]\S*)*$/;
    if ( !re.test(firstval) ) {
        alert("Invalid First Name entered: "+firstval);
        firstname.focus();
        return false;
    }

    var lastname = form.Contact0LastName;
    var lastval = lastname.value;
    if ( lastval.length < 2 ) {
        alert("Please provide your Last Name");
        lastname.focus();
        return false;
    }

    if ( !re.test(lastval) ) {
        alert("Invalid Last Name entered: "+lastval);
        lastname.focus();
        return false;
    }

    var emailaddr = form.Contact0Email;
    var emailval = emailaddr.value;
    if ( emailaddr.value.length == 0 ) {
        alert("You must enter an Email Address");
        return false;
    }

    emailre = /^\s*\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+\s*$/;
    if ( !emailre.test(emailval) ) {
        alert("Invalid Email Address entered: "+emailval);
        emailaddr.focus();
        return false;
    }

	var Phone=form.Contact0Phone1;
	var Phoneval = Phone.value;
	if (Phoneval.length < 10)
	{
		alert("Please provide at least a 10-digit Phone Number\nUse xxx-xxx-xxxx or (xxx)xxx-xxxx or +n-xxxxxxxxxx format");
		Phone.focus();
		return false;
	}

    // set the reg exp for phone numbers
    // can start with "+" and then must contain numbers or "-,),(" set
    // regular expression \+ means + sign and ? means 0 or 1
    // and the \d means any number and parens are escaped with \
    phonere = /^\+?[ \d-\(\)]*$/;
    if ( !phonere.test(Phoneval) ) {
        alert("Invalid Phone Number entered: "+Phoneval+"\nUse xxx-xxx-xxxx or (xxx)xxx-xxxx or +n-xxxxxxxxxx format");
        Phone.focus();
        return false;
    }

    var Address1 = form.Contact0StreetAddress1;
	if (Address1.value.length < 2)
	{
		alert("Please provide at least the first line of your Street Address");
		Address1.focus();
		return false;
	}

    var City = form.Contact0City;
	if (City.value.length < 2)
	{
		alert("Please provide your City Name");
		City.focus();
		return false;
	}

    var State = form.Contact0State;
    var State2 = form.Contact0State2;
	if ( (State.value.length < 2) && (State2.value.length == 0) )
	{
		alert("Please select a State\n Or enter a non-US Region");
		State.focus();
		return false;
	}

    var PostalCode = form.Contact0PostalCode;
	if (PostalCode.value.length == 0)
	{
		alert("Please provide your Postal or Zip Code");
		PostalCode.focus();
		return false;
	}

    ccre = /^\d{15,}$/;
    var ccNumber = form.creditCardNumber;
    if (ccNumber) {
    	if (ccNumber.value.length == 0 || !ccre.test(ccNumber.value) )
    	{
    		alert("Please provide a valid Credit Card Number. Must be at least 15 numerical digits.");
    		ccNumber.focus();
    		return false;
    	}
	}

    var expMonth = form.expDateMonth;
    if (expMonth) {
    	if (expMonth.value.length == 0)
    	{
    		alert("Please select an expiration Month");
    		expMonth.focus();
    		return false;
    	}
	}

    var expYear = form.expDateYear;
    if (expYear) {
    	if (expYear.value.length == 0)
    	{
    		alert("Please select an expiration Year");
    		expYear.focus();
    		return false;
    	}
	}

	return true;
}

