function dynVerify(form)
{
	if (!form.getAttribute)
	{
		return true; // browser does not support DOM
	}

	var hasError = false, errorMsg = '', elm;
	for (var i = 0; i < form.elements.length; i++)
	{
		elm = form.elements[i];

		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, [ " + elm.name + " ] does not validate.";
				}
				break;
			}
		}

		if (elm.getAttribute("required"))
		{
			if (elm.getAttribute("dyntype") == "radio")
			{
				var radio_checked = false;
                                var rbtn_name = elm.name;
				for (var j = 0; j < form.elements.length; j++)
				{
					t_elm = form.elements[j];

					if (t_elm.name == rbtn_name)
					{
						if (t_elm.checked)
						{
							radio_checked = true;
						}
					}
				}
				if (!radio_checked)
				{
					hasError = true;
					if (elm.getAttribute("errorText"))
					{
						errorMsg = elm.getAttribute("errorText");
					}
					else if (errorMsg == '')
					{
						errorMsg = "Error: " + elm.name + " requires that a choice be selected.";
					}
					break;
				}
			}
			else
			{
				if (elm.value == "")
				{
					hasError = true;

					if (elm.getAttribute("errorText"))
					{
						errorMsg = elm.getAttribute("errorText");
					}
					else if (errorMsg == '')
					{
						errorMsg = "Error: " + elm.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: " + elm.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: " + elm.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: " + elm.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: " + elm.name + " can only contain apostrophes, letters, numbers, periods, spaces, |, or _.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "phone")
		{
			if (!/^\d{3}-\d{3}-\d{4}$|^$/.test(elm.value))
			{
				hasError = true;
				errorMsg = "Error: " + elm.name + " is not in 000-000-0000 format.";
				break;
			}
		}
	}

	if (hasError)
	{
		alert(errorMsg);
		elm.select();
		return false;
	}

	return true;
}
