/*******************************************************************************
 * 인터넷 교보문고 TP 프로젝트
 *
 * Copyright(c) 1997-2009 Kyobo Book Centre
 * All rights reserved.
 ******************************************************************************/

/**
 * 에러를 표시한다.
 * 
 * @param obj
 *            객체 ID
 * @return
 */
function error(obj, name, msg) {
	var pattern = /{([a-zA-Z0-9_]+)\+?([가-힣]{2})?}/;

	pattern.exec(msg);

	var tail = (RegExp.$2) ? hasFinalConsonant(eval(RegExp.$1), RegExp.$2) : "";

	window.alert(msg.replace(pattern, eval(RegExp.$1) + tail));
	try{	
		if (isArray(obj)) {
			obj[0].focus();
			if(obj[0].tagName.toLowerCase() == "input"
			|| obj[0].tagName.toLowerCase() == "textarea") {
				obj[0].select();
			}
		} else {
			obj.focus();
			if(obj.tagName.toLowerCase() == "input"
			|| obj.tagName.toLowerCase() == "textarea") {
			  obj.select();
			}
		}
	}catch(e){
	}
}

function hasFinalConsonant(str, tail) {
	return ((str.substr(str.length - 1).charCodeAt(0) - 16) % 28 != 0) ? tail
			.substring(0, 1) : tail.substring(1, 2);
}

/**
 * 입력 객체의 값이 널(null)인지를 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @return
 */
function isNull(obj, name) {
	var str = trim(obj.value);

	if (strlen(str) == 0) {
		if (name) {
			error(obj, name, "{name+을를} 입력해 주세요.");
		}

		return true;
	}

	return false;
}

/**
 * 입력값의 유효성을 검사한다.
 if(!isValid(form.srnnOpinCntt, "심사평", "S", 2, 255, "N")) return; 
 * @param obj
 *            폼객체 ID
 * @param namg
 *            객체 이름 *            
 * @param type
 *            타입(K : 한글, A : 영문, N : 숫자, C : 영숫자 혼합, S:모두)
 * @param min
 *            최소 자리수
 * @param max
 *            최대 자리수
 * @param essential
 *            필수여부(Y:필수(기본값), N:선택(입력값 존재시만)
 * @return 경고메시지
 */
function isValid(obj, name, type, min, max, essential) {
    if (type == "K") {
        if (!isKorean(obj, name)) {
            return false;
        }

    } else if (type == "A") {
        if (!isAlphabet(obj, name)) {
            return false;
        }

    } else if (type == "N") {
        if (!isNumber(obj, name)) {
            return false;
        }
    } else if (type == "C") {
        if (!isAlphaNumeric(obj, name)) {
            return false;
        }
    } else {
        type = "S";
    }
    if (!isValidSize(obj, name, min, max, essential)) {
        return false;
    }

    return true;
}

/**
 * 입력값의 크기를 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param min
 *            최소 자리수
 * @param max
 *            최대 자리수
 * @param name
 *            메세지
 * @return
 */
function isValidSize(obj, name, min, max, essential) {
    
    if(essential==undefined) essential="Y"; //필수 
    
    if (!isObject(obj)) {
        return false;
    }

    /*
    if (isNull(obj, name)) {
        return false;
    }
    */

    var str = trim(obj.value);

    if(essential=="Y"){     
        // 필수인경우
        if (strlen(str) < min) {
            if (name) {
                if (min == max) {
                    error(obj, name, "{name+은는} " + min + "자 로 입력해 주세요.");
                } else {
                    error(obj, name, "{name+은는} 최소 " + min + "자로 입력해 주세요.");
                }
            }
            return false;
        }
        if (max>0 && (strlen(str) > max)) {   // max가 공백인경우 무제한입력
            if (name) {
                if (min == max) {
                    error(obj, name, "{name+은는} " + min + "자로 입력해 주세요.");
                } else {
                    error(obj, name, "{name+은는} 최대 " + max+ "자로 입력해 주세요.");
                }
            }
            return false;
        }           
    }else{
        // 선택인경우
        if(strlen(str)>0) {
            if (strlen(str) < min) {
                if (name) {
                    if (min == max) {
                        error(obj, name, "{name+은는} " + min + "자 로 입력해 주세요.");
                    } else {
                        error(obj, name, "{name+은는} 최소 " + min + "자로 입력해 주세요.");
                    }
                }
                return false;
            }
            if (max>0 && (strlen(str) > max)) {   // max가 공백인경우 무제한입력
                if (name) {
                    if (min == max) {
                        error(obj, name, "{name+은는} " + min + "자로 입력해 주세요.");
                    } else {
                        error(obj, name, "{name+은는} 최대 " + max+ "자로 입력해 주세요.");
                    }
                }
                return false;
            }
        }
    }
    //obj.value = replaceUnusedKorean(obj.value); // 특수문자 체크
    return true;
}

/**
 * 객체의 값이 숫자인지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isNumber(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);

	if (isNaN(str)) {
		if (name) {
			error(obj, name, "{name+은는} 숫자로 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 한글인지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isKorean(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);

	for ( var i = 0; i < str.length; i++) {
		var code = str.charCodeAt(i);

		if (!(code > 255)) {
			if (name) {
				error(obj, name, "{name+은는} 한글로 입력해 주세요.");
			}

			return false;
		}
	}

	return true;
}

/**
 * 객체의 값이 영문인지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isAlphabet(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);

	for ( var i = 0; i < str.length; i++) {
		var code = str.charCodeAt(i);

		if (!(code >= 65 && code <= 122)) {
			if (name) {
				error(obj, name, "{name+은는} 영문으로 입력해 주세요.");
			}

			return false;
		}
	}

	return true;
}

/**
 * 객체의 값이 영문 또는 숫자인지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isAlphaNumeric(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);

	for ( var i = 0; i < str.length; i++) {
		var code = str.charCodeAt(i);

		if (!(code >= 65 && code <= 122) && !(code >= 48 && code <= 57)) {
			if (name) {
				error(obj, name, "{name+은는} 영문 또는 숫자로 입력해 주세요.");
			}

			return false;
		}
	}

	return true;
}

/**
 * 두 객체의 값이 동일한지 검사한다.
 * 
 * @param obj1
 *            객체1 ID
 * @param obj2
 *            객체2 ID
 * @param name
 *            객체 이름
 * @return
 */
function isSame(obj1, obj2, name) {
	if (!isObject(obj1)) {
		return false;
	}

	if (!isObject(obj2)) {
		return false;
	}

	if (isNull(obj1, name)) {
		return false;
	}

	if (isNull(obj2, name)) {
		return false;
	}

	var str1 = trim(obj1.value);
	var str2 = trim(obj2.value);

	if (str1 != str2) {
		if (name) {
			error(obj1, name, "{name+이가} 일치하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 아이디에 적합한지 검사한다. - 아이디형식 : 영문, 숫자, _ 를 사용하여 5자이상 10자이하
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isId(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);

	if (!isValidSize(obj, name, 5, 10)) {
		return false;
	}

	if (!isAlphaNumeric(obj, name)) {
		return false;
	}

	return true;
}

/**
 * 객체의 값이 E-Mail에 적합한지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isMail(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);

	var i = str.indexOf("@");

	if (i < 0) {
		if (name) {
			error(obj, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	i = str.indexOf(".");

	if (i < 0) {
		if (name) {
			error(obj, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 주민번호에 적합한지 검사한다.
 * 
 * @param obj1
 *            객체1 ID
 * @param obj2
 *            객체2 ID
 * @param name
 *            객체 이름
 * @return
 */
function isJumin(obj1, obj2, name) {
	if (!isObject(obj1)) {
		return false;
	}

	if (!isObject(obj2)) {
		return false;
	}

	var str1 = obj1.value;
	var str2 = obj2.value;

	if (!isValidSize(obj1, name + " 앞자리", 6, 6)) {
		return false;
	}

	if (!isValidSize(obj2, name + " 뒷자리", 7, 7)) {
		return false;
	}

	var hap = 0;

	for ( var i = 0; i < 6; i++) {
		var temp = str1.charAt(i) * (i + 2);
		hap += temp;
	}

	var n1 = str2.charAt(0);
	var n2 = str2.charAt(1);
	var n3 = str2.charAt(2);
	var n4 = str2.charAt(3);
	var n5 = str2.charAt(4);
	var n6 = str2.charAt(5);
	var n7 = str2.charAt(6);

	hap += n1 * 8 + n2 * 9 + n3 * 2 + n4 * 3 + n5 * 4 + n6 * 5;
	hap %= 11;
	hap = 11 - hap;
	hap %= 10;

	if (hap != n7) {
		if (name) {
			error(obj1, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 주민번호에 적합한지 검사한다.
 * 
 * @param obj1
 *            객체 ID
 * @param sep
 *            구분 문자
 * @param name
 *            객체 이름
 * @return
 */
function isJumin2(obj, sep, name) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	var arr = new Array();
	arr = str.split(sep);

	if (arr.length != 2) {
		error(obj, name, "{name+은는} [" + sep + "]로 구분해 주세요.");

		return false;
	}

	if (!Number(arr[0])) {
		if (name) {
			error(obj, name, "{name}의 앞자리는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[0], 6, 6)) {
		if (name) {
			error(obj, name, "{name}의 앞자리는 6자로 입력해 주세요.");
		}

		return false;
	}

	if (!Number(arr[1])) {
		if (name) {
			error(obj, name, "{name}의 뒷자리는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[1], 7, 7)) {
		if (name) {
			error(obj, name, "{name}의 앞자리는 7자로 입력해 주세요.");
		}

		return false;
	}

	var hap = 0;
	for ( var i = 0; i < 6; i++) {
		var temp = arr[0].charAt(i) * (i + 2);
		hap += temp;
	}

	var n1 = arr[1].charAt(0);
	var n2 = arr[1].charAt(1);
	var n3 = arr[1].charAt(2);
	var n4 = arr[1].charAt(3);
	var n5 = arr[1].charAt(4);
	var n6 = arr[1].charAt(5);
	var n7 = arr[1].charAt(6);

	hap += n1 * 8 + n2 * 9 + n3 * 2 + n4 * 3 + n5 * 4 + n6 * 5;
	hap %= 11;
	hap = 11 - hap;
	hap %= 10;

	if (hap != n7) {
		if (name) {
			error(obj, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 전화번호에 적합한지 검사한다.
 * 
 * @param obj1
 *            객체1 ID
 * @param obj2
 *            객체2 ID
 * @param obj3
 *            객체3 ID
 * @param name
 *            객체 이름
 * @return
 */
function isPhone(obj1, obj2, obj3, name) {
	if (!isObject(obj1)) {
		return false;
	}

	if (!isObject(obj2)) {
		return false;
	}

	if (!isObject(obj3)) {
		return false;
	}

	var str1 = trim(obj1.value);
	var str2 = trim(obj2.value);
	var str3 = trim(obj3.value);

	if (!isNumber(obj1, name + "의 지역번호")
			|| !isValidSize(obj1, name + "의 지역번호", 2, 3)) {
		return false;
	}

	var ddd = [ "02", "051", "053", "032", "062", "042", "052", "031", "033",
			"041", "043", "054", "055", "061", "063", "064" ];

	var flag = false;

	for ( var i = 0; i < ddd.length; i++) {
		if (ddd[i] == str1) {
			flag = true;
		}

	}

	if (!flag) {
		if (name) {
			error(obj1, name, "{name}의 지역번호가 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	if (!isNumber(obj2, name + "의 국번호")
			|| !isValidSize(obj2, name + "의 국번호", 3, 4)) {
		return false;
	}

	if (!isNumber(obj3, name + "의 뒷번호")
			|| !isValidSize(obj3, name + "의 뒷번호", 4, 4)) {
		return false;
	}

	return true;
}

/**
 * 객체의 값이 전화번호에 적합한지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param sep
 *            구분 문자
 * @param name
 *            객체 이름
 * @return
 */
function isPhone2(obj, sep, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);
	var arr = new Array();
	arr = str.split(sep);

	if (arr.length != 3) {
		if (name) {
			error(obj, name, "{name+은는} [" + sep + "]로 구분해 주세요.");
		}

		return false;
	}

	if (!Number(arr[0])) {
		if (name) {
			error(obj, name, "{name}의 지역번호는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[0], 2, 3)) {
		if (name) {
			error(obj, name, "{name}의 지역번호는 최소 2자, 최대 3자로 입력해 주세요.");
		}

		return false;
	}

	var ddd = [ "02", "051", "053", "032", "062", "042", "052", "031", "033",
			"041", "043", "054", "055", "061", "063", "064" ];

	var flag = false;
	for ( var i = 0; i < ddd.length; i++) {
		if (ddd[i] == arr[0]) {
			flag = true;
		}

	}

	if (!flag) {
		if (name) {
			error(obj, name, "{name}의 지역번호가 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	if (!Number(arr[1])) {
		if (name) {
			error(obj, name, "{name}의 국번호는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[1], 3, 4)) {
		if (name) {
			error(obj, name, "{name}의 지역번호는 최소 3자, 최대 4자로 입력해 주세요.");
		}

		return false;
	}

	if (!Number(arr[2])) {
		if (name) {
			error(obj, name, "{name}의 뒷번호는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[2], 4, 4)) {
		if (name) {
			error(obj, name, "{name}의 뒷번호는 4자로 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 전화번호에 적합한지 검사한다.
 * 
 * @param obj1
 *            객체1 ID
 * @param obj2
 *            객체2 ID
 * @param obj3
 *            객체3 ID
 * @param name
 *            객체 이름
 * @return
 */
function isCellular(obj1, obj2, obj3, name) {
	if (!isObject(obj1)) {
		return false;
	}

	if (!isObject(obj2)) {
		return false;
	}

	if (!isObject(obj3)) {
		return false;
	}

	var str1 = trim(obj1.value)
	var str2 = trim(obj2.value)
	var str3 = trim(obj3.value)

	if (!isNumber(obj1, name + "의 통신사번호")
			|| !isValidSize(obj1, name + "의 통신사번호", 3, 3)) {
		return false;
	}

	var ddd = [ "010", "011", "016", "017", "018", "019" ];

	var flag = false;

	for ( var i = 0; i < ddd.length; i++) {
		if (ddd[i] == str1) {
			flag = true;
		}
	}

	if (!flag) {
		if (name) {
			error(obj1, name, "{name}의 지역번호가 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	if (!isNumber(obj2, name + "의 국번호")
			|| !isValidSize(obj2, name + "의 국번호", 3, 4)) {
		return false;
	}

	if (!isNumber(obj3, name + "의 뒷번호")
			|| !isValidSize(obj3, name + "의 뒷번호", 4, 4)) {
		return false;
	}

	return true;
}

/**
 * 객체의 값이 전화번호에 적합한지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param sep
 *            구분 문자
 * @param name
 *            객체 이름
 * @return
 */
function isCellular2(obj, sep, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);
	var arr = new Array();
	arr = str.split(sep);

	if (arr.length != 3) {
		if (name) {
			error(obj, name, "{name+은는} [" + sep + "]로 구분해 주세요.");
		}

		return false;
	}

	if (!Number(arr[0])) {
		if (name) {
			error(obj, name, "{name}의 통신사번호는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[0], 3, 3)) {
		if (name) {
			error(obj, name, "{name}의 통신사번호 3자로 입력해 주세요.");
		}

		return false;
	}

	var ddd = [ "010", "011", "016", "017", "018", "019" ];

	var flag = false;
	for ( var i = 0; i < ddd.length; i++) {
		if (ddd[i] == arr[0]) {
			flag = true;
		}

	}

	if (!flag) {
		if (name) {
			error(obj, name, "{name}의 통신사번호가 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	if (!Number(arr[1])) {
		if (name) {
			error(obj, name, "{name}의 통신사번호는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[1], 3, 4)) {
		if (name) {
			error(obj, name, "{name}의 국번호는 최소 3자, 최대 4자로 입력해 주세요.");
		}

		return false;
	}

	if (!Number(arr[2])) {
		if (name) {
			error(obj, name, "{name}의 뒷번호는 숫자로 입력해 주세요.");
		}

		return false;
	}

	if (!ValidSize(arr[2], 4, 4)) {
		if (name) {
			error(obj, name, "{name}의 뒷번호는 4자로 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * CHCKBOX를 모두 채크상태로 한다..
 * 
 * @param obj
 *            객체 ID
 * @return
 */
function setCheckbox(obj) {
	if (!isObject(obj)) {
		return false;
	}

	if (!isArray(obj)) {
		return false;
	}

	for ( var i = 0; i < obj.length; i++) {
		obj[i].checked = true;
	}

	return true;
}

/**
 * CHCKBOX 객체를 모두 해제한다.
 * 
 * @param obj
 *            객체 ID
 * @return
 */
function resetCheckbox(obj) {
	if (!isObject(obj)) {
		return false;
	}

	if (!isArray(obj)) {
		return false;
	}

	for ( var i = 0; i < obj.length; i++) {
		obj[i].checked = false;
	}

	return true;
}

/**
 * CHCKBOX 객체를 모두 반전한다.
 * 
 * @param obj
 *            객체 ID
 * @return
 */
function reverseCheckbox(obj) {
	if (!isObject(obj)) {
		return false;
	}

	if (!isArray(obj)) {
		return false;
	}

	for ( var i = 0; i < obj.length; i++) {
		if (obj[i].checked == true) {
			obj[i].checked = false;
		} else {
			obj[i].checked = true;
		}
	}

	return true;
}

/**
 * CHCKBOX, RADIO 객체가 체크되었는지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isChecked(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	var flag = false;

	if (isArray(obj)) {
		for (i = 0; i < obj.length; i++) {

			if (obj[i].checked) {
				flag = true;
				break;
			}
		}
	} else {
		if (obj.checked) {
			flag = true;
		}
	}

	if (!flag) {
		if (name) {
			error(obj, name, "{name+은는} 최소 하나이상 체크해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * SELECT 객체가 초기상태(index == 0)에서 변경되었는지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isSelected(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (obj.selectedIndex == 0) {
		if (name) {
			error(obj, name, "{name+을를} 선택해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 연도에 적합한지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isValidYear(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	var str = parseInt(trim(obj.value), 10);

	if (!isNumber(obj) || !(str >= 1900 && str <= 2100)) {
		if (name) {
			error(obj, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	return true;

}

/**
 * 객체의 값이 월에 적합한지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param name
 *            객체 이름
 * @return
 */
function isValidMonth(obj, name) {
	if (!isObject(obj)) {
		return false;
	}

	var str = parseInt(trim(obj.value), 10);

	if (!isNumber(obj) || parseInt(str) > 12 || parseInt(str) < 1) {
		if (name) {
			error(obj, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	if (str.length == 1) {
		str = "0" + str;
	}

	return true;

}

/**
 * 객체의 값이 일에 적합한지 검사한다.(삭제대상)
 * 
 * @param obj
 *            객체1 ID
 * @param obj
 *            객체2 ID
 * @param obj
 *            객체3 ID
 * @param name
 *            객체 이름
 * @return
 */

function isValidDay(obj1, obj2, obj3, name) {
	return isValidDate(obj1, obj2, obj3, name);
}

/**
 * 객체의 값이 일에 적합한지 검사한다.
 * 
 * @param obj
 *            객체1 ID
 * @param obj
 *            객체2 ID
 * @param obj
 *            객체3 ID
 * @param name
 *            객체 이름
 * @return
 */
function isValidDate(obj1, obj2, obj3, name) {
	if (!isObject(obj1)) {
		return false;
	}

	if (!isObject(obj2)) {
		return false;
	}

	if (!isObject(obj3)) {
		return false;
	}

	var str1 = parseInt(trim(obj1.value), 10);
	var str2 = parseInt(trim(obj2.value), 10) - 1;
	var str3 = parseInt(trim(obj3.value), 10);

	if (!isValidYear(obj1, name)) {
		return false;
	}

	if (!isValidMonth(obj2, name)) {
		return false;
	}

	var endstr3 = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	if ((str1 % 4 == 0 && str1 % 100 != 0) || str1 % 400 == 0) {
		endstr3[1] = 29;
	}

	if (!isNumber(obj3) || !(str3 >= 1 && str3 <= endstr3[str2])) {
		if (name) {
			error(obj3, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	return true;
}

/**
 * 객체의 값이 일에 적합한지 검사한다.(삭제대상)
 * 
 * @param obj
 *            객체 ID
 * @param sep
 *            구분 문자
 * @param name
 *            객체 이름
 * @return
 */
function isValidDay2(obj, sep, name) {
	return isValidDate2(obj, sep, name);
}

/**
 * 객체의 값이 일에 적합한지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param sep
 *            구분 문자
 * @param name
 *            객체 이름
 * @return
 */
function isValidDate2(obj, sep, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);
	var arr = new Array();
	arr = str.split(sep);

	if (sep.length == 0) {
		arr[0] = str.substring(0, 4);
		arr[1] = str.substring(4, 6);
		arr[2] = str.substring(6, 8);
	} else {
		if (arr.length != 3) {
			if (name) {
				error(obj, name, "{name+은는} [" + sep + "]로 구분해 주세요.");
			}

			return false;
		}
	}

	if (!ValidDate(arr[0], arr[1], arr[2])) {
		if (name) {
			error(obj, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	if (arr[1].length == 1) {

		arr[1] = "0" + arr[1];
	}

	if (arr[2].length == 1) {

		arr[2] = "0" + arr[2];
	}

	return true;
}

/**
 * 객체의 값이 연월에 적합한지 검사한다.
 * 
 * @param obj1
 *            객체1 ID
 * @param obj2
 *            객체2 ID
 * @param name
 *            객체 이름
 * @return
 */
function isValidYearMonth(obj1, obj2, name) {
	if (!isObject(obj1)) {
		return false;
	}

	if (!isObject(obj2)) {
		return false;
	}

	var str1 = parseInt(trim(obj1.value), 10);
	var str2 = parseInt(trim(obj2.value), 10);

	if (!isValidYear(obj1, name) || !isValidMonth(obj2, name)) {
		return false;
	}

	return true;
}

/**
 * 객체의 값이 연월에 적합한지 검사한다.
 * 
 * @param obj
 *            객체 ID
 * @param sep
 *            구분 문자
 * @param name
 *            객체 이름
 * @return
 */
function isValidYearMonth2(obj, sep, name) {
	if (!isObject(obj)) {
		return false;
	}

	if (isNull(obj, name)) {
		return false;
	}

	var str = trim(obj.value);
	var arr = new Array();

	if (sep.length == 0) {
		arr[0] = str.substring(0, 4);
		arr[1] = str.substring(4, 6);
	} else {
		arr = str.split(sep);

		if (arr.length != 2) {
			if (name) {
				error(obj, name, "{name+은는} [" + sep + "]로 구분해 주세요.");
			}

			return false;
		}
	}

	if (!ValidYear(arr[0]) || !ValidMonth(arr[1])) {
		if (name) {
			error(obj, name, "{name+이가} 유효하지 않습니다. 확인 후 다시 입력해 주세요.");
		}

		return false;
	}

	if (arr[1].length == 1) {

		arr[1] = "0" + arr[1];
	}

	return true;
}

function insertSeperatorByWon(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	var signFlag = false;
	if (str.indexOf("-") != -1) {
		str = removeString(str, "-");
		signFlag = true;
	}

	var size = 3;
	var strMain = "";
	var strTail = "";
	var strTemp = "";
	var strSep = sep;

	if (str.indexOf(".") != -1) {
		strMain = str.substring(0, str.indexOf("."));
		strTail = str.substring(str.indexOf("."));
	} else {
		strMain = str;
	}

	if (str.indexOf(".") == -1) { // 소수점이 없을경우 -> ,(Comma)로 분할한다
		var strMainLength = strMain.length;

		if (strMainLength > size) {
			var divLength = parseInt((strMainLength) / size);
			var remLength = parseInt((strMainLength) % size);

			if (remLength > 0) {
				strTemp = strMain.substring(0, remLength) + strSep;
			}

			for (i = 0; i < divLength; i++) {
				if (i == 0) {
					strTemp = strTemp
							+ strMain.substring(remLength, remLength + size);
				} else {
					strTemp = strTemp
							+ strSep
							+ strMain.substring(remLength + (size * i),
									remLength + (size * i) + size);
				}
			}
		} else {
			strTemp = strMain;
		}

		obj.value = (signFlag ? "-" : "") + strTemp + strTail;
	} else { // 소수점이 있을 경우
		var strMainLength = strMain.length;
		if (strMainLength <= size) { // 소수점이 있고 소수점이상이 3자리를 초과하지 않을경우 -> 소수점이상 그대로 복사
			strTemp = strMain;
		} else { // 소수점이 있고 소수점이상이 3자리를 초과할 경우 -> 소수점이상 ,(Comma)로 분할한다.
			var divLength = parseInt((strMainLength) / size);
			var remLength = parseInt((strMainLength) % size);

			if (remLength > 0) {
				strTemp = strMain.substring(0, remLength) + strSep;
			}

			for (i = 0; i < divLength; i++) {
				if (i == 0) {
					strTemp = strTemp
							+ strMain.substring(remLength, remLength + size);
				} else {
					strTemp = strTemp
							+ strSep
							+ strMain.substring(remLength + (size * i),
									remLength + (size * i) + size);
				}
			}
		}

		obj.value = (signFlag ? "-" : "") + strTemp + strTail;
	}
}

function insertSeperatorByYearMonth(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	if (str.length == 4) {
		obj.value = str.substring(0, 4);
	} else if (str.length > 4) {
		obj.value = str.substring(0, 4) + sep
				+ str.substring(4, (str.length > 6) ? 6 : str.length);
	}

	return true;
}

function insertSeperatorBySsn(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	if (str.length == 6) {
		obj.value = str.substring(0, 6);
	} else if (str.length > 6) {
		obj.value = str.substring(0, 6) + sep
				+ str.substring(6, (str.length > 13) ? 13 : str.length);
	}

	return true;
}

function insertSeperatorByDate(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	if (str.length == 4) {
		obj.value = str.substring(0, 4);
	} else if (str.length > 4 && str.length < 6) {
		obj.value = str.substring(0, 4) + sep
				+ str.substring(4, (str.length > 6) ? 6 : str.length);
	} else if (str.length == 6) {
		obj.value = str.substring(0, 4) + sep + str.substring(4, 6);
	} else if (str.length > 6) {
		obj.value = str.substring(0, 4) + sep + str.substring(4, 6) + sep
				+ str.substring(6, (str.length > 8) ? 8 : str.length);
	}

	return true;
}

function insertSeperatorByTime(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	if (str.length == 2) {
		obj.value = str.substring(0, 2);
	} else if (str.length > 2) {
		obj.value = str.substring(0, 2) + sep
				+ str.substring(2, (str.length > 4) ? 4 : str.length);
	}

	return true;
}

function insertSeperatorByDay(obj, sep) {
	return insertSeperatorByDate(obj, sep);
}

function insertSeperatorByJumin(obj, sep) {
	return insertSeperatorBySsn(obj, sep);
}

function insertSeperatorByBrn(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	if (str.length == 3) {
		obj.value = str.substring(0, 3);
	} else if (str.length > 3 && str.length < 5) {
		obj.value = str.substring(0, 3) + sep
				+ str.substring(3, (str.length > 5) ? 5 : str.length);
	} else if (str.length == 5) {
		obj.value = str.substring(0, 3) + sep + str.substring(3, 5);
	} else if (str.length > 5) {
		obj.value = str.substring(0, 3) + sep + str.substring(3, 5) + sep
				+ str.substring(5, (str.length > 10) ? 10 : str.length);
	}

	return true;
}

function insertSeperatorByBizno(obj, sep) {
	return insertSeperatorByBrn(obj, sep);
}

function insertSeperatorByOrgno(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	if (str.length == 2) {
		obj.value = str.substring(0, 2);
	}

	if (str.length > 2) {
		obj.value = str.substring(0, 2) + sep
				+ str.substring(2, (str.length > 8) ? 8 : str.length);
	}

	return true;
}

function insertSeperatorByZipcode(obj, sep) {
	if (!isObject(obj)) {
		return false;
	}

	var str = trim(obj.value);
	str = removeString(str, sep);

	if (str.length == 3) {
		obj.value = str.substring(0, 3);
	} else if (str.length > 3) {
		obj.value = str.substring(0, 3) + sep
				+ str.substring(3, (str.length > 6) ? 6 : str.length);
	}

	return true;
}
