//FORM VALIDATION
 
//   EXTRA FIELD PROPERTIES
//   These properties should be added to the tags of the form fields as required for validation
//   1. brackets=""
//   used to add extra PROMPT message guidance, eg. brackets="(the first character should be a letter)"
//   2. mask="" 
//   this property is used to add a mask to a field.
//   . = any character
//   * = any group of characters
//   any other character = an exact match of that character
//   don't forget that a field doesn't have to be required to have a mask, 
//   if you wish the field to be required this property will need to be set separately (see 5)
//   e.g. mask="*@dstl……." will force the user to enter any number of characters followed by @dstl, followed by 7 characters
//   3. name=""
//   every field that requires validation should include a value for the name property which should be recognisable to the user
//   4. num=""
//   set to true where a field should contain ONLY NUMBERS, i.e. num="true"
//   5. required=""
//   set to true for REQUIRED TEXT fields, i.e. required="true")
//   6. rlength=""
//   set to the REQUIRED LENGTH of field the value, e.g. rlength="2"
//   7. rpdm=""
//   set to true for REQUIRED PULL DOWN MENUS - single select only, i.e. rpdm="true" - Enter the selected option's value as blank ("")
//   8. rrb=""
//   set to true for the first field of REQUIRED RADIO BUTTONS, i.e. rrb="true"
 
 function validateForm()
 {
 var r=document.forms[0]
 var retry		//value initially set to false at start of for loop, set to true if a prompt box is encountered
 
 	if(rmsOk())
 		{
 		if(!validateText())
 			{
 			return false
 			}
 		else
 			{
 			r.submit()
 			}
 		}
 	else
 		{
 		return false
 		}
 }
 
 function rmsOk()
 {
 var r=document.forms[0]
 var message	 	//a message to be displayed to the user
 var retry=false //set to false, set to true when part 1 of the message is generated
 var c				//radio botton array number to add onto radio button array element
 var j				//a variable to be used as a counter in while statements
 var checked		//set to false at start of checking new radio button set, set to true when a checked radio button is  encountered
 
 for(i=0; i<r.length; i++) //check all elements
 	{
 	if(r.elements[i].rpdm && (r.elements[i].value.length==0)) //test required PULL DOWN MENUS, if no option is selected  write menu name to message
 		{
		r.elements[i].style.backgroundColor="#ff6600"
 		if(retry==false)
 			{
 			message="please select a value from the available options for: " + "\n" + r.elements[i].name
 			retry=true
 			}
 		else
 			{
 			message+=",\n"+ r.elements[i].name
 			}
 		}
	else if(r.elements[i].rpdm && (r.elements[i].value.length!=0))
		{
		r.elements[i].style.backgroundColor="#FFFFFF"
		}
 	if(r.elements[i].rrb)
 	{
 	checked=false
 	for(c=0; c<r.length ; c++)
 		{
 		if(r.elements[i].name==r.elements[c].name) //test required RADIO BUTTON sets, 
 			{
 			if(r.elements[c].checked)
 				{
 				checked=true
 				}
 			}	
 		}
 	if(checked==false) //if no option is checked write radio button set name to message
 		{
 		if(retry==false)
 			{
 			message="please select a value from the available options for: " + "\n" + r.elements[i].name
 			retry=true
 			}
 		else
 			{
 			message+=",\n"+ r.elements[i].name
 			}
 		}
 	} //end of if.rrb statement
 	} //end of for all elements loop
 	if(retry==true) //if a required value isn't set alert message and return as false
 		{
 		alert(message)
 		return false
 		}
 	else
 		{
 		return true
 		}
 	
 }
 
 function validateText()
 {
 var r=document.forms[0]
 var entry	 	//the users response to a prompt box entry
 var message	 	//a message to be displayed to the user
 var retry			//if the user has been prompted, validate the field again
 var c				//value of a character in a field value
 var m=0 //mask position marker
 var f=0 //field position marker
 var valid=true //set to false when an incorrect entry is found
 var starchecking=false // set to true when processing a * value in a mask
 var wrongdate=false // set to true on encountering an error with a date field
 
 for(i=0; i<r.length; i++)
 	{
 	retry=false
 
	
	if(r.elements[i].mask&&r.elements[i].value!='') //if element has a mask property set
 	{
	m=0
	f=0
 	while(m<=r.elements[i].mask.length && valid==true)
 		{
		if(f>r.elements[i].value.length)
			{
			valid=false
			}
		if(r.elements[i].mask.charAt(m)=='*')
			{
			starchecking=true
				if(r.elements[i].value.charAt(f)==r.elements[i].mask.charAt(m+1))
					{
					m++
					starchecking=false
					}
				else
					{
					f++
					if(f>r.elements[i].value.length)
						{
						valid=false
						starchecking=false
						}
					}
				}
		if(r.elements[i].mask.charAt(m)=='.' && starchecking==false)
			{
			m++
			f++
			}
		else
			{
			if(r.elements[i].value.charAt(f)==r.elements[i].mask.charAt(m) && starchecking==false)
				{
				m++
				f++
				}
			else
				{
				if(starchecking==false)
					{
					valid=false
					}
				}
			}
		
 	}
 if(valid==false)
 	{
	valid=true
	retry=true
	 r.elements[i].style.backgroundColor="#ff6600"
	maskmessage='The value you have entered for ' + r.elements[i].name + ' is incorrect. Please re-enter. '
	if(r.elements[i].brackets)
 			{
 			maskmessage=maskmessage+r.elements[i].brackets
 			}
	 entry=prompt(maskmessage)
 	if(entry==null)
 			{
 			return false
			}
		r.elements[i].value=entry
		entry=""
 	}
 	else
 		{
		r.elements[i].style.backgroundColor="#FFFFFF"
		}
 	}
	
 	if(r.elements[i].required && (r.elements[i].value.length==0)) //prompt if r.elements[i] is empty
 		{
		r.elements[i].style.backgroundColor="#ff6600"
 		message=r.elements[i].name+" is a required field, please enter "
 		if(r.elements[i].brackets)
 			{
 			message+=r.elements[i].brackets
 			}
 		entry=prompt(message,"")
 		if(entry==null)
 			{
 			return false
 			}
 		r.elements[i].value=entry
		entry=""
 		retry=true
 		}
	else
	{
	r.elements[i].style.backgroundColor="#FFFFFF"
	}
 	if(r.elements[i].rlength && r.elements[i].value.length!=0)
 	{
 	if(r.elements[i].value.length!=r.elements[i].rlength) // prompt if  r.elements[i] value length is not the required length
 		{
		r.elements[i].style.backgroundColor="#ff6600"
 		message=r.elements[i].name+" must be "+r.elements[i].rlength+" characters long, please re-enter "												
 		if(r.elements[i].brackets)
 			{
 			message+=r.elements[i].brackets
 			}
 		entry=prompt(message,"")
 		if(entry==null)
 			{
 			return false
 			}
 		r.elements[i].value=entry
		entry=""
 		retry=true
 		}
	else
		{
		r.elements[i].style.backgroundColor="#FFFFFF"
		}
 	    }
 	if(r.elements[i].num) //check that all characters are numbers
 		{
 		j=0
 		while(retry==false && j<r.elements[i].value.length)
 		{
 			c=r.elements[i].value.charAt(j)
 			if(!(c>=0 && c<=9))
 				{
				r.elements[i].style.backgroundColor="#ff6600"
 				message="the value you have entered for "+r.elements[i].name+" is not a number, please  re-enter as a number "
 				if(r.elements[i].brackets)
 					{
 					message+=r.elements[i].brackets
 					}
 				entry=prompt(message,"")
 				if(entry==null)
 					{
 					return false
 					}
 				r.elements[i].value=entry
				entry=""
 				retry=true
 				}
			r.elements[i].style.backgroundColor="#FFFFFF"
 			j++
 			}
 		}
if(r.elements[i].date) //check date
	{
	if(r.elements[i].value.length==8)
		{
			if(!(r.elements[i].value.charAt(0)>=0 && r.elements[i].value.charAt(0)<=3))
				{
				wrongdate=true
 				}
			if(!(r.elements[i].value.charAt(1)>=0 && r.elements[i].value.charAt(1)<=9))
				{
				wrongdate=true
 				}
			if(!(r.elements[i].value.charAt(2)=='/'))
				{
				wrongdate=true
 				}
			if(!(r.elements[i].value.charAt(3)>=0 && r.elements[i].value.charAt(3)<=1))
				{
				wrongdate=true
 				}
			if(!(r.elements[i].value.charAt(4)>=0 && r.elements[i].value.charAt(4)<=9))
				{
				wrongdate=true
 				}
			if(!(r.elements[i].value.charAt(5)=='/'))
				{
				wrongdate=true
 				}
			if(!(r.elements[i].value.charAt(6)>=0 && r.elements[i].value.charAt(6)<=9))
				{
				wrongdate=true
 				}
			if(!(r.elements[i].value.charAt(7)>=0 && r.elements[i].value.charAt(7)<=9))
				{
				wrongdate=true
 				}
			}
		else if(r.elements[i].value.length!=0)
			{
			wrongdate=true
			}
		if(wrongdate==true)
			{
			wrongdate=false
			r.elements[i].style.backgroundColor="#ff6600"
 			message="This is not a valid date. Dates must be entered in the following format, dd/mm/yy, ie the 5th December 2001 would read 05/12/01. "
 			if(r.elements[i].brackets)
 				{
 				message+=r.elements[i].brackets
 				}
 			entry=prompt(message,"")
 			if(entry==null)
 				{
 				return false
 				}
 			r.elements[i].value=entry
			entry=""
 			retry=true
 			}
		else
			{
			r.elements[i].style.backgroundColor="#FFFFFF"
			}
	}
if(retry==true) // if retry is true check that form element again
 		{
 		i=i-1
 		}
 	}
 return true
 }
 
 //FORM VALIDATION END