function popCreditApp(url) {
    window.open(url, "CreditApp", "toolbar=no,status=yes,scrollbars=yes,resizable=yes,width=758,height=470,screenX=50,screenY=80,top=80,left=50");
}

function validateNumericField(fieldValue) {
    if (!fieldValue) return false;
        var validChars = "0123456789";

        for (var i = 0; i < fieldValue.length; i++) {
            if (validChars.indexOf(fieldValue.charAt(i)) == -1) {
                return false;
            }
        }

    return true;
}

function validateForm() {
    var validationOn = true;

    // Set to false to turn off JS validation.
    var form = document.getElementById('credit-application');
    var alerts = "";

    if (validationOn) {
        // General Information
        if (! form.firstname.value) {
            alerts += "Please enter your First Name\n";
        }

        if (! form.lastname.value) {
            alerts += "Please enter your Last Name\n";
        }

        if (! form.email.value) {
            alerts += "Please enter your Email Address\n";
        }

        if (! form.socialsecurity.value) {
            alerts += "Please enter your Social Security #\n";
        } else {
            var ssn = form.socialsecurity.value
            var matchArr = ssn.match(/^(\d{3})-?\d{2}-?\d{4}$/);
            var numDashes = ssn.split('-').length - 1;

            if (matchArr == null || numDashes == 1) {
                alerts += "Invalid Social Security Number. Must be 9 digits in the form NNN-NN-NNNN\n";
            } else if (parseInt(matchArr[1],10)==0) {
                alerts += "Invalid Social Security Number. Social Security Numbers can't start with 000\n";
            }
        }

        if (! form.birthdate.value) {
            alerts += "Please enter your Birthdate\n";
        } else {
            var validCharacters = "0123456789";

            for (var i = 0; i < form.birthdate.value.length; i++) {
                if (i == 2 || i == 5) {
                    if (form.birthdate.value.charAt(i) != "/") {
                        alerts += "Birthdate must be in the format of 08/14/1969\n";
                        break;
                    }
                } else {
                    if (validCharacters.indexOf(form.birthdate.value.charAt(i)) == -1) {
                        alerts += "Birthdate must be in the format of 08/14/1969\n";
                        break;
                    }
                }
            }
        }

        if (! form.address.value) {
            alerts += "Please enter your Address\n";
        }

        if (! form.city.value) {
            alerts += "Please enter your City\n";
        }

        if (! form.state.options[form.state.options.selectedIndex].value) {
            alerts = alerts + "Please select a State.\n";
        }

        if (! form.zipcode.value) {
            alerts += "Please enter your Zip Code\n";
        } else if (! validateNumericField(form.zipcode.value)) {
            alerts += "Please only use numeric values for Zipcode.\n";
        }

        if (! form.homephone.value) {
            alerts += "Please enter your Home Phone\n";
        }

        if (! form.rentmortgage.value) {
            alerts += "Please enter your Rent/Mortgage\n";
        } else if (! validateNumericField(form.rentmortgage.value)) {
            alerts += "Please only use numeric values for Rent/Mortgage.\n";
        }

        // Financing Information
        if (form.loanterm.value) {
            if (! validateNumericField(form.loanterm.value)) {
                alerts += "Please only use numeric values for Loan Term.\n";
            }
        }

        if (form.amountrequired.value) {
            if (! validateNumericField(form.amountrequired.value)) {
                alerts += "Please only use numeric values for Amount Required.\n";
            }
        }

        if (form.downpayment.value) {
            if (! validateNumericField(form.downpayment.value)) {
                alerts += "Please only use numeric values for Downpayment.\n";
            }
        }

        if (form.tradein_car_year.value) {
            if (! validateNumericField(form.tradein_car_year.value)) {
                alerts += "Please only use numeric values for Year.\n";
            }
        }

        if (form.mileage.value) {
            if (! validateNumericField(form.mileage.value)) {
                alerts += "Please only use numeric values for Mileage.\n";
            }
        }

        // Employment Information
        if (! form.employer.value) {
            alerts += "Please enter your Employer\n";
        }

        if (! form.grossmonthlyincome.value) {
            alerts += "Please enter your Gross Monthly Income\n";
        } else if (! validateNumericField(form.grossmonthlyincome.value)) {
            alerts += "Please only use numeric values for Gross Monthly Income.\n";
        }

        if (! form.occupation.value) {
            alerts += "Please enter your Occupation\n";
        }

        if (! form.workcity.value) {
            alerts += "Please enter your Employment City\n";
        }

        if (! form.workstate.options[form.workstate.options.selectedIndex].value) {
            alerts = alerts + "Please select an Employment State.\n";
        }

        if (! form.workzip.value) {
            alerts += "Please enter your Employment Zip Code\n";
        }

        if (! form.workphone.value) {
            alerts += "Please enter your Work Phone\n";
        }

        if (form.otherincomegross.value) {
            if (! validateNumericField(form.otherincomegross.value)) {
                alerts += "Please only use numeric values for Gross Amount - Other Income.\n";
            }
        }
    }

    if (alerts) {
        alert(alerts);
    } else {
        //form.dealerDisclosureText.value = "";
        form.submit();
    }
}

var defaultEmptyOK = true
var dUSPhone = "10 digit U.S. phone number (like 415 555 1212)."
var eUSPhone = "10 digit U.S. phone number (like 415 555 1212)."
var pEmail = "valid email address (like jsmith@somewhere.com)."
var pEntryPrompt = "Please enter a "

// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
var digitsInUSPhoneNumber = 10;
var iUSPhone = "This field must be a 10 digit U.S. phone number (like 415 555 1212). Please reenter it now."
var iEmail = "This field must be a valid email address (like jsmith@somewhere.com). Please reenter it now."

// whitespace characters
var whitespace = " \t\n\r";

function validateUSPersonalInfo() {
    return (checkUSPhone(document.contactSeller.elements["Phone"]));
}

function checkUSPhone(theField, emptyOK) {
    if (checkUSPhone.arguments.length == 1) {
        emptyOK = defaultEmptyOK;
    }

    if ((emptyOK == true) && (isEmpty(theField.value))) {
        return true;
    } else {
        var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)

        if (!isUSPhoneNumber(normalizedPhone, false)) {
            return warnInvalid(theField, iUSPhone);
        } else {  // if you don't want to reformat as (123) 456-789, comment next line out
            theField.value = reformatUSPhone(normalizedPhone);
            return true;
        }
    }
}

// Check whether string s is empty.
function isEmpty(s) {
    return ((s == null) || (s.length == 0));
}

// Removes all characters which appear in string bag from string s.
function stripCharsInBag(s, bag) {
    var i;
    var returnString = "";

    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++) {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

     return returnString;
 }

function isUSPhoneNumber(s) {
    if (isEmpty(s))
        if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
        else return (isUSPhoneNumber.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}

// Notify user that contents of field theField are invalid.
// String s describes expected contents of theField.value.
// Put select theField, pu focus in it, and return false.
function warnInvalid(theField, s) {
    theField.focus()
    theField.select()
    alert(s)
    return false
}

// takes USPhone, a string of 10 digits
// and reformats as (123) 456-789
function reformatUSPhone(USPhone) {
    return (reformat(USPhone, "(", 3, ") ", 3, "-", 4))
}

// Display data entry prompt string s in status bar.
function promptEntry(s) {
    window.status = pEntryPrompt + s
}

function checkEmail(theField, emptyOK) {
    if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false))
    return warnInvalid(theField, iEmail);
    else return true;
}

function isEmail(s) {
    if (isEmpty(s))
    if (isEmail.arguments.length == 1) return defaultEmptyOK;
    else return (isEmail.arguments[1] == true);

    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@")) {
        i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != ".")) {
        i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isInteger(s) {
    var i;
    if (isEmpty(s))
    if (isInteger.arguments.length == 1) return defaultEmptyOK;
    else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++) {
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

// Returns true if character c is a digit (0 .. 9).
function isDigit(c) {
    return ((c >= "0") && (c <= "9"))
}

function isUSPhoneNumber(s) {
    if (isEmpty(s))
    if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
    else return (isUSPhoneNumber.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}

function reformat(s) {
    var arg;
    var sPos = 0;
    var resultString = "";

    for (var i = 1; i < reformat.arguments.length; i++) {
        arg = reformat.arguments[i];
        if (i % 2 == 1) resultString += arg;
        else {
            resultString += s.substring(sPos, sPos + arg);
            sPos += arg;
        }
    }

    return resultString;
}

// Returns true if string s is empty or
// whitespace characters only.
function isWhitespace(s) {
    var i;

    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++) {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}
