/** 
 * »ç¿ë¹ý : FormValidator.FormValidation( Æû )
 *
 * Form Element¿¡ Àû¿ëÇÒ Á¤ÀÇ Property
 *		title		: Ç×¸ñÀÇ ÇÑ±ÛÀÌ¸§(¿¡·¯¸Þ½ÃÁö¸¦ º¸¿©ÁÙ¶§ µî) 
 *		pattern		: °Ë»çÇÒ ÆÐÅÏ
 *		required	: ÇÊ¼öÇ×¸ñÀÎÁö ¿©ºÎ¸¦ ³ªÅ¸³»´Â ¼Ó¼º
 *		c_required	: ¼±ÅÃÇÊ¼ö (³»¿ë¿¡ °ªÀÌ ÀÖÀ»¶§)
 *		maxbyte		: maxlength¿Í ´Þ¸® ÇÑ±Û 2±ÛÀÚ´Â 4¹ÙÀÌÆ®·Î ÀÎ½Ä
 *		minbyte		: minlength¿Í ´Þ¸® ÇÑ±Û 2±ÛÀÚ´Â 4¹ÙÀÌÆ®·Î ÀÎ½Ä
 *
 *
 * Æ¯¼ö ÆÐÅÏ °Ë»ç patternÀÇ value
 *		EMail, TelNumber, CellNumber, UserId, IncKorLang, Number, EngOnly, ResNo, BizNo, Domain, Password, ImgFile(jpg,gifÈ®ÀåÀÚ¸¸ Çã¿ë)
 */
FormValidator = {
	Trim:function(str){//ÁÂ¿ì °ø¹éÁ¦°Å
		return str.replace(/\s/g, "");
	},
	RTrim:function(str){//¿ì °ø¹éÁ¦°Å
		return str.replace(/\s+$/, "");
	},
	LTrim:function(str){//ÁÂ °ø¹éÁ¦°Å
		return str.replace(/^\s+/, "");
	},
	HasFinalConsonant:function(str){//ÇÑ±Û Á¶»ç¸¦ ÆÇº°
		var strTemp = str.substr(str.length-1);
		return ((strTemp.charCodeAt(0)-16)%28!=0);
	},
	Bytes:function(str){//¹®ÀÚÀÇ byte¸¦ ¸®ÅÏ
		var len = 0;
		for (j=0; j < str.length; j++){
			var chr = str.charAt(j);
			len += (chr.charCodeAt() > 128) ? 2 : 1;
		}
		return len;
	},
	FormValidation:function(FormElement){
		for (i=0; i<FormElement.elements.length; i++){
			var el = FormElement.elements[i];
			if (el.tagName == "FIELDSET" || el.tagName == "OBJECT" || el.tagName == "EMBEDED") continue;
		
			el.value = FormValidator.RTrim(el.value);
			var minbyte = el.getAttribute("MINBYTE");
			var maxbyte = el.getAttribute("MAXBYTE");
			var opattern = el.getAttribute("PATTERN");
			var match = el.getAttribute("MATCH");
			if ((el.getAttribute("REQUIRED") != null && !el.disabled) || (el.getAttribute("C_REQUIRED") != null && !el.disabled && el.value != "")){//ÇÊ¼öÀÔ·Â Ã¼Å© /** OK **/
				if (el.tagName == "SELECT" && el.selectedIndex == 0) return FormValidator.doError(el,"{name+À»¸¦} ¼±ÅÃÇÏÁö ¾Ê¾Ò½À´Ï´Ù");
				if (el.type == "checkbox" || el.type == "radio"){//radio, checkbox
					var selected=false;
					var objcheck = FormElement.elements[el.getAttribute("NAME")];
					if(objcheck.length){
						var idxchk=-1;
						for(var c=0;c < objcheck.length;c++){
							if(objcheck[c].checked == "1"){
								selected=true;
								break;
							}
						}
					}else{
						if(objcheck.checked == "1"){
							selected=true;
						}
					}
					if(!selected) return FormValidator.doError(el,"{name+À»¸¦} Ã¼Å©ÇÏÁö ¾Ê¾Ò½À´Ï´Ù.");
				}
//				alert(el.value);
				if (el.value == null || el.value == "") return FormValidator.doError(el,"{name+Àº´Â} ÇÊ¼öÀÔ·Â Ç×¸ñÀÔ´Ï´Ù");
			
				if (minbyte != null){//ÃÖ¼Ò ÀÔ·Â ¹ÙÀÌÆ® Ã¼Å©
					var errmsg = "";
					if (FormValidator.Bytes(el.value) < parseInt(minbyte)){
						errmsg = "{name+Àº´Â} ÃÖ¼Ò ÇÑ±Û"+ Math.round(minbyte/2) +"ÀÚ, ¿µ¹®,¼ýÀÚ"+ minbyte +"ÀÚ ÀÌ»ó ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.";
						return FormValidator.doError(el, errmsg);
					}
				}
			
				if (maxbyte != null && el.value != ""){//ÃÖ´ë ÀÔ·Â ¹ÙÀÌÆ® Ã¼Å©
					var errmsg = "";
					var len = 0;
					if (FormValidator.Bytes(el.value) > parseInt(maxbyte)){
						errmsg = "{name+Àº´Â} ÃÖ´ë ÇÑ±Û"+ Math.round(maxbyte/2) +"ÀÚ, ¿µ¹®,¼ýÀÚ"+ maxbyte +"ÀÚ ÀÌÇÏ·Î ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.";
						return FormValidator.doError(el, errmsg);
					}
				}

//				if (match && (el.value != FormElement.elements[match].value)){//ÆÐ½º¿öµå ¿Í ÆÐ½º¿öµåÈ®ÀÎ °úÀÇ °°ÀºÁö Ã¼Å©
//					return FormValidator.doError(el, "{name+ÀÌ°¡} ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù");
//				}

				if (opattern != null && el.value != ""){//ÆÐÅÏÃ¼Å©
					if (!funcs[opattern](el)) return false;
				}
			}
		}
		return true;
	},
	FormValidationAll:function(FormElement){//Æû¾ÈÀÇ ¸ðµç ÇÊµå°Ë»ç
		for (i=0; i<FormElement.elements.length; i++){
			var el = FormElement.elements[i];
			if (el.tagName == "FIELDSET" || el.tagName == "OBJECT" || el.tagName == "EMBEDED") continue;
		
			el.value = FormValidator.RTrim(el.value);
			if (el.tagName == "SELECT" && el.selectedIndex == 0){
				alert("¼±ÅÃÇÏÁö ¾ÊÀº °ªÀÌ ÀÖ½À´Ï´Ù.");
				return false;
			}
			if (el.type == "checkbox" || el.type == "radio"){//radio, checkbox
				var selected=false;
				var objcheck = FormElement.elements[el.getAttribute("NAME")];
				if(objcheck != undefined && objcheck.length){
					var idxchk=-1;
					for(var c=0;c < objcheck.length;c++){
						if(objcheck[c].checked == true){
							selected=true;
							break;
						}
					}
				}else{
					if(objcheck.checked == true){
						selected=true;
					}
				}
				if(!selected){
					alert("Ã¼Å©ÇÏÁö ¾ÊÀº °ªÀÌ ÀÖ½À´Ï´Ù.");
					return false;
				}
			}
			if (el.value == null || el.value == ""){
				alert("ÀÔ·ÂÇÏÁö ¾ÊÀº °ªÀÌ ÀÖ½À´Ï´Ù.");
				return false;
			}
			
		}
		return true;
	},
	isImage:function(el){//¾÷·Îµå ÆÄÀÏÇü½Ä(ÀÌ¹ÌÁö) °Ë»ç
		var pattern = /[\w\W]+\.jpg|gif$/i;
		return (pattern.test(el.value)) ? true : FormValidator.doError(el,"{name+Àº´Â} jpg¿Í gif ÆÄÀÏ¸¸ ¾÷·Îµå ÇÒ ¼ö ÀÖ½À´Ï´Ù.");
	},
	isEmail:function(el){//¸ÞÀÏÇü½Ä °Ë»ç
		var value = el.value;
		var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
		return (pattern.test(value)) ? true : FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
	},
	isUserid:function(el){//¾ÆÀÌµðÇü½Ä °Ë»ç
		var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9]{3,9}$/;
		return (pattern.test(el.value)) ? true : FormValidator.doError(el,"{name+Àº´Â} 4ÀÚÀÌ»ó 12ÀÚ ÀÌÇÏÀÌ¾î¾ß ÇÏ°í,\nÃ¹±ÛÀÚ´Â ¿µ¹® ±×µÚ´Â ¿µ¹®, ¼ýÀÚ¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù");
	},
	isUserpwd:function(el){//ÆÐ½º¿öµåÇü½Ä°Ë»ç
		var pattern = /^[a-zA-Z0-9]{4,8}$/;
		return (pattern.test(el.value)) ? true : FormValidator.doError(el,"{name+Àº´Â} 4ÀÚÀÌ»ó 12ÀÚ ÀÌÇÏÀÌ¾î¾ß ÇÏ°í,\n¿µ¹®, ¼ýÀÚ¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù");
	},
	hasHangul:function(el){//ÇÑ±ÛÃ¼Å© /** OK **/
		var pattern = /[°¡-ÆR]/;
		return (pattern.test(el.value))? true : FormValidator.doError(el,"{name+Àº´Â} ¹Ýµå½Ã ÇÑ±Û·Î ÀÔ·ÂÇÏ½Ê½Ã¿À.");
	},
	alphaOnly:function(el){//¿µ¹®Ã¼Å©
		var pattern = /^[a-zA-Z\s]+$/;
		return (pattern.test(el.value)) ? true : FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
	},
	isNumeric:function(el, value){//¼ýÀÚÃ¼Å© /** OK **/
		var pattern = /^[0-9]+$/;
		var num = value ? value : el.value;
		return (pattern.test(num)) ? true : FormValidator.doError(el,"{name+Àº´Â} ¹Ýµå½Ã ¼ýÀÚ·Î¸¸ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù");
	},
	isJumin:function(el,value){//ÁÖ¹Î¹øÈ£Ã¼Å©
		var pattern = /^([0-9]{6})-?([0-9]{7})$/;
		var num = value ? value : el.value;

		if (!pattern.test(num)) return FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
		
		num = RegExp.$1 + RegExp.$2;
		var digit = 0;
		var digset = "234567892345";

		for (var n=0; n<12; n++){
			digit += parseInt(num.charAt(n),10) * parseInt(digset.charAt(n), 10);
		}

		digit = digit % 11;
		digit = 11 - digit;
		digit = digit % 10;

		if (digit != parseInt(num.charAt(12),10)) return FormValidator.doError(el, "{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
		return true;
	},
	isBizNo:function(el, value){//»ç¾÷ÀÚ¹øÈ£ Ã¼Å©
		var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
		var num = value ? value : el.value;

		if (!pattern.test(num)) return FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
		
		num = RegExp.$1 + RegExp.$2 + RegExp.$3;

		var chkRule = "137137135";
		var strCorpNum = num;
		var step1, step2, step3, step4, step5, step6, step7;

		step1 = 0;

		for (i=0; i<7; i++){
			step1 = step1 + (strCorpNum.substring(i, i+1) * chkRule.substring(i, i+1));
		}

		step2 = step1 % 10;
		step3 = (strCorpNum.substring(7, 8) * chkRule.substring(7, 8)) % 10;
		step4 = strCorpNum.substring(8, 9) * chkRule.substring(8, 9);
		step5 = Math.round(step4 / 10 - 0.5);
		step6 = step4 - (step5 * 10);
		step7 = (10 - ((step2 + step3 + step5 + step6) % 10)) % 10;

		if (strCorpNum.substring(9, 10) != step7){	// °á°ú ºñ±³ ÆÇ´Ü
			return FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
		}
		return true;
	},
	isHPhone:function(el, value){//ÇÚµåÆù¹øÈ£Ã¼Å©
		var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
		var num = value ? value : el.value;
		if (pattern.exec(num)){
			return true;
		}else{
			return FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
		}
	},
	isPhone:function(el,value){//ÀüÈ­¹øÈ£Ã¼Å©
		var pattern = /^([0-9]{2,4})-?([0-9]{3,4})/;
		var num = value ? value : el.value;
		if (pattern.exec(num)){
			return true;
		}else{
			return FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
		}
	},
	isDomain:function(el,value){//µµ¸ÞÀÎ ¸µÅ© urlÃ¼Å©
		var value = value ? value : el.value;

		if (value.indexOf("http://") > -1){
			return FormValidator.doError(el,"{name+Àº´Â} 'http://' ºÎºÐÀº »©°í ÀÔ·ÂÇÏ½Ê½Ã¿À.");
		}

		var pattern = new RegExp("^(http://)?([°¡-Èþa-zA-Z0-9-\.]+\.[a-zA-Z]{2,3}$)","i");

		if (pattern.test(value)){
			el.value = RegExp.$2;
			return true;
		}else{
			return FormValidator.doError(el,"{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù");
		}
	},
	checkKor:function(str, tail){//±ÛÀÚ Á¾¼º À¯¹«
		return (FormValidator.HasFinalConsonant(str)) ? tail.substring(0,1) : tail.substring(1,2);
	},
	doError:function(el, type, action){
		var pattern = /{([a-zA-Z0-9_]+)\+?([°¡-Èþ]{2})?}/;
		var name = (hname = el.getAttribute("title")) ? hname : el.getAttribute("NAME");
		pattern.exec(type);
		var tail = (RegExp.$2) ? FormValidator.checkKor(eval(RegExp.$1),RegExp.$2) : "";
		alert(type.replace(pattern,eval(RegExp.$1) + tail));
		
		if (action == "sel") el.select();
		else if (action == "del") el.value = "";
		if(el.type != "hidden") el.focus();
		return false;
	}
};
window.funcs = new Array();
funcs['EMail'] = FormValidator.isEmail;
funcs['TelNumber'] = FormValidator.isPhone;
funcs['CellNumber'] = FormValidator.isHPhone;
funcs['UserId'] = FormValidator.isUserid;
funcs['IncKorLang'] = FormValidator.hasHangul;
funcs['Number'] = FormValidator.isNumeric;
funcs['EngOnly'] = FormValidator.alphaOnly;
funcs['ResNo'] = FormValidator.isJumin;
funcs['BizNo'] = FormValidator.isBizNo;
funcs['Domain'] = FormValidator.isDomain;
funcs['ImgFile'] = FormValidator.isImage;
funcs['Password'] = FormValidator.isUserpwd;
