function CheckForm(ck_input,ck_sel,ck_txtarea)
{
//NOTES:  
//     - iterates through form controls (input, select, and textarea) to validate things like...
//     		1) required fields have input or is selected
//			2) input text matches a pre-determined format
//			3) input text satisfies any additional rules

// ***** BEGIN: define variables *****
	var input_elements = document.getElementsByTagName(ck_input); 
	var select_elements = document.getElementsByTagName(ck_sel);
	var textarea_elements = document.getElementsByTagName(ck_txtarea);

	// define variables for NAME and VALUE Array sizes
	var input_total = input_elements.length;
	var select_total = select_elements.length;
	var textarea_total = textarea_elements.length;
	var all_elements_total = input_total+select_total+textarea_total;
	
	// TEST: Uncomment next 4 lines to display total count of each type of form element
	//alert("Total Number of INPUT Form Elements = " + input_total);
	//alert("Total Number of SELECT Form Elements = " + select_total);
	//alert("Total Number of TEXTAREA Form Elements = " + textarea_total);
	//alert("Total Number of ALL Form Elements = " + all_elements_total);
	
	// define NAME arrays
	var arr_input_n = new Array(input_total);
	var arr_select_n = new Array(select_total);
	var arr_textarea_n = new Array(textarea_total);
	var arr_allelements_n = new Array(all_elements_total);
	
	// define VALUE arrays
	var arr_input_v = new Array(input_total);
	var arr_select_v = new Array(select_total);
	var arr_textarea_v = new Array(textarea_total);
	var arr_allelements_v = new Array(all_elements_total);
// ***** END: Define variables *****
	
// ***** BEGIN: loop through all INPUT elements in form 
 	for(var i = 0; i < input_total; i++) 
	{ 		
		arr_input_n[i]=input_elements.item(i).name;
		arr_input_v[i]=input_elements.item(i).value;
		//alert("INPUT Element Index = "+i+", INPUT Element Name = "+input_elements.item(i).name+", INPUT Element Value = "+input_elements.item(i).value);
	}
	
// ***** BEGIN: loop through all SELECT elements in form 
 	for(var i = 0; i < select_total; i++) 
	{ 
		arr_select_n[i]=select_elements.item(i).name;
		arr_select_v[i]=select_elements.item(i).value;
		//alert("SELECT Element Index = "+i+", SELECT Element Name = "+select_elements.item(i).name+", SELECT Element Value = "+select_elements.item(i).value);
	}	
	
// ***** BEGIN: loop through all TEXTAREA elements in form 
 	for(var i = 0; i < textarea_total; i++) 
	{ 
		arr_textarea_n[i]=textarea_elements.item(i).name;
		arr_textarea_v[i]=textarea_elements.item(i).value;
		//alert("TEXTAREA Element Index = "+i+", TEXTAREA Element Name = "+textarea_elements.item(i).name+", TEXTAREA Element Value = "+textarea_elements.item(i).value);
	}
	
// ***** BEGIN: combine INPUT, SELECT, and TEXTAREA arrays
	arr_allelements_n = arr_input_n.concat(arr_select_n, arr_textarea_n);
	arr_allelements_v = arr_input_v.concat(arr_select_v, arr_textarea_v);
	//alert("arr_allelements_n = "+arr_allelements_n+", array length = "+arr_allelements_n.length);
	//alert("arr_allelements_v = "+arr_allelements_v+", array length = "+arr_allelements_v.length);
	
// ***** BEGIN FORM VALIDATION - loop through newly combined array of INPUT, SELECT, and TEXTAREA form elements *****
	for(var i = 0; i < arr_allelements_n.length; i++)
	{
		// *** BEGIN: txtFName - required field check
		if(arr_allelements_n[i] == "txtFName")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("First Name is a required field.");
				document.request.txtFName.focus();
				return false;
			}//end if
		}// *** END: txtFName
		
		// *** BEGIN: txtLName - required field check
		if(arr_allelements_n[i] == "txtLName")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Last Name is a required field.");
				document.request.txtLName.focus();
				return false;
			}//end if
		}// *** END: txtLName
		
		// *** BEGIN: txtCompany - required field check
		if(arr_allelements_n[i] == "txtCompany")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Company is a required field.");
				document.request.txtCompany.focus();
				return false;
			}//end if
		}// *** END: txtCompany
		
		// *** BEGIN: txtAddr1 - required field check
		if(arr_allelements_n[i] == "txtAddr1")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Address 1 is a required field.");
				document.request.txtAddr1.focus();
				return false;
			}//end if
		}// *** END: txtAddr1
		
		// *** BEGIN: txtCity - required field check
		if(arr_allelements_n[i] == "txtCity")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("City is a required field.");
				document.request.txtCity.focus();
				return false;
			}//end if
		}// *** END: txtCity
		
		// *** BEGIN: ddlState - required field selection check
		if(arr_allelements_n[i] == "ddlState")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("You must select a state.");
				document.request.ddlState.focus();
				return false;
			}//end if
		}// *** END: ddlState
		
		// *** BEGIN: txtZip - required field check and proper zip format
		if(arr_allelements_n[i] == "txtZip")
		{
			// *** BEGIN CHECK: required field
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Zip is a required field.");
				document.request.txtZip.focus();
				return false;
			} else {
			
				// *** BEGIN CHECK: zip format
				var valzip = "0123456789-";
				var hyphencount = 0;
				var field = arr_allelements_v[i];
				
				//alert("zip code value = " + field);
					
				for (var j=0; j < field.length; j++) {
					temp = "" + field.substring(j, j+1);
					if (temp == "-")
					{
						hyphencount++;
					}//end if
					if (valzip.indexOf(temp) == "-1") {
						alert("Invalid characters in your zip code. Please try again.");
						document.request.txtZip.focus();
						return false;
					}//end if
				}//end for loop
				
				if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) 
				{
					alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '#####-####'.  Please try again.");
					return false;
				}//end if
				
				if (field.length!=5 && field.length!=10) 
				{
					alert("Please enter your 5 digit zip code (in the format #####), or 5 digit+4 zip code (in the format #####-####).");
					document.request.txtZip.focus();
					return false;
				}//end if
				// *** END CHECK: zip format
			}//end ifelse
		}// *** END: txtZip
		
		// *** BEGIN: txtPhone1AC - required field check and proper format
		if(arr_allelements_n[i] == "txtPhone1AC")
		{
			// *** BEGIN CHECK: required field
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Area code is a required field.");
				document.request.txtPhone1AC.focus();
				return false;
			} else {
				// *** BEGIN CHECK: txtPhone1AC format
				var valph1 = "0123456789";
				var field1 = arr_allelements_v[i];
						
				for (var k=0; k < field1.length; k++) {
					temp1 = "" + field1.substring(k, k+1);
					if (valph1.indexOf(temp1) == "-1") {
						alert("Invalid characters in your area code. Please try again.");
						document.request.txtPhone1AC.focus();
						return false;
					}//end if
				}//end for loop
				
				if (field1.length < 3) 
				{
					alert("Please enter your 3 digit area code.");
					document.request.txtPhone1AC.focus();
					return false;
				}//end if
				// *** END CHECK: txtPhone1AC format
			}//end ifelse
		}// *** END: txtPhone1AC
		
		// *** BEGIN: txtPhone1Prefix - required field check and proper format
		if(arr_allelements_n[i] == "txtPhone1Prefix")
		{
			// *** BEGIN CHECK: required field
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Phone number prefix is a required field.");
				document.request.txtPhone1Prefix.focus();
				return false;
			} else {
				// *** BEGIN CHECK: txtPhone1Prefix format
				var valph2 = "0123456789";
				var field2 = arr_allelements_v[i];
				
				for (var k=0; k < field2.length; k++) {
					temp2 = "" + field2.substring(k, k+1);
					if (valph2.indexOf(temp2) == "-1") {
						alert("Invalid characters in your phone prefix. Please try again.");
						document.request.txtPhone1Prefix.focus();
						return false;
					}//end if
				}//end for loop
				
				if (field2.length < 3) 
				{
					alert("Please enter your 3 digit phone prefix.");
					document.request.txtPhone1Prefix.focus();
					return false;
				}//end if
				// *** END CHECK: txtPhone1Prefix format
			}//end ifelse
		}// *** END: txtPhone1Prefix
		
		// *** BEGIN: txtPhone1Suffix - required field check and proper format
		if(arr_allelements_n[i] == "txtPhone1Suffix")
		{
			// *** BEGIN CHECK: required field
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Phone number suffix is a required field.");
				document.request.txtPhone1Suffix.focus();
				return false;
			} else {
				// BEGIN txtPhone1Suffix format
				var valph3 = "0123456789";
				var field3 = arr_allelements_v[i];
				
				for (var k=0; k < field3.length; k++) {
					temp3 = "" + field3.substring(k, k+1);
					if (valph3.indexOf(temp3) == "-1") {
						alert("Invalid characters in your phone suffix. Please try again.");
						document.request.txtPhone1Suffix.focus();
						return false;
					}//end if
				}//end for loop

				if (field3.length < 4) 
				{
					alert("Please enter your 4 digit phone suffix.");
					document.request.txtPhone1Suffix.focus();
					return false;
				}//end if
				// *** END CHECK: txtPhone1Suffix format	
			}//end ifelse
		}// *** END: txtPhone1Suffix
		
		// *** BEGIN: txtPhone2AC - required field check and proper format
		if(arr_allelements_n[i] == "txtPhone2AC")
		{
				// *** BEGIN CHECK: txtPhone2AC format
				var valph1 = "0123456789";
				var field4 = arr_allelements_v[i];
						
				for (var k=0; k < field4.length; k++) {
					temp1 = "" + field4.substring(k, k+1);
					if (valph1.indexOf(temp1) == "-1") {
						alert("Invalid characters in your area code. Please try again.");
						document.request.txtPhone2AC.focus();
						return false;
					}//end if
				}//end for loop
				
			if(field4.length > 0)
			{
				if (field4.length < 3) 
				{
					alert("Please enter your 3 digit area code.");
					document.request.txtPhone2AC.focus();
					return false;
				}//end if
			}//end if
				// *** END CHECK: txtPhone2AC format
		}// *** END: txtPhone2AC
		
		// *** BEGIN: txtPhone2Prefix - required field check and proper format
		if(arr_allelements_n[i] == "txtPhone2Prefix")
		{
				// *** BEGIN CHECK: txtPhone2Prefix format
				var valph2 = "0123456789";
				var field5 = arr_allelements_v[i];
				
				for (var k=0; k < field5.length; k++) {
					temp2 = "" + field5.substring(k, k+1);
					if (valph2.indexOf(temp2) == "-1") {
						alert("Invalid characters in your phone prefix. Please try again.");
						document.request.txtPhone2Prefix.focus();
						return false;
					}//end if
				}//end for loop
			if(field5.length > 0)
			{
				if (field5.length < 3) 
				{
					alert("Please enter your 3 digit phone prefix.");
					document.request.txtPhone2Prefix.focus();
					return false;
				}//end if
			}//end if
				// *** END CHECK: txtPhone2Prefix format
		}// *** END: txtPhone2Prefix
		
		// *** BEGIN: txtPhone2Suffix - required field check and proper format
		if(arr_allelements_n[i] == "txtPhone2Suffix")
		{
				// BEGIN txtPhone2Suffix format
				var valph3 = "0123456789";
				var field6 = arr_allelements_v[i];
				
				for (var k=0; k < field6.length; k++) {
					temp3 = "" + field6.substring(k, k+1);
					if (valph3.indexOf(temp3) == "-1") {
						alert("Invalid characters in your phone suffix. Please try again.");
						document.request.txtPhone2Suffix.focus();
						return false;
					}//end if
				}//end for loop
			if(field6.length > 0)
			{
				if (field6.length < 4) 
				{
					alert("Please enter your 4 digit phone suffix.");
					document.request.txtPhone2Suffix.focus();
					return false;
				}//end if
			}//end if
				// *** END CHECK: txtPhone2Suffix format	
		}// *** END: txtPhone2Suffix
		
		// *** BEGIN: txtFaxAC - required field check and proper format
		if(arr_allelements_n[i] == "txtFaxAC")
		{
				// *** BEGIN CHECK: txtFaxAC format
				var valph1 = "0123456789";
				var field7 = arr_allelements_v[i];
						
				for (var k=0; k < field7.length; k++) {
					temp1 = "" + field7.substring(k, k+1);
					if (valph1.indexOf(temp1) == "-1") {
						alert("Invalid characters in your area code. Please try again.");
						document.request.txtFaxAC.focus();
						return false;
					}//end if
				}//end for loop
			if(field7.length > 0)
			{
				if (field7.length < 3) 
				{
					alert("Please enter your 3 digit area code.");
					document.request.txtFaxAC.focus();
					return false;
				}//end if
			}//end if
				// *** END CHECK: txtFaxAC format
		}// *** END: txtFaxAC
		
		// *** BEGIN: txtFaxPrefix - required field check and proper format
		if(arr_allelements_n[i] == "txtFaxPrefix")
		{
				// *** BEGIN CHECK: txtFaxPrefix format
				var valph2 = "0123456789";
				var field8 = arr_allelements_v[i];
				
				for (var k=0; k < field8.length; k++) {
					temp2 = "" + field8.substring(k, k+1);
					if (valph2.indexOf(temp2) == "-1") {
						alert("Invalid characters in your phone prefix. Please try again.");
						document.request.txtFaxPrefix.focus();
						return false;
					}//end if
				}//end for loop
			if(field8.length > 0)
			{
				if (field8.length < 3) 
				{
					alert("Please enter your 3 digit phone prefix.");
					document.request.txtFaxPrefix.focus();
					return false;
				}//end if
			}//end if
				// *** END CHECK: txtFaxPrefix format
		}// *** END: txtFaxPrefix
		
		// *** BEGIN: txtFaxSuffix - required field check and proper format
		if(arr_allelements_n[i] == "txtFaxSuffix")
		{
				// BEGIN txtFaxSuffix format
				var valph3 = "0123456789";
				var field9 = arr_allelements_v[i];
				
				for (var k=0; k < field9.length; k++) {
					temp3 = "" + field9.substring(k, k+1);
					if (valph3.indexOf(temp3) == "-1") {
						alert("Invalid characters in your phone suffix. Please try again.");
						document.request.txtFaxSuffix.focus();
						return false;
					}//end if
				}//end for loop
			if(field9.length > 0)
			{
				if (field9.length < 4) 
				{
					alert("Please enter your 4 digit phone suffix.");
					document.request.txtFaxSuffix.focus();
					return false;
				}//end if
			}//end if
				// *** END CHECK: txtFaxSuffix format	
		}// *** END: txtFaxSuffix
		
		// *** BEGIN: txtEmail - required field check and email format to include '@' and '.'
		if(arr_allelements_n[i] == "txtEmail")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("Email is a required field.");
				document.request.txtEmail.focus();
				return false;
			}//end if
			
		//-----begin EMAIL VALIDATION-----
		if((arr_allelements_v[i]!=null)||(arr_allelements_v[i]!=""))
		{
			if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(arr_allelements_v[i]))
			{
				//return (true);
			}
			else
			{
				alert("You have entered an invalid Email Address. Please enter your Email Address in the form: yourname@yourdomain.com ");
				document.request.txtEmail.focus();
				return (false);
			}
		}
			//at_pos=arr_allelements_v[i].indexOf("@");
			//dot_pos=arr_allelements_v[i].lastIndexOf(".");
			//if (at_pos<1||dot_pos-at_pos<2) 
  			//{
			//	alert("You have entered an invalid Email Address. Please enter your Email Address in the form: yourname@yourdomain.com ");
			//	document.request.txtEmail.focus();
			//	return false;
			//}//end if
		//-----end EMAIL VALIDATION-----
		}// *** END: txtEmail
		
		// *** BEGIN: ddlService - required field selection check
		if(arr_allelements_n[i] == "ddlService")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("You must select a Service Type.");
				document.request.ddlService.focus();
				return false;
			}//end if
		}// *** END: ddlService
		
		// *** BEGIN: ddlCurrentStatus - required field selection check
		if(arr_allelements_n[i] == "ddlCurrentStatus")
		{
			if((arr_allelements_v[i]==null)||(arr_allelements_v[i]==""))
			{
				alert("You must select an option for the current status of your website.");
				document.request.ddlCurrentStatus.focus();
				return false;
			}//end if
		}// *** END: ddlCurrentStatus
		
		// *** BEGIN: txtDescription - maximum field input limit
		if(arr_allelements_n[i] == "txtDescription")
		{
			if(arr_allelements_v[i].length > 1000)
			{
				alert("Additional Comments text cannot exceed 1000 characters (including spaces and returns). The current character count is "+arr_allelements_v[i].length+", which exceeds the 250 character limit.  Please delete all excess characters beyond 250.");
				document.request.txtDescription.focus();
				return false;
			}//end if
		}// *** END: txtDescription
	
	}//end for
	
// ***** END FORM VALIDATION *****
	
	return true;
}