function ValidateForm(SubjectForm)
{

	var counter = 0;
	//Perfixes for inputs
	var TextField = "txt";
	var AddressField = "add";
	var NumericField = "num";
	var DateField = "dat";
	var EmailField = "ema";
	var PhoneField = "pho";
	var OtherField = "oth";
	var TempField = "";
	var bValid = true;
	var txtMessage = "";
	for (counter = 0; counter < SubjectForm.length; counter++)
	{
		TempField = SubjectForm.elements[counter].name
		//the 1st letter of the name a field indicate: 'r' - required; 'o' - 'optional'
		if (TempField.substring(0, 1) == "r")
		    if (SubjectForm.elements[counter].value == "")
		    {    
		        bValid = false;
				txtMessage = "'" + TempField.substring(5) + "' field is required.";
				alert (txtMessage);
				return bValid;
		    }
		
		TempField = TempField.substring(2,5)
		switch(TempField)
		{
		case "txt":
			if(TestTextOnly(SubjectForm.elements[counter].value))
			{
				bValid = true;
			}
			else
			{
				bValid = false;
				txtMessage = "Please make sure that you have only entered text in '" + (SubjectForm.elements[counter].name).substring(5) + "' field.";
				alert (txtMessage);
			}
			break;			
		case "add":
			if(TestAddOnly(SubjectForm.elements[counter].value))
			{
				bValid = true;
			}
			else
			{
				bValid = false;
				txtMessage = "It appears that you did not enter a valid value in '" + (SubjectForm.elements[counter].name).substring(5) + "' field.";
				alert (txtMessage);
			}
			break;
		case "num":
		   
			if(TestNumOnly(SubjectForm.elements[counter].value))
			{
				bValid = true;
			}
			else
			{
				bValid = false;
				txtMessage = "Please make sure that you have only entered numbers in '" + (SubjectForm.elements[counter].name).substring(5) + "' field.";
				alert (txtMessage);
			}
			break;			
		case "dat":
			if(TestDate(SubjectForm.elements[counter].value))
			{
				bValid = true;
			}
			else
			{
				bValid = false;
				txtMessage = "Please make sure that you have used the mm/dd/yyyy format in '" + (SubjectForm.elements[counter].name).substring(5) + "' field.";
				alert (txtMessage);
			}
			break;			
		case "ema":
			if(TestEmail(SubjectForm.elements[counter].value))
			{
				bValid = true;
			}
			else
			{
				bValid = false;
				txtMessage = "It appears that you did not enter a valid email address in '" + (SubjectForm.elements[counter].name).substring(5) + "' field.";
				alert (txtMessage);
			}
			break;	
		case "pho":
			if(TestPhone(SubjectForm.elements[counter].value))
			{
				bValid = true;
			}
			else
			{
				bValid = false;
				txtMessage = "It appears that you did not enter a valid number in '" + (SubjectForm.elements[counter].name).substring(5) + "' field.";
				alert (txtMessage);
			}
			break;
		default:
			break;
		}
		if (!bValid)
		{
			return false;
		}
	}
	return true;
}


function isChar (str) {
	if(str.length!=1) {return (false)};
	str=str.toLowerCase();
	RefString="abcdefghijklmnopq- r.stuvwxy,'z";
	if (RefString.indexOf (str.toLowerCase(), 0)==-1) 
		return (false);
	return (true);
}

function TestTextOnly(StrToTest)
{
	var counter = 0;
	var bresult = true;
	for (counter = 0; counter < StrToTest.length; counter++)
	{
		if (!isChar(StrToTest.substring(counter, counter + 1)))
		{
			bresult = false;
			break;
		}
	}
	return bresult;
}

function TestAddOnly(StrToTest)
{
	/*
	var counter = 0;
	var bresult = true;
	for (counter = 0; counter < StrToTest.length; counter++)
	{
		if (!isChar(StrToTest.substring(counter, counter + 1)) && isNaN(StrToTest.substring(counter, counter + 1)) 
		    && StrToTest.substring(counter, counter + 1) !='#' && StrToTest.substring(counter, counter + 1) !='&'
			&& StrToTest.substring(counter, counter + 1) !='/')
		{
			bresult = false;
			break;
		}
	}
	*/
	// address field can have any charater, therefore, no validation is necessary
	// Bo, 5/16/2003
	return true;
}

function TestNumOnly(NumToTest)
{
	var counter = 0;
	var bresult = true;
	for (counter = 0; counter < NumToTest.length; counter++)
	{
		if (isNaN(NumToTest.substring(counter, counter + 1)))
		{
			bresult = false;
			break;
		}
	}
	return bresult;
}

function TestDate(DateToTest)
{
	var bresult = true;
	if (DateToTest.length != 10)
		bresult = false;
	if (TestNumOnly(DateToTest.substring(0, 2)))
		if (DateToTest.substring(2, 3) == '/')
			if (TestNumOnly(DateToTest.substring(3, 5)))
				if (DateToTest.substring(5, 6) == '/')				
					if (TestNumOnly(DateToTest.substring(6, 9)))	
						bresult = true;
					else
						bresult = false;
				else
					bresult = false;
			else
				bresult = false;
		else
			bresult = false;
	else
		bresult = false;
		
	return bresult;
}

function TestEmail(EmailToTest)
{
	var counter = 0;
	var bdot = false;
	var bamp = false;
	
	if (EmailToTest.length == 0)
	{
      bdot = true;
      bamp = true;	
	}
	else
	{
	   for (counter = 0; counter < EmailToTest.length; counter++)
	   {
	   	if (bamp)
	   	{
	   		if (EmailToTest.substring(counter, counter + 1) == ".")
	   		{
	   			bdot = true;
	   		}
	   	}
	   	else
	   	{
	   		if (EmailToTest.substring(counter, counter + 1) == "@")
	   		{	
	   			bamp = true;
	   		}
	   	}			
	   }
   }
	if (bamp && bdot)
		return true;
	else
		return false;
}

function TestPhone(PhoneToTest)
{
	var counter = 0;
	var InvalidChar = false;
	
	for (counter = 0; counter < PhoneToTest.length; counter++)
	{
	   if (isNaN(PhoneToTest.substring(counter, counter + 1)))
	   {	
	   	if ((PhoneToTest.substring(counter, counter + 1) != "(") && (PhoneToTest.substring(counter, counter + 1) != ")") && (PhoneToTest.substring(counter, counter + 1) != "-") && (PhoneToTest.substring(counter, counter + 1) != ".") )
	         return false;
	   }
	}
	return true;
}
