// make all required hidden vars should look like this
// <input type=hidden name="required_text" value="varible_name|Display Name">

// here are some special checks which hidden field need to be slitly different
// comparing 2 text fields so that they are the same
// <input type=hidden name="required_compare" value="varible_name~varible_name2|Display Name~Display Name2">

// minimum number of chacters
// <input type=hidden name="required_minimum" value="varible_name|Display Name|number of characters ie: 5">

// value must be in date format
// <input type=hidden name="required_date" value="varible_name|Display Name|date format ie: mm/dd/yyyy">

// runs through all form elements
function check_required(form, test)
{
	var error = "";
	
	if (test)
	{
		return false;
	}
	
	// look through all elements of the form for required fields
	for (var x=0; x < form.elements.length; x++)
	{ 
		var tempobj = form.elements[x];
		var message = "";
		
		var split_value = tempobj.value.split("|");
		
		if ((tempobj.name == "required_text") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_text(form, tempobj);
		}
		else if ((tempobj.name == "required_email") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_email(form, tempobj);
		}
		else if ((tempobj.name == "required_date") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_date(form, tempobj);
		}
		else if ((tempobj.name == "required_number") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_number(form, tempobj);
		}
		else if ((tempobj.name == "required_select") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_select(form, tempobj);
		}
		else if ((tempobj.name == "required_radio") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_radio(form, tempobj);
		}
		else if ((tempobj.name == "required_checkbox") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_checkbox(form, tempobj);
		}
		else if (tempobj.name == "required_compare")
		{
			message = check_compare(form, tempobj);
		}
		else if ((tempobj.name == "required_minimum") && (!eval("form." + split_value[0] + ".disabled")))
		{
			message = check_minimum(form, tempobj);
		}
		
		// add message to error
		if (message)
		{
			error += message;
		}
	}
	
	// display any error that may have occured
	if (error)
	{
		alert ("___________________________________             \nThe following fields are not correctly filled in:\n\n" + error + "___________________________________\nPlease re-enter values and submit again!");
		return false;
	}
	else
	{
		return true;
	}	
}

// checks text fields
function check_text (form, field)
{
	var split_value = field.value.split("|");
	
	if (eval("form." + split_value[0] + ".value") == "")
	{
		return " - " + split_value[1] + "\n";
	}
	
	return;
}

// checks text fields for email format
function check_email (form, field)
{
	var split_value = field.value.split("|");
	var email = eval("form." + split_value[0] + ".value");
	
	// if email is not blank
	if (email)
	{
		// check if email has '@' and '.' 
		// and none of the other chars
		if ((email.indexOf('@') == -1)
		 || (email.indexOf('.') == -1)
		 || (email.indexOf(',') > -1)
		 || (email.indexOf('<') > -1)
		 || (email.indexOf('>') > -1)
		 || (email.indexOf('?') > -1)
		 || (email.indexOf('/') > -1)
		 || (email.indexOf(';') > -1)
		 || (email.indexOf('\'') > -1)
		 || (email.indexOf('"') > -1)
		 || (email.indexOf('[') > -1)
		 || (email.indexOf(']') > -1)
		 || (email.indexOf('{') > -1)
		 || (email.indexOf('}') > -1)
		 || (email.indexOf('|') > -1)
		 || (email.indexOf('\\') > -1)
		 || (email.indexOf('~') > -1)
		 || (email.indexOf('`') > -1)
		 || (email.indexOf('!') > -1)
		 || (email.indexOf('#') > -1)
		 || (email.indexOf('$') > -1)
		 || (email.indexOf('%') > -1)
		 || (email.indexOf('^') > -1)
		 || (email.indexOf('&') > -1)
		 || (email.indexOf('*') > -1)
		 || (email.indexOf('+') > -1)
		 || (email.indexOf('=') > -1)
		 || (email.indexOf(' ') > -1))
		{
			return " - " + split_value[1] + "\n";
		}
	}
	
	return;
}

// checks text fields date format
function check_date (form, field)
{
	var split_value = field.value.split("|");
	
	// figure out how to parse date
	var date_delimiter = split_value[2];
	date_delimiter = date_delimiter.replace(/d/g, "");
	date_delimiter = date_delimiter.replace(/m/g, "");
	date_delimiter = date_delimiter.replace(/y/g, "");
	
	var delimiter = date_delimiter.split("");
	var date_format = split_value[2].split(delimiter[0]);
	
	// parse field value
	var date = eval("form." + split_value[0] + ".value");
	var date_values = date.split(delimiter[0]);
	
	// if date is not blank
	if (date)
	{	
		// based on format make look for intger values
		if (isNaN(date_values[0]))
		{
			return " - " + split_value[1] + " must be " + split_value[2] + "\n";
		}
		else if ((date_format.length > 1) && (isNaN(date_values[1])))
		{
			return " - " + split_value[1] + " must be " + split_value[2] + "\n";
		}
		else if ((date_format.length > 2) && (isNaN(date_values[2])))
		{
			return " - " + split_value[1] + " must be " + split_value[2] + "\n";
		}

		// based on format check character length
		else if (date_values[0].length != date_format[0].length)
		{
			return " - " + split_value[1] + " must be " + split_value[2] + "\n";
		}
		else if ((date_format.length > 1) && (date_values[1].length != date_format[1].length))
		{
			return " - " + split_value[1] + " must be " + split_value[2] + "\n";
		}
		else if ((date_format.length > 2) && (date_values[2].length != date_format[2].length))
		{
			return " - " + split_value[1] + " must be " + split_value[2] + "\n";
		}

		// based on format check to see if valid date values
		else 
		{
			for (var x = 0; x < date_format.length; x++)
			{
				if (date_format[x].match(/d/i))
				{
					if (date_values[x] > 31)
					{
						return " - " + split_value[1] + "\n";
					}
				}
				else if (date_format[x].match(/m/i))
				{
					if (date_values[x] > 12)
					{
						return " - " + split_value[1] + "\n";
					}
				}
				else if ((date_format[x].match(/y/i)) && (date_format[x].length == 4))
				{
					if (date_values[x] < 1900)
					{
						return " - " + split_value[1] + "\n";
					}
				}
			}
		}
	}
	
	return;
}

// checks field is a number
function check_number (form, field)
{
	var split_value = field.value.split("|");
	var number = eval("form." + split_value[0] + ".value");
	number.replace(".","");
	
	if (isNaN(number))
	{
		return " - " + split_value[1] + "\n";
	}
	
	return;
}

// checks select field to see if it's selected and if what is selected has a value
function check_select (form, field)
{
	var split_value = field.value.split("|");
	
	var option_selected = eval("form." + split_value[0] + ".selectedIndex");

	if (option_selected == -1)
	{
		return " - " + split_value[1] + "\n";
	}
	else if (eval("form." + split_value[0] + ".options[" + option_selected + "].value") == "")
	{
		return " - " + split_value[1] + "\n";
	}
	
	return;
}

// checks radio field for a check button
function check_radio (form, field)
{
	var split_value = field.value.split("|");
	var not_checked = 1;

	if (eval("form." + split_value[0] +".length") > 1)
	{
		for (var x=0; x < eval("form." + split_value[0] +".length"); x++)
		{
			if (eval("form." + split_value[0] +"[x].checked"))
			{
				not_checked = 0;
			}
		}
	}
	else
	{
		if (eval("form." + split_value[0] +".checked"))
		{
			not_checked = 0;
		}
	}
	
	if (not_checked)
	{
		return " - " + split_value[1] + "\n";
	}
	
	return;
}

// checks checkbox field for a check button
function check_checkbox (form, field)
{
	var split_value = field.value.split("|");
	var not_checked = 1;

	for (var x=0; x < eval("form." + split_value[0] +".length"); x++)
	{
		if (eval("form." + split_value[0] +"[x].checked"))
		{
			not_checked = 0;
		}
	}
	
	if (not_checked)
	{
		return " - " + split_value[1] + "\n";
	}
	
//	if (!eval("form." + split_value[0] +".checked"))
//	{
//		return " - " + split_value[1] + "\n";
//	}
	
	return;
}

// checks 2 text fields to make sure they are the same
// good for password verification
function check_compare (form, field)
{
	var split_value = field.value.split("|");
	var field_names = split_value[0].split("~");
	var field_display = split_value[1].split("~");
	
	if (eval("form." + field_names[0] +".value") != eval("form." + field_names[1] +".value"))
	{
		return " - " + field_display[0] + " must match " + field_display[1] + "\n";
	}
	
	return;
}

// checks field for minimum number of characters
function check_minimum (form, field)
{
	var split_value = field.value.split("|");
	
	if (eval("form." + split_value[0] +".value.length") < split_value[2])
	{
		return " - " + split_value[1] + " must be at\n   least " + split_value[2] + " characters long\n";
	}
	
	return;
}
