// Some regexes stolen blatently from http://tetlaw.id.au/upload/dev/validation/validation.jsvar filters = {	requiredField: function(v) {		var item = v.length ? v[0] : v		var signature = item.tagName.toUpperCase() + (item.type ? "." + item.type.toUpperCase() : "")		switch(signature) {			case 'INPUT.TEXT':			case 'INPUT.PASSWORD':			case 'TEXTAREA.TEXTAREA':				return /./.test(trim(v.value)) ? "" : "Field is empty."			case 'INPUT.RADIO':			case 'INPUT.CHECKBOX':				var collection = document.forms[0][v.name]				// I check for both .checked and .selectedIndex to cover for freak situations like the event list, where				//	the hidden field is always a checkbox while the visible one is a drop-down				for(var j = 0; j < collection.length; j++) { if(collection[j].checked | collection[j].selectedIndex > -1) { return "" } }				return "Please select " + (signature == "INPUT.CHECKBOX" ? "at least one" : "an") + " option."			case 'OPTION':				return /./.test(trim(v[v.selectedIndex].value)) ? "" : "Please select an option."		}		return ""	},	numericField: function(v) { return trim(v.value) == "" || !isNaN(trim(v.value)) ? "" : "Not a valid number." },	digitField: function(v) { return trim(v.value) == "" || !/[^\d]/.test(clear_space(v.value)) ? "" : "Not a valid number." },	alphaField: function(v) { return trim(v.value) == "" || /^[a-zA-Z]+$/.test(clear_space(v.value)) ? "" : "Contains non-letter characters." },	alphanumField: function(v) { return trim(v.value) == "" || !/\W/.test(clear_space(v.value)) ? "" : "Contains non-alphanumeric characters." },	emailField: function(v) { return trim(v.value) == "" || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(trim(v.value)) ? "" : "Not a valid email address." },	zipField: function(v) { return trim(v.value) == "" || /^\d\d\d\d\d(-?)(\d\d\d\d)?$/.test(clear_space(v.value)) ? "" : "Not a valid US ZIP code." },	phoneField: function(v) { return trim(v.value) == "" || /^[\d]{10,11}$/.test(strip_non_digits(v.value)) ? "": "Not a valid phone number." },	eventField: function(v) { return this.requiredField(v) }}	validateFields = function() {	// if we're not really submitting (i.e. we're just refreshing fields), don't run the checks	if(!document.__is_submitting) { return true }		errorMessage = ""	var elements = document.forms[0].elements	var hitElements = new Object()	for(var i = 0; i < elements.length; i++) {		if(hitElements[elements[i].name]) { continue }		if(/\s+notesEventField\s+/.test(" " + elements[i].className + " ")) { continue }				var parentElement = document.getElementById(elements[i].name + "_Row")		if(parentElement) parentElement.className = parentElement.className.replace(" missingRequiredField", "")		var classes = elements[i].className.split(/\s/)		for(filterClass in filters) {			if(classes.indexOf(filterClass) > -1) {				var result = filters[filterClass](elements[i])				if(result != "") {					errorMessage += elements[i].title + ": " + result + "\n"					if(parentElement) {						/*var itemError = document.createElement('div')						itemError.className = "errorMessage"						itemError.appendChild(document.createTextNode(result))						parentElement.appendChild(itemError)*/						parentElement.className += " missingRequiredField"					}					break				}			}		}		hitElements[elements[i].name] = true	}		document.__is_submitting = false	if(errorMessage != "") { alert(errorMessage); return false }	return true}trim = function(v) { return v.replace(/^\s+/, "").replace(/\s+$/, "") }clear_space = function(v) { return v.replace(/\s/g, "") }strip_non_digits = function(v) { return v.replace(/[^\d]/g, "") }// Firefox has this method already, but IE doesn't, so I'll patch in my own iff it doesn't existif(!Array.prototype.indexOf) { Array.prototype.indexOf = function(v) { for(var i = 0; i < this.length; i++) if(this[i] == v) return i; return -1 } }
