function require(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, [ " + elm.name + " ] does not validate.";
				}
				break;
			}
		}

		if (elm.getAttribute("required"))
		{
			if (elm.value == "")
			{
				hasError = true;
				errorMsg = "" + elm.name + " is required.";
				break;
			}
		}

		if (elm.getAttribute("Confirmed"))
		{
			if (typeof(form.elements["Confirmed_" + elm.name]) == 'undefined' || elm.value != form.elements["Confirmed_" + elm.name].value)
			{
				hasError = true;
				errorMsg = "" + elm.name + " does not match!";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "email")
		{
			if (!/^.+@.+\..{2,}$|^$/.test(elm.value))
			{
				hasError = true;
				errorMsg = "Please enter a valid e-mail address.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "url")
		{
			if (!/^https?:\/\/|^$/.test(elm.value))
			{
				hasError = true;
				errorMsg = "" + elm.name + " must begin with http:// to be a valid url.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "date")
		{
			if (!/^(12|11|10|0[1-9])-(31|30|[12][0-9]|0[1-9])-(19|20)\d{2}$|^$/.test(elm.value))
			{
				hasError = true;
				errorMsg = "" + elm.name + " is not in MM-DD-YYYY format or is an invalid date.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "text")
		{
			if (!/^[-a-zA-Z0-9|_]+$/.test(elm.value))
			{
				hasError = true;
				errorMsg = "" + elm.name + " can only contain letters, numbers, |, or _.";
				break;
			}
		}

		if (elm.getAttribute("dyntype") == "phone")
		{
			if (!/^\([1-9]\d{2}\)\s?\d{3}-\d{4}$|^$/.test(elm.value))
			{
				hasError = true;
				errorMsg = "" + elm.name + " is not in (000) 000-0000 format.";
				break;
			}
		}
	}

	if (hasError)
	{
		alert(errorMsg);
		elm.select();
		return false;
	}

	return true;
}
