
			// ------------------------------------------------------------------------------------
			// remove single quote marks (') from all strings -- it's a SQL thing:
			// ------------------------------------------------------------------------------------
			function tickHandler(sString) 
			{
				var s = new String(sString) ;
				var sReturn = new String() ;
				var ar = s.split("'") ; // use the String.Split() method to cut out the "'" characters
				for(var i = 0; i < ar.length; i++) 
				{
					sReturn += ar[i] ;
				}
				return(sReturn) ;
			}
			
			// ------------------------------------------------------------------------------------
			// validate Phone Numbers as ALL numeric digits:
			// ------------------------------------------------------------------------------------
			function validatePhoneNumber(sValue)
			{
				var oRegExp = new RegExp("\\d{10}") ; // I need all 10 digits of the phone number (area code, prefix, number)
				return( oRegExp.test(sValue) )
			}

			// ------------------------------------------------------------------------------------
			// validate Zip Code as ALL numeric value:
			// ------------------------------------------------------------------------------------
			function validateZipCode(sValue)
			{
				var s = new String(sValue) ;
				var oRegExp = new RegExp("\\d{5}(\d\d\d\d)?") ; // I'm trying for a zip code with no dashes or anything like that
				return( oRegExp.test(s) )
			}

			// ------------------------------------------------------------------------------------
			// validate the format of the submitted email address:
			// ------------------------------------------------------------------------------------
			function validateEmailAddressFormat(sEmailAddress) 
			{
				var oRegExp = new RegExp ("^[\\w-_\\.]*[\\w-_\\.]\\@[\\w.-]+\\.\\w{2,3}$")
				// OR...
				// var oRegExp = /^[\w-_\.]*[\w-_\.]\@[\w.-]+\.\w{2,3}$/
				// But you can only use this in JavaScript because of the way JavaScript regards "/" characters.
				// The previous method is far easier to transport to another platform.
				return( oRegExp.test(sEmailAddress) ) 
			}
			
			// ------------------------------------------------------------------------------------
			// validate the submitted value for all numeric characters:
			// ------------------------------------------------------------------------------------
			function validateNumericField(nValue, nMaxLength)
			{
				var ar = new Array() ;
				var s = new String(nValue) ;
				for( var i = 0; i < s.length; i++)
				{
					ar[ar.length] = s.charAt(i) ;
				}
				if( (ar.length) > nMaxLength )
				{
					alert("You have entered too many digits for this number field. Please try again.") ;
					return ;
				}
				for( i = 0; i < ar.length; i++ )
				{
					n = parseInt(ar[i])
					if( isNaN(n) )
					{
						alert("You have entered an invalid value in a number field. Please try again.") ;
						return ;
					}
				}
			}
			
			// minimal error checking
			function validateFormData(f)
			{
				var bSchedulePick = false ;
				var i = 0 ;
				// check the values submitted by the user.
				// put up warnings and information for the user so s/he can correct his blunders.
				if( f.FirstName.value == '' ) 
				{
					alert("Please enter your First Name.") ;
					return ; 
				}
				f.FirstName.value = tickHandler(f.FirstName.value) ;
				
				if( f.LastName.value == '' ) 
				{
					alert("Please enter your Last Name.") ;
					return ; 
				}
				f.LastName.value = tickHandler(f.LastName.value) ;
				
				if( f.Address1.value == '' ) 
				{
					alert("Please enter your Address.") ;
					return ; 
				}
				f.Address1.value = tickHandler(f.Address1.value) ;
				
				if( f.City.value == '' ) 
				{
					alert("Please enter your City.") ;
					return ; 
				}
				f.City.value = tickHandler(f.City.value) ;
				
				for( i = 0 ; i < f.selState.options.length ; i++ ) 
				{
					if( f.selState.options[i].selected ) 
					{
						f.State.value = f.selState.options[i].value ;
						break ; 
					}
				}
				
				if( f.Zip.value == '' ) 
				{
					alert("Please enter your Zip Code.") ;
					return ; 
				}
				else
				{
/*					if( validateZipCode(f.Zip.value) == false )
					{
						alert("Please enter the numbers only of your Zip Code.") ;
						return ;
					}
*/				}

				if( f.Email.value == '' ) 
				{
					alert("Please enter your Email Address.") ;
					return ; 
				}
				else
				{
/*					if( validateEmailAddressFormat(f.Email.value) == false )
					{
						alert("Invalid email address. Please correct the format of your email address and try again.") ;
						return ;
					}
*/				}
				f.Email.value = tickHandler(f.Email.value) ;

				if( f.Phone1.value == '' ) 
				{
					alert("Please enter your Day Phone.") ;
					return ; 
				}
				else
				{
/*					if( validatePhoneNumber(f.Phone1.value) == false )
					{
						alert("Please enter numbers only for your Day phone number.") ;
						return ;
					}
*/				}
				
				// this field is optional. test for a value before validating:
				if( f.Phone2.value )
				{
/*					// if value exists, must have correct format (numbers only):
					if( validatePhoneNumber(f.Phone2.value) == false )
					{
						alert("Please enter numbers only for your Evening phone number.") ;
						return ;
					}
*/				}
				else
				{
					f.Phone2.value = f.Phone1.value ;
				}

				if( f.DogName.value == '' ) 
				{
					alert("Please enter your Dog's Name.") ;
					return ; 
				}
				f.DogName.value = tickHandler(f.DogName.value) ;

				for( i = 0 ; i < f.rdoDogSex.length ; i++ ) 
				{
					if( f.rdoDogSex[i].checked ) 
					{
						f.DogSex.value = f.rdoDogSex[i].value ;
						break ; 
					}
				}

				if( f.DogBreed.value == '' ) 
				{
					alert("Please enter your Dog's Breed.") ;
					return ; 
				}
				f.DogBreed.value = tickHandler(f.DogBreed.value) ;

				if( f.DogAge.value == '' ) 
				{
					alert("Please enter your Dog's Age.") ;
					return ; 
				}
				f.DogAge.value = tickHandler(f.DogAge.value) ;

				if( f.VetName.value == '' ) 
				{
					alert("Please enter your Vet's Name.") ;
					return ; 
				}
				f.VetName.value = tickHandler(f.VetName.value) ;

				if( f.VetPhone.value == '' ) 
				{
					alert("Please enter your Vet's Phone.") ;
					return ; 
				}
				else
				{
/*					if( validatePhoneNumber(f.VetPhone.value) == false )
					{
						alert("Please enter numbers only for your Day phone number.") ;
						return ;
					}
*/				}
				f.VetPhone.value = tickHandler(f.VetPhone.value) ;

				//' -------------------------------------------------------------------------------
				//' if you add a case here, be sure there is a matching item in 
				//' buildReferralSelect() found in file 'serverutils.js'
				//' -------------------------------------------------------------------------------
/*
				with( f.selReferral )
				{
					for( i = 0 ; i < options.length ; i++ ) 
					{
						if( options[i].selected ) 
						{
							switch( options[i].value )
							{
								case "FR" :
									f.Referral.value = "Friend/Neighbor" ;
									break ;
								case "VT" :
									f.Referral.value = "Veterinarian" ;
									break ;
								case "PS" :
									f.Referral.value = "Pet Store" ;
									break ;
								case "TR" :
									f.Referral.value = "Another Trainer" ;
									break ;
								case "IN" :
									f.Referral.value = "Internet" ;
									break ;
								case "AD" :
									f.Referral.value = "Advertisement/Magazine" ;
									break ;
								case "IF" :
									f.Referral.value = "Invisible Fence" ;
									break ;
								case "CK" :
									f.Referral.value = "Cascade Kennels" ;
									break ;
								case "OT" :
								default:
									f.Referral.value = "Other" ;
									break ;
							}
						}
					}
				}
*/				
				// the user must select a class from the list to register.
				// if they haven't, inform them, give them a chance to pick.
				//' this is a set of ratio buttons:
				if( f.rdoScheduleID.length )
				{
					for( i = 0; i < f.rdoScheduleID.length ; i++ ) 
					{
						if( f.rdoScheduleID[i].checked ) 
						{
							bSchedulePick = true ;
							f.scheduleid.value = f.rdoScheduleID[i].value ;
							break ; 
						}
					}			
					if( !bSchedulePick ) 
					{
						alert("Please choose a class from the list of available Training Classes.") ;
						return ; 
					}
				}
				else 
				{
					//' rdoScheduleID.type is a checkbox -- the only choice available
					if( ("checkbox" == f.rdoScheduleID.type) && (f.rdoScheduleID.checked) )
					{
						f.scheduleid.value = f.rdoScheduleID.value ;
					}
					else
					{
						alert("Please select the class you wish to attend by clicking the checkbox.") ;
						return ;
					}
				}

				
				// the user must select one of the two waiver options.
				// if they haven't, inform them, give them a chance to pick.
				if( f.rdoConfirmAgreement[0].checked ) 
				{
					f.waiver.value = "1" ; 
				}
				else 
				{
					if( f.rdoConfirmAgreement[1].checked ) 
					{
						f.waiver.value = "0" ;
						alert("You have rejected the waiver of liability statement at the bottom of the Registration form.") ;
						return ; 
					}
					else 
					{
						alert("Please confirm or reject the waiver of liability statement at the bottom of the Registration form.") ;
						return ; 
					}
				}
				
				// everything looks good -- go ahead and submit the form's content for processing:
				f.submit() ;
			}

