// JScript File
function reset() {
    var elems = document.getElementsByTagName("*");
    for (var i=0; i<elems.length; i++) {
        if (elems[i].getAttribute("Validate") == "true") {
            var obj = (elems[i].getAttribute("ErrorElement") ? document.getElementById(elems[i].getAttribute("ErrorElement")) : elems[i]);
            obj.className = "";
        }
    }
    
    var error = document.getElementById("error");
    error.style.visibility = "hidden";
    var ul = error.getElementsByTagName("ul")[0];
    removeChildNodes(ul);
}

function validate(validateType) {
    valid = true;
    reset();
    
    var elems = document.getElementsByTagName("*");
    for (var i=0; i<elems.length; i++) {
        if (elems[i].getAttribute("Validate") == "true") {
            var obj = (elems[i].getAttribute("ErrorElement") ? document.getElementById(elems[i].getAttribute("ErrorElement")) : elems[i]);
            
            var thisValid = true;
            var val;
            if (elems[i].type.indexOf("select") >= 0) {
                val = elems[i].options[elems[i].selectedIndex].value;
             }
            else if (elems[i].type == "radio") {
                val = getRadioValue(elems[i].name);
            }
            else {
                val = elems[i].value;
            }
            
            if (elems[i].getAttribute("Required") != "false") {
                if (val == "") {
                    obj.className = "form_error";
                    thisValid = thisValid && false;
                }
            }
            
            if (elems[i].getAttribute("ValidationType") == "pulldown") {
            	if (val == "") {
                    obj.className = "form_error";
                    thisValid = thisValid && false;
                    addErrorMessage("Please make sure you have filled in values for all Required dropdown menus.");
           	 }
            }
            	
            
            if (val.length > 0) {
                switch (elems[i].getAttribute("ValidationType")) {
                    case "phone":
                        if (!isValidPhone(val)) {
                            obj.className = "form_error";
                            thisValid = thisValid && false;
                        }
                        break;
                    case "email":
                        if (!isValidEmail(val)) {
                            obj.className = "form_error";
                            thisValid = thisValid && false;
                        }
                        break;
                    case "zip":
                        if (!isValidZip(val)) {
                            obj.className = "form_error";
                            thisValid = thisValid && false;
                        }
                        break;
                       case "check":
		        if (!isSel(val)) {
		            obj.className = "form_error";
		            thisValid = thisValid && false;
		        }
                        break;
                        case "extension":
                    	if (!isValidExtension(val)) {
                        	obj.className = "form_error";
                        	thisValid = thisValid && false;
                    	}
                }
            }
            else{
               obj.className = "form_error";
               thisValid = thisValid && false;
            }
            valid = valid && thisValid;
        }
    }
    
    if (valid && validateType) {
        switch (validateType) {
            case "checkAge":
                var birthDate = new Date(document.getElementById("form_birthMonth").value + "/" + document.getElementById("form_birthDay").value + "/" + document.getElementById("form_birthYear").value)
                var age = (now - birthDate) / (1000 * 60 * 60 * 24 * 365.25);
                if (age < 13) {
                    location.href = "underthirteen.aspx";
                    return false;
                }
                break;
        }
    }
    
    var error = document.getElementById("error");
    if (!valid) {
        error.style.visibility = "visible";
    }
    
    return valid;
}


function isValidEmail(txt) {
    var regEx = /^[a-zA-Z0-9._-]+(@)[a-zA-Z0-9.-_]+(\.)[a-zA-Z0-9]{2,4}$/; 
    
    if (txt.match(regEx)) {
        return true;
    }
    else {
        addErrorMessage("Email is incorrect.");
        return false;
    }
    
}

function isSel(txt) { 
    if (txt>0) {
        return true;
    }
    else { 
        return false;
    }
    
}



function isValidPhone(txt) {
    //var regEx = /^[(]?\d{3}\D*\d{3}\D*\d{4}$/
    var regEx = /^(\d|-){10,17}$/;
    if (txt.match(regEx)) {
        return true;
    }
    else {
        addErrorMessage("Phone number must be between 10 and 17 characters.");
        return false;
    }
}

function isValidExtension(txt) {
    //var regEx = /^[(]?\d{3}\D*\d{3}\D*\d{4}$/;
    var regEx = /^\d{0,5}$/;
    if (txt.match(regEx)) {
        return true;
    }
    else {
        addErrorMessage("Extensions can only contain numbers.");
        return false;
    }
}

function isValidZip(txt) {
    var regEx = /(\d|\w|-){5,15}$/;
    if (txt.match(regEx)) {
        return true;
    }
    else {
        addErrorMessage("Zipcode must be between 5 and 15 characters.");
        return false;
    }
}

function getRadioValue(name) {
    var val = "";
    var elems = document.getElementsByName(name);
    for (var i=0; i<elems.length; i++) {
        if (elems[i].checked) {
            val = elems[i].value;
            break;
        }
    }
    
    return val;
}

function addErrorMessage(text) {
    var div = document.getElementById("error");
    var ul = div.getElementsByTagName("ul")[0];
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(text));
    ul.appendChild(li);
}

function removeChildNodes(node) {
    while (node.childNodes[0]) {
        node.removeChild(node.childNodes[0]);
    }
}
