function validateForm (){
	/*
	
	Current supported types of Questions:
	
	text 		-> 	text Fields
	number		->  text Fields - only numbers
	dropDown 	->  a single select
	definition 	-> 	a series of selects
	multiple 	-> 	a series of check boxs
	radio 		-> 	a series of radio buttons
	generalText ->  text fields - no character validation
	email 		-> checks for one @ and atleast one .
	
	Example of how function is called:
	validateForm('form Name', 'form item feedback', 'form item name', 'form item type');
	validateForm('completionForm','Question 1','Q1','radio','Question 2','Q2','dropDown','Question 3','Q3','definition','Question 4','Q4','multiple');
	
	Form item feedback represents how you want that question to be called to the user.
	For example, a form item may have a name of 'firstName' but to the user it will be called
	'First Name'  ex-  'First Name', 'firstName', 'text'
	
	Also, all questions have a form reference starting with Q, then the number.  
	Ex:  Q3   for question 3
	*/
	
	var preFeedback = "You need to complete the following questions:\n\n";
	var feedback = "";
	var formName = arguments[0];
	var firstMiss = false;

	for(var n=1; n < arguments.length; n = n + 3){
		// variables come in pairs.  form item name and type
		
		var userSelected = false;
		
		// Radio buttons and check box's can be treated the same.
		if(arguments[n +2] == 'radio' || arguments[n + 2] == 'multiple'){
			// numOfRadios = document.completionForm.Q2.length
			eval("numOfRadios = document."+formName+"."+arguments[n+1]+".length");
			
			for(i=0; i < numOfRadios; i++){
				// checked = document.completionForm.Q2[i].checked
				eval("checked = document."+formName+"."+arguments[n+1]+"[i].checked");
				if(checked){
					if(arguments[n+1] == 'q02'){
						// it's q02 and 'Other' has been selected'
						if(i == 4){
							//q02_other
							// Characters that should not be in a text field
							var userData = eval("document."+formName+".q02_other.value");
							
							if(!userData == ""){
								userSelected = true;
							}
						}
					}else{
						userSelected = true;
					}
				}
			}
			
			if(!userSelected){
				feedback += arguments[n]+".\n";
			}
		}else if (arguments[n +2] == 'dropDown'){
			eval("dropValue = document."+formName+"."+arguments[n+1]+".selectedIndex");
			
			// As long as the selected index is greater than 0, then it means they have 
			// selected something other than the default ' -- '
			if(dropValue == 0){
				feedback += arguments[n]+".\n";
			}			
		}else if (arguments[n +2] == 'definition'){
			var subCounter = 0;
			var stillHaveDefinitions = true;
			
			while(stillHaveDefinitions){
				// Check if group of definitions exist
				if(eval("document."+formName+"."+arguments[n+1]+"_"+subCounter)){
					if(!eval("document."+formName+"."+arguments[n+1]+"_"+subCounter+".selectedIndex")){
						// This option is on the default selection
						feedback += arguments[n]+".\n";
						// We can stop with this question.  Feedback won't be changed.
						stillHaveDefinitions = false;
					}
				}else{
					// There are no more definition options for the user to select, exit while
					stillHaveDefinitions = false;
				}
				subCounter++;
			}
		}else if (arguments[n +2] == 'email'){
			
			// Characters that should not be in a text field
			var emailFilter=/^.+@.+\..{2,3}$/;
			//  not allowing the following:  ( ) < > [ ] , ; : \ / "
			var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
			
			var userData = eval("document."+formName+"."+arguments[n+1]+".value");
			
			// Remove any white space in the front
			while (userData.substring(0,1) == ' '){
				userData = userData.substring(1);
			}
			
			// Remove any trailing white space
    		while (userData.substring(userData.length-1,userData.length) == ' ') {
	    		userData = userData.substring(0,userData.length-1);
    		}
			
    		eval("document."+formName+"."+arguments[n+1]+".value = userData");
    		
    		if (!(emailFilter.test(userData)) || userData.match(illegalChars) || userData == ""){
				// bad data.  Clear the field and tell them to fill it in
				eval("document."+formName+"."+arguments[n+1]+".value = ''");
				feedback += arguments[n]+".\n";
			}
		}else if (arguments[n +2] == 'text'){
			
			// Characters that should not be in a text field
			var regEx = /[^a-zA-Z0-9'. ]+/;
			var userData = eval("document."+formName+"."+arguments[n+1]+".value");
			
			regExResults = userData.search(regEx);
			
			//alert("regExResults -> "+regExResults+"  userData -> "+userData);
			if(regExResults > -1 || userData == ""){
				// bad data.  Clear the field and tell them to fill it in
				eval("document."+formName+"."+arguments[n+1]+".value = ''");
				feedback += arguments[n]+".\n";
			}
		}else if (arguments[n +2] == 'generalText'){
			
			// Characters that should not be in a text field
			var userData = eval("document."+formName+"."+arguments[n+1]+".value");
			
			//alert("regExResults -> "+regExResults+"  userData -> "+userData);
			if(userData == ""){
				// bad data.  Clear the field and tell them to fill it in
				eval("document."+formName+"."+arguments[n+1]+".value = ''");
				feedback += arguments[n]+".\n";
			}
		}
		
		if(feedback && !firstMiss){
			//alert(arguments[n+1] + " and "+ arguments[n+2] );
			if(arguments[n+2] == 'multiple' || arguments[n+2] == 'radio'){
				eval("document."+formName+"."+arguments[n+1]+"[0].focus()");
			}else if(arguments[n+2] == 'definition'){
				eval("document."+formName+"."+arguments[n+1]+"_0.focus()");
			}else if(arguments[n+2] == 'dropDown'){
				eval("document."+formName+"."+arguments[n+1]+".focus()");
			}
			firstMiss = true;
		}else if (arguments[n +2] == 'number'){
			
			// Characters that should not be in a text field
			var regEx = /[^0-9' ]+/;
			var userData = eval("document."+formName+"."+arguments[n+1]+".value");
			
			regExResults = userData.search(regEx);
			
			//alert("regExResults -> "+regExResults+"  userData -> "+userData);
			if(regExResults > -1 || userData == ""){
				// bad data.  Clear the field and tell them to fill it in
				eval("document."+formName+"."+arguments[n+1]+".value = ''");
				feedback += arguments[n]+".\n";
			}
		}
	}
	
	if(feedback){
		alert(preFeedback+feedback);
		return false;
	}else{
		return true;
	}
}