function checkJobAppForReqFields() {
    var requiredApplicantInfoArray = ['firstName', 'lastName', 'streetAddress1', 'city', 'stateOrProvince', 'postalCode', 'phoneNumber', 'emailAddress', 'dateAvailable']; // 'dobMonth','dobDay','dobYear',
    var requiredDisclaimerAndSigArray = ['printedName', 'dateSigned', 'signature'];
    var requiredAvailabilityFields = ['mondayStart', 'mondayEnd', 'tuesdayStart', 'tuesdayEnd', 'wednesdayStart', 'wednesdayEnd', 'thursdayStart', 'thursdayEnd', 'fridayStart', 'fridayEnd', 'saturdayStart', 'saturdayEnd', 'sundayStart', 'sundayEnd'];
    var referenceFields = ['reference1FullName', 'reference1Relationship', 'reference1PhoneNumber', 'reference2FullName', 'reference2Relationship', 'reference2PhoneNumber', 'reference3FullName', 'reference3Relationship', 'reference3PhoneNumber'];
    var rfe = '';
    var rfeName = '';
    var applicantInfoMissingFields = '';
    var referencesMissingFields = '';
    var disclaimerAndSignatureMissingFields = '';
    var thisField = '';
    var requiredSelectsResults = '';
    var i = 0;
    var validateCitizenResult = '';
    var validatePreviouslyEmployed = '';
    var alertMessage = 'Oops! Looks like you might have forgotten to fill out some fields.\n';
    
    // check for all required applicant info fields
    for (i=0; i<requiredApplicantInfoArray.length; i++) {
        $thisField = $('#' + requiredApplicantInfoArray[i]);
        if ($thisField.val() == '') {
            applicantInfoMissingFields += '<li>' + $thisField.attr('title') + '</li>';
        }
    }
    
    // validate haveReliableCar
    if (!$('#haveReliableCarYes').attr('checked') && !$('#haveReliableCarNo').attr('checked')) {
        applicantInfoMissingFields += '<li>Do you have access to a reliable vehicle?</li>';
    }
    
    // validate isAuthorizedInUsa
    if (!$('#authorizedInUsaYes').attr('checked') && !$('#authorizedInUsaNo').attr('checked')) {
        applicantInfoMissingFields += '<li>Are you authorized to work in the United States?</li>';
    }
    
    // validate previouslyEmployed and previouslyEmployedWhen
    if ($('#previouslyEmployedYes').attr('checked')) {
        var $reasonForLeaving = $('#reasonForLeaving');
        if ($reasonForLeaving.val() == '') {
            applicantInfoMissingFields += '<li>' + $reasonForLeaving.attr('title') + '</li>';
        }
    }
    
    // validate isConvicted and convictedExplanation
    if ($('#felonyConvictionYes').attr('checked')) {
        var $felonyExplanation = $('#felonyExplanation');
        if ($felonyExplanation.val() == '') {
            applicantInfoMissingFields += '<li>' + $felonyExplanation.attr('title') + '</li>';
        }
    }
    
    // validate availability
    if (!checkAllAvailabilityFields(requiredAvailabilityFields)) {
        applicantInfoMissingFields += '<li>All Availability fields must be filled out completely</li>';
    }
    
    // validate references
    if (!checkJobAppReferences(referenceFields)) {
        referencesMissingFields += '<li>All Reference fields must be filled out completely</li>';
    }
    
    // check for all required disclaimer and signature fields
    for (i=0; i<requiredDisclaimerAndSigArray.length; i++) {
        $thisField = $('#' + requiredDisclaimerAndSigArray[i]);
        if ($thisField.val() == '') {
            disclaimerAndSignatureMissingFields += '<li>' + $thisField.attr('title') + '</li>';
        }
    }
    
    // if alert message is not blank, do not allow form submit and display alert box
    if (applicantInfoMissingFields == '' && referencesMissingFields == '' && disclaimerAndSignatureMissingFields == '' ) {
        return true;
    } else {
        alertMessage = '<p>The following areas need to be fixed before you can submit your application:</p><ul>';
        
        if (applicantInfoMissingFields != '') {
            alertMessage += '<li>Applicant Information:<ul>' + applicantInfoMissingFields + '</ul></li>';
        }
        
        if (referencesMissingFields != '') {
            alertMessage += '<li>References:<ul>' + referencesMissingFields + '</ul></li>';
        }
        
        if (disclaimerAndSignatureMissingFields != '') {
            alertMessage += '<li>Disclaimer And Signature:<ul>' + disclaimerAndSignatureMissingFields + '</ul></li>';
        }
        
        alertMessage += '</ul>';
        displayDialog(alertMessage, 'Errors in Job Application');
        
        return false; 
    }
}

function checkJobAppReferences(referenceFieldsArray) {
    var i = 0;
    var isAllFieldsFilled = true;
    
    for (i=0; i<referenceFieldsArray.length; i++) {
        if ($('#' + referenceFieldsArray[i]).val() == '') {
            isAllFieldsFilled = false;        
        }
    }
    return isAllFieldsFilled;
}

function checkAllAvailabilityFields(availabilityFields) {
    var i = 0;
    var isAllAvailFieldsFilled = true;
    
    for (i=0; i<availabilityFields.length; i++) {
        if ($('#' + availabilityFields[i]).val() == '') {
            isAllAvailFieldsFilled = false;
        }
    }
    return isAllAvailFieldsFilled;
}
