//*********************************************************************************
// Validate fields
//*********************************************************************************

function isInteger(s) {
    var i;
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}

function stripCharsInBag(s, bag) {
    var i;
    var returnString = "";
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary(year) {
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}
function DaysArray(n) {
    for (var i = 1; i <= n; i++) {
        this[i] = 31
        if (i == 4 || i == 6 || i == 9 || i == 11) { this[i] = 30 }
        if (i == 2) { this[i] = 29 }
    }
    return this
}

function validateDate(fld) {
    var error = "";
    var dtCh = "/";
    var minYear = 1900;
    var maxYear = 2100;
    
    var daysInMonth = DaysArray(12)
    var pos1 = fld.value.indexOf(dtCh)
    var pos2 = fld.value.indexOf(dtCh, pos1 + 1)
    var strDay = fld.value.substring(0, pos1)
    var strMonth = fld.value.substring(pos1 + 1, pos2)
    var strYear = fld.value.substring(pos2 + 1)
    strYr = strYear
    if (strDay.charAt(0) == "0" && strDay.length > 1) strDay = strDay.substring(1)
    if (strMonth.charAt(0) == "0" && strMonth.length > 1) strMonth = strMonth.substring(1)
    for (var i = 1; i <= 3; i++) {
        if (strYr.charAt(0) == "0" && strYr.length > 1) strYr = strYr.substring(1)
    }
    month = parseInt(strMonth)
    day = parseInt(strDay)
    year = parseInt(strYr)
    
    if (fld.value == "") {
        error = "Date should be dd/mm/yyyy.\n";
        fld.style.background = '#FFFF99';
    } else if (pos1 == -1 || pos2 == -1) {
        error = "Date should be dd/mm/yyyy.\n";
        fld.style.background = '#FFFF99';
    } else if (strMonth.length < 1 || month < 1 || month > 12) {
        error = "Date should be dd/mm/yyyy.\n";
        fld.style.background = '#FFFF99';
    } else if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]) {
        error = "Date should be dd/mm/yyyy.\n";
        fld.style.background = '#FFFF99';
    } else if (strYear.length != 4 || year == 0 || year < minYear || year > maxYear) {
        error = "Date should be dd/mm/yyyy.\n";
        fld.style.background = '#FFFF99';
    } else if (fld.value.indexOf(dtCh, pos2 + 1) != -1 || isInteger(stripCharsInBag(fld.value, dtCh)) == false) {
        error = "Date should be dd/mm/yyyy.\n";
        fld.style.background = '#FFFF99';
    } else {
        fld.style.background = '#FFFFFF';
    }
    return error;
}



function validateRadio(fld) {
    var error = "";
    var myOption = -1;
    for (i = fld.length - 1; i > -1; i--) {
        if (fld[i].checked) {
            myOption = i; i = -1;
        }
    }
    if (myOption == -1) {
        for (i = fld.length - 1; i > -1; i--) {
            fld[i].style.background = '#FFFF99';
        }
        error = "The required field has not been filled in.\n"
    } else {
        for (i = fld.length - 1; i > -1; i--) {
            fld[i].style.background = '#FFFFFF';
        }
    }
    return error;
}

function validatePhone(fld) {
    var error = "";
    var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, '');

    if (fld.value == "") {
        error = "You didn't enter a phone number.\n";
        fld.style.background = '#FFFF99';
    } else if (isNaN(parseInt(stripped))) {
        error = "The phone number contains illegal characters.\n";
        fld.style.background = '#FFFF99';
    } else {
        fld.style.background = '#FFFFFF';
    }
    return error;
}

function trim(s) {
    return s.replace(/^\s+|\s+$/, '');
}

function validateEmail(fld) {
    var error = "";
    var tfld = trim(fld.value);                        // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
    var illegalChars = /[\(\)\<\>\,\;\:\\\"\[\]]/;

    if (fld.value == "") {
        fld.style.background = '#FFFF99';
        error = "You didn't enter an email address.\n";
    } else if (!emailFilter.test(tfld)) {              //test email for illegal characters
        fld.style.background = '#FFFF99';
        error = "Please enter a valid email address.\n";
    } else if (fld.value.match(illegalChars)) {
        fld.style.background = '#FFFF99';
        error = "The email address contains illegal characters.\n";
    } else {
        fld.style.background = '#FFFFFF';
    }
    return error;
}

function validateEmpty(fld) {
    var error = "";

    if (fld.value.length == 0) {
        fld.style.background = '#FFFF99';
        error = "The required field has not been filled in.\n"
    } else {
        fld.style.background = '#FFFFFF';
    }
    return error;
}

//*********************************************************************************
// Forms
//*********************************************************************************

function validateForm1() {
    var frm = document.forms[0];
    var reason = "";

    document.getElementById("validate").innerHTML = "";

    reason += validateEmpty(frm["N-contact name."]);
    reason += validateEmpty(frm["N-Business."]);
    reason += validateEmpty(frm["N-Address."]);
    reason += validateEmpty(frm["N-Business."]);
    reason += validateEmpty(frm["N-Business details 2."]);
    reason += validateEmpty(frm["N-Business details 3."]);
    reason += validateEmpty(frm["N-postcode."]);
    reason += validateDate(frm["N-record creation date."]);
    reason += validateEmpty(frm["N-PI_MIA_WorkStatus"]);
    reason += validateEmpty(frm["N-agent number."]);
    reason += validateEmail(frm["N-email."]);
    reason += validatePhone(frm["N-phone."]);
    reason += validateRadio(frm["N-Cover required"]);
    reason += validateEmpty(frm["N-ST_DD_StaffCat1."]);
    reason += validateEmpty(frm["N-ST_DD_StaffCat2."]);
    reason += validateEmpty(frm["N-ST_DD_StaffCat3."]);
    reason += validateRadio(frm["N-FSA website"]);

    if (reason != "") {
        document.getElementById("validate").innerHTML = "* Please complete all mandatory fields";
        return false;
    }

    return true;
}


function validateForm2() {
    var frm = document.forms[0];
    var reason = "";

    document.getElementById("validate").innerHTML = "";

    reason += validateEmpty(frm["N-Further information."]);
    reason += validateEmpty(frm["N-furtherinfo2."]);
    reason += validateEmpty(frm["N-Furtherinfo9."]);
    reason += validateEmpty(frm["N-Furtherinfo10."]);
    reason += validateRadio(frm["N-Audit undertaken"]);

    if (reason != "") {
        document.getElementById("validate").innerHTML = "* Please complete all mandatory fields";
        return false;
    }

    return true;
}


function validateForm3() {
    var frm = document.forms[0];
    var reason = "";

    document.getElementById("validate").innerHTML = "";

    reason += validateEmpty(frm["N-Wilsons-CoverRequired"]);
    reason += validateRadio(frm["N-PRO_INDEMNITY"]);

    if (reason != "") {
        document.getElementById("validate").innerHTML = "* Please complete all mandatory fields";
        return false;
    }

    return true;
}


function validateForm4() {
    var frm = document.forms[0];
    var reason = "";

    document.getElementById("validate").innerHTML = "";

    reason += validateRadio(frm["N-SA2"]);
    reason += validateRadio(frm["N-sa3"]);
    reason += validateRadio(frm["N-sa4"]);
    reason += validateRadio(frm["N-sa5"]);
    reason += validateRadio(frm["N-sa6"]);
    reason += validateRadio(frm["N-st_fte_1"]);
    reason += validateRadio(frm["N-sa7"]);
    reason += validateRadio(frm["N-sa8"]);
    reason += validateRadio(frm["N-sa9"]);
    reason += validateRadio(frm["N-sa10"]);

    if (reason != "") {
        document.getElementById("validate").innerHTML = "* Please complete all mandatory fields";
        return false;
    }

    return true;
}
