function VaS_defined(formName)
{
	missingFields = 0;
	alertText = "";
	
	reqdFields = document.forms[formName].elements['required'].value;
	reqd = reqdFields.split(";");
	
	for ( ii = 0 ; ii < reqd.length ; ii++ )
	{
		if ( reqd[ii] != "" )
		{
			checkForValue = false;
			fieldData = reqd[ii].split(":");
			fieldName = fieldData[0].replace(" ","");
			fieldDisplayName = fieldName.substring(0,1).toUpperCase() + fieldName.substring(1,fieldName.length).toLowerCase();
			if ( !document.forms[formName].elements[fieldName] )
			{
				alert ( "Field not found: " + fieldName );
				return false;
				break;
			}
			fieldType = document.forms[formName].elements[fieldName].type;
			fieldValidation = fieldData[1];
			fieldWarning = fieldData[2];

			if ( fieldWarning == "" )
			{
				fieldWarning = "default";
			}

			if ( fieldType == "select-one" || fieldType == "select" ) 
			{ 
				fieldType = "select"; 
				if ( fieldValidation != "" )
				{
						validationData = fieldValidation.split("=");
						checkForType = validationData[0]; 
						checkForValue = validationData[1]; 
						fieldValidation = "selected" + checkForType;
				}
			}
			else if ( fieldType == null ) 
			{ 
				if ( document.forms[formName].elements[fieldName].length > 1 )
				{
					fieldType = "radio"; 
				}
			}
			
			if ( fieldValidation == "" )
			{
				fieldValidation = fieldType;
			}
							
			//alert(fieldName + ": " + fieldType + ": " + fieldWarning + ": " + fieldValidation );
			switch(fieldValidation)
			{
				// Custom
				case "validemail":
					if ( !checkEmailAddress(fieldName,formName) )
					{
						alertText += "\n" + fieldWarning;
						missingFields++;
					}
					break;

				case "validphone":
					if ( !checkPhoneNumber(fieldName,formName) )
					{
						alertText += "\n" + fieldWarning;
						missingFields++;
					}
					break;
					
				case "selectedvalue":
					if ( checkDropValue(fieldName,formName) == checkForValue )
					{
						alertText += "\n" + fieldWarning;
						missingFields++;
					}
					break;
					
				case "selectedindex":
					if ( checkDropIndex(fieldName,formName) == checkForIndex )
					{
						alertText += "\n" + fieldWarning;
						missingFields++;
					}
					break;
					
				// Common
				case "text":
					if ( !checkTextBox(fieldName,formName) )
					{
						alertText += "\n" + fieldDisplayName + " is required";
						missingFields++;
					}
					break;
					
				case "textarea":
					if ( !checkTextBox(fieldName,formName) )
					{
						alertText += "\n" + fieldDisplayName + " is required";
						missingFields++;
					}
					break;
					
				
				case "checkbox":
					if ( !checkTextBox(fieldName,formName) )
					{
						alertText += "\n" + fieldDisplayName + " is required";
						missingFields++;
					}
					break;
					
				case "select":
					selectedValue = checkDropValue(fieldName,formName);
					if ( selectedValue == "none" || selectedValue == "" || selectedValue == " " || selectedValue == null )
					{
						alertText += "\n" + fieldDisplayName + " is required";
						missingFields++;
					}
					break;
					
				case "radio":
					if ( !checkRadioSelected(fieldName,formName) )
					{
						alertText += "\n" + fieldDisplayName + " is required";
						missingFields++;
					}
					break;
			}
		}
	}
		
	if ( missingFields > 0 )
	{
		msg = "The following issues must be corrected to send your message:\n\n";
		msg += alertText + "\n";
		alert(msg);
		return false;
	}
	else
	{
		return true;
	}
}


function VaS_basic(formName)
{
	missingFields = false;
	missingFieldNames = new Array();
	
	reqdFields = document.forms[formName].elements['required'].value;
	reqd = reqdFields.split(",");

	for ( ii = 0 ; ii < reqd.length ; ii++ )
	{
		fieldName = reqd[ii].replace(" ","");
		reqdType = document.forms[formName].elements[fieldName].type;
		
		if ( reqdType == "select-one" ) 
		{ 
			reqdType = "select"; 
		}
		
		if ( reqdType == null ) 
		{ 
			if ( document.forms[formName].elements[fieldName].length > 1 )
			{
				reqdType = "radio"; 
			}
		}
		
		switch(reqdType)
		{
			case "text":
				if ( document.forms[formName].elements[fieldName].value == "" )
				{
					missingFieldNames[missingFieldNames.length] = fieldName;
				}
				break;
				
			case "textarea":
				if ( document.forms[formName].elements[fieldName].value == "" )
				{
					missingFieldNames[missingFieldNames.length] = fieldName;
				}
				break;
				
			case "checkbox":
				if ( !document.forms[formName].elements[fieldName].checked )
				{
					missingFieldNames[missingFieldNames.length] = fieldName;
				}
				break;
				
			case "select":
				selectedValue = document.forms[formName].elements[fieldName].options[document.forms[formName].elements[fieldName].selectedIndex].value;
				if ( selectedValue == "none" || selectedValue == "" || selectedValue == " " || selectedValue == null )
				{
					missingFieldNames[missingFieldNames.length] = fieldName;
				}
				break;
				
			case "radio":
				buttonChecked = false
				for ( rb = 0 ; rb < document.forms[formName].elements[fieldName].length ; rb++ )
				{
					radioButtonRef = document.forms[formName].elements[fieldName];
					if ( radioButtonRef[rb].checked )
					{
						buttonChecked = true
					}
				}
				
				if ( !buttonChecked )
				{
						missingFieldNames[missingFieldNames.length] = fieldName;
				}
				break;
		}
		
	}
	
	totalMissing = missingFieldNames.length;
	
	if ( totalMissing > 0 )
	{
		msg = "The following fields are required:\n\n";
		for ( mf = 0 ; mf < totalMissing ; mf++ )
		{
			fieldName = missingFieldNames[mf];
			fieldNameParts = fieldName.split("_");
			converted = "";
			for ( pc = 0 ; pc < fieldNameParts.length ; pc++ )
			{
				piece = fieldNameParts[pc];
				UCbit = piece.substring(0,1)
				lcbit = piece.substring(1,piece.length)
				UC = UCbit.toUpperCase();
				lc = lcbit.toLowerCase();
				piece = UC + lc;
				converted = converted + " " + piece;
			}
			msg = msg + converted + "\n";
		}
		alert(msg);
		return false;
	}
	else
	{
		return true;
	}
}