function setValid(field)

{

	var v;



	if ((field.getAttribute('val')) && (v = document.getElementById(field.getAttribute('val'))))

		v.style.display = "none";

	else

	{

		field.style.backgroundColor = "#ffffff";

		field.style.color = "#000000";

	}

}



function setInvalid(field)

{

	var v;



	if ((field.getAttribute('val')) && (v = document.getElementById(field.getAttribute('val'))))

	{

		v.style.display = "";

		v.style.backgroundColor = "#cc0000";

		v.style.color = "#ffffff";

		v.style.fontWeight = "bold";

	}

	else

	{

		field.style.backgroundColor = "#cc0000";

		field.style.color = "#ffffff";

	}

}



function doValidate(frm)

{

	var inputs = frm.getElementsByTagName("INPUT");

	var textareas = frm.getElementsByTagName("TEXTAREA");

	var selects = frm.getElementsByTagName("SELECT");

	var secinputs;

	var classes, types, t, r;

	var matchfield;

	var result = true;

	var found;

	var i, j, k;



	try {

	secinputs = [];

	for (i=0; i<inputs.length; i++)

		secinputs.push(inputs[i]);



	for (i=0; i<textareas.length; i++)

		secinputs.push(textareas[i]);



	inputs = secinputs;



	for (i=0; i<selects.length; i++)

	{

		if ((selects[i].className) && ("" != selects[i].className))

		{

			classes = selects[i].className.split(" ");

			for (j=0; j<classes.length; j++)

			{

				types = classes[j].split(":");



				switch(types[0].toLowerCase())

				{

					case "v_required":

						if ("" != selects[i].options[selects[i].selectedIndex].value)

							setValid(selects[i]);

						else

						{

							result = false;

							setInvalid(selects[i]);

						}

						break;

					case "v_custom":

						function v_custom_select_parm() { return selects[i]; }



						r = eval(String(types[1]) + "(v_custom_select_parm())");

						if (r)

							setValid(selects[i]);

						else

						{

							result = false;

							setInvalid(selects[i]);

						}

						break;

					default:

						break;

				}

			}

		}

	}



	for (i=0; i<inputs.length; i++)

	{

		if ((inputs[i].className) && ("" != inputs[i].className))

		{

			classes = inputs[i].className.split(" ");

			for (j=0; j<classes.length; j++)

			{

				types = classes[j].split(":");



				switch(types[0].toLowerCase())

				{

					case "v_required":

						if (inputs[i].type)

							t = inputs[i].type.toLowerCase();

						else

							t = "";



						switch (t)

						{

							case "radio":

								eval("secinputs = frm." + inputs[i].name);

								found = false;

								for (k=0; k<secinputs.length; k++)

								{

									if (secinputs[k].checked)

									{

										setValid(inputs[i]);

										found = true;

										break;

									}

								}

								if (!found)

								{

									result = false;

									setInvalid(inputs[i]);

								}

								break;

							case "checkbox":

								if (inputs[i].checked)

									setValid(inputs[i]);

								else

								{

									result = false;

									setInvalid(inputs[i]);

								}

								break;

							default:

								if ("" != inputs[i].value)

									setValid(inputs[i]);

								else

								{

									result = false;

									setInvalid(inputs[i]);

								}

								break;

						}

						break;

					case "v_minlength":

						if (types[1])

						{

							if (inputs[i].value.length >= Number(types[1]))

								setValid(inputs[i]);

							else

							{

								result = false;

								setInvalid(inputs[i]);

							}

						}

						else

						{

							result = false;

							setInvalid(inputs[i]);

						}

						break;

					case "v_match":

						matchfield = document.getElementById(types[1]);

						if (inputs[i].value == matchfield.value)

						{

							setValid(inputs[i]);

							setValid(matchfield);

						}

						else

						{

							result = false;

							setInvalid(inputs[i]);

							setInvalid(matchfield);

						}

						break;

					case "v_email":

						r = /^[-_.a-z0-9]+@(([-_a-z0-9]+\.)+([A-Za-z][A-Za-z]|[A-Za-z][A-Za-z][A-Za-z])|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])))$/i;

						if (r.test(inputs[i].value))

						{

							setValid(inputs[i]);

						}

						else

						{

							result = false;

							setInvalid(inputs[i]);

						}

						break;

					case "v_custom":

						function v_custom_parm() { return inputs[i]; }



						r = eval(String(types[1]) + "(v_custom_parm())");

						if (r)

							setValid(inputs[i]);

						else

						{

							result = false;

							setInvalid(inputs[i]);

						}

						break;

					default:

						break;

				}

			}

		}

	}

	} catch(err)

	{

		alert(err);

		return false;

	}



	return result;

}