/*********************************************
* ÆÄÀÏ¸í: lib.validate.js
* ±â´É: À¯¿¬ÇÑ ÀÚµ¿ Æû °Ë»ç±â
* ¸¸µçÀÌ: °ÅÄ£¸¶·ç <comfuture@maniacamp.com>
* ³¯Â¥: 2002-10-01
* == change log ==
* 2003-10-02 ¿©·¯Ä­À¸·Î ³ª´²Áø Ç×¸ñ¿¡ ´ëÇÑ °Ë»ç±â´É Ãß°¡
* 2003-10-02 ÆÐ½º¿öµåµî µÎ°³ Ç×¸ñ¿¡ ´ëÇÑ ºñ±³ ±â´É Ãß°¡
**********************************************/
/*********************************************
* ¼öÁ¤ÀÚ: ±èÁÖÇü
* ³¯Â¥: 2006-03-07
* == change log ==
* 2006-03-07 º¯¼ö¸í ¼öÁ¤
* 2006-03-07 
**********************************************/

/// ¿¡·¯¸Þ½ÃÁö Æ÷¸ä Á¤ÀÇ ///
var NO_BLANK = "{name+Àº´Â} ÇÊ¼öÇ×¸ñÀÔ´Ï´Ù.";
var NOT_VALID = "{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù.";
var NOT_MATCH = "{name+ÀÌ°¡} ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.";
// var TOO_LONG = "{name}ÀÇ ±æÀÌ°¡ ÃÊ°úµÇ¾ú½À´Ï´Ù. (ÃÖ´ë {maxbyte}¹ÙÀÌÆ®)";

/// ½ºÆ®¸µ °´Ã¼¿¡ ¸Þ¼Òµå Ãß°¡ ///
String.prototype.trim = function(strArg) { 
	strArg = this != window ? this : strArg; 
	return strArg.replace(/^\s+/g,'').replace(/\s+$/g,''); 
}

String.prototype.hasFinalConsonant = function(strArg) {
	strArg = this != window ? this : strArg; 
	var strTemp = strArg.substr(strArg.length - 1);
	return ((strTemp.charCodeAt(0) - 16) % 28 != 0);
}

String.prototype.bytes = function(strArg) {
	strArg = this != window ? this : strArg;
	var intLen = 0;
	for(var i = 0; i < strArg.length; i++) {
		var chrOne = strArg.charAt(i);
		intLen += (chrOne.charCodeAt() > 128) ? 2 : 1
	}
	return intLen;
}

function validate(frmArg) {
	for (var intX = 0; intX < frmArg.elements.length; intX++ ) {
		var elmOne = frmArg.elements[intX];
		if (elmOne.tagName == "FIELDSET") continue;
		elmOne.setAttribute("VALUE", elmOne.getAttribute("VALUE").trim());

		var strMinByte = elmOne.getAttribute("MINBYTE");
		var strMaxByte = elmOne.getAttribute("MAXBYTE");
		var strOption = elmOne.getAttribute("OPTION");
		var strMatch = elmOne.getAttribute("MATCH");
		var strGlue = elmOne.getAttribute('GLUE');

		if (elmOne.getAttribute("REQUIRED") != null) {
			if (elmOne.getAttribute("VALUE") == null || elmOne.getAttribute("VALUE") == "") return doError(elmOne, NO_BLANK);
		}

		if (strMinByte != null)
			if (elmOne.getAttribute("VALUE").bytes() < parseInt(strMinByte))
				return doError(elmOne, "{name+Àº´Â} ÃÖ¼Ò "+strMinByte+"¹ÙÀÌÆ® ÀÌ»ó ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.");

		if (strMaxByte != null && elmOne.getAttribute("VALUE") != "")
			if (elmOne.getAttribute("VALUE").bytes() > parseInt(strMaxByte))
				return doError(elmOne, "{name}ÀÇ ±æÀÌ°¡ ÃÊ°úµÇ¾ú½À´Ï´Ù. (ÃÖ´ë "+strMaxByte+"¹ÙÀÌÆ®)");

		if (strMatch && (elmOne.getAttribute("VALUE") != frmArg.elements[strMatch].getAttribute("VALUE")))
			return doError(elmOne, NOT_MATCH);

		if (strOption != null && elmOne.getAttribute("VALUE") != "") {
			if (elmOne.getAttribute('SPAN') != null) {
				var strValueArray = new Array();

				for (var intY = 0; intY < elmOne.getAttribute('SPAN'); intY++) {
					strValueArray[intY] = frmArg.elements[intX+intY].getAttribute("VALUE");
				}

				if (!funcs[strOption](elmOne,strValueArray.join(strGlue == null ? '' : strGlue))) return false;
			} else {
				if (!funcs[strOption](elmOne)) return false;
			}
		}
	}
	return true;
}

function josa(strArg, strTail) {
	return (strArg.hasFinalConsonant()) ? strTail.substring(0, 1) : strTail.substring(1, 2);
}

function doError(elmArg, strType, strAction) {
	var pattern = /{([a-zA-Z0-9_]+)\+?([°¡-Èþ]{2})?}/;
	var name = (hname = elmArg.getAttribute("HNAME")) ? hname : elmArg.getAttribute("NAME");
	pattern.exec(strType);
	var strTail = (RegExp.$2) ? josa(eval(RegExp.$1),RegExp.$2) : "";
	alert(strType.replace(pattern,eval(RegExp.$1) + strTail));
	if (strAction == "sel") {
		elmArg.select();
	} else if (strAction == "del")	{
		elmArg.setAttribute("VALUE", "");
	}
	if (elmArg.getAttribute("TYPE") != "hidden") 
		if (elmArg.length > 0) elmArg[0].focus();
		else elmArg.focus();

	return false;
}	

/// Æ¯¼ö ÆÐÅÏ °Ë»ç ÇÔ¼ö ¸ÅÇÎ ///
var funcs = new Array();
funcs['email'] = isValidEmail;
funcs['phone'] = isValidPhone;
funcs['userid'] = isValidUserID;
funcs['userpw'] = isValidUserPW
funcs['hangul'] = hasHangul;
funcs['number'] = isNumeric;
funcs['engonly'] = alphaOnly;
funcs['jumin'] = isValidJumin;
funcs['bizno'] = isValidBizNo;

/// ÆÐÅÏ °Ë»ç ÇÔ¼öµé ///
function isValidEmail(elmArg, strValue) {
	var strValue = strValue ? strValue : elmArg.getAttribute("VALUE");
	var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
	return (pattern.test(strValue)) ? true : doError(elmArg,NOT_VALID);
}

function isValidUserID(elmArg) {
	var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_]{4,11}$/;
	return (pattern.test(elmArg.getAttribute("VALUE"))) ? true : doError(elmArg,"{name+Àº´Â} 5ÀÚÀÌ»ó 12ÀÚ ÀÌÇÏÀÌ¾î¾ß ÇÏ°í,\n ¿µ¹®,¼ýÀÚ, _ ¹®ÀÚ¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.");
}

function isValidUserPW(elmArg) {
	var intByte = elmArg.getAttribute("VALUE").bytes();
	return (intByte >= 6 && intByte <= 12) ? true : doError(elmArg,"{name+Àº´Â} 6ÀÚÀÌ»ó 12ÀÚ ÀÌÇÏÀÌ¾î¾ß ÇÕ´Ï´Ù.");
}

function hasHangul(elmArg) {
	var pattern = /[°¡-Èþ]/;
	return (pattern.test(elmArg.getAttribute("VALUE"))) ? true : doError(elmArg,"{name+Àº´Â} ¹Ýµå½Ã ÇÑ±ÛÀ» Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù.");
}

function alphaOnly(elmArg) {
	var pattern = /^[a-zA-Z]+$/;
	return (pattern.test(elmArg.getAttribute("VALUE"))) ? true : doError(elmArg,NOT_VALID);
}

function isNumeric(elmArg) {
	var pattern = /^[0-9]+$/;
	return (pattern.test(elmArg.getAttribute("VALUE"))) ? true : doError(elmArg,"{name+Àº´Â} ¹Ýµå½Ã ¼ýÀÚ·Î¸¸ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.");
}

function isValidJumin(elmArg, strValue) {
    var pattern = /^([0-9]{6})-?([0-9]{7})$/; 
	var strNum = strValue ? strValue : elmArg.getAttribute("VALUE");

    if (!pattern.test(strNum)) return doError(elmArg,NOT_VALID); 
    strNum = RegExp.$1 + RegExp.$2;

	var intSum = 0;
	var intLast = strNum.charCodeAt(12) - 0x30;
	var strBases = "234567892345";
	for (var i=0; i<12; i++) {
		if (isNaN(strNum.substring(i,i+1))) return doError(elmArg,NOT_VALID);
		intSum += (strNum.charCodeAt(i) - 0x30) * (strBases.charCodeAt(i) - 0x30);
	}
	var intMod = intSum % 11;
	return ((11 - intMod) % 10 == intLast) ? true : doError(elmArg,NOT_VALID);
}

function isValidBizNo(elmArg, strValue) { 
    var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/; 
	var strNum = strValue ? strValue : elmArg.getAttribute("VALUE");
    if (!pattern.test(strNum)) return doError(elmArg,NOT_VALID); 
    strNum = RegExp.$1 + RegExp.$2 + RegExp.$3;
    var intVal = 0; 
    for (var i=0; i<8; i++) { 
        var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp  == 1 ) ? 3 : 7); 
        intVal += (parseFloat(strNum.substring(i,i+1)) * cKeyNum) % 10; 
    } 
    var intTemp = parseFloat(strNum.substring(i,i+1)) * 5 + '0'; 
    intVal += parseFloat(intTemp.substring(0,1)) + parseFloat(intTemp.substring(1,2)); 
    return (parseInt(strNum.substring(9,10)) == 10-(intVal % 10)%10) ? true : doError(elmArg,NOT_VALID); 
}

function isValidPhone(elmArg, strValue) {
	var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
	var strNum = strValue ? strValue : elmArg.getAttribute("VALUE");
	if (pattern.exec(strNum)) {
		if(RegExp.$1 == "010" || RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019") {
			if (!elmArg.getAttribute('SPAN')) elmArg.setAttribute("VALUE", RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3);
		}
		return true;
	} else {
		return doError(elmArg,NOT_VALID);
	}
}



