//###########################################################################
//# Validator.js
//###########################################################################
//# ÆûÀÇ °ªµéÀÌ Á¤´çÇÑÁö Å×½ºÆ® ÇÑ´Ù.
//# Yangkun  <yangkun7@kornet.net>
//# version 1.0
//# 2004-04-05
//###########################################################################
/******************************************************************************
- Usage
	1. INPUT ÅÂ±×¿¡ »ç¿ëÇÒ validation attribute ¸¦ ¸í½Ã ÇÑ´Ù.
	2. Æû °Ë»ç ÇÔ¼ö¿¡¼­ °Ë»çÇÒ form object ¸¦ ÀÎÀÚ·Î Validator °´Ã¼¸¦ ¸¸µç´Ù.
	2. Validator.test ¸¦ È£ÃâÇÑ´Ù. Æû °ªµéÀÌ Á¤´çÇÏ¸é true, ¾Æ´Ï¸é false ¸¦ ¸®ÅÏÇÑ´Ù.

	* ¿¹1.

	<script language='javascript' src='js.Validator.js'></script>
	<script language='javascript'>
	function frmCheck(f)
	{
		var validator = new Validator(f);
		return v.test();
	}
	</script>
	<form .... onSubmit='return frmCheck(this);'>
		<input type='..' ... validation attribute>
		<input type='..' ... validation attribute>
		<input type='submit'>
	</form>

- Available attribute list
	
	notnull						: ¹Ýµå½Ã °ªÀ» ÀÔ·ÂÇØ¾ß ÇÑ´Ù.
	number						: ¼ýÀÚ°ª¸¸ ÀÔ·Â
	price						: ¿ä±Ý Çü½Ä¿¡ ¸Âµµ·Ï ÇÑ´Ù.
	min="number"				: °¡´ÉÇÑ ÃÖ¼Ò°ª
	max="number"				: °¡´ÉÇÑ ÃÖ´ë°ª
	min="number" max="number"	: °¡´ÉÇÑ °ªÀÇ ¹üÀ§
	desc="string"				: ÇØ´ç ÄÁÆ®·ÑÀÇ ÀÌ¸§À» ¸í½Ã. ¿¡·¯¸¦ Ç¥½ÃÇÒ¶§ »ç¿ëÇÑ´Ù.
	todefault					: ÇØ´ç ÄÁÆ®·Ñ¿¡ ¿¡·¯°¡ ³µÀ»¶§ value ¼Ó¼º¿¡ ¸í½ÃµÈ °ªÀ¸·Î º¹¿øÇÑ´Ù.
	alpha						: ¿µ¹®¸¸ÀÔ·Â°¡´ÉÇÏµµ·Ï ÇÑ´Ù.
	upper						: ´ë¹®ÀÚ¸¸ ÀÔ·Â °¡´É
	lower						: ¼Ò¹®ÀÚ¸¸ ÀÔ·Â °¡´É
	alphanum					: ¿µ¹®°ú ¼ýÀÚ¸¸ ÀÔ·Â°¡´ÉÇÏµµ·Ï ÇÑ´Ù.
	uppernum					: ¿µ¹®(´ë¹®ÀÚ)°ú ¼ýÀÚ¸¸ ÀÔ·Â°¡´ÉÇÏµµ·Ï ÇÑ´Ù.
	lowernum					: ¿µ¹®(¼Ò¹®ÀÚ)°ú ¼ýÀÚ¸¸ ÀÔ·Â°¡´ÉÇÏµµ·Ï ÇÑ´Ù.
	equal="object_name"			: equal ¿¡ ¸í½ÃÇÑ ÄÁÆ®·ÑÀÇ °ª°ú °°¾Æ¾ß ÇÑ´Ù.
	minlength="number"			: ÀÔ·Â°ªÀÇ ±æÀÌ°¡ number º¸´Ù ±æ¾î¾ß ÇÑ´Ù.
	maxbyte = "number"          : ÀÔ·Â°ªÀÇ Byte ±æÀÌ°¡ number º¸´Ù ÀÛ¾Æ¾ß ÇÑ´Ù.
	email						: ÀÔ·ÂµÇ´Â °ªÀÌ email Çü½Ä¿¡ ¸Â¾Æ¾ß ÇÑ´Ù.
	url							: ÀÔ·ÂµÇ´Â °ªÀÌ URL Çü½Ä¿¡ ¸Â¾Æ¾ß ÇÑ´Ù.
	numselect="number"			: °°Àº ÀÌ¸§À» °¡Áö´Â Ã¼Å©¹Ú½º¿¡ ´ëÇØ¼­ ÃÖ¼Ò ¼±ÅÃ¼ö ÁöÁ¤, Ã¼Å© ¹Ú½ºµé Áß¿¡ ÇÏ³ª¿¡¸¸ ¼³Á¤ÇÑ´Ù.
	minselect="number"			: °°Àº ÀÌ¸§À» °¡Áö´Â Ã¼Å©¹Ú½º¿¡ ´ëÇØ¼­ ÃÖ¼Ò ¼±ÅÃ¼ö ÁöÁ¤, Ã¼Å© ¹Ú½ºµé Áß¿¡ ÇÏ³ª¿¡¸¸ ¼³Á¤ÇÑ´Ù.
	maxselect="number"			: °°Àº ÀÌ¸§À» °¡Áö´Â Ã¼Å©¹Ú½º¿¡ ´ëÇØ¼­ ÃÖ´ë ¼±ÅÃ¼ö ÁöÁ¤, Ã¼Å© ¹Ú½ºµé Áß¿¡ ÇÏ³ª¿¡¸¸ ¼³Á¤ÇÑ´Ù.
	mobile						: ÇÚµåÆù ¹øÈ£ Çü½Ä¿¡ ¸Âµµ·Ï ÇÑ´Ù.
	tel							: ÀüÈ­¹øÈ£ Çü½Ä¿¡ ¸Âµµ·Ï ÇÑ´Ù.
	fax							: ÆÑ½º¹øÈ£ Çü½Ä¿¡ ¸Âµµ·Ï ÇÑ´Ù.
	date						: ÀÏÀÚ Çü½Ä¿¡ ¸Âµµ·Ï ÇÑ´Ù.
	reg="string"				: ÀÔ·Â°ªÀº string ¿¡ ÁöÁ¤ÇÑ Á¤±Ô½Ä¿¡ ºÎÇÕÇØ¾ß ÇÑ´Ù.	

- Available public function
	
	setBgColor("color value")	: ¿¡·¯ ³µÀ»¶§, ÄÁÆ®·Ñ ¹è°æÀ» Ã¤¿ï »öÀ» ¼³Á¤
									ÀÌÇÔ¼ö°¡ ºÒ¸®Áö ¾Ê´Â´Ù¸é »öÀ» Ã¤¿ìÁö ¾Ê´Â´Ù.
	setShowError(boolean)		: ¿¡·¯°¡ ³µÀ»¶§ window.alert ·Î ¸Þ½ÃÁö¸¦ º¸¿©ÁÙÁö ¿©ºÎ
	string getErrorMessage()	: ¿¡·¯°¡ ³µÀ»¶§ ¿¡·¯¸Þ½ÃÁö¸¦ ¸°ÅÏ.
	object getErrorObject()		: ¿¡·¯°¡ ³µÀ»¶§ ÇØ´ç ¿¡·¯°¡ ³­ ÄÁÆ®·ÑÀ» ¸®ÅÏ.
******************************************************************************/
/**
* Constructor
* 
* obj_form : °Ë»ç¸¦ ¼öÇàÇÒ form object
*/
Validator = function(obj_form)
{
	// properties
	this.form = obj_form;
	this.error_msg = "";
	this.error_object = null;
	this.bgcolor = "";
	this.is_change_bgcolor = false;
	this.is_alert_error = true;
}
/**
* set function
*/
Validator.prototype.setBgColor = function(color){this.bgcolor = color; this.is_change_bgcolor = true;}
Validator.prototype.setShowError = function(flag){this.is_alert_error = flag;}
/**
* get function
*/
Validator.prototype.getErrorMessage = function(){return this.error_msg;}
Validator.prototype.getErrorObject = function(){return this.error_object;}
/**
* ÆûÀÇ ±¸¼º¿ä¼ÒµéÀ» validation attribute ¿¡ ÀÇÇØ °Ë»çÇÑ´Ù.
* 
* return : ¸ðµÎ Á¤´çÇÑ °ªÀÌ¸é true, ¾Æ´Ï¸é false
*/
Validator.prototype.test = function()
{
	var els = this.form.elements;
	for (var i=0; i<els.length; i++)
	{
		var el = this.form.elements[i];		
		if (!this.check_el(el)) return false;
	}
	return true;
}
/**
* ÇØ´ç ±¸¼º¿ä¼ÒÀ» validation attribute ¿¡ ÀÇÇØ °Ë»çÇÑ´Ù.
*
* return : Á¤´çÇÑ °ªÀÌ¸é true, ¾Æ´Ï¸é false
*/
Validator.prototype.check_el = function(el)
{
	if (el.getAttribute("notnull")!=null) if (!this.check_notnull(el)) return false;
	if (el.getAttribute("number")!=null) if (!this.check_number(el)) return false;
	if (el.getAttribute("price")!=null) if (!this.check_price(el)) return false;
	if (el.getAttribute("min")!=null && el.getAttribute("max")!=null) if (!this.check_range(el)) return false;
	else if (el.getAttribute("min")!=null) if (!this.check_min(el)) return false;
	else if (el.getAttribute("max")!=null) if (!this.check_max(el)) return false;
	if (el.getAttribute("alpha")!=null) if (!this.check_alpha(el)) return false;
	if (el.getAttribute("upper")!=null) if (!this.check_upper(el)) return false;
	if (el.getAttribute("lower")!=null) if (!this.check_lower(el)) return false;
	if (el.getAttribute("alphanum")!=null) if (!this.check_alphanum(el)) return false;
	if (el.getAttribute("uppernum")!=null) if (!this.check_uppernum(el)) return false;
	if (el.getAttribute("lowernum")!=null) if (!this.check_lowernum(el)) return false;
	if (el.getAttribute("equal")!=null) if (!this.check_equal(el)) return false;
	if (el.getAttribute("minlength")!=null) if (!this.check_minlength(el)) return false;
	if (el.getAttribute("email")!=null) if (!this.check_email(el)) return false;
	if (el.getAttribute("url")!=null) if (!this.check_url(el)) return false;
	if (el.getAttribute("reg")!=null) if (!this.check_reg(el)) return false;
	if (el.getAttribute("mobile")!=null) if (!this.check_mobile(el)) return false;
	if (el.getAttribute("tel")!=null) if (!this.check_tel(el)) return false;
	if (el.getAttribute("fax")!=null) if (!this.check_fax(el)) return false;
	if (el.getAttribute("date")!=null) if (!this.check_date(el)) return false;
	if (el.getAttribute("maxbyte")!=null) if (!this.check_maxbyte(el)) return false;
	if (el.getAttribute("filename")!=null) if (!this.check_filename(el)) return false;
	if (el.getAttribute("numselect")!=null) if (!this.check_num_select(el)) return false;
	if (el.getAttribute("minselect")!=null) if (!this.check_min_select(el)) return false;
	if (el.getAttribute("maxselect")!=null) if (!this.check_max_select(el)) return false;	
	return true;
}

/**
* ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀÌ ºñ¾îÀÖ´ÂÁö °Ë»çÇÏ°í ¿¡·¯¸¦ Ã³¸®.
*/
Validator.prototype.check_notnull = function(obj)
{
	if (obj.type == "text" || obj.type == "password" || obj.type == "textarea" || obj.type == "file")
	{
		var str = obj.value;
		if (str.trim() == "") return this.invalid(obj, "notnull");
	}
	return true;
}
/**
* ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀÌ ¼ýÀÚÀÎÁö °Ë»çÇÑ´Ù. ¼ýÀÚ°¡ ¾Æ´Ï¸é ¿¡·¯.
*/
Validator.prototype.check_number = function(obj)
{
	if (obj.value.trim() == "") return true;
	if (!this.is_number(obj.value)) return this.invalid(obj, "number");
	return true;
}
/**
* ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀÌ ÆÄÀÏÀÌ¸§ÀÎÁö °Ë»çÇÑ´Ù. ÆÄÀÏÀÌ¸§ÀÌ ¾Æ´Ï¸é ¿¡·¯.
*/
Validator.prototype.check_filename = function(obj)
{
	if (obj.value.trim() == "") return true;
	var filename = /^[a-zA-Z0-9_\.\-\+]+$/;
	var val = obj.value.trim();
	if (!filename.test(val)) return this.invalid(obj, "filename");
	return true;
}
/*
* ÄÁÆ®·ÑÀÇ °ªÀÌ ¿µ¹®À¸·Î¸¸ µÇ¾ú´ÂÁö °Ë»ç
*/
Validator.prototype.check_alpha = function(obj)
{
	if (obj.value.trim() == "") return true;
	var alpha = /^[a-zA-Z_]*$/;
	var val = obj.value.trim();
	if (!alpha.test(val)) return this.invalid(obj, "alpha");
	return true;
}
/*
* ÄÁÆ®·ÑÀÇ °ªÀÌ ¿µ¹® ´ë¹®ÀÚ·Î¸¸ µÇ¾ú´ÂÁö °Ë»ç
*/
Validator.prototype.check_upper = function(obj)
{
	if (obj.value.trim() == "") return true;
	var alpha = /^[A-Z_]*$/;
	var val = obj.value.trim();
	if (!alpha.test(val)) return this.invalid(obj, "upper");
	return true;
}
/*
* ÄÁÆ®·ÑÀÇ °ªÀÌ ¿µ¹® ¼Ò¹®ÀÚ·Î¸¸ µÇ¾ú´ÂÁö °Ë»ç
*/
Validator.prototype.check_lower = function(obj)
{
	if (obj.value.trim() == "") return true;
	var alpha = /^[a-z_]*$/;
	var val = obj.value.trim();
	if (!alpha.test(val)) return this.invalid(obj, "lower");
	return true;
}
/*
* ÄÁÆ®·Î¸£ÀÌ °ªÀÌ ¿µ¹® È¤Àº ¼ýÀÚ·Î¸¸ µÇ¾ú´ÂÁö °Ë»ç
*/
Validator.prototype.check_alphanum = function(obj)
{
	if (obj.value.trim() == "") return true;
	var alphanum = /^[a-zA-Z0-9_]*$/;
	var val = obj.value.trim();
	if (!alphanum.test(val)) return this.invalid(obj, "alphanum");
	return true;
}
/*
* ÄÁÆ®·Î¸£ÀÌ °ªÀÌ ¿µ¹®(´ë¹®ÀÚ) È¤Àº ¼ýÀÚ·Î¸¸ µÇ¾ú´ÂÁö °Ë»ç
*/
Validator.prototype.check_uppernum = function(obj)
{
	if (obj.value.trim() == "") return true;
	var uppernum = /^[A-Z0-9_]*$/;
	var val = obj.value.trim();
	if (!uppernum.test(val)) return this.invalid(obj, "uppernum");
	return true;
}
/*
* ÄÁÆ®·Î¸£ÀÌ °ªÀÌ ¿µ¹®(¼Ò¹®ÀÚ) È¤Àº ¼ýÀÚ·Î¸¸ µÇ¾ú´ÂÁö °Ë»ç
*/
Validator.prototype.check_lowernum = function(obj)
{
	if (obj.value.trim() == "") return true;
	var lowernum = /^[a-z0-9_]*$/;
	var val = obj.value.trim();
	if (!lowernum.test(val)) return this.invalid(obj, "lowernum");
	return true;
}
/**
* ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀÌ ÇØ´ç ¹üÀ§¿¡ ¼ÓÇÏ´ÂÁö °Ë»ç
*/
Validator.prototype.check_range = function(obj)
{
	if (obj.value.trim() == '') return true;
	if (!this.is_number(obj.value) || !this.is_number(obj.getAttribute("min")) || !this.is_number(obj.getAttribute("max")))
	{
		var name = obj.name;
		if (obj.getAttribute("desc")) name = obj.getAttribute("desc");
		alert("[" + name + "] ¿¡´Â min max ¼Ó¼ºÀÌ ¼³Á¤ µÇ¾î ÀÖ½À´Ï´Ù. min °ª, max °ª, ÀÔ·Â°ªÀº ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù.");
		return false;
	}
	var min_value = parseInt(obj.getAttribute("min"));
	var max_value = parseInt(obj.getAttribute("max"));
	var val = parseInt(obj.value);
	if (val < min_value || val > max_value) return this.invalid(obj, "range", min_value, max_value);
	return true;
}
/**
* ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀÌ ÇØ´ç ¼ýÀÚº¸´Ù Å«Áö °Ë»ç
*/
Validator.prototype.check_min = function(obj)
{
	if (obj.value == '') return true;
	var val = obj.value;
	if (obj.getAttribute("price")!=null) val = val.delete_comma();
	if (!this.is_number(val) || !this.is_number(obj.getAttribute("min")))
	{
		var name = obj.name;
		if (obj.getAttribute("desc")) name = obj.getAttribute("desc");
		alert("[" + name + "] ¿¡´Â min ¼Ó¼ºÀÌ ¼³Á¤ µÇ¾î ÀÖ½À´Ï´Ù. min °ª°ú ÀÔ·Â°ªÀº ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù.");
		return false;
	}
	val = parseInt(val);
	var min_value = parseInt(obj.getAttribute("min"));
	if (val < min_value) return this.invalid(obj, "min", min_value);
	return true;
}
/**
* ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀÌ ÇØ´ç ¼ýÀÚº¸´Ù Å«Áö °Ë»ç
*/
Validator.prototype.check_max = function(obj)
{
	if (obj.value == '') return true;
	var val = obj.value;
	if (obj.getAttribute("price")!=null) val = val.delete_comma();
	if (!this.is_number(val) || !this.is_number(obj.getAttribute("max")))
	{
		var name = obj.name;
		if (obj.getAttribute("desc")) name = obj.getAttribute("desc");
		alert("[" + name + "] ¿¡´Â max ¼Ó¼ºÀÌ ¼³Á¤ µÇ¾î ÀÖ½À´Ï´Ù. max °ª°ú ÀÔ·Â°ªÀº ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù.");
		return false;
	}
	val = parseInt(val);
	var max_value = parseInt(obj.getAttribute("max"));	
	if (val > max_value) return this.invalid(obj, "max", max_value);
	return true;
}
/*
* ´Ù¸¥ ÄÁÆ®·Ñ°ú °ªÀÌ °°ÀºÁö ºñ±³
*/
Validator.prototype.check_equal = function(obj)
{
	var another_name = obj.getAttribute("equal");
	eval("var another = this.form." + another_name + ";");
	// 2005-09-02, by hamhaja
	if (another.getAttribute("desc")) another_name = another.getAttribute("desc");
	var val1 = obj.value.trim();
	var val2 = another.value.trim();
	if (val1 != val2) return this.invalid(obj, "equal", another_name);
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ °©ÀÇ ±æÀÌ°¡ Æ¯Á¤ °ª ÀÌ»óÀÌ¾î¾ß ÇÑ´Ù.
*/
Validator.prototype.check_minlength = function(obj)
{
	if (obj.value.trim() == "") return true;
	var len = obj.value.length;
	var require_length = obj.getAttribute("minlength");
	if (len < require_length) return this.invalid(obj, "minlength", require_length);
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ ¹ÙÀÌÆ® ±æÀÌ°¡ maxbyte º¸´Ù ÀÛ¾Æ¾ß ÇÑ´Ù.
*/
Validator.prototype.check_maxbyte = function(obj)
{
	if (obj.value.trim() == "") return true;
	var max_length = obj.getAttribute("maxbyte");
	if (obj.value.get_string_byte_length() > max_length) return this.invalid(obj, "maxbyte", max_length);
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ °©Àº ÀÌ¸ÞÀÏ Çü½Ä¿¡ ¸Â¾Æ¾ß ÇÑ´Ù.
*/
Validator.prototype.check_email = function(obj)
{
	if (obj.value.trim() == "") return true;
	var regEmail = new RegExp("([xA1-xFEa-z0-9_-]+@[xA1-xFEa-z0-9-]+\.[a-z0-9-]+)","gi");
	//var filter=/^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (!regEmail.test(obj.value.trim())) return this.invalid(obj, "email");
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ °©Àº URL Çü½Ä¿¡ ¸Â¾Æ¾ß ÇÑ´Ù.
*/
Validator.prototype.check_url = function(obj)
{
	if (obj.value.trim() == "") return true;
	var regURL = new RegExp("(http|https|ftp|telnet|news|irc)://([-/.a-zA-Z0-9_~#%$?&=:200-377();|°¡-ÆR]+)","gi");
	if (!regURL.test(obj.value.trim())) return this.invalid(obj, "url");
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·Â °¡´ÉÇÑ Á¤±Ô½ÄÀ» Ã¼Å©ÇÑ´Ù.
*/
Validator.prototype.check_reg = function(obj)
{
	if (obj.value.trim() == "") return true;
	var reg_str = obj.getAttribute("reg");
	var reg = new RegExp(reg_str, "g");
	if (!reg.test(obj.value.trim())) return this.invalid(obj, "reg", reg_str);
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂÇÑ °ªÀÌ ÇÚµåÆù ¹øÈ£ Çü½Ä¿¡ ¸Â´ÂÁö °Ë»çÇÑ´Ù.
*/
Validator.prototype.check_mobile = function(obj)
{
	if (obj.value.trim() == "") return true;
	var reg = new RegExp("^01[016789]\-[0-9]{3,4}\-[0-9]{4}$", "g");
	if (!reg.test(obj.value.trim())) return this.invalid(obj, "mobile");
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂÇÑ °ªÀÌ ÀüÈ­¹øÈ£ Çü½Ä¿¡ ¸Â´ÂÁö °Ë»çÇÑ´Ù.
*/
Validator.prototype.check_tel = function(obj)
{
	if (obj.value.trim() == "") return true;
	var reg = new RegExp("^0[0-9]{1,2}\-[0-9]{3,4}\-[0-9]{4}$", "g");
	if (!reg.test(obj.value.trim())) return this.invalid(obj, "tel");
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂÇÑ °ªÀÌ ÆÑ½º¹øÈ£ Çü½Ä¿¡ ¸Â´ÂÁö °Ë»çÇÑ´Ù.
*/
Validator.prototype.check_fax = function(obj)
{
	if (obj.value.trim() == "") return true;
	var reg = new RegExp("^0[0-9]{1,2}\-[0-9]{3,4}\-[0-9]{4}$", "g");
	if (!reg.test(obj.value.trim())) return this.invalid(obj, "fax");
	return true;
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂÇÑ °ªÀÌ ÀÏÀÚ Çü½Ä¿¡ ¸Â´ÂÁö °Ë»çÇÑ´Ù.
*/
Validator.prototype.check_date = function(obj)
{
	if (obj.value.trim() == "") return true;
	var reg = new RegExp("^[0-9]{4}\-[0,1]{1}[0-9]{1}\-[0-3]{1}[0-9]{1}$", "g");
	if (obj.value.trim() == '0000-00-00' || !reg.test(obj.value.trim())) return this.invalid(obj, "date");
	return true;
}
/*
* Ã¼Å© ¹Ú½ºÀÇ ¼±ÅÃ Ç×¸ñ ¼ö¸¦ Á¦ÇÑÇÑ´Ù.
*/
Validator.prototype.check_num_select = function(obj)
{
	var name = obj.name;
	var check_count = 0;
	var num_check = obj.getAttribute("numselect");
	var els = this.form.elements;

	for (var i=0; i<els.length; i++)
	{
		var el = els[i];
		if (el.name == name)
		{
			if (el.checked) check_count++;
		}
	}
	if (check_count != num_check) return this.invalid(obj, "numselect", num_check);
	return true;
}
/*
* Ã¼Å© ¹Ú½ºÀÇ ÃÖ¼Ò ¼±ÅÃ Ç×¸ñÀ» Á¦ÇÑÇÑ´Ù.
*/
Validator.prototype.check_min_select = function(obj)
{
	var name = obj.name;
	var check_count = 0;
	var min_check = obj.getAttribute("minselect");
	var els = this.form.elements;

	for (var i=0; i<els.length; i++)
	{
		var el = els[i];
		if (el.name == name)
		{
			if (el.checked) check_count++;
		}
	}
	if (check_count < min_check) return this.invalid(obj, "minselect", min_check);
	return true;
}
/*
* Ã¼Å© ¹Ú½ºÀÇ ÃÖ´ë ¼±ÅÃ Ç×¸ñÀ» Á¦ÇÑÇÑ´Ù.
*/
Validator.prototype.check_max_select = function(obj)
{
	var name = obj.name;
	var check_count = 0;
	var max_check = obj.getAttribute("maxselect");
	var els = this.form.elements;

	for (var i=0; i<els.length; i++)
	{
		var el = els[i];
		if (el.name == name)
		{
			if (el.checked) check_count++;
		}
	}
	if (check_count > max_check) return this.invalid(obj, "maxselect", max_check);
	return true;
}
/**
* ÇØ´ç ÄÁÆ®·ÑÀÇ °ªÀÌ ¿ä±ÝÀÎÁö °Ë»çÇÑ´Ù. ¿ä±ÝÀÌ ¾Æ´Ï¸é ¿¡·¯.
*/
Validator.prototype.check_price = function(obj)
{
	if (obj.value.trim() == "") return true;
	if (!this.is_number(obj.value.delete_comma())) return this.invalid(obj, "price");
	return true;
}
/**
* Æû ÄÁÆ®·Ñ¿¡ ¿¡·¯°¡ ³µÀ»¶§ ¿¡·¯¸¦ Ã³¸®
* 
* obj : ¿¡·¯°¡ ¹ß»ýÇÑ ÄÁÆ®·Ñ
* mode : ¿¡·¯ °Ë»ç ¹æ¹ý
* 
* return : Ç×»ó false
*/
Validator.prototype.invalid = function(obj, mode, add1, add2)
{
	var msg = "";
	// desc attribute ·Î ÄÁÆ®·Ñ ÀÌ¸§À» ¼³Á¤, ¾øÀ¸¸é name ¼Ó¼º »ç¿ë
	var name = obj.name;
	if (obj.getAttribute("desc")) name = obj.getAttribute("desc");
	
	if (mode == "notnull")	// not empty
		msg = "[" + name + "] ¿¡´Â ¹Ýµå½Ã ³»¿ëÀ» ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.";
	else if (mode == "number")
		msg = "[" + name + "] ¿¡´Â ¼ýÀÚ¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.";
	else if (mode == "equal")
		msg = "[" + name + "] ¿Í [" + add1 + "] ÀÇ °ªÀº °°¾Æ¾ßÇÕ´Ï´Ù.";
	else if (mode == "range")
		msg = "[" + name + "] ÀÇ °ªÀº " + add1 + " ~ " + add2 + " »çÀÌÀÇ °ªÀÌ¾î¾ß ÇÕ´Ï´Ù.";
	else if (mode == "min")
		msg = "[" + name + "] ÀÇ °ªÀº " + add1 + "º¸´Ù ÀÛÀ» ¼ö ¾ø½À´Ï´Ù.";
	else if (mode == "max")
		msg = "[" + name + "] ÀÇ °ªÀº " + add1 + "º¸´Ù Å¬ ¼ö ¾ø½À´Ï´Ù.";
	else if (mode == "alpha")
		msg = "[" + name + "] ¿¡´Â ¿µ¹®¸¸ ÀÔ·ÂÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.";
	else if (mode == "upper")
		msg = "[" + name + "] ¿¡´Â ¿µ¾î ´ë¹®ÀÚ¸¸ ÀÔ·ÂÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.";
	else if (mode == "lower")
		msg = "[" + name + "] ¿¡´Â ¿µ¾î ¼Ò¹®ÀÚ¸¸ ÀÔ·ÂÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.";	
	else if (mode == "alphanum")
		msg = "[" + name + "] ¿¡´Â ¿µ¹®°ú ¼ýÀÚ¸¸ ÀÔ·ÂÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.(°ø¹éÀÌ Æ÷ÇÔµÉ ¼ö ¾ø½À´Ï´Ù.)";	
	else if (mode == "uppernum")
		msg = "[" + name + "] ¿¡´Â ¿µ¹®(´ë¹®ÀÚ)°ú ¼ýÀÚ¸¸ ÀÔ·ÂÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.(°ø¹éÀÌ Æ÷ÇÔµÉ ¼ö ¾ø½À´Ï´Ù.)";	
	else if (mode == "lowernum")
		msg = "[" + name + "] ¿¡´Â ¿µ¹®(¼Ò¹®ÀÚ)°ú ¼ýÀÚ¸¸ ÀÔ·ÂÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.(°ø¹éÀÌ Æ÷ÇÔµÉ ¼ö ¾ø½À´Ï´Ù.)";	
	else if (mode == "minlength")
		msg = "[" + name + "] ¿¡ ÀÔ·ÂµÇ´Â °ªÀÌ ±æÀÌ´Â " + add1 + "ÀÚ ÀÌ»óÀÌ¾î¾ß ÇÕ´Ï´Ù.";
	else if (mode == "email")
		msg = "[" + name + "] ¿¡ ÀÔ·ÂÇÑ °ªÀÌ ÀÌ¸ÞÀÏ Çü½Ä¿¡ ¸ÂÁö ¾Ê½À´Ï´Ù.";
	else if (mode == "url")
		msg = "[" + name + "] ¿¡ ÀÔ·ÂÇÑ °ªÀÌ URL Çü½Ä¿¡ ¸ÂÁö ¾Ê½À´Ï´Ù. http:// °¡ ºüÁöÁö ¾Ê¾Ò³ª È®ÀÎÇØÁÖ¼¼¿ä";
	else if (mode == "reg")
		msg = "[" + name + "] ¿¡ ÀÔ·ÂÇÑ °ªÀÌ ÁöÁ¤µÈ Çü½Ä¿¡ ¸ÂÁö ¾Ê½À´Ï´Ù. ´ÙÀ½ Çü½Ä¿¡ ¸Â¾Æ¾ß ÇÕ´Ï´Ù. Format : " + add1;
	else if (mode == "numselect")
		msg = "[" + name + "] ¿¡ ´ëÇØ¼­ " + add1 + "°³¸¦ ¼±ÅÃÇØ¾ß ÇÕ´Ï´Ù.";
	else if (mode == "minselect")
		msg = "[" + name + "] ¿¡ ´ëÇØ¼­ " + add1 + "°³ ÀÌ»óÀ» ¼±ÅÃÇÏ¼¼¿ä.";
	else if (mode == "maxselect")
		msg = "[" + name + "] ¿¡ ´ëÇØ¼­ " + add1 + "°³ ±îÁö ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.";
	else if (mode == "mobile")
		msg = "[" + name + "] ¿¡´Â ÇÚµåÆù ¹øÈ£¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù. ¿¹)016-1234-4567 È¤Àº 011-123-4567";
	else if (mode == "tel")
		msg = "[" + name + "] ¿¡´Â ÀüÈ­¹øÈ£¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù. ¿¹)064-123-4567";
	else if (mode == "fax")
		msg = "[" + name + "] ¿¡´Â ÆÑ½º¹øÈ£¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù. ¿¹)064-123-4567";
	else if (mode == "date")
		msg = "[" + name + "] ¿¡´Â ÀÏÀÚ¸¸ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù. ¿¹)1977-04-17";
	else if (mode == "maxbyte")
		msg = "[" + name + "] ¿¡´Â " + add1 + " Bytes ±îÁö ÀÔ·ÂÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.";	
	else if (mode == "filename")
		msg = "[" + name + "] ¿¡´Â ÆÄÀÏÀÌ¸§¸¸ ¿Ã ¼ö ÀÖ½À´Ï´Ù. ( / ' \" ( ) ~ : , < > [ ] { } * °ø¹é) µîÀº ÆÄÀÏÀÌ¸§¿¡ Æ÷ÇÔµÉ ¼ö ¾ø½À´Ï´Ù.";
	else if (mode == "price")
		msg = "[" + name + "] ¿¡´Â ¿ä±Ý Çü½Ä¿¡ ¸Â°Ô ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù. ¿¹)123000 ¶Ç´Â 123,000";

	// ¿ø·¡°ªÀ¸·Î º¹¿ø
	if (obj.getAttribute("todefault")) this.toDefault(obj);
	// ¹è°æ»ö º¯°æ
	if (this.is_change_bgcolor)
	{
		obj.style.backgroundColor = this.bgcolor;
		// Å° ÀÔ·ÂÀÌ ÀÖÀ»¶§, ÇØ´ç ¹è°æ»öÀ¸·Î Áö¿ìµµ·Ï ÇÑ´Ù.
		obj.onkeypress = function(){this.style.backgroundColor = '';}
	}	
	// ¿¡·¯ Ç¥½Ã
	if (this.is_alert_error) window.alert(msg);
	// ÄÁÆ®·Ñ¿¡ Æ÷Ä¿½º ÁÖ°í
	//obj.select();	
	obj.focus();
	// property ¼³Á¤
	this.error_msg = msg;
	this.error_object = obj;
	return false;
}
/**
* ÄÁÆ®·ÑÀÇ °ªÀ» ¿ø·¡ °ªÀ¸·Î º¹¿ø.
* 
* obj : ´ë»ó ÄÁÆ®·Ñ
*/
Validator.prototype.toDefault = function(obj)
{
	if (obj.type == "text")
	{
		obj.value = obj.defaultValue;
	}
}
/*
* ÄÁÆ®·Ñ¿¡ ÀÔ·ÂµÈ °ªÀÌ. ¼ýÀÚÀÎÁö °Ë»ç
*/
Validator.prototype.is_number = function(val)
{
	var anum = /^(\-|\+)?\d+(\.\d+)?$/;
	return anum.test(val);
}
/**
* ±âÅ¸ ÇÔ¼öµé
* from lib.validate.js by jstoy project
*/
String.prototype.trim = function(str) {
    str = this != window ? this : str;
    return str.ltrim().rtrim();
}
String.prototype.ltrim = function(str) {
    str = this != window ? this : str;
    return str.replace(/^\s+/g,"");
}
String.prototype.rtrim = function(str) {
    str = this != window ? this : str;
    return str.replace(/\s+$/g,"");
}
String.prototype.get_string_byte_length = function(Str)
{

	/*var add_len = 0;
	for (var i=0; i<Str.length; i++)
	{
		if ((Str.charCodeAt(i) < 0) || (Str.charCodeAt(i) > 127)) add_len = add_len + 1;
	}
	return (Str.length + add_len);*/
}
String.prototype.delete_comma = function(str)
{
	str = this != window ? this : str;
	return str.replace(/,/g, '');
}