function saveContactInformation(f)
{
    if (!validateForm(f))
    {
        alert("Your form has errors associated with it.\n\nPlease correct the errors and submit again.");
        return;
    }
    else
    {
        f.submit();
    }
}

function clearFormatting(input){
    if (input.type == "radio" || input.type == "checkbox") {
        input.parentNode.style.border = "none";
        input.parentNode.style.background = "none";
    }
    else if (input.type != "button" && input.type != "hidden") {
        input.style.border = "";
        input.style.background = "#fff";
        document.getElementById(input.name+"_formError").style.display = "none";
    }
}

function maxlength(element, max){
    if (element.value.length > max) {
        element.value = element.value.substring(0, max);
    }
}

function setMismatch(input){
    if (document.getElementById(input.getAttribute("name") + "Sample") != null) {
        document.getElementById(input.getAttribute("name") + "Sample").style.display = "";
    }
    if (input.type == "radio" || input.type == "checkbox") {
        input.parentNode.style.border = "1px #f00 solid";
        input.parentNode.style.background = "#f0f";
    }
    else {
        input.style.border = "1px #f00 solid";
        input.style.background = "#f0f";
        document.getElementById(input.name+"_formError").style.display = "block";
    }
}

function setRequired(input){
    if (input.type == "radio" || input.type == "checkbox") {
        input.parentNode.style.border = "1px #f00 solid";
        input.parentNode.style.background = "#ff0";
    }
    else {
        input.style.border = "1px #f00 solid";
        input.style.background = "#ff0";
        document.getElementById(input.name+"_formError").style.display = "block";
    }
}

function validateForm(f){
    var pageForm = f;
    var retVal = true;
    var element = ""
    var reqElements = pageForm.elements;
    var conditionalElements = new Array();
    var re;
    
    //Enforce straight-up required
    for (j = 0; j < reqElements.length; j++) {
        clearFormatting(reqElements[j]);
            if (reqElements[j].type == "radio") {
                if (reqElements[j].getAttribute("use") == "R") {
                    var isChecked = false;
                    var radios = document.getElementsByName(reqElements[j].name);
                    for (k = 0; k < radios.length; k++) {
                        if (radios[k].checked == true) {
                            isChecked = true;
                        }
                    }
                    if (isChecked == false) {
                        setRequired(reqElements[j]);
                        retVal = false;
                    }
                }
            }
            if (reqElements[j].type == "checkbox") {
                if (reqElements[j].getAttribute("use") == "R") {
                    var isChecked = false;
                    var checkboxes = document.getElementsByName(reqElements[j].name);
                    for (k = 0; k < checkboxes.length; k++) {
                        if (checkboxes[k].checked == true) {
                            isChecked = true;
                        }
                    }
                    if (isChecked == false) {
                        setRequired(reqElements[j]);
                        retVal = false;
                    }
                }
            }
            else if (reqElements[j].getAttribute("use") == "R" && reqElements[j].value == "") 
            {
                setRequired(reqElements[j]);
                retVal = false;
            }
    }
    

    for (i = 0; i < conditionalElements.length; i++) {
        element = document.getElementById(conditionalElements[i]);
        if (element.value == "" || ((element.type == "checkbox" || element.type == "radio") && !element.checked)) {
            setRequired(element);
            retVal = false;
        }
    }
    
    //match pattern
    var inputs = pageForm.getElementsByTagName("input");
    for (i = 0; i < inputs.length; i++) {
        if (inputs[i].value != "" && inputs[i].getAttribute("pattern") != null) {
            switch (inputs[i].getAttribute("pattern")) {
                case "currency":
                    re = /^([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/;
                    break;
                case "custom":
                    re = new RegExp(inputs[i].getAttribute("custompattern"));
                    break;
                case "date":
                    re = /^(((2|02)\/([0-9]|[0,1][0-9]|2[0-8]))|((4|04|6|06|9|09|11)\/([0-9]|[0-2][0-9]|30))|(1|01|3|03|5|05|7|07|8|08|10|12)\/([0-9]|[0-2][0-9]|3[0,1]))\/(\d{4})$/;
                    break;
                case "email":
                    re = /^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/;
                    break;
                case "number":
                case "real number":
                    re = /^\d+$/;
                    break;
                case "phone":
                    // re = /(^\([2-9]\d{2}\)\x20\d{3}\-\d{4}$)|(^\([2-9]\d{2}\)\d{3}\-\d{4}$)|(^\([2-9]\d{2}\)\d{3}\-\d{4}\x20\d+$)|(^[2-9]\d{2}\-\d{3}\-\d{4}$)|(^[2-9]\d{2}\.\d{3}\.\d{4}$)/;
                    re = /(^[2-9]\d{2}\-\d{3}\-\d{4}$)|(^[2-9]\d{2}\-\d{3}\-\d{4}\x20\d+$)|(^[2-9]\d{2}\-\d{3}\-\d{4}\x20\x\d+$)|(^[2-9]\d{2}\.\d{3}\.\d{4}$)/;
                    break;
                case "ssn":
                    re = /^\d{3}\-\d{2}\-\d{4}$/;
                    break;
                case "zip code":
                    re = /^\d{5}(\-\d{4}){0,4}$/;
                    break;
            }
            
            if (inputs[i].value.match(re) == null) {
                setMismatch(inputs[i]);
                retVal = false;
            }
        }
    }
    
    //Re-initialize to overwrite the clear formatting on certain fields 
    // init(currentPage);
    
    if (retVal == true) {
        return true;
    }
    else {
        return false;
    }
}

