/**
* project: lib.validate.js ver 0.7.0
* description: Æû Ã¼Å©, °ª Ç¥ÁØÈ­
* author: jstoy project
* date: 2004-03-10
*
* 2004-03-10 ver 0.0.1
* 2004-04-21 ver 0.1.0 - lainTT (¿¡·¯¸ðµå¿¡ µû¸¥ ºÎÇÏÃÖ¼ÒÈ­, trim Àç±¸¼º)
* 2004-04-23 ver 0.1.1 - lainTT (Ã¼Å©¹Ú½º Ä«¿îÆ® Ã¼Å©[mincheck, maxcheck] Ãß°¡)
* 2004-05-19           - ÇÏ´Ã¾ÆºÎÁö (»ç¿ëÀÚ Ã¼Å©ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤, ³»ºÎ Ã¼Å©ÇÔ¼ö¸í ±ÔÄ¢ Àû¿ë func_¿É¼Ç¸í)
* 2004-05-21 ver 0.2.0
* 2004-09-06 ver 0.6.0 - jstoy (setCheckFields, setForm, setFunc, setParam, delParam method Ãß°¡,  option map ÀçµµÀÔ..)
* 2004-09-30 ver 0.6.1 - Tenshi (disabled µÇ¾îÀÖ´Â °³Ã¼´Â Ã¼Å©½Ã Á¦¿Ü)
* 2004-10-15           - Tenshi (multi select ¿¡¼­ ¼±ÅÃµÈ °ªÀÌ ¾øÀ» ¶§ÀÇ ¿¡·¯[selectedIndex == -1] ¼öÁ¤¿äÃ» ¹Ý¿µ - À¯¸²[yyi at yourim.net]´Ô)
* 2004-11-06 ver 0.7.0 - Tenshi (multi select ¼±ÅÃ¼ö Ã¼Å©[minselect, maxselect] Ãß°¡ - À¯¸²[yyi at yourim.net]´Ô Á¦¾È)
                       - À¯¸² (Àç¿Ü±¹ÀÎ ¹øÈ£ ¿É¼Ç Ãß°¡[foreignerno] - °­º´±â´Ô ¿É¼Ç¸í Á¦¾È)
                       - Tenshi (phone, homephone ¿É¼Ç¿¡¼­ 070, 080, 1544 µîÀÇ ÀüÈ­¹øÈ£ Ã¼Å© °¡´ÉÇÏµµ·Ï ¼öÁ¤ - ±è¿µ¼±[crane123 at naver.com]´Ô Á¦¾È)
                       - Tenshi (ÀÌ¹ÌÁö ÆÄÀÏ¸¸ ÀÔ·Â¹Þ´Â ÀÎÀÚ[imageonly]Ãß°¡ - kurome´Ô Á¦¾È)
*/

String.prototype.hasFinalConsonant = function(str) {
	str = this != window ? this : str;
	var strTemp = str.substr(str.length-1);
	return ((strTemp.charCodeAt(0)-16)%28!=0);
}

function validate(form, fields) {
    var lah = new FormChecker(form);
    if (fields) lah.setCheckFields(fields);
    var wmf = lah.go();
    if(wmf == true) {
	    return true;
	} else {
		/*
		if (wmf.replace(/^\s+/, "").replace(/\s+$/, "")) alert(lah.getErrorMessage());
		var fn = eval("form."+wmf);
		if(fn.name != undefined) {
			try {
				fn.focus();
			} catch(e) {}
		}
		return false;
		*/
		if (wmf.replace(/^\s+/, "").replace(/\s+$/, "")) alert(lah.getErrorMessage(), {onok: function() {
			var fn = eval("form."+wmf);
			if(fn.name != undefined) {
				try {
					fn.focus();
				} catch(e) {}
			}
		}});
		return false;
	}
}

function josa(str,tail) {
	return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2);
}

FormChecker = function(form) {
    this.FUNC_MAP = {
        email     : "this.func_email",
        hangul    : "this.func_hangul",
        engonly   : "this.func_engonly",
        number    : "this.func_number",
		numeng   : "this.func_numeng",
		userid    : "this.func_userid",
		passwd    : "this.func_passwd",
        residentno: "this.func_residentno",
        jumin     : "this.func_jumin",
        juminfore : "this.func_juminforeignernoAge",
        foreignerno:"this.func_foreignerno",
        bizno     : "this.func_bizno",
        phone     : "this.func_phone",
        homephone : "this.func_homephone",
        handphone : "this.func_handphone",
        url 	  : "this.func_url",
		sosu : "this.func_sosu",
		passport: "this.func_passport"
    }
    this.ERR_MSG = {
        system   : "FormChecker Error: ",
        required : "¹Ýµå½Ã ÀÔ·ÂÇÏ¼Å¾ß ÇÏ´Â »çÇ×ÀÔ´Ï´Ù.",
        requirenum:"ÀÌ Ç×¸ñµé Áß¿¡ {requirenum}°³ ÀÌ»óÀÇ Ç×¸ñÀÌ ÀÔ·ÂµÇ¾î¾ß ÇÕ´Ï´Ù.",
        notequal : "ÀÔ·ÂµÈ ³»¿ëÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.",
        invalid  : "ÀÔ·ÂµÈ ³»¿ëÀÌ Çü½Ä¿¡ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù.",
        minbyte  : "ÀÔ·ÂµÈ ³»¿ëÀÇ ±æÀÌ°¡ {minbyte}ÀÚ ÀÌ»óÀÌ¾î¾ß ÇÕ´Ï´Ù.",
		fixbyte  : "ÀÔ·ÂµÈ ³»¿ëÀÇ ±æÀÌ°¡ {fixbyte}ÀÚÀÌ¾î¾ß ÇÕ´Ï´Ù.",
        maxbyte  : "ÀÔ·ÂµÈ ³»¿ëÀÇ ±æÀÌ°¡ {maxbyte}ÀÚ¸¦ ÃÊ°úÇÒ ¼ö ¾ø½À´Ï´Ù.",
        mincheck : "{mincheck}°³ÀÇ Ç×¸ñÀÌ»óÀ¸·Î ¼±ÅÃÇÏ¼¼¿ä.",
        maxcheck : "{maxcheck}°³ÀÇ Ç×¸ñÀÌÇÏ·Î ¼±ÅÃÇÏ¼¼¿ä.",
        minselect: "{minselect}°³ÀÇ Ç×¸ñÀÌ»óÀ¸·Î ¼±ÅÃÇÏ¼¼¿ä.",
        maxselect: "{maxselect}°³ÀÇ Ç×¸ñÀÌÇÏ·Î ¼±ÅÃÇÏ¼¼¿ä.",
        imageonly: "ÀÌ¹ÌÁö ÆÄÀÏ¸¸ Ã·ºÎÇÒ ¼ö ÀÖ½À´Ï´Ù."
    }
    this.ERR_DO = {
        text   : "select focus",
        select : "focus",
        check  : "focus",
        radio  : "focus",
        file   : "focus",
        hidden : ""
    }
    this.ERR_SYS = '_SYSERR_';
    this.fields = form.elements;
    this.form = form;
    this.errMsg = "";
}

FormChecker.prototype.setForm = function(form) {
    this.form = form;
}

FormChecker.prototype.setFunc = function(map, func) {
    if (typeof(this.FUNC_MAP[map]) == "string") return;
    this.FUNC_MAP[map] = func;
}

FormChecker.prototype.setCheckFields = function(fields) {
    this.fields = [];
    if(typeof(fields) == 'string')
        this.fields = [this.form.elements[fields]];
    else
        for(var i=0, s=fields.length; i<s; i++)
            this.fields[this.fields.length] = this.form.elements[fields[i]];
}

FormChecker.prototype.setUnCheckFields = function(fields) {
    this.fields = [];
    var _isUnCheckEl;

    if(typeof(fields) == 'string')
        fields = [fields];
    for (var i=0, s=this.form.elements.length; i<s; i++) {
        _isUnCheckEl = false;
        for (var j=0, t=fields.length; j<t; j++) {
            if (this.form.elements[i] == this.form.elements[fields[j]]) {
                _isUnCheckEl = true;
                break;
            }
        }
        if (!_isUnCheckEl) this.fields[this.fields.length] = this.form.elements[i];
    }
}

FormChecker.prototype.setParam = function(el, name, value) {
    el.setAttribute(name, value);
}

FormChecker.prototype.delParam = function(el, name) {
    el.removeAttribute(name);
}

FormChecker.prototype.go = function() {
    for (var i=0,s=this.fields.length; i<s; i++) {
        var el = this.fields[i];
        if (!this.isValidElement(el)) continue;

        var elType = this.getType(el);
        var trim = el.getAttribute("TRIM");
        var required = el.getAttribute("REQUIRED");
        var requirenum = el.getAttribute("REQUIRENUM");
        var minbyte = parseInt(el.getAttribute("MINBYTE"),10);
		var fixbyte = parseInt(el.getAttribute("FIXBYTE"),10);
        var maxbyte = parseInt(el.getAttribute("MAXBYTE"),10);
        var mincheck = parseInt(el.getAttribute("MINCHECK"),10);
        var maxcheck = parseInt(el.getAttribute("MAXCHECK"),10);
        var minselect = parseInt(el.getAttribute("MINSELECT"),10);
        var maxselect = parseInt(el.getAttribute("MAXSELECT"),10);
        var option = el.getAttribute("OPTION");
        var match = el.getAttribute("MATCH");
        var span = el.getAttribute("SPAN");
        var glue = el.getAttribute("GLUE");
        var pattern = el.getAttribute("PATTERN");
        var imageonly = el.getAttribute("IMAGEONLY");

        if (trim != null && (elType == "text" || elType == "hidden")) {
            switch (trim) {
            case "trim":
                el.value = el.value.replace(/^\s+/, "").replace(/\s+$/, "");
                break;
            case "compress":
                el.value = el.value.replace(/\s+/, "");
                break;
            case "ltrim":
                el.value = el.value.replace(/^\s+/, "");
                break;
            case "rtrim":
                el.value = el.value.replace(/\s+$/, "");
                break;
            }
        }

        var elEmpty = this.isEmpty(el, elType);

        if (required != null) {
            if (required == "required") {
                if (elEmpty) return this.raiseError(el, "required");
            } else {
                requirenum = parseInt(requirenum, 10);
                var _num = 0;
                var _name = [];
                if (requirenum > 0) {
                    for (var j=0; j<this.form.elements.length; j++) {
                        var _el = this.form.elements[j];
                        if (required == _el.getAttribute("REQUIRED")) {
                            if(!this.isEmpty(_el, this.getType(_el))) _num++;
                            _name[_name.length] = this.getName(_el);
                        }
                    }
                    if(_num < requirenum)
                        return this.raiseError(el, "requirenum", _name.join(", "));
                }
            }
        }
		if(fixbyte > 0 && elType == "text") {
			var _fixtmp = el.value;
            var _fixlen = el.value.length;
			if(_fixlen > 0) {
				for (j=0; j<_fixtmp.length; j++) {
					if (_fixtmp.charCodeAt(j) > 128) _fixlen++;
				}
				if (fixbyte > 0 && _fixlen < fixbyte) return this.raiseError(el, "fixbyte");
			}
		}
        if ((minbyte > 0 || maxbyte > 0) && (elType == "text" || elType == "hidden")) {
            var _tmp = el.value;
            var _len = el.value.length;
            for (j=0; j<_tmp.length; j++) {
                if (_tmp.charCodeAt(j) > 128) _len++;
            }
            if (minbyte > 0 && _len < minbyte) return this.raiseError(el, "minbyte");
            if (maxbyte > 0 && _len > maxbyte) return this.raiseError(el, "maxbyte");
        }
        if (option != null && !elEmpty && elType != "file") {
            var _options = option.split(" ");
            for (var j in _options) {
                var _func = eval(this.FUNC_MAP[_options[j]]);
                if (span != null) {
                    var _value = [];
                    for (var k=0; k<parseInt(span,10); k++) {
                        try {
                            _value[k] = this.fields[i+k].value;
                        } catch (e) {
                            return this.raiseError(this.ERR_SYS,  (i+k) +"th Element is not found.");
                        }
                    }
                    try {
                        var _result = _func(el, _value.join(glue == null ? "" : glue));
                    } catch (e) {
                        return this.raiseError(this.ERR_SYS,  "function map '"+ _options[j] +"' is not exist.");
                    }
                    if (_result !== true) return this.raiseError(el, _result);
                } else {
                    try {
                        var _result = _func(el);
                    } catch (e) {
                        return this.raiseError(this.ERR_SYS,  "function map '"+ _options[j] +"' is not exist.");
                    }
                    if (_result !== true) return this.raiseError(el, _result);
                }
            }
        }
		if (match != null && elType != "file") {
            if (typeof this.form.elements[match] == "undefined")
                return this.raiseError(this.ERR_SYS, "Element '"+ match +"' is not found.");
            else if (el.value != this.form.elements[match].value)
                return this.raiseError(el, "notequal");
        }
        if (pattern != null && !elEmpty && elType != "file") {
            try {
                pattern = new RegExp(pattern);
            } catch (e) {
                return this.raiseError(this.ERR_SYS, "Invalid Regular Expression '"+ pattern +"'");
            }
            if (!pattern.test(el.value)) return this.raiseError(el, "invalid");
        }
        if ((mincheck > 0 || maxcheck > 0) && elType == "check") {
            var _checks = this.form.elements[el.name];
            var _num = 0;
            if (typeof _checks.length != "undefined") {
                for (var j=0; j<_checks.length; j++) {
                    if (_checks[j].checked) _num++;
                }
            } else {
                if (_checks.checked) _num++;
            }
            if (mincheck > 0 && _num < mincheck) return this.raiseError(el, "mincheck");
            if (maxcheck > 0 && _num > maxcheck) return this.raiseError(el, "maxcheck");
        }
        if ((minselect > 0 || maxselect > 0) && elType == "multiselect") {
            var _num = 0;
            for (var j=0; j<el.options.length; j++) {
                if (el.options[j].selected) _num++;
            }
            if (minselect > 0 && _num < minselect) return this.raiseError(el, "minselect");
            if (maxselect > 0 && _num > maxselect) return this.raiseError(el, "maxselect");
        }
        if (imageonly != null && elType == "file") {
            var fn = el.value;
            if (fn != "") {
                var dotIndex = fn.lastIndexOf(".");
                var ext = fn.substring(dotIndex+1).toLowerCase();
                if(ext != "jpg" && ext != "jpeg" && ext != "gif" && ext != "png")
                    return this.raiseError(el, "imageonly");
            }
        }
    }
    return true;
}

FormChecker.prototype.isValidElement = function(el) {
    return el.name && el.tagName.match(/^input|select|textarea$/i) && !el.disabled;
}

FormChecker.prototype.isEmpty = function(el, type) {
    switch (type) {
    case "file": case "text": case "hidden":
        if (el.value == null || el.value == "") return true;
        break;
    case "select": case "multiselect":
        if (el.selectedIndex == -1 || el[el.selectedIndex].value == null ||
                el[el.selectedIndex].value == "")
            return true;
        break;
    case "check": case "radio":
        var elCheck = this.form.elements[el.name];
        var elChecked = false;
        if (typeof elCheck.length != "undefined") {
            for (var j=0; j<elCheck.length; j++) {
                if (elCheck[j].checked == true) elChecked = true;
            }
        } else {
            if (elCheck.checked == true) elChecked = true;
        }
        if (elChecked == false) return true;
        break;
    }
    return false;
}

FormChecker.prototype.getType = function(el) {
    switch (el.tagName.toLowerCase()) {
    case "select":
        return el.multiple == true ? "multiselect" : "select";
    case "textarea": return "text";
    case "input":
        switch (el.type.toLowerCase()) {
        case "radio": return "radio";
        case "checkbox": return "check";
        case "file": return "file";
        case "text": case "password": return "text";
        case "hidden": return "hidden";
        }
        break;
    }
}

FormChecker.prototype.raiseError = function(el, type, elName) {
    if (el == this.ERR_SYS) {
        this.errMsg = this.ERR_MSG["system"] + type;
        return false;
    }
    var pattern = /\{([a-zA-Z0-9_]+)\}/i;
    var msg = this.ERR_MSG[type] ? this.ERR_MSG[type] : type;
    var elType = this.getType(el);
    var elName = elName ? elName : this.getName(el);
    var errDo = el.getAttribute("ERRDO") ? el.getAttribute("ERRDO") : this.ERR_DO[elType];
    var _errDos = errDo ? errDo.split(" ") : [];

    if (el.getAttribute("ERRMSG") != null) msg = el.getAttribute("ERRMSG");
    if (pattern.test(msg) == true) {
        while (pattern.exec(msg)) msg = msg.replace(pattern, el.getAttribute(RegExp.$1));
    }

    this.errMsg = elName +josa(elName,"Àº´Â")+" "+ msg +"\n";

	for (var i in _errDos) {
        switch (_errDos[i]) {
        case "delete": el.value = ""; break;
        case "select": el.select(); break;
        case "focus":  el.focus(); break;
        }
    }

    //return false;
	return el.name;
}

FormChecker.prototype.getErrorMessage = function() {
    return this.errMsg;
}

FormChecker.prototype.getName = function(el) {
    return el.getAttribute("HNAME") == null || el.getAttribute("HNAME") == ""
        ? el.name : el.getAttribute("HNAME");
}
/**
* validate functions
*/
FormChecker.prototype.func_email = function(el,value) {
    var value = value ? value : el.value;
    var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
    return pattern.test(value) ? true : "invalid";
}

FormChecker.prototype.func_hangul = function(el) {
    var pattern = /[°¡-Èþ]/;
    return pattern.test(el.value) ? true : "¹Ýµå½Ã ÇÑ±ÛÀ» Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù";
}

FormChecker.prototype.func_engonly = function(el) {
    var pattern = /^[a-zA-Z]+$/;
    return pattern.test(el.value) ? true : "invalid";
}

FormChecker.prototype.func_number = function(el) {
    var pattern = /^[0-9]+$/;
    return pattern.test(el.value) ? true : "¹Ýµå½Ã ¼ýÀÚ·Î¸¸ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù";
}

FormChecker.prototype.func_numeng = function(el) {
    var pattern = /^[a-zA-Z0-9]+$/;
    return pattern.test(el.value) ? true : "¹Ýµå½Ã ¼ýÀÚ¶Ç´Â ¿µ¹®À¸·Î ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù";
}

FormChecker.prototype.func_userid = function(el) {
    var pattern = /^[a-zA-Z0-9]{4,8}$/;
	var patternEng = /[a-zA-Z]/;
	var patternNum  = /[0-9]/;
//	if(!(pattern.test(el.value) && patternEng.test(el.value) && patternNum.test(el.value))) {
//		return "¿µ¾î, ¼ýÀÚ È¥¿ë 4~8ÀÚ¸®·Î ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù";
//	}
	if(!(pattern.test(el.value))) {
		return "¿µ¾î, ¼ýÀÚ·Î ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.";
	}
	if(!ChkSameChar(el.value)) {
		return "°°Àº ¼ýÀÚÀÌ°Å³ª ¹®ÀÚ¿­ ÀÔ´Ï´Ù";
	}
	if(!(ChkSeqASCChar(el.value) && ChkSeqDESCChar(el.value))) {
		return "¿¬¼ÓµÈ ¼ýÀÚÀÌ°Å³ª ¹®ÀÚ¿­ ÀÔ´Ï´Ù";
	}
	return true;
}

FormChecker.prototype.func_passwd = function(el) {
    var pattern = /^[a-zA-Z0-9]{4,8}$/;
	var patternEng = /[a-zA-Z]/;
	var patternNum  = /[0-9]/;
	if(!(pattern.test(el.value) && patternEng.test(el.value) && patternNum.test(el.value))) {
		return "¿µ¾î, ¼ýÀÚ È¥¿ë 4~8ÀÚ¸®·Î ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù";
	}
	if(!CheckPwd(el.value)) {
		return "µ¿ÀÏ¹®ÀÚ 4È¸ÀÌ»ó Áßº¹ÇØ¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù";
	}
	if(!(ChkSeqASCChar(el.value) && ChkSeqDESCChar(el.value))) {
		return "¿¬¼ÓµÈ ¼ýÀÚÀÌ°Å³ª ¹®ÀÚ¿­ ÀÔ´Ï´Ù";
	}
	return true;
}

FormChecker.prototype.func_residentno = function(el,value) {
    var pattern = /^(\d{6})-?(\d{5}(\d{1})\d{1})$/;
    var num = value ? value : el.value;
    if (!pattern.test(num)) return "invalid";
    num = RegExp.$1 + RegExp.$2;
    if (RegExp.$3 == 7 || RegExp.$3 == 8 || RegExp.$4 == 9)
        if ((num[7]*10 + num[8]) %2) return "invalid";

    var sum = 0;
    var last = num.charCodeAt(12) - 0x30;
    var bases = "234567892345";
    for (var i=0; i<12; i++) {
        if (isNaN(num.substring(i,i+1))) return "invalid";
        sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
    }
    var mod = sum % 11;
    if(RegExp.$3 == 7 || RegExp.$3 == 8 || RegExp.$4 == 9)
        return (11 - mod + 2) % 10 == last ? true : "invalid";
    else
        return (11 - mod) % 10 == last ? true : "invalid";
}

FormChecker.prototype.func_jumin = function(el,value) {
    var pattern = /^([0-9]{6})-?([0-9]{7})$/;
    var num = value ? value : el.value;
    if (!pattern.test(num)) return "invalid";
    num = RegExp.$1 + RegExp.$2;

    var sum = 0;
    var last = num.charCodeAt(12) - 0x30;
    var bases = "234567892345";
    for (var i=0; i<12; i++) {
        if (isNaN(num.substring(i,i+1))) return "invalid";
        sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
    }
    var mod = sum % 11;
    return (11 - mod) % 10 == last ? true : "invalid";

}

FormChecker.prototype.func_juminforeignernoAge = function(el,value) {	//ÁÖ¹Î¹øÈ£¿Í ¿Ü±¹ÀÎ¹øÈ£ Ã¼Å©¹× 14¼¼ ¹Ì¸¸ Ã¼Å©
    var pattern = /^([0-9]{6})-?([0-9]{7})$/;
    var num = value ? value : el.value;
    if (!pattern.test(num)) return "invalid";
	var year = num.substring(0 ,2);
	var yearGubun = num.substring(6, 7);
	var fullYear = "";
	if(yearGubun == 3 || yearGubun == 4) {
		fullYear = "20" + year;		
	} else {
		fullYear = "19" + year;
	}
	if (fullYear >= 1994) return "¸¸ 14¼¼ ¹Ì¸¸ °í°´´ÔÀº °¡ÀÔÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.";
    num = RegExp.$1 + RegExp.$2;

    var sum = 0;
    var last = num.charCodeAt(12) - 0x30;
    var bases = "234567892345";
    for (var i=0; i<12; i++) {
        if (isNaN(num.substring(i,i+1))) return "invalid";
        sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
    }
    var mod = sum % 11;
//    return (11 - mod) % 10 == last ? true : "invalid";
	return (11 - mod) % 10 == last ? true : (11 - mod + 2) % 10 == last? true : "invalid"; //ÁÖ¹Î¹øÈ£µµ Ã¼Å©ÇÏ°í ¿Ü±¹ÀÎ¹øÈ£µµ Ã¼Å©ÇÔ
}

FormChecker.prototype.func_foreignerno = function(el,value) {
    var pattern = /^(\d{6})-?(\d{5}[7-9]\d{1})$/;
    var num = value ? value : el.value;
    if (!pattern.test(num)) return "invalid";
    num = RegExp.$1 + RegExp.$2;
    if ((num[7]*10 + num[8]) %2) return "invalid";

    var sum = 0;
    var last = num.charCodeAt(12) - 0x30;
    var bases = "234567892345";
    for (var i=0; i<12; i++) {
        if (isNaN(num.substring(i,i+1))) return "invalid";
        sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
    }
    var mod = sum % 11;
    return (11 - mod + 2) % 10 == last ? true : "invalid";
}

FormChecker.prototype.func_bizno = 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 "invalid";
	return pattern.test(num) ?true:"invalid";
//    num = RegExp.$1 + RegExp.$2 + RegExp.$3;
//    var cVal = 0;
//    for (var i=0; i<8; i++) {
//        var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp  == 1 ) ? 3 : 7);
//        cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10;
//    }
//    var li_temp = parseFloat(num.substring(i,i+1)) * 5 + "0";
//    cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2));
//    return parseInt(num.substring(9,10)) == 10-(cVal % 10)%10 ? true : "invalid";

//	IDtot = 0;
//	IDAdd = "137137135";
//
//	for(i=0; i<9 ; i++)
//		IDtot = IDtot + strNo.charAt(i) * IDAdd.charAt(i);
//
//	IDtot = IDtot + Math.floor(( strNo.charAt(8) * 5) / 10);
//	IDtot = 10 - (IDtot%10);
//
//	if (eval(strNo.charAt(9))== IDtot)
//		return true;
//	else
//		return false;
}

FormChecker.prototype.func_phone = function(el,value) {
    var pattern = /^(0[2-8][0-5]?|01[01346-9])-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
    var pattern15xx = /^(1544|1566|1577|1588|1644|1688)-?([0-9]{4})$/;
    var num = value ? value : el.value;
    return pattern.exec(num) || pattern15xx.exec(num) ? true : "invalid";
}

FormChecker.prototype.func_homephone = function(el,value) {
    var pattern = /^(0[2-8][0-5]?)-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
    var pattern15xx = /^(1544|1566|1577|1588|1644|1688)-?([0-9]{4})$/;
    var num = value ? value : el.value;
    return pattern.exec(num) || pattern15xx.exec(num) ? true : "invalid";
}

FormChecker.prototype.func_handphone = function(el,value) {
    var pattern = /^(01[01346-9])-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
    var num = value ? value : el.value;
    return pattern.exec(num) ? true : "invalid";
}


FormChecker.prototype.func_url = function(el,value) {
    var pattern = /^.+(\.[a-zA-Z]{2,3})$/;
    var num = value ? value : el.value;
    return pattern.exec(num) ? true : "invalid";
}

/* È£µ¿ Ãß°¡ 2007.04.23 (¼ýÀÚ¿Í ¼Ò¼öÁ¡±îÁö¸¸ ÀÔ·Â)*/
FormChecker.prototype.func_sosu = function(el, value) {
	/*
	var pattern = /^[^\.][0-9\.]+$/;
    var num = value ? value : el.value;
    return pattern.test(num) ? true : "invalid";
	*/
   ch = el.value;

	if(ch.substring(0,1)=='.' ){
		return "Ã³À½¿¡´Â µµÆ®(.)°¡ ¿Ã¼ö ¾ø½À´Ï´Ù.";

	}else{
		for(i=0; i<ch.length; i++) {
			if(ch.substring(i,i+1) < "0" || ch.substring(i,i+1) > "9" || ch.substring(i,i+1) ==' ')
			{
				if(ch.substring(i,i+1)!='.'){
					return "¹®ÀÚ ¶Ç´Â °ø¹éÀº ÀÔ·ÂÇÒ ¼ö ¾ø½À´Ï´Ù.";
				}
			}
		}
	}
	return true;
}
/* ÁØ¿ë Ãß°¡ - ¿©±Ç¹øÈ£ Ã¼Å© (9ÀÚ¸® ¾ÕµÎÀÚ¸® ¹®ÀÚ ³ª¸ÓÁö ¼ýÀÚ) */
FormChecker.prototype.func_passport = function(el,value) {
	var pattern = /^[a-zA-Z]{2}[0-9]{7}/;
    var num = value ? value : el.value;
    return pattern.test(num) ? true : "invalid";

}

// ÆÐ½º¿öµå Ã¼Å©
function CheckPwd(pwd) {
    var alphaCnt;
    var intCnt;
    var i;
    var CmpChar;
    var CmpCnt;

    intCnt = 0;
    alphaCnt = 0;
    CmpChar = pwd.charAt(0);
    CmpCnt = 0;
    for (i = 0; i < pwd.length; i++) {
        if(pwd.charAt(i).search(/[a-zA-Z]/))
            alphaCnt++;
        if(pwd.charAt(i).search(/[0-9]/))
            intCnt++;

		if(CmpChar == pwd.charAt(i)) {
			CmpCnt++;

			if(CmpCnt >= 4) {
				return false;
			}

		} else {
			CmpCnt = 1;
			CmpChar = pwd.charAt(i);
		}
    }
    if (intCnt == 0 || alphaCnt == 0) return false;
    return true;
}

function ChkSameChar(s) {
	var i;

	if ( s.length < 2 )
		return false;

	for ( i = 0; i < s.length - 1; i++ ) {
		if ( (s.charAt(i)) != (s.charAt(i+1)) )
			return true;
	}
	return false;
}

function ChkSeqASCChar(s) {
	var i;

	if ( s.length < 2 )
		return false;

	for ( i = 0; i < s.length - 1; i++ ) {
		if ( (s.charCodeAt(i) + 1) != (s.charCodeAt(i+1)) )
			return true;
	}
	return false;
}

function ChkSeqDESCChar(s) {
	var i;

	if ( s.length < 2 )
		return false;

	for ( i = 0; i < s.length - 1; i++ ) {
		if ( (s.charCodeAt(i) - 1) != (s.charCodeAt(i+1)) )
			return true;
	}
	return false;
}

function checkCheckbox(frm,obj,num) {
  var str = obj.name;
  var len = frm.length;

  var chk = 0;
  for(i=0; i<len; i++) {
    if (frm[i].name == str && frm[i].checked == true) {
      chk++;
    }
    if (chk > num) {
      alert(num + "°³¸¸ ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù.");
      obj.checked = false;
      break;
    }
  }

   if( document.getElementById("B").checked == true){
		$("#text_2").val("");
		$("#text_3").val("");
		$("#text1").show();
		$("#text1_1").hide();
   }else if(document.getElementById("C").checked == true) {
		$("#text_1").val("");
		$("#text_3").val("");
		$("#text2").show();
		$("#text2_1").hide();
   }else if(document.getElementById("H").checked == true) {
		$("#text_1").val("");
		$("#text_2").val("");
		$("#text3_1").hide();
		$("#text3").show();
   }else {
		$("#text_1").val("");
		$("#text_2").val("");
		$("#text_3").val("");
		$("#text1").hide();
		$("#text1_1").show();
		$("#text2").hide();
		$("#text2_1").show();
		$("#text3").hide();
		$("#text3_1").show();
   }

 }

 
	function checkYn1(Yn) {
		if(Yn == "N"){
				if(confirm("Yes¸¦ ¼±ÅÃÇÏ¼Å¾ß ÀÛ¼ºÇÏ½Ç¼ö ÀÖ½À´Ï´Ù.\nÀÛ¼ºÇÑ ±ÛÀÌ »èÁ¦µË´Ï´Ù.»èÁ¦ ÇÏ½Ã°Ú½À´Ï±î?")) {
					$("#textA1").val("");
				}else{
					var obj = document.getElementsByName("radiobutton1");
				    for(var i=0;i<obj.length;i++){
						obj[0].checked = true;
					}
					$("#text1_1").show();
					$("#text1_2").hide();
				}
		} else if(Yn == "Y"){
			$("#text1_1").show();
			$("#text1_2").hide();
		}

	}

	function checkYn2(Yn) {
		if(Yn == "N"){
				if(confirm("Yes¸¦ ¼±ÅÃÇÏ¼Å¾ß ÀÛ¼ºÇÏ½Ç¼ö ÀÖ½À´Ï´Ù.\nÀÛ¼ºÇÑ ±ÛÀÌ »èÁ¦µË´Ï´Ù.»èÁ¦ ÇÏ½Ã°Ú½À´Ï±î?")) {
					$("#textA2").val("");
				} else {
					var obj = document.getElementsByName("radiobutton2");
				    for(var i=0;i<obj.length;i++){
						obj[0].checked = true;
					}
					$("#text2_1").show();
					$("#text2_2").hide();
				}
		} else if(Yn == "Y"){
			$("#text2_1").show();
			$("#text2_2").hide();
		}
	}

	function checkYn3(Yn) {
		if(Yn == "N"){
				if(confirm("Yes¸¦ ¼±ÅÃÇÏ¼Å¾ß ÀÛ¼ºÇÏ½Ç¼ö ÀÖ½À´Ï´Ù.\nÀÛ¼ºÇÑ ±ÛÀÌ »èÁ¦µË´Ï´Ù.»èÁ¦ ÇÏ½Ã°Ú½À´Ï±î?")) {
					$("#textA3").val("");
				} else {
					var obj = document.getElementsByName("radiobutton3");
				    for(var i=0;i<obj.length;i++){
						obj[0].checked = true;
					}
					$("#text3_1").show();
					$("#text3_2").hide();
				}
		} else if(Yn == "Y"){
			$("#text3_1").show();
			$("#text3_2").hide();
		}
	}

