function validateForm() {
	var msg = "";
	var mailExp =/^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/;
	var dateExp=/^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$/;
	var intExp =/^\d+$/;
	var phoneExp =/^((\(\d{3}\)\s?)|(\d{3}\-))\d{3}\-\d{4}$/;
	var zipExp =/^\d{5}(-\d{4})?$/;
	var ssnExp =/^\d{3}-\d{2}-\d{4}/;

	//Grab all the inputs
	var a = document.getElementsByTagName("input");
	if (a.length > 0) {
		for(x=0;x<a.length;x++) {
			if (a[x].className != "" && !a[x].disabled) {
				var classes = a[x].className.split(",");
				for(var b=0;b<classes.length;b++) {
					var id_name = a[x].name;

					//check required fields
					if (classes[b] == "required") {
						if (a[x].value == '')
							msg = msg + "\n" + "<" + a[x].id + "> is required";
					}
					//check email addresses
					if (classes[b] == "email") {
						if (!mailExp.test(a[x].value) && a[x].value != '')
							msg = msg + "\n" + "Value: <" + a[x].value + "> is an invalid email address for <" + a[x].id + ">";
					}
					//check date time
					if (classes[b] == "datetime") {
						if (!dateExp.test(a[x].value) && a[x].value != '')
							msg = msg + "\n" + "Value: <" + a[x].value + "> is an invalid date for <" + a[x].id + ">";
					}
					//check integer
					if (classes[b] == "int") {
						if (!intExp.test(a[x].value) && a[x].value != '')
							msg = msg + "\n" + "Value: <" + a[x].value + "> is not a valid value for <" + a[x].id + ">";
					}
					//check phone
					if (classes[b] == "phone") {
						if (!phoneExp.test(a[x].value) && a[x].value != '')
							msg = msg + "\n" + "Value: <" + a[x].value + "> is not a valid phone number format for <" + a[x].id + ">";
					}
					//check zip
					if (classes[b] == "zip") {
						if (!zipExp.test(a[x].value) && a[x].value != '')
							msg = msg + "\n" + "Value: <" + a[x].value + "> is not a valid zip code format for <" + a[x].id + ">";
					}
					//check ssn
					if (classes[b] == "ssn") {
						if (!ssnExp.test(a[x].value) && a[x].value != '')
							msg = msg + "\n" + "Value: <" + a[x].value + "> is not a valid SSN format for <" + a[x].id + ">";
					}

				}
			}
		}
	}

	return msg;
}

document.getElementsByClassName = function(clsName){
    var retVal = new Array();
    var elements = document.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}