﻿
function validateField(field, datatype, caption, required, isarray) {
    
    var field_type;
    var alert_msg = "";
    
    if (isarray) {
        field_type = field[0].type;
    } else {
        field_type = field.type;
    }
    
    if (required) {
        switch (field_type) {
            case "radio":
                if (isarray) {
                    isblank = true;
                    for (i=0; i<field.length; i++) {
                        if (field[i].checked) {
                            isblank = false;
                            continue;
                        }
                    }
                } else {
                    if (field.checked == false) {
                        isblank = true;
                    }
                }
                if (isblank) {
                    return caption + " is a required field.";
                }
                break;
            default:
                var field_value = field.value;
                if (datatype == "phone") {
                    var remove_chars = "()9-. ";
                    var toRemove = new Array("\\(", "\\)", "-", "_", "\\.", " "); // Regular Expressions.
                    for (i = 0; i < toRemove.length; i++) {
                        field_value = field_value.replace( new RegExp(toRemove[i], "gi"), "");
                    }
                }
                
                if (field_value == "") {
                    return caption + " is a required field.";
                }
                break;
        }
    }
    
    switch (datatype) {
        case "email":
            if (validateEmail(field.value) == false) {
                return caption + " is not a valid email address.";
            }
            break;
        case "phone":
            if (validatePhone(field.value) == false) {
                return caption + " is not a valid U.S. phone number.";
            }
            break;
        case "number":
            if (validateType("0123456789", field.value) == false) {
                return caption + " is not a valid number.\n\nOnly characters 0 - 9 may be entered in this field.";
            }
            break;
        case "percent":
            if (validateType("0123456789.%", field.value) == false) {
                return caption + " is not a valid percentage.\n\nOnly characters 0 - 9, . and % may be entered in this field.";
            }
            break;
        case "money":
            if (validateType("$0123456789.,", field.value) == false) {
                return caption + " is not a valid money value.";
            }
            break;
        case "hex":
            if (validateType("0123456789ABCDEF", field.value.toUpperCase()) == false) {
                return caption + " is not valid.\n\nOnly characters 0 - 9 and A - F may be entered in this field.";
            }
            break;
    }
    
    return "";
    
}

function validatePhone(phone_no) {

    var remove_chars = "()9-. ";
    var toRemove = new Array("\\(", "\\)", "-", "_", "\\.", " "); // Regular Expressions.
    
    for (i = 0; i < toRemove.length; i++) {
        phone_no = phone_no.replace( new RegExp(toRemove[i], "gi"), "");
    }

    // ~~~~~ number cannot start with zero
    if (phone_no.charAt(0) == "0") { return false; }
    // ~~~~~ length should be 10.
    if (phone_no.length != 10) { return false; }

    return true;
    
}

function alertInvalidPhoneFormat() {
    alert("The Phone Number you entered is not in a valid format for the Country Code you selected.");
}

function validateEmail(email) {
    
    var at_pos = email.indexOf("@");
    var last_dot_pos = email.lastIndexOf(".");
    
    if (at_pos <= 0) { return false; }
    if (last_dot_pos < at_pos) { return false; }
    
}

function validateType(valid_chars, input) {

    var cchar;

    for (i = 0; i < input.length; i++)  { 
        cchar = input.charAt(i); 
        if (valid_chars.indexOf(cchar) == -1)  { return false; }
    }

    return true;

}

function comparePasswords(pass1_field, pass2_field) {

    if (pass1_field.value != pass2_field.value) {
        pass1_field.value = "";
        pass2_field.value = "";
        return "The entered passwords do not match.";
    }
    
    return "";
    
}

function getNumericValue(input) {
    
    input = input.replace("$", "");
    input = input.replace(",", "");
    
    return Number(input);
    
}

function setMaxLength(field, maxlength, pasted) {
    if (pasted) {
        if (field.value.length > maxlength) {
            alert("The value entered is too long. Please limit your input to " + maxlength + " characters.");
            field.value = field.value.substring(0, maxlength);
            field.focus();
            field.select();
        }
    } else {
        return (field.value.length <= maxlength);
    }
}
