//Function to validate user input for all forms

function validate(form){

	var i,j;

	for(i=0;i<tmp.length;i++)
	{
		switch(tmp[i][2])
		{
			case "text":

				formField = eval("form." + tmp[i][0] + ".value");

				if( formField == "" )
				{
					alert("\'" + tmp[i][1] + "\' is a required field.");

					formElement = eval("form." + tmp[i][0]);
                    formType = formElement.type;
                    formType = formType.toLowerCase();
					if (formType.indexOf('select') == -1) {
    					eval("form." + tmp[i][0] + ".select();");
                    } // if
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				// validate optional size
				if (tmp[i][3] != -1)
				{
					if( formField.length > tmp[i][3] )
					{
						alert("\'" + tmp[i][1] + "\' cannot contain more than " + tmp[i][3] + " characters.");
						eval("form." + tmp[i][0] + ".select();");
						eval("form." + tmp[i][0] + ".focus();");
						return(false);
					}
				}

				break;

			case "date":

			    formField = eval("form." + tmp[i][0] + ".value");
				isplit = formField.indexOf('/');

				if(formField=="")
				{
			       	alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(isplit == -1 || isplit == formField.length)
				{
			       	alert("\'" + tmp[i][1] + "\' is an invalid date.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

			    sMonth = formField.substring(0, isplit);
				isplit = formField.indexOf('/', isplit + 1);
			 	sDay = formField.substring((sMonth.length + 1), isplit);
				sYear = formField.substring(isplit + 1);

				if ((isplit==-1 || (isplit+1)==formField.length)||(!isInteger(sMonth))||(!inRange(sMonth, 1, 12))||(!isInteger(sYear))||(!inRange(sYear, 0, 9999))||(!isInteger(sDay))||(!isDay(sYear, sMonth, sDay)))
				{
					alert("\'" + tmp[i][1] + "\' is an invalid date.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return false;
				}

				break;

			case "datetime":

			    formField = eval("form." + tmp[i][0] + ".value");
				posSpace = formField.indexOf(" ");
				dateField = formField.substring(0,posSpace);
				isplit = dateField.indexOf('/');

				if(formField=="")
				{
			       	alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				// validate date

				if(isplit == -1 || isplit == dateField.length)
				{
			       	alert("\'" + tmp[i][1] + "\' is an invalid date/time (bad date).");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

			    sMonth = dateField.substring(0, isplit);
				isplit = dateField.indexOf('/', isplit + 1);
			 	sDay = dateField.substring((sMonth.length + 1), isplit);
				sYear = dateField.substring(isplit + 1);

				if ((isplit==-1 || (isplit+1)==dateField.length)||(!isInteger(sMonth))||(!inRange(sMonth, 1, 12))||(!isInteger(sYear))||(!inRange(sYear, 0, 9999))||(!isInteger(sDay))||(!isDay(sYear, sMonth, sDay)))
				{
					alert("\'" + tmp[i][1] + "\' is an invalid date (bad date).");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return false;
				}

				// validate time

				timeField = formField.substring(posSpace + 1,formField.length);
				isplit = timeField.indexOf(':');

				if (isplit == -1 || isplit == timeField.length)
				{
			       	alert("\'" + tmp[i][1] + "\' is an invalid date/time (bad time).");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

			    sHour = timeField.substring(0, isplit);
				iminute = timeField.indexOf(':', isplit + 1);

				if (iminute == -1 || iminute == timeField.length)
					sMin = timeField.substring((sHour.length + 1));
				else
					sMin = timeField.substring((sHour.length + 1), iminute);

			    if (!isInteger(sHour) || !inRange(sHour, 0, 23) || !isInteger(sMin) || !inRange(sMin, 0, 59))
				{
			       	alert("\'" + tmp[i][1] + "\' is an invalid date/time (bad time).");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if (iminute != -1)
				{
					if (timeField.substring(timeField.length-2).toUpperCase() == "AM" || timeField.substring(timeField.length-2).toUpperCase() == "PM" || timeField.substring(timeField.length-1).toUpperCase() == "A" || timeField.substring(timeField.length-1).toUpperCase() == "P")
						sSecEnd = timeField.lastIndexOf(" ");
					else
						sSecEnd = timeField.length;

					sSec = timeField.substring(iminute + 1,sSecEnd);

					if (!isInteger(sSec) || !inRange(sSec, 0, 59))
					{
				       	alert("\'" + tmp[i][1] + "\' is an invalid date/time (bad time).");
						eval("form." + tmp[i][0] + ".select();");
						eval("form." + tmp[i][0] + ".focus();");
						return(false);
					}
				}

				break;

			case "number":

				formField = eval("form." + tmp[i][0] + ".value");

				if(formField=="")
				{
					alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(!isNumber(formField))
				{
					alert("\'" + tmp[i][1] + "\' must be an number.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if (tmp[i][3] != -1)
				{
					if(!inRange(formField,tmp[i][3],tmp[i][4]))
					{
						alert("\'" + tmp[i][1] + "\' must be have a value between " +tmp[i][3] +" and " + tmp[i][4] +".");
						eval("form." + tmp[i][0] + ".select();");
						eval("form." + tmp[i][0] + ".focus();");
						return(false);
					}
				}

				break;

			case "pos_number":

				formField = eval("form." + tmp[i][0] + ".value");

				if(formField=="")
				{
					alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(!isNumber(formField))
				{
					alert("\'" + tmp[i][1] + "\' must be an number.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(eval(formField) < tmp[i][3])
				{
					alert("\'" + tmp[i][1] + "\' must be a positive number greater than or equal to " + tmp[i][3] +".");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				break;


			case "zip":

				formField = eval("form." + tmp[i][0] + ".value");

				if(formField=="")
				{
					alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if ((formField.length != 5 && formField.length != 10) || (formField.charAt(0) == "-" || formField.charAt(0) == "+") || (!isInteger(formField.substring(0,5))))
				{
					alert("\'" + tmp[i][1] + "\' is not a valid Zip Code.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}


				if ((formField.length != 5) && ((formField.charAt(5) != "-" && formField.charAt(5) != " ") || (formField.charAt(6) == "-" || formField.charAt(6) == "+") || (!isInteger(formField.substring(6,10)))))
				{
					alert("\'" + tmp[i][1] + "\' is not a valid Zip Code.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				break;

			case "email":

				formField = eval("form." + tmp[i][0] + ".value");

				if(formField=="")
				{
					alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(formField.indexOf("@")== -1 || formField.indexOf(".")== -1  || formField.indexOf(" ") != -1)
				{
					alert("\'" + tmp[i][1] + "\' must be a valid Email Address.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				break;

			case "email_multiple":

				var aryEmail 	= new Array();
				formField 		= eval("form." + tmp[i][0] + ".value");
				formField 		= formField.replace(/ /g, "");
				aryEmail 		= formField.split(",");

				for (j=0;j<aryEmail.length;j++)
				{
					if(aryEmail[j].length && (aryEmail[j].indexOf("@")== -1 || aryEmail[j].indexOf(".")== -1))
					{
						alert("\'" + tmp[i][1] + "\' contains an invalid Email Address (" + aryEmail[j] + ").");
						eval("form." + tmp[i][0] + ".select();");
						eval("form." + tmp[i][0] + ".focus();");
						return(false);
					}
				}

				break;


			case "integer":

				formField = eval("form." + tmp[i][0] + ".value");

				if(formField=="")
				{
					alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(!isInteger(formField))
				{
					alert("\'" + tmp[i][1] + "\' must be a whole number.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if (tmp[i][3] != -1)
				{
					if(!inRange(formField,tmp[i][3],tmp[i][4]))
					{
						alert("\'" + tmp[i][1] + "\' must be have a value between " +tmp[i][3] +" and " + tmp[i][4] +".");
						eval("form." + tmp[i][0] + ".select();");
						eval("form." + tmp[i][0] + ".focus();");
						return(false);
					}
				}

				break;

			case "pos_integer":

				formField = eval("form." + tmp[i][0] + ".value");

				if(formField=="")
				{
					alert("\'" + tmp[i][1] + "\' is a required field.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(!isInteger(formField))
				{
					alert("\'" + tmp[i][1] + "\' must be a whole number.");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				if(eval(formField)  < tmp[i][3])
				{
					alert("\'" + tmp[i][1] + "\' must be a positive whole number greater than or equal to " + tmp[i][3] +".");
					eval("form." + tmp[i][0] + ".select();");
					eval("form." + tmp[i][0] + ".focus();");
					return(false);
				}

				break;
		}
	}
    return true;
}

function isInteger(formValue)
   {
    if (formValue.length == 0)
        return true;

	var decimal_format = ".";
	var check_char;

    check_char = formValue.indexOf(decimal_format)

	if (check_char < 1)
	return isNumber(formValue);
    else
	return false;
   }

function isNumber(formValue)
{
    if (formValue.length == 0)
        return true;

   	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;

    check_char = start_format.indexOf(formValue.charAt(0))

	if (check_char == 1)
	    decimal = true;
	else if (check_char < 1)
		return false;

	for (var i = 1; i < formValue.length; i++)
	{
		check_char = number_format.indexOf(formValue.charAt(i))
		if (check_char < 0)
			return false;
		else if (check_char == 1)
		{
			if (decimal)
				return false;
			else
				decimal = true;
		}
		else if (check_char == 0)
		{
			if (decimal || digits)
				trailing_blank = true;
		}
	        else if (trailing_blank)
			return false;
		else
			digits = true;
	}

    return true;
   }

function inRange(formValue, min_value, max_value)
{
    if (formValue.length == 0)
        return true;

    if (!isNumber(formValue))
		return false;
    else
		return (inNumRange((eval(formValue)), min_value, max_value));

   return true;
}

function inNumRange(formValue, min_value, max_value)
{
    if (min_value != null)
	{
        if (formValue < min_value)
		return false;
	}

    if (max_value != null)
	{
		if (formValue > max_value)
			return false;
	}

    return true;
}

function isDay(checkYear, checkMonth, checkDay)
{
	maxDay = 31;

	if (checkMonth == 4 || checkMonth == 6 ||
			checkMonth == 9 || checkMonth == 11)
		maxDay = 30;
	else
	{
		if (checkMonth == 2)
		{
			if (checkYear % 4 > 0)
				maxDay =28;
			else
			{
				if (checkYear % 100 == 0 && checkYear % 400 > 0)
					maxDay = 28;
				else
					maxDay = 29;
			}
		}
	}

	return inRange(checkDay, 1, maxDay); //check day
 		}


