﻿// JScript File

/*******************************************************************
Scripts to validate form field entires on forms

1) validateSubmit - Function to validate the form fiedl entries

*********************************************************************/

function validateSubmit(controlRoot, formType, validateContactName, validateFirstName, validateSurname, validateTitleType, validateCompanyName, validateAddress, validateTelNum, validateEmailAddress, validateNumEmployees, validateDPA, needTelAndEmail, validateOccupation) {
    var errors = '';
    var numErrors = 0;
    var companyNameIsValid = true;
    var phoneNumisValid = true;

    //1) Check that ther's a contact name
    if (validateContactName == true) {
        var contactName = document.getElementById(controlRoot + 'uiContactName').value.replace(' ', '');
        if (contactName.length < 3) {
            numErrors += 1;
            errors += numErrors + '). Please provide a contact name\n';
        }
    }

    //2) Check that a first name has been entered
    if (validateFirstName == true) {
        var firstName = document.getElementById(controlRoot + 'uiFirstName').value.replace(' ', '');
        if (firstName == '') {
            numErrors += 1;
            errors += numErrors + '). Please provide your first name\n';
        }
    }

    //3) Check that a surname has been entered
    if (validateSurname == true) {
        var surname = document.getElementById(controlRoot + 'uiSurname').value.replace(' ', '');
        if (surname.length < 3) {
            numErrors += 1;
            errors += numErrors + '). Please provide your surname\n';
        }
    }

    //4) Check a title has been entered
    if (validateTitleType == true) {
        var titleType = document.getElementById(controlRoot + 'uiTitleType').value.replace(' ', '');
        if (titleType.length == 0) {
            numErrors += 1;
            errors += numErrors + '). Please provide a title\n';
        }
    }

    //5) Company name
    if (validateCompanyName == true) {
        var companyName = document.getElementById(controlRoot + 'uiCompanyName').value;
        if (companyName.replace(' ', '').length < 3) {
            numErrors += 1;
            errors += numErrors + '). Please provide a company name\n';
            companyNameIsValid = false;
        }
    }

    //6) address
    if (validateAddress == true) {
        var companyAddress = document.getElementById(controlRoot + 'uiAddress').value.replace(' ', '');
        if (companyAddress.length < 20) {
            numErrors += 1;
            errors += numErrors + '). Please provide an address of at least 20 characters\n';
            addressIsValid = false;
        }

    }

    //7) check if we need both tel and email address
    var telNum = '';
    var emailAddress = '';

    if (validateTelNum == true) {
        telNum = document.getElementById(controlRoot + 'uiTelNum').value.replace(' ', '');
    }

    if (validateEmailAddress == true) {
        emailAddress = document.getElementById(controlRoot + 'uiEmail').value.replace(' ', '');
    }

    if (formType != 'upDateDetails' && validateEmailAddress == true && validateTelNum == true && telNum == '' && emailAddress == '' && needTelAndEmail == false) {
        numErrors += 1;
        errors += numErrors + '). Please provide either a telephone number or an e-mail address\n';
    }
    else if (needTelAndEmail == true) {
        if (emailAddress == '' && validateEmailAddress == true) {
            numErrors += 1;
            errors += numErrors + '). Please provide an e-mail address\n';
        }
        if (telNum == '' && validateTelNum == true) {
            numErrors += 1;
            errors += numErrors + '). Please provide a telephone number\n';
        }
    }

    //8) Validate phone num
    if (validateTelNum == true && telNum != '' && validatePhoneNum(telNum) == false) {
        numErrors += 1;
        errors += numErrors + '). Please provide a valid and full phone number\n';
        phoneNumisValid = false;
    }

    //9)Validate email address
    if (validateEmailAddress == true && emailAddress != '' && validateEmail(emailAddress) == false) {
        numErrors += 1;
        errors += numErrors + '). Please provide a correctly formatted e-mail address\n';
    }

    //10) num employees
    if (validateNumEmployees == true) {

        var numEmployees = document.getElementById(controlRoot + 'uiNumEmployees').value;
        if (numEmployees.length == 0) {
            numErrors += 1;
            errors += numErrors + '). Please enter the number of employees ';

            if (companyNameIsValid) {
                errors += 'at ' + companyName + ' ';
            }

            errors += "\n";
        }
    }

    //12) DPA
    if (validateDPA == true && document.getElementById(controlRoot + 'uiDPA') != null && document.getElementById(controlRoot + 'uiDPA').checked == false) {
        numErrors += 1;
        errors += numErrors + '). Please read and accept the terms of our Privacy statement\n'
    }

    //13) Occupation
    if (validateOccupation == true && document.getElementById(controlRoot + "uiOccupation") != null) {
        var occupation = document.getElementById(controlRoot + "uiOccupation").value.replace(' ', '');
        if (occupation.length == 0) {
            numErrors += 1;
            errors += numErrors + "). Please provide an occupation\n";
        }
    }

    //11) Form specific stuff
    var formSpecificErrorMessage = '';
    switch (formType) {
        case "setUpAccount":
            formSpecificErrorMessage = validateSetUpAccount(controlRoot, numErrors);
            break;
        case "register":
            formSpecificErrorMessage = validateRegister(controlRoot, numErrors);
            break;
        case "askAQuestion":
            formSpecificErrorMessage = validateAskAQuestion(controlRoot, numErrors);
            break;
        case "individualApply":
            formSpecificErrorMessage = validateIndividualApply(controlRoot, numErrors, phoneNumisValid);
            break;
        case "upDateDetails":
            formSpecificErrorMessage = validateUpdateDetails(controlRoot, numErrors);
            break;

    }

    if (formSpecificErrorMessage != '') {
        numErrors += 1;
        errors += formSpecificErrorMessage + "\n";
    }


    //see if any errors - dont care how many!!!
    if (numErrors == 0) {

        return true;
    }
    else {

        var errorString = 'Cannot submit due to the following ' + numErrors + ' ';
        errorString += (numErrors == 1) ? "error.\n\n" : "errors.\n\n";
        errorString += errors + "\n";
        errorString += 'Please change and try again!';
        alert(errorString);
        return false;
    }

}

function validateSetUpAccount(controlRoot, numErrors) {
    var errorMessage = '';
    if ((document.getElementById(controlRoot + 'uiEB') && document.getElementById(controlRoot + 'uiEB').checked == false) &&
        (document.getElementById(controlRoot + 'uiHP') && document.getElementById(controlRoot + 'uiHP').checked == false) &&
        (document.getElementById(controlRoot + 'uiALC') && document.getElementById(controlRoot + 'uiALC').checked == false)) {
        numErrors += 1;
        errorMessage += numErrors + '). Please select at least one Template benefit\n';
    }

    if ((document.getElementById(controlRoot + 'uiHP') && document.getElementById(controlRoot + 'uiHP').checked == true) &&
        (document.getElementById(controlRoot + 'uiEB') && document.getElementById(controlRoot + 'uiEB').checked == false) &&
        (document.getElementById(controlRoot + 'uiALC') && document.getElementById(controlRoot + 'uiALC').checked == false)) {
        numErrors += 1;
        errorMessage += numErrors + '). Holiday pay can only be used in conjunction with accident and life cover and/or the EasyBuild stakeholder pension.\n';
    }

    if (document.getElementById(controlRoot + 'uiEligibility') && document.getElementById(controlRoot + 'uiEligibility').checked == false) {
        numErrors += 1;
        errorMessage += numErrors + '). Please check that that your operatives are eligible for N.I. concession\n';
    }

    return errorMessage;
}


function validateRegister(controlRoot, numErrors) {

    var errorMessage = '';
    if (document.getElementById(controlRoot + 'uiCallMe').checked == false && document.getElementById(controlRoot + 'uiBrochure').checked == false) {
        numErrors += 1;
        errorMessage = numErrors + '). Please select at least one of the Brochure/Call Me checkboxes\n';
    }
    return errorMessage;
}

function validateAskAQuestion(controlRoot, numErrors) {
    var errorMessage = '';
    if (document.getElementById(controlRoot + 'uiQuestion').value.replace(' ', '').length < 10) {
        numErrors += 1;
        errorMessage = numErrors + '). Please ask us a question of at least 10 characters length\n';
    }
    return errorMessage;
}


function validateUpdateDetails(controlRoot, numErrors) {

    var errorMessage = '';
    var dob = document.getElementById(controlRoot + 'uiDOB').value.replace(' ', '');
    var ni = document.getElementById(controlRoot + 'uiNI').value.replace(' ', '');
    var telNumDay = document.getElementById(controlRoot + 'uiTelNumDay').value.replace(' ', '');
    var telephonePresent = (telNumDay != '');
    var addressPresent = false;
    if (document.getElementById(controlRoot + 'uiAddress1').value.replace(' ', '') != '' ||
            document.getElementById(controlRoot + 'uiAddress2').value.replace(' ', '') != '' ||
                document.getElementById(controlRoot + 'uiTown').value.replace(' ', '') != '' ||
                    document.getElementById(controlRoot + 'uiCounty').value.replace(' ', '') != '' ||
                        document.getElementById(controlRoot + 'uiPostCode').value.replace(' ', '') != '') {
        addressPresent = true;
    }


    if (telNumDay != '' && validatePhoneNum(telNumDay) == false) {
        numErrors += 1;
        errorMessage += numErrors + '). Please provide a valid and full daytime phone number\n';
    }

    if (addressPresent && !telephonePresent) {
        numErrors += 1;
        errorMessage += numErrors + '). For your personal security when updating your address details please ensure you supply a telephone number, as we may need to verify the details in order to protect you against identity fraud.\n';
    }

    if (ni == '') {
        numErrors += 1;
        errorMessage += numErrors + '). Please provide an NI Number\n';
    }

    if (dob == '') {
        numErrors += 1;
        errorMessage += numErrors + '). Please provide a Date of Birth\n';
    }
    else {
        var sep1ct
        var sep2ct
        var sepct
        var sTestDate

        // Check length
        if (dob.length != 10) {
            numErrors += 1;
            errorMessage += numErrors + '). Please provide a valid Date of Birth in dd/mm/yyyy format\n';
            return errorMessage;
        }

        // Check separators
        sep1ct = dob.indexOf('/')
        sep2ct = dob.indexOf('/', sep1ct + 1)

        if (sep1ct != 2 || sep2ct != 5) {
            numErrors += 1;
            errorMessage += numErrors + '). Please provide a valid Date of Birth in dd/mm/yyyy format\n';
            return errorMessage;
        }

        // Check values
        if (isNaN(dob.substr(0, sep1ct)) | Number(dob.substr(0, sep1ct)) > 31) {
            numErrors += 1;
            errorMessage += numErrors + '). Please provide a valid Date of Birth in dd/mm/yyyy format\n';
            return errorMessage;
        }

        if (isNaN(dob.substr(sep1ct + 1, sep2ct - sep1ct - 1)) || Number(dob.substr(sep1ct + 1, sep2ct - sep1ct - 1)) == 0 || Number(dob.substr(sep1ct + 1, sep2ct - sep1ct - 1)) > 12) {
            numErrors += 1;
            errorMessage += numErrors + '). Please provide a valid Date of Birth in dd/mm/yyyy format\n';
            return errorMessage;
        }

        if (dob.length - sep2ct != 5) {
            numErrors += 1;
            errorMessage += numErrors + '). Please provide a valid Date of Birth in dd/mm/yyyy format\n';
            return errorMessage;
        }

        if (isNaN(dob.substr(sep2ct + 1, 4)) | Number(dob.substr(sep2ct + 1, 4)) < 1900 | Number(dob.substr(sep2ct + 1, 4) > 2100)) {
            numErrors += 1;
            errorMessage += numErrors + '). Please provide a valid Date of Birth in dd/mm/yyyy format\n';
            return errorMessage;
        }

        sTestDate = new Date(dob.substr(sep2ct + 1, 4), dob.substring(sep1ct + 1, sep2ct) - 1, dob.substring(0, sep1ct));

        if (sTestDate.getDate() != parseInt(dob.substring(0, sep1ct), 10)) {
            numErrors += 1;
            errorMessage += numErrors + '). Please provide a valid Date of Birth in dd/mm/yyyy format\n';
            return errorMessage;
        }

        //see if individual between 16 and 99
        var today = new Date();
        var day = today.getDay();
        var month = today.getMonth();
        var year = today.getYear();
        var date99 = new Date(year - 99, month, day);
        var date16 = new Date(year - 16, month, day);

        if (sTestDate > date16) {
            numErrors += 1;
            errorMessage += numErrors + '). You must be at least 16 to have a B&CE policy\n';
            return errorMessage;
        }

        if (sTestDate < date99) {
            numErrors += 1;
            errorMessage += numErrors + '). You are too old to have a B&CE policy\n';
            return errorMessage;
        }
    }

    return errorMessage;
}

function validateIndividualApply(controlRoot, numErrors, phoneNumIsValid) {
    var errorMessage = '';
    var address = document.getElementById(controlRoot + 'uiAddress').value.replace(' ', '');

    if ((document.getElementById(controlRoot + 'uiPhone') && document.getElementById(controlRoot + 'uiPhone').checked == false) &&
        (document.getElementById(controlRoot + 'uiPost') && document.getElementById(controlRoot + 'uiPost').checked == false) &&
        (document.getElementById(controlRoot + 'uiEmailContact') && document.getElementById(controlRoot + 'uiEmailContact').checked == false)) {
        numErrors += 1;
        errorMessage = numErrors + '). Please indicate how you would prefer us to contact you\n';
    }

    if ((document.getElementById(controlRoot + 'uiPhone') && document.getElementById(controlRoot + 'uiPhone').checked == true) &&
            (phoneNumIsValid == false || document.getElementById(controlRoot + 'uiTelNum').value.replace(' ', '') == '')) {
        numErrors += 1;
        errorMessage += numErrors + '). Please provide a phone number so that we may contact you by phone\n';
    }

    if (document.getElementById(controlRoot + 'uiPost').checked == true && address.length < 20) {
        numErrors += 1;
        errorMessage += numErrors + '). Please provide an address of at least 20 characters length so that we contact you by post\n';
    }

    if ((document.getElementById(controlRoot + 'uiCPA') && document.getElementById(controlRoot + 'uiCPA').checked == false) &&
        (document.getElementById(controlRoot + 'uiEB') && document.getElementById(controlRoot + 'uiEB').checked == false) &&
        (document.getElementById(controlRoot + 'uiRC') && document.getElementById(controlRoot + 'uiRC').checked == false)) {
        numErrors += 1;
        errorMessage += numErrors + '). Please select at least one product that interests you\n';
    }

    return errorMessage;
}

