/**
 * Title : frm.js
 * Description : ÀÔ·Â°ªÀÇ °ËÁõ
 *
 * @Author gggl.ko / kojaepil@easymedia.net
 * @Create 2008-04-04
 * @Update
 */

/*
 * 2008-04-04 °³¹ß³ëÆ®
 */
 /*

1. ¸Þ½ÃÁö¸¦ °Ë¼ö Å¸ÀÔº°·Î ÁöÁ¤ÇÒ ¼ö ÀÖ°Ô ÇÔ.
2. ¸Þ½ÃÁö ´ë½Å ÇÔ¼ö½ÇÇà°¡´ÉÇÔ.
3. Ãß°¡ È®ÀåÀÇ ¿ëÀÌ¼ºÀ» ÃÖ´ëÇÑ °í·Á
4. ÀÔ·Â°ª °ËÁõÀº º°µµÀÇ ÇÔ¼ö·Î »¬¼öµµ ÀÖÀ¸³ª, ÆûÀüÃ¼ °Ë»ç»Ó¸¸¾Æ´Ï¶ó °³º°°³Ã¼µµ °Ë»ç°¡ µÇ¹Ç·Î »©´Â°ÍÀº Å« ÀÇ¹Ì¾øÀ½.
5. ¿ÀÈ÷·Á ÄÚµå Çü»ó°ü¸®¸¦ À§ÇØ, º°µµ·Î »©Áö ¾ÊÀ½
6. ÀÔ·Â°ª °ËÁõÀº º°µµÀÇ ÇÔ¼ö·Î »¬¼öµµ ÀÖÀ½.
7. ¸Þ¸ð¸® Á¡À¯¿¡ °üÇØ¼­´Â Æ¯º°ÇÑ ¹®Á¦ ¿¹»óµÇÁö ¾ÊÀ¸³ª, °í·ÁÇØ¾ßÇÔ
 */


/**
*
* @param Form Object
* @return boolean
*/
function chk(frm) {
	
	var checker = new FrmChk(frm);	
	return checker.go();
}

// ------------------------------------------- // ÀÔ·Â°ª °ËÁõ prototype ------------------------------------------------------------------------

FrmChk = function(frm) {

	// validate Å¸ÀÔ
	this.validate = Array("required","equal","minbyte","email","phone","ext");

    //define error message
	this.DE_errMsg = {
	   common				: "ÀÔ·ÂÇÏ½Å ³»¿ëÀÌ ±ÔÄ¢¿¡ ¾î±ß³³´Ï´Ù.\n±ÔÄ¢¿¡ ¾î±ß³ª´Â ³»¿ëÀ» ¹Ù·ÎÀâ¾ÆÁÖ¼¼¿ä."
	   ,required				: "°ªÀÌ ÀÔ·ÂµÇÁö ¾Ê¾Ò½À´Ï´Ù."
	  , equal					: "ÀÔ·Â°ªÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù."
	  , invalid				: "ÀÔ·Â°ªÀÌ Çü½Ä¿¡ ¹þ¾î³³´Ï´Ù."
	  , minbyte				: "ÀÔ·Â°ªÀÇ ±æÀÌ°¡ {minbyte}ÀÚ(¿µ¹®±âÁØ) ÀÌ»óÀÌ¾î¾ß ÇÕ´Ï´Ù."
	  , maxbyte				: "ÀÔ·Â°ªÀÇ ±æÀÌ°¡ {maxbyte}ÀÚ(¿µ¹®±âÁØ)¸¦ ÃÊ°úÇÒ ¼ö ¾ø½À´Ï´Ù."
	  , ext					: "Ã·ºÎÇÑ ÆÄÀÏÀº {ext} Å¸ÀÔÀÌ¿©¾ß ÇÕ´Ï´Ù."
	}

	this.chkPrototype;
	this.errMsg;	
	this.frm = frm;		
	this.obj = {
		Rtype : ""
		,Rvalue : ""
	};

	// ¿¡·¯¿©ºÎ ÇÃ·¡±×
	this.err = false;

	// ÇöÀç °Ë»ç Å¸ÀÔ
	this.chkPrototype = "";
	this.chkAttVal = "";
}

FrmChk.prototype.go = function() {
	
	// ÆûÀÌ ¾Æ´Ò°æ¿ì °³º°°³Ã¼¼³Á¤
	if (this.frm == null || this.frm.tagName.toLowerCase() != "form") {
		var i2 = 1;
	} else {
		var i2 = this.frm.elements.length;
	}
	
    for (var i = 0; i < i2; i++) {

				// °Ë»ç °³Ã¼ ÃÊ±âÈ­
				this.init(i);
				
				// skip
				if ( this.obj .name == "" || this.obj == null || this.obj .tagName.toLowerCase() == "fieldset" || this.obj .tagName.toLowerCase() == "object") {	
						
						continue;
				}
				
				var sucessChk = false;
				
				//
				// validate
				//
				for (var j=0; j < this.validate.length; j++) {
												
						// init
						var chk = this.chk_init(this.validate[j]);
						
						// ÆÄÀÏÀÎ°æ¿ì´Â ¹«Á¶°Ç °Ë»ç
						if (chk == false || (this.obj.Rtype == "file" && this.validate[j] == "ext")) {						
								
								if (eval("this."+this.validate[j]+"()") == false) {
										
										this.errExec();
										return false;
								}
						}
				}
				
				//°³º° ¿ÀºêÁ§Æ® true
				// success  ¾îÆ®¸®ºäÆ®°¡ ÀÖ´Â°æ¿ì, ½ÇÇàÇÑ´Ù. - ÆÄÀÏÀÎ °æ¿ì´Â °ªÀÌ ÀÖ´Â°æ¿ì¸¸
				if ((this.obj.Rtype == "file" && this.obj.Rvalue != "") || this.obj.Rtype != "file") {
						if (this.obj.getAttribute("success")) {	
								try {
										eval(this.obj.getAttribute("success"));
								} catch (e) {				
										alert(e.message);
								}
						}
				}
	}
	
	return true;
}


/**
* °³Ã¼º° ÃÊ±âÈ­
*
*	ÇöÀç ¹æ¹ýÀº attribute="¾îÂ¼°í:±×·¯³Ä" ÀÏ¶§, : ¸¦ ±¸ºÐÀÚ·Î ÇÏ¿© ÆÄ½ÌÇØ¼­ ¹è¿­[1] ÀÌ ¿¡·¯¸Þ½ÃÁö·Î ±ÔÁ¤ÇÑ´Ù.
*	ÀÌ¹æ¹ýÀº º°·ÎÀÎµ¥ ÁÁÀº ¹æ¹ý¾ø³ª?
*
*/
FrmChk.prototype.init = function (i) {

		// º¯¼öÃÊ±âÈ­
		this.errMsg = "";
		
		// ÆûÀÎÁö ´ÜÀÏ°³Ã¼ÀÎÁö ±¸ºÐÇÏ¿© ÇÒ´ç
		if (this.frm.tagName.toLowerCase() == "form") {
				this.obj = this.frm.elements[i];
		} else {
				this.obj = this.frm;
		}

		// exec ¾îÆ®¸®ºäÆ®°¡ ÀÖ´Â°æ¿ì, ½ÇÇàÇÑ´Ù.
		if (this.obj.getAttribute("exec")) {		
				try {								
						eval(this.obj.getAttribute("exec"));
				} catch (e) {				
						alert(e.message);
				}
		}
		

		// ±âº»¼³Á¤
		if (this.obj.type == "radio" || this.obj.type == "checkbox") {			
				this.obj.Rtype = "check";
		} else if (this.obj.type == "file") {
				this.obj.Rtype  = "file";
		} else if (this.obj.tagName == "select") {
				this.obj.Rtype  = "select";
		} else {
				this.obj.Rtype  = "text";
		}
		
		// Å¸ÀÔ¿¡ µû¸¥ °ª ÇÒ´ç
		this.obj.Rvalue = "";

			switch (this.obj.Rtype) {

						case "file": case "text":
							
							this.obj.Rvalue = this.obj.value;
						
						break;
						case "select":
							if (this.obj[this.obj.selectedIndex].value == null || this.obj[this.obj.selectedIndex].value == "") {
								this.obj.Rvalue = "";	
							} else {
								this.obj.Rvalue = this.obj[this.obj.selectedIndex].value;	
							}
						break;
						case "check":

							var elCheck = this.frm.elements[this.obj.name];			
						
							if (isNaN(elCheck.length) == true) {

									if (elCheck.checked == true) {										
											this.obj.Rvalue = this.obj.value;
									} 

							} else {
									for (var j = 0; j < elCheck.length; j++) {
										if (elCheck[j].checked == true) {

												if (this.obj.Rvalue == "") {
														this.obj.Rvalue = elCheck[j].value;
												} else {
														this.obj.Rvalue = this.obj.Rvalue + "," + elCheck[j].value;
												}											
										}

									}
									
							}
						break;
			}
}	

/**
* ¿¡·¯¸ðµå ½ÇÇà - Â÷ÈÄ ¿Ü±¹»çÀÌÆ®µîÀÇ ±¸Ãà½Ã ¸Þ½ÃÁö alert °¡ ¾Æ´Ñ ¸Þ½ÃÁö print °í·ÁÇÏ¿© º°µµÀÇ prototypeÀ¸·Î »ý¼ºÇÔ.
*
* @param 
* @return private
*/
FrmChk.prototype.errExec = function () {

						// false ¾îÆ®¸®ºäÆ®°¡ ÀÖ´Â°æ¿ì, ½ÇÇàÇÑ´Ù.
						if (this.obj.getAttribute("fail")) {				
								try {
										eval(this.obj.getAttribute("fail"));
								} catch (e) {				
										alert(e.message);
								}
						}
						
						this.setErrMsg();
						
						if (this.errMsg != "") {
								alert(this.errMsg);
						} 
						
						if (this.obj.getAttribute("delete") != null) {
										this.obj.value = "";
						}

						if (this.obj.getAttribute("select") != null) {
							this.obj.select();
						}

						if (this.obj.getAttribute("nofocus") == null) {
							this.obj.focus();						
						}
}

/**
* ¿¡·¯¸Þ½ÃÁö ÇÒ´ç
*
* @param 
* @return private
*/
FrmChk.prototype.setErrMsg = function () {
					
					var pattern = /\{([a-zA-Z0-9_]+)\}/i;
						
					if (this.obj.getAttribute(this.chkPrototype) !=  null) {
										
										// ¿¡·¯¸Þ½ÃÁö ¹× ½ÇÁ¦ ¼Ó¼º°ªºÎ¿©
										var Arr = this.obj.getAttribute(this.chkPrototype).split(":",2);
										
										if (Arr[1] != undefined) {
												this.errMsg  = Arr[1];
										} else {

												// µÎ°¡Áö Å¸ÀÔÀ¸·Î ³ª´¶´Ù. 1. minbyte="4" or require="zz"												
												if (this.chkPrototype == "minbyte" || this.chkPrototype == "ext") {
														
														this.errMsg = this.DE_errMsg[this.chkPrototype];

												} else {

														if (this.obj.getAttribute(this.chkPrototype) != "") {
														
														// ÇÔ¼öÀÏ °æ¿ì ÇØ´ç ÇÔ¼ö¸¦ ½ÇÇàÇØÁØ´Ù.
														try {
																eval(this.obj.getAttribute(this.chkPrototype));														
														} catch (e) {
																this.errMsg = this.obj.getAttribute(this.chkPrototype);	
														}

														} else {
																//
																this.errMsg = this.DE_errMsg[this.chkPrototype];		
														}												

												}
										}
										
					} else {
						
							this.errMsg = this.DE_errMsg[this.chkPrototype];
					}

					if (pattern.test(this.errMsg) == true) {
								while (pattern.exec(this.errMsg)) this.errMsg = this.errMsg.replace(pattern, this.obj.getAttribute(RegExp.$1));
					}
}



/**
* °ËÁõ±â´É Àü ÃÊ±âÈ­ (°ËÁõ Å¸ÀÔº°·Î)
*
* @param 
* @return private
*/
FrmChk.prototype.chk_init = function(t) {
		
		this.errMsg = "";
		this.chkAttVal = "";

		this.chkPrototype = t;		
		
		if (this.obj.getAttribute(t) == null) {						
				return true;
		}	else {
				
				if (this.obj.getAttribute(t) !=  null) {
						
						// ¿¡·¯¸Þ½ÃÁö ¹× ½ÇÁ¦ ¼Ó¼º°ªºÎ¿©
						var Arr = this.obj.getAttribute(t).split(":",2);
						
						if (Arr[1] != undefined) {								
								this.chkAttVal  = Arr[0];
						} else {								
								this.chkAttVal  = this.obj.getAttribute(this.chkPrototype);
						}
				}

				return false;
		}
}

// ------------------------------------------- // ÀÔ·Â°ª °ËÁõ prototype ------------------------------------------------------------------------

/**
* required °ËÁõ (ºó°ªÃ¼Å©) 
* @param 
* @return boolean
*/
FrmChk.prototype.required = function() {
								
				
								if (this.obj.Rvalue == "") {						
										return false;	
								} else {
										return true ;
								}

}


/**
* equal °ËÁõ (°°ÀºÁö ¾È°°ÀºÁö) 
* @param 
* @return boolean
*/
FrmChk.prototype.equal = function() {


				if (this.obj.Rvalue != this.chkAttVal) {
						return false;	
				} else {
						return true ;
				}
}	

/**
* ÃÖ´ë°ª
* @param 
* @return boolean
*/
FrmChk.prototype.minbyte = function() {
			
				var len = this.chkAttVal;
				
				if (isNaN(len) ==  true) {
						return false;
				}

			
				if (this.obj.Rvalue.length < len) {
						return false;						
				}
}

/**
* ÃÖ¼Ò°ª
* @param 
* @return boolean
*/
FrmChk.prototype.maxbyte = function() {
				

}


/**
* ÀüÈ­¹øÈ£
* @param 
* @return boolean
*/
FrmChk.prototype.phone = function() {

				var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
				
				if (pattern.exec(this.obj.Rvalue)) {
						if(RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019") {
							return true;
						} else {
							return false;	
						}										
				} else {
						return false;
				}
}


/**
* ¼ýÀÚ¸¸ÀÔ·Â Ã¼Å©
* @param 
* @return boolean
*/
FrmChk.prototype.number = function() {

				var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
		
				if (pattern.exec(this.obj.Rvalue)) {
						return true;										
				} else {
						return false;
				}
}


FrmChk.prototype.email = function() {
						
				var val = this.obj.Rvalue;

				//
				if (this.obj.getAttribute("implode") != "") {
						
						var addV = this.obj.getAttribute("implode");
					
						if (addV != null && eval("this.frm."+addV) != undefined && eval("this.frm."+addV).value) {
								val = this.obj.Rvalue + "@" + eval("this.frm."+addV).value;
						}
				}
														
				var pattern = /^[_a-zA-Z0-9-\.\_]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
				return (pattern.test(val)) ? true : false;
}

/**
* ÆÄÀÏÅ¸ÀÔÃ¼Å©
* @param 
* @return boolean
*/
FrmChk.prototype.ext = function() {
				
				/* ----------------------------------------------------------------- */
				var notExt = Array("php","jsp","asp","exe");
				
				for (var i=0; i<notExt.length ;i++ ) {
						
						if (this.obj.Rvalue.toLowerCase().indexOf("."+notExt[i]) != -1) {
								return false;
								break;
						}
				}
				
				if (this.obj.Rvalue == "" || this.chkAttVal == "") {
						//±Ô¾àÁ¶°ÇÀ» ¹þ¾î³­ true ÀÌ¹Ç·Î
						
						return true;
				} else {
						
						/* ----------------------------------------------------------------- */

						var execExtArr;
						
						var ext = {
								"img" : Array("bmp","jpg","jpeg","gif","scr","jp2","png","wmf","pic","swf")
								,"aud" : Array("wma","mp2","mp3","wav","mid","cda","asx","ogg")
								,"mov" : Array("avi","mpg","mpeg","asf","wmv","flv","mov","m3u")
								,"doc" : Array("txt","doc","hwp","pdf","htm","html","ppt","gul","url","xml")
						}

						if (this.chkAttVal == "image") {
								execExtArr = ext['img'];
						} else if (this.chkAttVal == "audio") {
								execExtArr = ext['aud'];
						} else if (this.chkAttVal == "movie") {
								execExtArr = ext['mov'];
						} else if (this.chkAttVal == "document") {
								execExtArr = ext['doc'];
						} else if(this.chkAttVal != undefined && this.chkAttVal != "") {
								execExtArr = this.chkAttVal.split(",");
						} 
						alert(execExtArr.length);
						
						for (var j=0;j < execExtArr.length; j++) {	
									
									if (this.obj.Rvalue.indexOf("."+execExtArr[j]) != -1 ) {
										return true;
										break;
									}	
						}
						
						return false;
				}

				return true;
}

/**
* ¿µ¹®¸¸ÀÔ·Â Ã¼Å©
* @param 
* @return boolean
*/

/**
* ¿µ¹®+¼ýÀÚ¸¸ ÀÔ·Â Ã¼Å©
* @param 
* @return boolean
*/

/**
* ¾ÆÀÌµð Ã¼Å©
* @param 
* @return boolean
*/

/**
* ÆÐ½º¿öµå Ã¼Å©
* @param 
* @return boolean
*/

/**
* ÆÐ½º¿öµå Ã¼Å©
* @param 
* @return boolean
*/

/**
* ÀÌ¸ÞÀÏÃ¼Å©
* @param 
* @return boolean
*/





/**
* ÆÄÀÏ¸í Ã¼Å©
* @param 
* @return boolean
*/

/**
* ÁÖ¹Î¹øÈ£ Ã¼Å©
* @param 
* @return boolean
*/

// ------------------------------------------- ÀÔ·Â°ª °ËÁõ prototype // ------------------------------------------------------------------------


/* attruibute comment */
/*

//success
fail = °ËÁõ½ÇÆÐ½Ã ½ÇÇàÄÚµå
chk = °ËÁõ½Ã¸¶´Ù ½ÇÇàÄÚµå

// µ¿ÀÏ Æû³»ÀÇ email2 ¿Í ÇÕÃÄ¼­ ÇÔ.
implode="email2"

*/