// functions that return true or false indicating validity of a specific // type of input //// to use, call the function and pass it input.// // document.myForm.onSubmit = function() {//	if (!isValidPhoneNumber(document.myForm.phone_number.value)) {//		alert("the phone number you entered sucks!");//		return false;//	}//	return true;// }function isValidPhoneNumber(s) {	var temp = s.replace(/\D/g, "")	return temp.length > 9 && temp.length < 26}function isValidZipCode(s) {	var temp = s.replace(/\D/g, "")	return temp.match(/^\d{5}$|^\d{9}$/) != null}function isValidSelectBox(o) {	return (o.options[o.selectedIndex].value != "_none_" && 			o.options[o.selectedIndex].value.trim() != "")}function isValidEmailAddress(s) {	var temp = s.replace(/\s/g, "");	return (temp.match(/^[\w\.\-]+\x40[\w\.\-]+\.\w+$/)) && 			temp.charAt(0) != "." && !(temp.match(/\.\./))}			// masking functions - attempt to parse and reformat // element's values as a specific datatype// to use, tack them to the form field's onblur handler.// document.myForm.phone_number.onblur = phoneFieldBlurHandler	//   -> this field will now mask for phone numbers onblurfunction textFieldBlurHandler() {	this.value = this.value.trim()}function dateFieldBlurHandler() {	var d = new Date(this.value)	if (!isNaN(d)) {		// if the user didn't specify the century/millenium,		// then assume the present.		if (this.value.search(/\d{3}/) == -1) 			d.setYear(Math.floor((new Date()).getFullYear() / 100) * 100 + d.getFullYear() % 100);		this.value = d.getHumanDateString()	}}function timeFieldBlurHandler() {	var t = new Time(this.value)	if (!isNaN(t)) this.value = t.getHumanTimeString()}function phoneFieldBlurHandler() {	var temp = this.value.replace(/\D/g, "")	if (temp.length > 9 && temp.length < 26)		if (temp.length == 10) {			this.value = "(" + temp.substring(0,3) + ") " 			this.value += temp.substring(3,6) + "-" + temp.substring(6,10)		}	}function zipcodeFieldBlurHandler() {	var temp = this.value.replace(/\D/g, "")	if (temp.length == 5 || temp.length == 9) { 		if (temp.length == 5) this.value = temp		else this.value = temp.substring(0,5) + "-" + temp.substring(5,9)	}}// convenience function.// attaches textFieldBlurHandler to the onblur event // of every text or textarea element in f// var myForm = document.myForm// attachAllTextHandlers(myForm) //		-> every text element in myForm now will call //		   textFieldBlurHandler (above) onblurfunction attachAllTextHandlers(f) {	var el	for (var i = 0; (el = f.elements[i]); i++) {		if (el.type == "text" || el.type == "textarea") 			el.onblur = textFieldBlurHandler	}}// as convenient a place as any to store this...var STD_ERROR_PREFIX = "Errors:\n "// Extensions to the Date class:// var myDate = new Date();// myDate.getMonthName(); -> "February"// myDate.getHumanDateString(); -> "February 29, 2000"// myDate.getHumanTimeString(); -> "4:00 pm"// returns the name of the monthDate.prototype.getMonthName = function() {	return ["January","February","March","April","May","June","July","August",			"September","October","November","December"][this.getMonth()]}// returns a nicely formatted date stringDate.prototype.getHumanDateString = function() {return this.getMonthName() + " " + this.getDate() + ", " + this.getFullYear()}// returns a nicely formatted time stringDate.prototype.getHumanTimeString = function() {	var h = this.getHours()	var m = this.getMinutes()	var t = h >= 12 ? "pm" : "am"	if (h == 0) h = 24	if (h > 12) h -= 12	h = String(h)	m = String(m)	if (m.length == 1) m = "0" + m	return h + ":" + m + " " + t}// Time is a wrapper class for the Date object// it accepts a wide variety of strings representing the time// and returns a date object representing the current date with the// specified time.//// var myTime = new Time('4p');// myTime now contains a date object representing today at 4PM.//// accepted formats include 4p, 4:p, 4:1p, 4:10p, 4:10pm, 16:00, // and a bunch more.../*function Time(sTimeStr) {	var a = sTimeStr.match(/(\d{1,2})\s*\x3A?\s*(\d{0,2})\s*(am|pm|a|p)?/i)	if (a) {		var d = new Date()		var h = a[1]		var m = a[2]		var t = a[3]		if (t && t.charAt(0).toLowerCase() == "p") h = h % 12 + 12		d.setHours(h)		d.setMinutes(m)		return d	}	return null}*/function Time(sTimeStr) {	if (sTimeStr.trim() != "")	{		var a = sTimeStr.match(/\d{1,2}/g)		var t = sTimeStr.match(/(am|pm|a|p)/ig)		if (a) {			var d = new Date()			var h = a[0]			var m = a[1] ? a[1] : 0;			if (t) t = String(t[0]);			if (t && t.charAt(0).toLowerCase() == "p") h = h % 12 + 12			d.setHours(h)			d.setMinutes(m)			return d		}		return null	}}// Extensions to the String class:// var myStr = "  yomomma.mpg "// myStr.trim() -> myStr now contains "hotdogs!"// myStr.hasFileExtension(".mpg") -> true// like Trim( ) in vbscript. removes trailing and // leading whitespace from a stringString.prototype.trim = function() {	return this.replace(/^\s*|\s*$/g, "")}// determines whether or not a filename has one of the specified extensionsString.prototype.endsWith = function() {	var bOk = false	for (var i = 0; i < arguments.length; i++) {		if (this.indexOf(arguments[i]) == this.length - arguments[i].length) {			bOk = true			break		}	}	return bOk}// push is a quite useful method of arrays in newer // javascript implementations, but not in ie5-Array.prototype.push = function(v) {	this[this.length] = v	return v}
