function dynVerify(form)
{
	if (!form.getAttribute) {
		return true; // browser does not support DOM
	}

	var hasError = false, errorMsg = '', elm, name;
	for (var i = 0; i < form.elements.length; i++) {
		elm = form.elements[i];

		if (elm.getAttribute("dispname")) {
			name = elm.getAttribute("dispname")
		} else {
			name = elm.name;
		}

		if (elm.getAttribute("regex")) {
			if (!elm.value.match(elm.getAttribute("regex"))) {
				hasError = true;

				if (elm.getAttribute("errorText")) {
					errorMsg = elm.getAttribute("errorText");
				} else if (errorMsg == '') {
					errorMsg = "Error in your form, [ " + name + " ] does not validate.";
				}
				break;
			}
		}

		if (elm.getAttribute("required")) {
			if (elm.value == "") {
				hasError = true;
				errorMsg = "Error: " + name + " is required.";
				break;
			}
		}

		if (elm.getAttribute("confirm")) {
			if (typeof(form.elements["confirm_" + elm.name]) == 'undefined' || elm.value != form.elements["confirm_" + elm.name].value) {
				hasError = true;
				errorMsg = "Error: " + name + " and confirmation do not match.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "email") {
			if (!/^.+@.+\..{2,}$|^$/.test(elm.value)) {
				hasError = true;
				errorMsg = "Please enter a valid email address.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "url") {
			if (!/^https?:\/\/|^$/.test(elm.value)) {
				hasError = true;
				errorMsg = "Error: " + name + " must begin with http:// to be a valid url.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "date") {
			if (!/^(19|20)\d{2}-(12|11|10|0[1-9])-(31|30|[12][0-9]|0[1-9])$|^$/.test(elm.value)) {
				hasError = true;
				errorMsg = "Error: " + name + " is not in YYYY-MM-DD format or is an invalid date.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "text") {
			if (!/^[-a-zA-Z0-9|_]+$/.test(elm.value)) {
				hasError = true;
				errorMsg = "Error: " + name + " can only contain letters, numbers, |, or _.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "phone") {
			if (!/^\d{3}-\d{3}-\d{4}$|^$/.test(elm.value)) {
				hasError = true;
				errorMsg = "Error: " + name + " is not in 000-000-0000 format.";
				break;
			}
		}
		// For SIGNLE names, i.e. NOT first and last name together!
		if (elm.getAttribute("dyntype") == "name") {
			if (!/[a-z]{2,}(-[a-z]{2,}){0,2}/i.test(elm.value)) {
				hasError = true;
				errorMsg = "Error: Invalid format for " + name + ".";
				break;
			}
		}

	}

	if (hasError) {
		alert(errorMsg);
		elm.select();
		return false;
	}

	return true;
}