// TODO:  Do we need to handle selects w/ multiple values?

var validation = {
	"setValid": function(field)
	{
		var val = field.getAttribute('val') || "";
		var v, i;

		val = val.split(" ");
		for (i=0; i<val.length; i++)
			val[i] = val[i].split(":");

		if ("" != val[0][0])
		{
			for (i=0; i<val.length; i++)
			{
				if (val[i].length < 2)
					v = document.getElementById(val[i][0]);
				else
					v = document.getElementById(val[i][1]);

				v.style.display = "none";
			}
		}
		else
		{
			field.style.backgroundColor = "#ffffff";
			field.style.color = "#000000";
		}
	},

	"setInvalid": function(field, type)
	{
		var val = field.getAttribute('val') || "";
		var v, i;

		val = val.split(" ");
		for (i=0; i<val.length; i++)
			val[i] = val[i].split(":");

		if ("" != val[0][0])
		{
			for (i=0; i<val.length; i++)
			{
				v = null;

				if (val[i].length < 2)
					v = document.getElementById(val[i][0]);
				else if (type.toLowerCase() == val[i][0].toLowerCase())
					v = document.getElementById(val[i][1]);

				if (v)
				{
					v.style.display = "";
					v.style.backgroundColor = "#cc0000";
					v.style.color = "#ffffff";
					v.style.fontWeight = "bold";
				}
			}
		}
		else
		{
			field.style.backgroundColor = "#cc0000";
			field.style.color = "#ffffff";
		}
	},

	"doValidate": function(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;
	
		// First initialize fields
		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":
						case "v_custom":
							this.setValid(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":
						case "v_minlength":
						case "v_email":
						case "v_custom":
						case "v_currency":
							this.setValid(inputs[i]);
							break;
						case "v_match":
							eval("matchfield = frm." + types[1]);
							this.setValid(inputs[i]);
							this.setValid(matchfield);
							break;
						default:
							break;
					}
				}
			}
		}
	
		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)
							{
								result = false;
								this.setInvalid(selects[i], types[0]);
							}
							break;
						case "v_custom":
							function v_custom_select_parm() { return selects[i]; }
	
							r = eval(String(types[1]) + "(v_custom_select_parm())");
							if (!r)
							{
								result = false;
								this.setInvalid(selects[i], types[0]);
							}
							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)
										{
											found = true;
											break;
										}
									}
									if (!found)
									{
										result = false;
										this.setInvalid(inputs[i], types[0]);
									}
									break;
								case "checkbox":
									if (!inputs[i].checked)
									{
										result = false;
										this.setInvalid(inputs[i], types[0]);
									}
									break;
								default:
									if ("" == inputs[i].value)
									{
										result = false;
										this.setInvalid(inputs[i], types[0]);
									}
									break;
							}
							break;
						case "v_minlength":
							if (types[1])
							{
								if (inputs[i].value.length < Number(types[1]))
								{
									result = false;
									this.setInvalid(inputs[i], types[0]);
								}
							}
							else
							{
								result = false;
								this.setInvalid(inputs[i], types[0]);
							}
							break;
						case "v_match":
							eval("matchfield = frm." + types[1]);
							if (inputs[i].value != matchfield.value)
							{
								result = false;
								this.setInvalid(inputs[i], types[0]);
								this.setInvalid(matchfield, types[0]);
							}
							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])\.([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.([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))
							{
								result = false;
								this.setInvalid(inputs[i], types[0]);
							}
							break;
						case "v_currency":
							r = /[$,]/gi;
							if (r.test(inputs[i].value))
							{
								t = inputs[i].value;
								t = t.replace(r, "");
								inputs[i].value = t;
							}

							r = /[^\.0-9]/;
							if (r.test(inputs[i].value))
							{
								result = false;
								this.setInvalid(inputs[i], types[0]);
							}
							break;
						case "v_custom":
							function v_custom_parm() { return inputs[i]; }
	
							r = eval(String(types[1]) + "(v_custom_parm())");
							if (!r)
							{
								result = false;
								this.setInvalid(inputs[i], types[0]);
							}
							break;
						default:
							break;
					}
				}
			}
		}
		} catch(err)
		{
			alert(err);
			return false;
		}
	
		return result;
	}
}
