	String.prototype.equals = UDF_equals;
	String.prototype.trim = UDF_trim;
	String.prototype.ltrim = UDF_ltrim;
	String.prototype.rtrim = UDF_rtrim;
	String.prototype.match = UDF_match;
	String.prototype.getByteLength = UDF_getByteLength;
	String.prototype.getFileExt = UDF_getFileExt;
	
	String.prototype.msg = VF_msg;
	String.prototype.checkPhone = VF_checkPhone;
	String.prototype.checkMobile = VF_checkMobile;
	String.prototype.checkSsn = VF_checkSsn;
	String.prototype.checkZip = VF_checkZip;
	String.prototype.checkEmail = VF_checkEmail;
	String.prototype.checkUrl = VF_checkUrl;

	//text, password Å¸ÀÔÀÇ ¿¤¸®¸ÕÆ®°¡ °¡Áú¼ö ÀÖ´Â ¾îÆ®¸®ºäÆ® ¹è¿­
	var attributeForText = new Array(
			new Array("required", "VF_validRequired"),
			new Array("minchar", "VF_validMinChar"),
			new Array("maxchar", "VF_validMaxChar"),
			new Array("charlength", "VF_validCharLength"),
			new Array("minbyte", "VF_validMinByte"),
			new Array("maxbyte", "VF_validMaxByte"),
			new Array("bytelength", "VF_validByteLength"),
			new Array("datatype", "VF_validDataType"),
			new Array("dataform", "VF_validDataForm"),
			new Array("pattern", "VF_validPattern"),
			new Array("datatype1", "VF_validDataType1")
			);

	//textarea ¿¤¸®¸ÕÆ®°¡ °¡Áú¼ö ÀÖ´Â ¾îÆ®¸®ºäÆ® ¹è¿­
	var attributeForTextArea = new Array(
			new Array("required", "VF_validRequired"),
			new Array("minchar", "VF_validMinChar"),
			new Array("maxchar", "VF_validMaxChar"),
			new Array("charlength", "VF_validCharLength"),
			new Array("minbyte", "VF_validMinByte"),
			new Array("maxbyte", "VF_validMaxByte"),
			new Array("bytelength", "VF_validByteLength")
		);

	//select ¿¤¸®¸ÕÆ®°¡ °¡Áú¼ö ÀÖ´Â ¾îÆ®¸®ºäÆ® ¹è¿­
	var attributeForSelect = new Array(
			new Array("selectrequired", "VF_validSelectRequired")
		);

	//checkbox Å¸ÀÔÀÇ ¿¤¸®¸ÕÆ®°¡ °¡Áú¼ö ÀÖ´Â ¾îÆ®¸®ºäÆ® ¹è¿­
	var attributeForCheckbox = 
		new Array(
			new Array("minchecked", "VF_validMinChecked"),
			new Array("maxchecked", "VF_validMaxChecked"),
			new Array("checkedcount", "VF_validCheckedCount")
		);

	//radio Å¸ÀÔÀÇ ¿¤¸®¸ÕÆ®°¡ °¡Áú¼ö ÀÖ´Â ¾îÆ®¸®ºäÆ® ¹è¿­
	var attributeForRadio = 
		new Array(
			new Array("checkedrequired", "VF_validCheckedRequired")
		);

	//file Å¸ÀÔÀÇ ¿¤¸®¸ÕÆ®°¡ °¡Áú¼ö ÀÖ´Â ¾îÆ®¸®ºäÆ® ¹è¿­
	var attributeForFile = 
		new Array(
			new Array("required", "VF_validRequired"),
			new Array("limitext", "VF_validLimitExt")
		);
	
	//µðÆúÆ® ¸Þ¼¼Áö
	var defaultMsg = new Array(
		new Array("required", "ÇÊ¼ö ÀÔ·ÂÀÔ´Ï´Ù."),
		new Array("minchar", "ÀÔ·ÂÇÑ ±ÛÀÚ¼ö°¡ Àû½À´Ï´Ù."),
		new Array("maxchar", "ÀÔ·ÂÇÑ ±ÛÀÚ¼ö°¡ ¸¹½À´Ï´Ù."),
		new Array("charlength", "ÀÔ·ÂÇÑ ±ÛÀÚ¼ö°¡ ¸ÂÁö ¾Ê½À´Ï´Ù."),
		new Array("minbyte", "ÀÔ·ÂÇÑ ±ÛÀÚ¼ö°¡ Àû½À´Ï´Ù."),
		new Array("maxbyte", "ÀÔ·ÂÇÑ ±ÛÀÚ¼ö°¡ ¸¹½À´Ï´Ù."),
		new Array("bytelength", "ÀÔ·ÂÇÑ ±ÛÀÚ¼ö°¡ ¸ÂÁö ¾Ê½À´Ï´Ù."),
		new Array("datatype", "µ¥ÀÌÅ¸°¡ À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù."),
		new Array("dataform", "µ¥ÀÌÅ¸°¡ Çü½Ä¿¡ ¸ÂÁö ¾Ê½À´Ï´Ù."),
		new Array("pattern", "µ¥ÀÌÅ¸°¡ Çü½Ä¿¡ ¸ÂÁö ¾Ê½À´Ï´Ù."),
		new Array("selectrequired", "¼±ÅÃÇÏ¼¼¿ä."),
		new Array("minchecked", "¼±ÅÃÇÑ °¹¼ö°¡ Àû½À´Ï´Ù."),
		new Array("maxchecked", "¼±ÅÃÇÑ °¹¼ö°¡ ¸¹½À´Ï´Ù.."),
		new Array("checkedcount", "¼±ÅÃÇÑ °¹¼ö°¡ ¸ÂÁö ¾Ê½À´Ï´Ù."),
		new Array("checkedrequired", "¼±ÅÃÇÏ¼¼¿ä."),
		new Array("limitext", "¾÷·Îµå ÇÒ¼ö ¾ø´Â ÆÄÀÏÀÔ´Ï´Ù.")
	);

	//µ¥ÀÌÅ¸ Å¸ÀÔ 
	var dataType = new Array(
		new Array("1", "no", "0-9"),
		new Array("2", "kr", "¤¡-ÆR"),
		new Array("4", "enl", "a-z"),
		new Array("8", "enu", "A-Z")
	);

	//µ¥ÀÌÅ¸ Çü½Ä
	var dataForm = new Array(
		new Array("phone", "checkPhone"),
		new Array("mobile", "checkMobile"),
		new Array("zip", "checkZip"),
		new Array("ssn", "checkSsn"),
		new Array("email", "checkEmail"),
		new Array("url", "checkUrl")
	);
	
	//¿¤¸®¸ÕÆ®ÀÇ Å¸ÀÔ¿¡ ¸Â´Â ¾îÆ®¸®ºäÆ® ¹è¿­À» ÀúÀåÇÏ´Â ¿ÀºêÁ§Æ®
	function ValidAttribute(type) {	 
		switch (type) {
			case "text":
			case "password" : 
				this.attrList = attributeForText;
				break;
			case "textarea":
				this.attrList = attributeForTextArea;
				break;
			case "select-one":
				this.attrList = attributeForSelect;
				break;
			case "checkbox":
				this.attrList = attributeForCheckbox;
				break;
			case "radio":
				this.attrList = attributeForRadio;
				break;
			case "file":
				this.attrList = attributeForFile;
				break;
			case "button":
			case "submit":
			case "image":
			case "hidden":
			default :
				this.attrList = new Array();
				break;
		}
	}

	//¿¤¸®¸ÕÆ® °´Ã¼¿Í °Ë»çÇÒ ¾îÆ®¸®ºäÆ®¸¦ ÀúÀåÇÏ´Â ¿ÀºêÁ§Æ®
	function CheckElement(ele) {
		this.attr = new Array();
		this.ele = ele;

		this.add = function(func, value) {
			this.attr[this.attr.length] = new Array(func, value);
		}
	}
	
	//¿¤¸®¸ÕÆ®¿¡ ´ëÇÑ À¯È¿¼º °Ë»ç
	function validCheck(ce) {
		var flag = true;
		for (var i = 0; i < ce.attr.length; i++) {
			var func = ce.attr[i][0];
			var arg = ce.attr[i][1];
			var attrVal = "";
			var attrMsg = "";
			
			if (arg.indexOf("!") > -1) {
				attrVal = arg.substring(0, arg.indexOf("!"));
				attrMsg = arg.substring(arg.indexOf("!") + 1);
			} else {
				attrVal = arg;
				attrMsg = "";
			}
			
			if (!eval(func + "(ce.ele, '" + attrVal.trim() + "')")) {
				flag = false;
				func.msg(attrMsg);
				ce.ele.focus();
				break;
			}
		}

		return flag;
	}
	

	//Æû À¯È¿¼º °Ë»ç ±âº» È£Ãâ ÇÔ¼ö
	function NChecker() {
		var args = NChecker.arguments;
		var frm = null;
		if (args.length > 0) {
			frm = args[0];			
		} else {
			frm = event.srcElement;
		}
				
		var elementList = frm.elements;

		for (var i = 0; i < elementList.length; i++) {
			var ele = elementList[i];

			var validAttr = new ValidAttribute(ele.type);

			var attribute = ele.attributes;
				
			var chkAttr = new CheckElement(ele);

			for (var j = 0; j < validAttr.attrList.length; j++) {
				var tmpAttr = attribute.getNamedItem(validAttr.attrList[j][0]);

				if (tmpAttr != null) {
					chkAttr.add(validAttr.attrList[j][1], tmpAttr.nodeValue);
				}
			}

			if (chkAttr.attr.length > 0) {
				if (!validCheck(chkAttr)) {
					return false;
				}
			}
		}
		return true;
	}

	
	//¹®ÀÚ¿­ ºñ±³
	function UDF_equals(val) {
		if (this == val) 
			return true;
		else
			return false;
	}

	//¹®ÀÚ¿­ ¾ÕµÚ °ø¹é Á¦°Å
	function UDF_trim() { return this.replace(/^\s*/ ,"").replace(/\s*$/ ,""); }

	//¹®ÀÚ¿­ ¾Õ °ø¹é Á¦°Å
	function UDF_ltrim() { return this.replace(/^\s*/ ,""); }

	//¹®ÀÚ¿­ µÚ °ø¹é Á¦°Å
	function UDF_rtrim() {return this.replace(/\s*$/ ,""); }

	//Á¤±Ô½Ä ÆÐÅÏ ¸ÅÄ¡
	function UDF_match(pattern) { return pattern.test(this) }
	
	//2¹ÙÀÌÆ® ¹®ÀÚ ±æÀÌ
	function UDF_getByteLength() {
      var str;
      var cnt = 0;
      
      for(var i = 0; i < this.length; i++ ){
         str = this.charAt(i);
      
         if(escape(str).length > 4) cnt += 2; 
         else cnt++;
      }

      return cnt;
   }
	
	//ÆÄÀÏ È®ÀåÀÚ °¡Á®¿À±â
   function UDF_getFileExt() {
		return this.substring(this.lastIndexOf("\.") + 1);
   }
	
   //ÀüÈ­¹øÈ£
	function VF_checkPhone() {
		var pattern = /^0\d{1,2}-\d{3,4}-\d{4}$/;
		
		return this.match(pattern);
	}

	//ÇÚµåÆù ¹øÈ£ 
	function VF_checkMobile() {
		var pattern = /^(010|011|016|017|018|019)-\d{3,4}-\d{4}$/

		return this.match(pattern);
	}

	//ÁÖ¹Î¹øÈ£
	function VF_checkSsn() {
		return true;
	}

	//¿ìÆí¹øÈ£
	function VF_checkZip() {
		var pattern = /^\d{3}-\d{3}$/;

		return this.match(pattern);
	}

	//ÀÌ¸ÞÀÏÁÖ¼Ò
	function VF_checkEmail() {
		var pattern = /^[a-z0-9-]+@[a-z0-9-]+\.[a-z]+(\.[a-z]+)?$/;

		return this.match(pattern);
	}

	//URL
	function VF_checkUrl() {
		var pattern = /^(http:\/\/)?[a-z0-9-]+\.[a-z]+(\.[a-z]+)*$/;

		return this.match(pattern);
	}

	//¸Þ¼¼Áö Ãâ·Â
	function VF_msg(msg) { 
		if (msg.equals("")) {	 //ÇØ´ç ¸Þ¼¼Áö°¡ ¾øÀ»°æ¿ì µðÆúÆ® ¸Þ¼¼Áö Ãâ·Â
			for (var i = 0; i < defaultMsg.length; i++) {
				if (this.equals(defaultMsg[i][0])) {
					alert(defaultMsg[i][1]);
					break;
				}
			}
		} else {
			alert(msg);
		}
	}	
	
	//ÇÊ¼öÀÔ·ÂÇ×¸ñ Ã¼Å©
	function VF_validRequired(ele, attrVal) {	
		if (attrVal.trim().equals("true")) {
			if (ele.value.trim().equals(""))  return false; else return true;
		}
		
		return true;
	}

	//ÀÔ·ÂÇ×¸ñ ¹®ÀÚ¿­ ÃÖ¼Ò±æÀÌ Ã¼Å©
	function VF_validMinChar(ele, attrVal) {	
		if (attrVal.match(/^\d+$/)) {
			if (ele.value.trim().length > 0) {
				if (ele.value.trim().length < parseInt(attrVal)) return false; else return true
			}
		} 

		return true;
	}

	//ÀÔ·ÂÇ×¸ñ ¹®ÀÚ¿­ ÃÖ´ë±æÀÌ Ã¼Å©
	function VF_validMaxChar(ele, attrVal) {	
		if (attrVal.match(/^\d+$/)) {
			if (ele.value.trim().length > 0) {
				if (ele.value.trim().length > parseInt(attrVal)) return false; else return true;
			}
		}

		return true;
	}

	//ÀÔ·ÂÇ×¸ñ ¹®ÀÚ¿­ ±æÀÌ Ã¼Å©
	function VF_validCharLength(ele, attrVal) {	
		if (attrVal.match(/^\d+-\d+$/)) {
			if (ele.value.trim().length > 0) {
				if (parseInt(attrVal.substring(0, attrVal.indexOf("-"))) <= parseInt(attrVal.substring(attrVal.indexOf("-") + 1))) {
					if (ele.value.trim().length < parseInt(attrVal.substring(0, attrVal.indexOf("-"))) || ele.value.trim().length > parseInt(attrVal.substring(attrVal.indexOf("-") + 1))) {
						return false;
					} else {
						return true;
					}
				}
			}
		}

		return true;
	}

	//ÀÔ·ÂÇ×¸ñ ¹®ÀÚ¿­ ÃÖ¼Ò ¹ÙÀÌÆ® Ã¼Å©
	function VF_validMinByte(ele, attrVal) {	
		if (attrVal.match(/^\d+$/)) {
			if (ele.value.trim().length > 0) {
				if (ele.value.trim().getByteLength() < parseInt(attrVal)) return false; else return true;
			}
		}

		return true;
	}

	//ÀÔ·ÂÇ×¸ñ ¹®ÀÚ¿­ ÃÖ´ë¹ÙÀÌÆ® Ã¼Å©
	function VF_validMaxByte(ele, attrVal) {	
		if (attrVal.match(/^\d+$/)) {
			if (ele.value.trim().length > 0) {
				if (ele.value.trim().getByteLength() > parseInt(attrVal)) return false; else return true;
			}
		}

		return true;
	}
	
	//ÀÔ·ÂÇ×¸ñ ¹®ÀÚ¿­ ¹ÙÀÌÆ® Ã¼Å©
	function VF_validByteLength(ele, attrVal) {	
		if (attrVal.match(/^\d+-\d+$/)) {
			if (ele.value.trim().length > 0) {
				if (parseInt(attrVal.substring(0, attrVal.indexOf("-"))) <= parseInt(attrVal.substring(attrVal.indexOf("-") + 1))) {
					if (ele.value.trim().getByteLength() < parseInt(attrVal.substring(0, attrVal.indexOf("-"))) || ele.value.trim().getByteLength() > parseInt(attrVal.substring(attrVal.indexOf("-") + 1))) {
						return false;
					} else {
						return true;
					}
				}
			}
		}

		return true;
	}

	//µ¥ÀÌÅ¸ Å¸ÀÔ Ã¼Å©
	function VF_validDataType(ele, attrVal) {	
		
		var str = "";
		
		for (var i = 0; i < dataType.length; i++) {
			if ((parseInt(attrVal) & parseInt(dataType[i][0])) == parseInt(dataType[i][0])) {
				str += dataType[i][2];
			}
		}

		var pattern = eval("/^[" + str + "]+$/");
		
		if (ele.value.trim().length > 0) {
			if (!str.equals("")) return ele.value.match(pattern);
		}

		return true;
	}
	function VF_validDataType1(ele, attrVal) {	
		var str = "";
		
		for (var i = 0; i < dataType.length; i++) {
			if ((parseInt(attrVal) & parseInt(dataType[i][0])) == parseInt(dataType[i][0])) {
				str += dataType[i][2];
			}
		}

		var pattern = eval("/^[" + str + "]+$/");
		
		if (ele.value.trim().length > 0) {
			if (!str.equals("")) return !(ele.value.match(pattern));
		}

		return false;
	}

	//µ¥ÀÌÅ¸ Çü½Ä Ã¼Å©
	function VF_validDataForm(ele, attrVal) {	
		var func = "";
		for (var i = 0; i < dataForm.length; i++) {
			if (dataForm[i][0].equals(attrVal)) {
				func = dataForm[i][1];
				break;
			}
		}
		
		if (ele.value.trim().length > 0) {
			if (!func.equals("")) return eval("ele.value." + func + "()");
		}

		return true;
	}

	//ÆÐÅÏ Ã¼Å©
	function VF_validPattern(ele, attrVal) {	
		if (ele.value.trim().length > 0) {
			if (!attrVal.equals("")) {
				var pattern = eval(attrVal);

				return ele.value.match(pattern);
			}
		}

		return true;
	}

	//¼¿·ºÆ®¹Ú½º ¼±ÅÃ Ã¼Å©
	function VF_validSelectRequired(ele, attrVal) {
		if (attrVal.equals("true")) {
			if (ele.value.equals("")) return false; else return true;
		}

		return true;
	}

	//Ã¼Å©¹Ú½º ¼±ÅÃ Ã¼Å©(ÃÖ¼Ò°¹¼ö)
	function VF_validMinChecked(ele, attrVal) {
		if (attrVal.match(/^\d+$/)) {
			var f = event.srcElement;

			var flag = false;
			var cnt = 0;

			if (!isNaN(eval("f." + ele.name + ".length"))) {
				for (var i = 0; i < eval("f." + ele.name + ".length"); i++) {
					if (eval("f." + ele.name + "[" + i + "].checked")) {
						cnt++;
					}
				}
			} else {
				if (ele.checked) {
					cnt++;
				}
			}

			if (cnt >= parseInt(attrVal)) return true; else return false;
		}

		return true;
	}

	//Ã¼Å©¹Ú½º ¼±ÅÃ Ã¼Å©(ÃÖ´ë°¹¼ö)
	function VF_validMaxChecked(ele, attrVal) {
		if (attrVal.match(/^\d+$/)) {
			var f = event.srcElement;

			var flag = false;
			var cnt = 0;

			if (!isNaN(eval("f." + ele.name + ".length"))) {
				for (var i = 0; i < eval("f." + ele.name + ".length"); i++) {
					if (eval("f." + ele.name + "[" + i + "].checked")) {
						cnt++;
					}
				}
			} else {
				if (ele.checked) {
					cnt++;
				}
			}

			if (cnt <= parseInt(attrVal)) return true; else return false;
		}

		return true;
	}

	//Ã¼Å©¹Ú½º ¼±ÅÃ Ã¼Å©(°¹¼öÁöÁ¤)
	function VF_validCheckedCount(ele, attrVal) {
		if (attrVal.match(/^\d+-\d+$/)) {
			var f = event.srcElement;

			var flag = false;
			var cnt = 0;

			if (!isNaN(eval("f." + ele.name + ".length"))) {
				for (var i = 0; i < eval("f." + ele.name + ".length"); i++) {
					if (eval("f." + ele.name + "[" + i + "].checked")) {
						cnt++;
					}
				}
			} else {
				if (ele.checked) {
					cnt++;
				}
			}

			if (cnt < parseInt(attrVal.substring(0, attrVal.indexOf("-"))) || cnt > parseInt(attrVal.substring(attrVal.indexOf("-") + 1))) {
				return false;
			} else {
				return true;
			}
		}

		return true;
	}

	//¶óµð¿À¹öÆ° Ã¼Å©
	function VF_validCheckedRequired(ele, attrVal) {
		if (attrVal.equals("true")) {
			var f = event.srcElement;

			var flag = false;
			var cnt = 0;

			if (!isNaN(eval("f." + ele.name + ".length"))) {
				for (var i = 0; i < eval("f." + ele.name + ".length"); i++) {
					if (eval("f." + ele.name + "[" + i + "].checked")) {
						cnt++;
					}
				}
			} else {
				if (ele.checked) {
					cnt++;
				}
			}

			if (cnt >= 1) return true; else return false;
		}

		return true;
	}

	//ÆÄÀÏ È®ÀåÀÚ Á¦ÇÑ Ã¼Å©
	function VF_validLimitExt(ele, attrVal) {
		if (ele.value.trim().length > 0) {
			if (attrVal.match(/^[a-zA-Z0-9]+(\|[a-zA-Z0-9]+)*$/)) {
				var value = ele.value;

				if (value.equals("")) { 
					return true;
				} else {
					var ext = value.getFileExt().toLowerCase();
					var pattern = eval("/^(" + attrVal.toLowerCase() + "){1}$/");
					
					if (ext.match(pattern)) return true; else return false;
				}
			}
		}

		return true;
	}