var errMsg;

function clearFormatting(input){
    if (input.type == "radio" || input.type == "checkbox") {
        input.parentNode.className = "";
    }
    else if (input.type != "button") {
        input.className = "";
    }
}

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

function setInputClass(input, className){
    var formMsg = document.getElementById("formMsg");
	formMsg.style.visibility = "";
    if (input.type == "radio" || input.type == "checkbox") {
        input.parentNode.className = className;
    }
    else {
        input.className = className;
    }
	var msgExists = false;
	for (msgs=0; msgs<errMsg.length; msgs++) {
		if (errMsg[msgs] == input.getAttribute("message")) {
			msgExists = true;
			break;
		}
	}
	if (msgExists == false && input.getAttribute("message") != null && input.getAttribute("message") != "") {
		formMsg.innerHTML += "<li>" + input.getAttribute("message") + "</li>";
		errMsg.push(input.getAttribute("message"));
	}
}

function validateForm(form){
    var formName = form.name;
    var retVal = true;
    var element = "";
    var reqElements = form.elements;
    var conditionalElements = new Array();
    var re;
	document.getElementById("formMsg").innerHTML = "";
	errMsg = new Array();
    
    //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) {
                    setInputClass(reqElements[j], "requiredField");
                    retVal = false;
                }
            }
        }
        else if (reqElements[j].getAttribute("use") == "R" && reqElements[j].value == "") {
            setInputClass(reqElements[j], "requiredField");
            retVal = false;
        }
		
		//match pattern
    	if (reqElements[j].value != "" && reqElements[j].getAttribute("pattern") != null) {
            switch (reqElements[j].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(reqElements[j].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 "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}$)|(^[2-9]\d{2} \d{3} \d{4}$)|(^[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 (reqElements[j].value.match(re) == null) {
                setInputClass(reqElements[j], "mismatchField");
                retVal = false;
            }
        }
    }
    
    //handle conditional requirements
    switch (formName) {
		
    }
    for (i = 0; i < conditionalElements.length; i++) {
        element = document.getElementById(conditionalElements[i]);
            setInputClass(element, "requiredField");
            retVal = false;
    }
    
    if (retVal == true) {
        return true;
    }
    else {
        return false;
    }
}

