var RegExpArray =
{
	require : /.+/,
	email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
	mobile : /^[0-9]{10}$/,
	url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
	currency : /^\d+(\.\d+)?$/,
	number : /^\d+$/,
	number0 : /^\d*$/,
	zip : /^[0-9]\d{3,5}$/,
	integer : /^[-\+]?\d+$/,
	int : /^[-\+]?\d+$/,
	float : /^[-\+]?\d+(\.\d+)?$/,
	double : /^[-\+]?\d+(\.\d+)?$/,
	english : /^[A-Za-z]+$/,
	chinese :  /^[\u0391-\uFFE5]+$/,
	pid :  /^[A-Za-z]\d{9}$/,
	date : /^\d{4}[-/]\d{1,2}[-/]\d{1,2}$/,
	time : /^\d{1,2}[:]\d{1,2}[:]\d{1,2}$/,
	datetime : /^\d{4}[-/]\d{1,2}[-/]\d{1,2}\s+\d{1,2}[:]\d{1,2}[:]\d{1,2}$/
}
	/*
	range :	min	max
	group :	min max
	*/
	
function clear_message(obj)
{
	if (typeof(obj) == "string")
	{
		objs = document.getElementsByName(obj);
		obj = null;
		if (objs)
		{
			obj = objs[0];
		}
	}

	with(obj)
	{
		if (CONFIG["VALIDATE_ERROR_COLOR"] != "")
			style.color = "";
		if (CONFIG["VALIDATE_ERROR_BRCOLOR"] != "")
			style.borderColor = "";
		if (CONFIG["VALIDATE_ERROR_BGCOLOR"] != "")
			style.backgroundColor = "";

		var lastNode = parentNode.childNodes[parentNode.childNodes.length-1];
	   	if(lastNode.id == "__ErrorMessagePanel")
	    	parentNode.removeChild(lastNode);
    }
}

function validate_error(obj,msg,type,cname)
{
	if (typeof(obj) == "string")
	{
		objs = document.getElementsByName(obj);
		obj = null;
		if (objs)
		{
			obj = objs[0];
		}
	}

	if (obj == null)
		return;

	if (cname)
	{
		obj.setAttribute("cname",cname);
	}

	var check = obj.getAttribute("check");
	var alert_ = obj.getAttribute("alert");
	var cname = obj.getAttribute("cname");

	if (msg == '')
	{
		if (check != "")
		{
			var key = check;
			key = "MSG_VALIDATE_" + key.toUpperCase();
			msg = LANG[key];
			if (msg == undefined)
				msg = "";
		}

		if (msg == "" && type)
		{
			var key = type;
			key = "MSG_VALIDATE_" + key.toUpperCase();
			msg = LANG[key];
			if (msg == undefined)
				msg = "";
		}

		if (alert_)
			msg = alert_;
		else if (cname)
			msg = cname + " " + msg;
	}

	if (CONFIG["VALIDATE_ERROR_ALERT"])
		alert(msg);
	if (CONFIG["VALIDATE_ERROR_FOCUS"])
		obj.focus();

	if (CONFIG["VALIDATE_ERROR_COLOR"] != "")
		obj.style.color = CONFIG["VALIDATE_ERROR_COLOR"];
	if (CONFIG["VALIDATE_ERROR_BRCOLOR"] != "")
		obj.style.borderColor = CONFIG["VALIDATE_ERROR_BRCOLOR"];
	if (CONFIG["VALIDATE_ERROR_BGCOLOR"] != "")
	{
		if (obj.type == "radio" || obj.type == "checkbox")
		{
			obj.style.backgroundColor = CONFIG["VALIDATE_ERROR_BGCOLOR"];
		}
		else
		{
			obj.style.backgroundColor = CONFIG["VALIDATE_ERROR_BGCOLOR"];
		}
	}

	if (CONFIG["VALIDATE_ERROR_MESSAGE"])
	{
		var span = document.createElement("SPAN");
	    span.id = "__ErrorMessagePanel";
	    span.style.color = "red";
	    obj.parentNode.appendChild(span);
	    span.innerHTML = "<small>" + "*" + msg + "</small>";
	}

	setCookie("validate_error",1);
}

function js_validate_form(obj)
{
	var error = false;
	var msg = "";

	if (obj.getAttribute("require") == "true")
	{
		if (obj.value == "")
		{
			if (obj.type == "select-one" || obj.type == "select-multiple")
				msg = LANG["MSG_VALIDATE_SELECT"];
			else
				msg = LANG["MSG_VALIDATE_REQUIRE"];

			error = true;
		}
	}
	else if (obj.getAttribute("require") == "false")
	{
		if (obj.value == "")
			return true;
	}
	else
	{
		if (obj.value == "")
			return true;
	}


	var check = obj.getAttribute("check");
	var alert_ = obj.getAttribute("alert");
	var cname = obj.getAttribute("cname");
	var or = obj.getAttribute("or");

	if (error == false && check != null)
	{
		var value = obj.value;

		if (check == "range")
		{
			var min = obj.getAttribute("min");
			var max = obj.getAttribute("max");
			var num = parseInt(value);

			if (isNaN(value))
			{
				error = true;
			}
			else if (min > num || max < num)
			{
				error = true;
			}
		}
		else if (check == "group")
		{
			var groups = document.getElementsByName(obj.name);
			var checked = 0;

			var min = obj.getAttribute("min") || 1;
			var max = obj.getAttribute("max") || groups.length;

			for(var i=0;i<groups.length;i++)
			{
   				if(groups[i].checked)
					checked++;
   			}

  			if (min > checked || checked > max)
  				error = true;
		}
		else
		{
			var reg;
			var general = false;
			try
			{
				reg = RegExpArray[check].toString().replace( /^\/*/, "" ).replace( /\/*$/, "" );
				general = true;
			}
			catch(e)
			{
				reg = check;
				general = false;
			}

			var reg = new RegExp(reg,"i");

			if(!reg.test(value))
			{
				var msg;

				if (general)
				{
					var key = check;
					key = "MSG_VALIDATE_" + key.toUpperCase();
					msg = LANG[key];
					//alert(key);
				}
				error = true;

				if (or != null)
				{
					var array = or.split(',');
					for(i=0;i<array.length;i++)
					{
						if (value == array[i])
						{
							error = false;
							break;
						}
					}
				}
			}
		}
	}

	if (error)
	{
		clear_message(obj);

		if (alert_)
			msg = alert_;
		else if (cname)
			msg = cname + " " + msg;

		validate_error(obj,msg);
	}
	else
	{
		clear_message(obj);
	}

	return true;
}

function ajax_validate_form(obj)
{
	var table = obj.getAttribute("table");

	if (table == null)
	{
		var _table = document.getElementById("_table");

		if (_table)
			table = _table.value;
	}
	//alert(table);

	xajax_validate_form(table,obj.name,obj.value);
	return true;
}

function validate_form(obj)
{
	if (CONFIG["VALIDATE_JS"])
	{
		//alert("js");
		return js_validate_form(obj);
	}
	else if (CONFIG["VALIDATE_AJAX"])
	{
		//alert("ajax");
		return ajax_validate_form(obj);
	}
	else
	{
		//alert("none");
		return true;
	}
}

function validate_all(form)
{
	setCookie("validate_error",0);

	objs = form.elements;
	var length = objs.length;

	if (isNaN(length))
	{
		alert(LANG["MSG_VALIDATE_LENGTH_CONFLICT"]);
		return false;
	}

	for(i=0;i<length;i++)
	{
		with(objs[i])
		{
			if (getAttribute("check") == null && getAttribute("require") == null)
				continue;

			/*
			if (getAttribute("onchange") != null)
			{
				objs[i].onchange();
			}
			else
			{
				validate_form(objs[i]);
			}
			*/
			validate_form(objs[i]);
		}
	}

	if (getCookie("validate_error") == 1)
		return false;
	else
		return true;
}

function validate_auto(form)
{
	return validate_all(form);
}

function use_js_validate()
{
	window["validate_form"]= function(obj) {return js_validate_form(obj);}
}

function use_ajax_validate()
{
	window["validate_form"]= function(obj) {return ajax_validate_form(obj);}
}

function use_none_validate()
{
	window["validate_form"]= function(obj) {return true;}
}

