/*
###################################
validation javascript by metric152
updated 7.19.02

update:
-added detection of select mutiple

update:
-using regular expressions to validate email
-cleaned up script
-changed the isChecked to use the radio array name to walk through the form object instead of counting on it being in order
-now works reguardless of flat or layered pages
-still cleaning up code

this script is used to check a form to make sure all values are entered properly. if the
value is not correct it will prompt with a given message and focus you back to the improper entree.
this checks:
radio buttons
text fields
textarea fields
select fields (select-one)
e mail addresses
check box field
select-multiple field

to check the field to see if it is required use the prefix
r_

to check the field to see if it is required number
ri_

to check the field to see if it is required email
re_

to check the field to see if it is a number use the prefix
i_

to check the field to see if it is a email address use the prefix
e_

to check the the document for a unique error message for each field
m_

to use this script on your form tag enter the following
onSubmit="return checkout(this)"

for custom message enter the name of the field value with m_ as a prefix
make the type hidden and set the value the message you want to prompt the use with

i.e.
field name is r_name
<input type=text name=r_name>

message value is m_name
<input type=hidden name=m_name value="Please input your name">

i.e.
field name is r_test for radio
<input type=radio name=r_test value=1>
<input type=radio name=r_test value=2>
<input type=radio name=r_test value=3>

message value is m_test
<input type=hidden value=m_test value="this is the message">


enter the default message you would like to see when prompted for improper email addresses
*/
var emailprompt = "Please enter a valid email address.";
/*

enter the default message you would like to see when prompted for blank fields
*/
var blankmsg = "Please fill in all required fields.";
/*
enter a default message you would like to see when a radio field is not checked
*/
var blankradio = "Please select a option";
/*
enter a default message you would like to see when entered value isnt a number
*/
var notanumber = "Entered value is not a number";
/*
enter a default message you would like to see when a check box isnt checked
*/
var blankcheck = "Please make sure you have checked all the proper fields";
/*
###################################
*/

//this function checks the email address to make sure its valid
function check_email(value){//0
//this checks for garbage characters
var pattern = /[^\@\.\w\-]/;

//this grabs all the @'s and .'s in the string
var email = /[\@\.]/g;

var at=false;
var p=false;

var isGood = value.match(pattern);
if(isGood!=null){return false;}
var isGood = value.match(email);
//just check for @'s
if (isGood!=null){//0
	for(i=0;isGood[i]!=null;i++){//1
		//search for first @
		if(isGood[i]=='@'&&at==false){//2
			at=true;
		}//2
		//searching for second @
		else if(isGood[i]=='@'&&at==true){//2
			return false;
		}//2
		else if(isGood[i]=='.'){//2
			p=true;
			}//2
	}//1
}//0
//means email was pulled back wrong
else{//0
	return false;
	}//0
//this is the last check in the system
if(at==true&&p==true){return true;}else{return false;}
}//0

//this function checks a value to make sure its not blank
function isBlank(value){//0
	if(value==""||value==null){//1
		return false;
	}//1
	return true;
}//0


//this function checks radio button arrays to make sure one option is checked
function isChecked(form,formName){
var i;
var checked=0;
if(eval("form."+formName+".checked==true")){return true;}
for(i=0;eval("form."+formName+"[i]!=null");i++){//0
	if(eval("form."+formName+"[i].checked==true")){//1
		checked++;
		}//1
	}//0
return checked==0?false:true;
}

function msgError(form,ename){//0
	if(form.elements["m"+ename.substr(ename.indexOf("_"),ename.length)]){//1
		alert(form.elements["m"+ename.substr(ename.indexOf("_"),ename.length)].value);
		return true;
	}//1
	return false;
}//0

function checkout(form){//0
outside:
	for(walking=0;form.elements[walking]!=null;walking++){//1
	ename = form.elements[walking].name;      
	value = form.elements[walking].value;
	type = form.elements[walking].type;
	
	//check for required
	if (ename.charAt(0)=="r"&&ename.charAt(1)=="_"){//2
		//this is thrown in to skip a form. it should be disabled once testing period is over
		if(value=="skipme"){break outside;}
		//this looks at a select form tag to make sure that at least one option is selected. it doesnt
		//yet work with select-multiple
		if (type=="select-one"){//3
			if(isBlank(form.elements[walking].options[form.elements[walking].selectedIndex].value)==false){//4
				if(msgError(form,ename)==false){alert(blankmsg);}
				form.elements[walking].focus();
				return false;
			}//4			
		}//3
		//this checks on a select-mutiple
		else if(type=="select-mutiple"){//3
			if(isBlank(form.elements[walking].options[form.elements[walking].selectedIndex].value)==false){//4
				if(msgError(form,ename)==false){alert(blankmsg);}
				form.elements[walking].focus();
				return false;
			}//4
		}//3
		//this checks the radio button array to make sure one of them is at least checked
		else if(type=="radio"){//3
			if(isChecked(form,ename)==false){//4
					if(msgError(form,ename)==false){alert(blankradio);}
					form.elements[walking].focus();
					return false;
				}//4
			}//3
		//this checks text fields to make sure they arent blank
		else if(type=="checkbox"){//3
				if(form.elements[walking].checked==false){//4
					if(msgError(form,ename)==false){alert(blankcheck);}
					return false;
				}//4
			}//3
		else{//3
			 if(isBlank(form.elements[walking].value)==false){
			 	if(msgError(form,ename)==false){alert(blankmsg);}
				form.elements[walking].focus()
				return false;}
			 }//3
		}//2
	
	//makes sure entered value is only a number and it is required
	else if (ename.charAt(0)=="r"&&ename.charAt(1)=="i"&&ename.charAt(2)=="_"){//2
		if(isBlank(value)==false){
			if(msgError(form,ename)==false){alert(notanumber);}
			form.elements[walking].select()
			form.elements[walking].focus()
			return false;
			}
		if(isNaN(value)==true){//3
			if(msgError(form,ename)==false){alert(notanumber);}
			form.elements[walking].select()
			form.elements[walking].focus()
			return false;
		}//3
	}//2
	
	//makes sure the entered value is an email and it is required
	else if(ename.charAt(0)=="r"&&ename.charAt(1)=="e"&&ename.charAt(2)=="_"){//2
		if(isBlank(value)==false){
			if(msgError(form,ename)==false){
				alert(emailprompt);}
				form.elements[walking].select()
				form.elements[walking].focus()
				return false;
				}
		if(check_email(value)==false){
			if(msgError(form,ename)==false){alert(emailprompt);}
			form.elements[walking].select()
			form.elements[walking].focus()
			return false;
			}
		}//2
		
	//makes sure entered value is only a number
	else if (ename.charAt(0)=="i"&&ename.charAt(1)=="_"){//2
		if(isNaN(value)==true){//3
			if(msgError(form,ename)==false){alert(notanumber);}
			form.elements[walking].select()
			form.elements[walking].focus()
			return false;
			}//3
		}//2
	
	//checks email address to make sure its valid
	else if(ename.charAt(0)=="e"&&ename.charAt(1)=="_"){//2
		if(isBlank(value)==false){//3
			}//3
		else{//3
			if(check_email(value)==false){//4
				if(msgError(form,ename)==false){alert(emailprompt);}
				form.elements[walking].select()
				form.elements[walking].focus()
				return false;
				}//4
			}//3
		}//2
    }//1
	return true;
 }//0