	// Companion 적용을 위해 파일 인코딩을 반드시 UTF-8로 설정
	 
	$(document).ready(function(){
		//이미지버튼에서 Enter key 입력시 click이벤트 발생.
		$(":input:image").keypress(function(e){
			if(e.which == 13) {
				this.click();
				return false;
			}
		});
		//테이블 header에서 엔터키 쳤을 경우 특정 이벤트를 실행되는 것 방지.
		$("a").keypress(function(e){
			if(e.which == 13) {
				if(this.tabIndex == 0 && this.href == "") {
					return false;
				}
			}
		});
	});

	//항목리스트enable,disable
	function cfncEnableList(list, fg) {
		for(var i = 0; i < list.length; i++) {
			cfncEnableObj(list[i], fg);
		}
	}
	
	//항목enable,disable
	function cfncEnableObj(obj, fg) {
		if(fg){
			obj.css("border", "1px solid #bdc4d4").css("background-color", "").css("color", "#000000").attr("readOnly", "").attr("tabIndex", "0");
			//obj.css("border", "1px solid #cfcfcf").css("background-color", "").attr("readOnly", "").attr("tabIndex", "0");
			if(obj[0].tagName.toLowerCase() == "select") obj.attr("disabled", "");
		} else {
			obj.css("border", "1px solid #bdc4d4").css("background-color", "#f4f5f9").css("color", "#8f96a7").attr("readOnly", "readOnly").attr("tabIndex", "-1");
			//obj.css("border", "1px solid #cfcfcf").css("background-color", "#f1f1f1").attr("readOnly", "readOnly").attr("tabIndex", "-1");
			if(obj[0].tagName.toLowerCase() == "select") obj.attr("disabled", "disabled");
		}
		//.tax_col .input_on{border:1px solid #cfcfcf; height:16px; background-color:#f1f1f1; padding-left:2px; padding-top:2px; font-size:11px;}
		//.tax .input_on, .tax_blue .input_on, .tax_row .input_on, .tax_tb .input_on{border:1px solid #bdc4d4; height:16px; background-color:#f4f5f9; padding-left:1px; padding-top:1px; font-size:11px; color:#8f96a7;}
	}
	
	//항목 활성화(true), 비활성화(false) 여부
	function cfncGetEnable(obj) {
		if(obj[0].readOnly == "" && obj[0].disabled == "") {
			return true;
		} else {
			return false;
		}
	}
	
	//-,+금액만들기(+금액은 -금액으로, -금액은 +금액으로 셋팅)
	function cfncSetPlusMinusAmt(obj, val) {
		if(val != "") {
			if(val > 0) {
				obj.setFormatedValue("-" + val);
			} else if(val < 0) {
				obj.setFormatedValue(val.substring(1));
			} else {
				obj.setFormatedValue(val);
			}
		} else {
			obj.setFormatedValue("");
		}
	}
	
	//포커스주기
	function cfncSelect(obj) {
		try {
			if(obj.length == null) {
				if(obj.value == "") {
					obj.focus();
				} else {
					obj.focus(); //select만 주면 약간의 문제 발생
					obj.select();
				}			
			} else {
				if(obj[0].value == "") {
					obj[0].focus();
				} else {
					obj[0].focus(); //select만 주면 약간의 문제 발생
					obj[0].select();
				}
			}
		} catch(exception) {
			return; //포커스 오류 날때.
		}
	}
	
	//종사업자번호 값 셋팅하기
	function cfncSetSubBdNo(obj, val) {
		if(val == "0") obj.value = "";
		else obj.value = val;
	}
	
	//종사업자번호 값 가져오기
	function cfncGetSubBdNo(obj) {
		if(obj.value == "") return "0";
		else return obj.value;
	}
	
	//숫자길이체크
	//obj:체크할항목,msg:항목이름,n:정수자리수,p:소수자리수
	function cfncChkNumber(obj, msg, n, p) {
		if(obj.readOnly != "") return true; //비활성화항목은 체크하지 않는다.
		var xVal = cfParseNum(obj.getOriginalValue())+"";
		//if(!cfIsNumber(obj.getOriginalValue()) || !cfCheckNumberSize(xVal, n, p)) { //!!! 오류발생
		if(isNaN(obj.getOriginalValue())) {
			alert(msg + " 확인하시기 바랍니다.\n\n숫자만 입력가능합니다.");
			cfncSelect(obj);
			return false;
			
		} else if(!cfCheckNumberSize(xVal, n, p)) {
			if(p == 0) 
				alert(msg + " 확인하시기 바랍니다.\n\n정수 " + n + "자리까지 입력가능합니다.");
			else 
				alert(msg + " 확인하시기 바랍니다.\n\n정수 " + n + "자리, 소수점 " + p + "자리까지 입력가능합니다.");
				
			cfncSelect(obj);
			return false;
		}
		return true;
	}

	//필수입력체크
	function cfncChkRequire(obj, msg, fg) {
		if($(obj)[0].readOnly != "") return true; //비활성화항목은 체크하지 않는다.
		if(fg == "") return true;                 //fg값이 없으면 필수입력체크를 안한다.
		var xVal = $(obj)[0].value.trim();
		var msg = msg == null ? "" : msg;
		if(xVal == "") {
			alert(msg + " 필수 입력 항목입니다.");
			$(obj)[0].focus();
			return false;
		}
		return true;
	}
	
	//성명체크
	function cfncChkReqNm(obj, msg, busnidObj) {
		if($(obj)[0].readOnly != "") return true; //비활성화항목은 체크하지 않는다.
		var exprs = new FormFormater().formValidatorUtil.getExpressions($(busnidObj)[0]);
		var xBusnid;
		if(exprs == null) {
			xBusnid = $(busnidObj)[0].value;
		} else {
			xBusnid = $(busnidObj)[0].getOriginalValue();
		}
		if(xBusnid.length == 10 && xBusnid.substring(3,5) == "83") {			
		} else {
			return cfncChkRequire(obj, msg);
		}
		return true;
	}
	
	//필수입력체크(숫자)
	function cfncChkRequireNum(obj, msg) {
		if($(obj)[0].readOnly != "") return true; //비활성화항목은 체크하지 않는다.
		var xVal = $(obj)[0].value.trim();
		var msg = msg == null ? "" : msg;
		if(xVal == "" || xVal == "0") {
			alert(msg + " 필수 입력 항목입니다.");
			$(obj)[0].focus();
			return false;
		}
		return true;
	}
	
	//숫자길이체크
	//obj:체크할항목,msg:항목이름,n:정수자리수,p:소수자리수
	function cfncChkNumSup(obj, msg, n, p) {
		var xVal = cfParseNum(obj.getOriginalValue())+"";
		if(isNaN(obj.getOriginalValue())) {
			alert(msg + " 확인하시기 바랍니다.\n\n숫자만 가능합니다.");
			//cfncSelect(obj);
			return false;
			
		} else if(!cfCheckNumberSize(xVal, n, p)) {
			if(p == 0) 
				alert(msg + " 확인하시기 바랍니다.\n\n정수 " + n + "자리까지 가능합니다.");
			else 
				alert(msg + " 확인하시기 바랍니다.\n\n정수 " + n + "자리, 소수점 " + p + "자리까지 가능합니다.");
				
			//cfncSelect(obj);
			return false;
		}
		return true;
	}
	
	//필수입력체크(숫자)
	function cfncChkRequireNumSup(obj, msg, fg) {
		var xVal = $(obj)[0].value.trim();
		var msg = msg == null ? "" : msg;
		if(xVal == "" || xVal == "0") {
			if(fg != true) {
				alert(msg + " '0' 이 될 수 없습니다.");
				//$(obj)[0].focus();
				return false;
			}
		}
		return true;
	}

	//항목클리어
	function cfncClearList(objArray) {
		for(var i = 0; i < objArray.length; i++) {
			objArray[i][0].value = " ";
			objArray[i][0].value = "";
			//if(objArray[i][0].class == 'w9') {
				//cfnClearEmail(objArray[i]);
			//}
		}
	}
	
	//항목클리어(objArray:세액, objArray2:공급가액)
	function cfncClearTx(objArray, objArray2) {
		for(var i = 0; i < objArray.length; i++) {
			if(objArray2[i][0].value == "") objArray[i][0].value = "";
			else objArray[i][0].value = "0";
			//if(objArray[i][0].class == 'w9') {
				//cfnClearEmail(objArray[i]);
			//}
		}
	}
	
	//이메일값 클리어
	function cfnClearEmail(obj) {
		var objStr = obj[0].id.substring(0, obj[0].id.length-2);
		cfncSetEmailVal(objStr, "");
	}
	
	//공급가액 합계
	function cfncSetTotAmt(totAmt, supAmtSm, txSm) {
		var xRet = (cfParseNum(supAmtSm.getOriginalValue()) + cfParseNum(txSm.getOriginalValue()))+"";
		if(isNaN(xRet)) xRet = "";
		totAmt.setFormatedValue(xRet);
	}

	//세액 합계
	function cfncSetTxSm(txSm, supAmtSm) {
		if(txSm.readOnly != "") return;
		var xSupAmtSm = cfParseNum(supAmtSm.getOriginalValue());
		var xRet = cfncGetFloorNum(xSupAmtSm * 0.1)+"";
		if(isNaN(xRet)) xRet = "";
		txSm.setFormatedValue(xRet);
	}
	
	//절사 - (-)금액은 +1
	function cfncGetFloorNum(val) {
		var floorVal = Math.floor(val);
		if(val != floorVal && val < 0) {
			floorVal = floorVal + 1;
		}
		return floorVal;
	}
	
	//금액 합계
	function cfncSetTotAmtSm(obj, objArray) {
		var val = 0;
		for(var i = 0; i < objArray.length; i++) {
			val += cfParseNum(objArray[i].getOriginalValue());
		}
		obj.setFormatedValue(val+"");
	}

	//품목공급가액 계산
	function cfncSetThngSupAmt(thngQty, thngUntpc, supAmt) {
		var xThngQty   = cfParseNum($(thngQty)[0].getOriginalValue());
		var xThngUntpc = cfParseNum($(thngUntpc)[0].getOriginalValue());
		var xRet = cfncGetFloorNum((xThngQty * xThngUntpc).toFixed(5)) + "";
		if(isNaN(xRet)) xRet = "";
		$(supAmt)[0].setFormatedValue(xRet);
	}

	//품목세액 계산 (영세율 : kndCd(02,05))
	function cfncSetThngTx(supAmt, tx, kndCd) {
		//window.status = kndCd;
		var isZrotx = false;
		if(kndCd == "02" || kndCd == "05") isZrotx = true; 
		if(!isZrotx && $(tx)[0].readOnly != "") return;
		if(isZrotx) { 
			if($(supAmt)[0].getOriginalValue() == "") $(tx)[0].setFormatedValue("");
			else $(tx)[0].setFormatedValue("0");
			return;
		}
		var xSupAmt = cfParseNum($(supAmt)[0].getOriginalValue());
		var xRet = cfncGetFloorNum(xSupAmt * 0.1)+"";
		if(isNaN(xRet)) xRet = "";
		$(tx)[0].setFormatedValue(xRet);
	}
	
	//품목삭제
	function cfncClearThng(inx, gb) {
		var xPrefix = "";
		if(gb != null) xPrefix = "edit";
		$("#"+xPrefix+"dd"+inx)[0].value           = "";
		$("#"+xPrefix+"thngNm"+inx)[0].value       = "";
		$("#"+xPrefix+"thngStndrdNm"+inx)[0].value = "";
		$("#"+xPrefix+"thngQty"+inx)[0].value      = "";
		$("#"+xPrefix+"thngUntpc"+inx)[0].value    = "";
		$("#"+xPrefix+"thngSupAmt"+inx)[0].value   = "";
		if($("#"+xPrefix+"thngTx"+inx)[0] != null) $("#"+xPrefix+"thngTx"+inx)[0].value = "";
		$("#"+xPrefix+"thngNote"+inx)[0].value     = "";		
	}
	
	//바이트체크
	function cfncChkByte(obj, msg, num) {
		if(obj.readOnly != "") return true; //비활성화항목은 체크하지 않는다.
		var xMsg = msg + "," + num;				
		if(cfGetByteLenght(obj.value) > num) {
			cfAlert("IS.ERR.MAXBYTE_FAIL", xMsg, ",");
			cfncSelect(obj);
			return false;
		}
		return true;
	}

	// 년, 월, 일, 계산할 일자 (년도는 반드시 4자리로 입력)
	function cfncAddDay(yyyy, mm, dd, pDay) {
		var oDate; // 리턴할 날짜 객체 선언
		dd = dd*1 + pDay*1; // 날짜 계산
		mm--; // 월은 0~11 이므로 하나 빼준다
		oDate = new Date(yyyy, mm, dd) // 계산된 날짜 객체 생성 (객체에서 자동 계산)
		return oDate;
	}

	// 년, 월, 일, 계산할 월 (년도는 반드시 4자리로 입력)
	function cfncAddMonth(yyyy, mm, dd, pMonth) {
		var cDate; // 계산에 사용할 날짜 객체 선언
		var oDate; // 리턴할 날짜 객체 선언
		var cYear, cMonth, cDay // 계산된 날짜값이 할당될 변수
		mm = mm*1 + ((pMonth*1)-1); // 월은 0~11 이므로 하나 빼준다
		cDate = new Date(yyyy, mm, dd) // 계산된 날짜 객체 생성 (객체에서 자동 계산)
		cYear = cDate.getFullYear(); // 계산된 년도 할당
		cMonth = cDate.getMonth(); // 계산된 월 할당
		cDay = cDate.getDate(); // 계산된 일자 할당
		oDate = (dd == cDay) ? cDate : new Date(cYear, cMonth, 0); // 넘어간 월의 첫쨋날 에서 하루를 뺀 날짜 객체를 생성한다.
		return oDate;
	}

	// 날짜, 월 계산(tp-M:월,D:일)
	function cfncCalcDate(yyyymmdd, i, tp) {
		var cDate;
		var y,m,d,i;

		y = yyyymmdd.substring(0,4);
		m = cfParseNum(yyyymmdd.substring(4,6));
		d = cfParseNum(yyyymmdd.substring(6,8));

		if(tp == "D") {
			cDate = cfncAddDay(y, m, d, i)
		} else {
			cDate = cfncAddMonth(y, m, d, i)
		}

		var yyyy = cDate.getFullYear()+"";
		var mm   = (cDate.getMonth()+1+"").length < 2 ? "0"+(cDate.getMonth()+1) : (cDate.getMonth()+1+"");
		var dd   = cDate.getDate()+"".length < 2 ? "0"+cDate.getDate() : cDate.getDate()+"";

		return yyyy + mm + dd;
	}
	
	//이메일셋팅부분
	function cfncDomainListChange(domainList, emailAddr) {
		var xVal = $("#"+domainList).val();
		if (xVal == "") {//!!!direct_input
			cfncEnableObj($("#"+emailAddr), true);
			$("#"+emailAddr)[0].select();
			$("#"+emailAddr)[0].focus();
		} else {
			cfncEnableObj($("#"+emailAddr), false);
			$("#"+emailAddr).val(xVal);
		}
	}

	//이메일선택시(onChange)
	//firstSelectedValue - optional (입력안해도됨)
	function cfncSetEmailDomainList(obj, firstSelectedValue) {
		var xDomain = new Array(
				["","직접입력"],//!!!direct_input
				["chol.com","chol.com"],
				["daum.net","daum.net"],
				["dreamwiz.com","dreamwiz.com"],
				["empal.com","empal.com"],
				["freechal.com","freechal.com"],
				["hanafos.com","hanafos.com"],
				["hanmail.net","hanmail.net"],
				["hotmail.com","hotmail.com"],
				["kebi.com","kebi.com"],
				["korea.com","korea.com"],
				["lycos.co.kr","lycos.co.kr"],
				["naver.com","naver.com"],
				["nate.com","nate.com"],
				["netian.com","netian.com"],
				["paran.com","paran.com"],
				["unitel.co.kr","unitel.co.kr"],
				["yahoo.co.kr","yahoo.co.kr"]
	          );

		obj.length = 0;
		for(var i = 0; i < xDomain.length; i++) {
			cfncAddOption(obj, xDomain[i][1], xDomain[i][0], firstSelectedValue);
		}
	}
	
	//값넣기
	//firstSelectedValue - optional (입력안해도됨)
	function cfncAddOption(obj, text, value, firstSelectedValue) {
		var xOption = document.createElement("option");
		var xText = document.createTextNode(text);
		
		xOption.setAttribute("value", value);
		xOption.appendChild(xText);
		
		if(firstSelectedValue != null) {
			if( xOption.getAttribute("value") == firstSelectedValue){//''){
				xOption.setAttribute("selected", "selected");
			}
		} else {
			if( xOption.getAttribute("value") == ""){
				xOption.setAttribute("selected", "selected");
			}	
		}
		obj.appendChild(xOption);
		
	}

	//이메일 값 셋팅
	function cfncSetEmailVal(objStr, val) {		
		if(val.trim() == "") {
			//return;
		}
		var xObj1 = $("#"+objStr+"_1")[0];
		var xObj2 = $("#"+objStr+"_2")[0];
		var xObj3 = $("#"+objStr+"_3")[0];
		var xVal1 = val.split("@")[0] == null ? "" : val.split("@")[0];;
		var xVal2 = val.split("@")[1] == null ? "" : val.split("@")[1];
		var xVal3 = "";//!!!direct_input
		
		xObj1.value = xVal1;
		xObj2.value = xVal2;
		for(var i = 0; i < xObj3.length; i++) {
			if(xObj3.options[i].value == xVal2) {
				xVal3 = xVal2;
				break;
			}
		}
		//xObj3.value = xVal3;
		setTimeout(function(){xObj3.value = xVal3}, 10);
		
		if (xVal3 == "") {//!!!direct_input
			cfncEnableObj($("#"+objStr+"_2"), true);
		} else {
			cfncEnableObj($("#"+objStr+"_2"), false);
		}
	}

	//이메일 값 가져오기
	function cfncGetEmailVal(objStr) {
		var xObj1 = $("#"+objStr+"_1")[0];
		var xObj2 = $("#"+objStr+"_2")[0];

		if(xObj1.value + xObj2.value == "") {
			return "";
		} else {
			return xObj1.value + "@" + xObj2.value;
		}
	}
	
	//이메일 체크
	//objStr : String (뒤에구분자 뺀 항목명문자(_1._2._3제외))
	function cfncChkEmail(objStr) {	
		
		var val = cfncGetEmailVal(objStr);
		var xObj1 = $("#"+objStr+"_1")[0];
		
		if(val.trim() == "") return true; //필수입력 아님

		if(cfGetByteLenght(val) > 50) {
			alert("이메일은 50바이트 이하이어야 합니다.");
			cfncSelect(xObj1);
			return false;
		}
		if(!cfIsEmail(val)) {
			alert("이메일 형식이 잘못되었습니다.");
			cfncSelect(xObj1);
			return false;
		}
		return true;
	}
	
	//이메일 체크
	//lastObj : Object (이메일 세 개 항목 중 마지막 항목(_3))
	function cfncChkEmailAddr(lastObj) {	
		
		var objStr = lastObj.id.substring(0, lastObj.id.length-2);
		var firstObj = $("#"+objStr+"_1");
		if(firstObj[0].readOnly != "") return true; //비활성화항목은 체크하지 않는다.
		var val = cfncGetEmailVal(objStr);
		//alert(objStr + ":" + val);
		if(val.trim() == "") return true; //필수입력 아님

		if(cfGetByteLenght(val) > 50) {
			alert("이메일은 50바이트 이하이어야 합니다.");
			cfncSelect(firstObj);
			return false;
		}
		if(!cfIsEmail(val)) {
			alert("이메일 형식이 잘못되었습니다.");
			cfncSelect(firstObj);
			return false;
		}
		return true;
	}
	
	// 팝업 오픈
	function cfncOpenWindow(url, winName, width, height, left, top, noXecure) {
		var winProps = "toolbar=0,location=0,directories=0,status=yes,menubar=0,scrollbars=yes,resizable=yes"
		             + ",width=" + width + ",height=" + height;
		
		if(left!=null && left!="") winProps += ",left=" + left;
		if(top!=null && top!="") winProps += ",top=" + top;
		             
		if(noXecure == null) {
			XecureNavigate(url, winName, winProps);
		} else {
			var win = window.open(url, winName, winProps);
	  		win.focus();
		}
	}
	
	/*
	가산세기간 - 작성일자의 다음 달 10일까지(공휴일인경우 익일)
	과세기간   - 작성일자가 1~6월달은 7월 10일까지, 7~12월은 다음해 1월 10일까지
	
	현재월의 10일을 기준으로 반대로 계산
	
	가산세기간 
	  - 현재날짜가 현재월의 10일 이전 : 작성일자가 전달 1일 이전은 가산세
	  - 현재날짜가 현재월의 10일 이후 : 작성일자가 이번달 1일 이전은 가산세
	  
	과세기간
	  - 계산한 날짜 : 현재년월 + 10 일 + 공휴일;
	  	if(계산한 날짜가 1월이면)
		  	if(현재년월일  <= 계산한 날짜) {
		  		작성일자가 전년도 7월 1일 이전은 과세기간 오류(전년도7월 ~ 12월)
		  	} else {
		  		작성일자가 당년도 1월 1일 이전은 과세기간 오류(당년도1월 ~ 6월)
		  	}
		  	
	  	else if(계산한 날짜가 7월이면)
		  	if(현재년월일  <= 계산한 날짜) {
		  		작성일자가 당년도 1월 1일 이전은 과세기간 오류(당년도1월 ~ 6월)
		  	} else {
		  		작성일자가 당년도 7월 1일 이전은 과세기간 오류(당년도7월 ~ 12월)
		  	}
		else if(2,3,4,5,6월이면)
			작성일자가 당년도 1월 1일 이전은 과세기간 오류(당년도1월 ~ 6월)
		else 
			작성일자가 당년도 7월 1일 이전은 과세기간 오류(당년도7월 ~ 12월)
	*/	
	
	//가산세기간체크
	//writeDt:작성일자, curDt10:현재년월의10일, curDt:현재날짜
	function cfncChkAddTxPrd(writeDt, curDt10, curDt) {
		//return true; //가산세 체크 안함. !!! 나중에 필요에 따라서 주석처리할 것.
		var maxDt = cfncCalcDate(curDt, -1, 'M').substring(0,6) + '01';		
		if(curDt > curDt10) {
			maxDt = curDt.substring(0,6) + '01';
		}
		if(writeDt < maxDt) {
			return false;
		}
		return true;
	}
	  	
	//가산세 confirm : fg:발행보류 여부
	function cfncConfirmAddTx(fg) {		
		if(!confirm(cfncAddTxMsg(fg))) return false;
		return true;
	}
	
	//가산세메세지
	function cfncAddTxMsg(fg) {
		var xMsg = cfGetMessage("IS.CFM.ADDTAX_ISU");
		if(fg) xMsg = cfGetMessage("IS.CFM.ADDTAX_ISU_TMEP");		
		return xMsg;
	}
	
	//휴,폐업자메세지
	function cfncBusnStatusMsg(fg, cd) {
		var xMsg = "";
		if(cd == "1") {
			xMsg += "휴업 중인 사업자입니다.";
		} else if(cd == "2") {
			xMsg += "폐업된 사업자입니다.";
		}
		if(fg) xMsg += "\n\n발행보류하시겠습니까?";
		else   xMsg += "\n\n발행하시겠습니까?";
		
		return xMsg;
	}
	
	//과세기간체크
	//writeDt:작성일자, curDt10:현재년월의10일, curDt:현재날짜
	function cfncChkAssPrd(writeDt, curDt10, curDt) {
		//alert("writeDt:"+writeDt+"\ncurDt:"+curDt+"\ncurDt10:"+curDt10);
		var writeMm = writeDt.substring(4,6);
		if(writeMm == "06" || writeMm == "12") {	//기존 로직은 6,12월만 해당
			var xMm = curDt.substring(4,6);
			var maxDt = curDt.substring(0,4) + '0101';
			if(xMm == "01") {
				if(curDt <= curDt10) {
					maxDt = cfncCalcDate(curDt, -12, 'M').substring(0,4) + '0701';
				}
			} else if(xMm == "07") {
				if(curDt > curDt10) {
					maxDt = curDt.substring(0,4) + '0701';
				}
			} else if(xMm == "08" || xMm == "09" || xMm == "10" || xMm == "11" || xMm == "12") {
				maxDt = curDt.substring(0,4) + '0701';
			}
			//alert("작성일자:"+writeDt + ",max:" + maxDt + ",curDt:" + curDt + ",curDt10:" + curDt10);
			if(writeDt < maxDt) {
				return false;
			}
		} else {
			var maxDt = "";		
			if(writeMm == "01" || writeMm == "02" || writeMm == "03" || writeMm == "04" || writeMm == "05") {
				maxDt = writeDt.substring(0,4) + "0630";
			} else if(writeMm == "07" || writeMm == "08" || writeMm == "09" || writeMm == "10" || writeMm == "11") {
				maxDt = writeDt.substring(0,4) + "1231";
			}
			
			if(curDt > maxDt) return false;
		}
		return true;		
	}
	
	//과세기간체크(내국신용장)
	//writeDt:작성일자, curDt10:현재년월의10일, curDt:현재날짜
	function cfncChkAssPrdRvs05(writeDt, curDt10, curDt) {
		//alert("writeDt:"+writeDt+"\ncurDt:"+curDt+"\ncurDt10:"+curDt10);
		var writeMm = writeDt.substring(4,6);
		var xMm = curDt.substring(4,6);
		var maxDt = curDt.substring(0,4) + '0101';
		if(xMm == "01") {
			if(curDt <= curDt10) {
				maxDt = cfncCalcDate(curDt, -12, 'M').substring(0,4) + '0701';
			}
		} else if(xMm == "07") {
			if(curDt > curDt10) {
				maxDt = curDt.substring(0,4) + '0701';
			}
		} else if(xMm == "08" || xMm == "09" || xMm == "10" || xMm == "11" || xMm == "12") {
			maxDt = curDt.substring(0,4) + '0701';
		}
		//alert("작성일자:"+writeDt + ",max:" + maxDt + ",curDt:" + curDt + ",curDt10:" + curDt10);
		if(writeDt < maxDt) {
			return false;
		}
		return true;		
	}
	
	//내국신용장 작성일자 체크-수정분(바로 이전 기의 자료만 수정가능)
	function cfncChkWriteDt05(xWriteDt, curDate) {
		var gi1 = [01,02,03,04,05,06];
		var gi2 = [07,08,09,10,11,12];
		var frDt, toDt;
		var xMM    = curDate.substring(4,6);
		var xYYYY  = curDate.substring(0,4);
		
		if(cfncIsExist(xMM, gi1)) {
			frDt = (xYYYY-1) + "07" + "01";
			toDt = (xYYYY-1) + "12" + "31";			
		} else {
			frDt = xYYYY + "01" + "01";
			toDt = xYYYY + "06" + "30";
		}

		if(xWriteDt < frDt || xWriteDt > toDt) {
			return false;
		}
		return true;
	}
	
	//내국세 작성일자 체크(수정분)
	//writeDt:작성일자, maxRvsDt:수정분 작성일자 max
	function cfncChkRvsPrd(writeDt, maxRvsDt) {
		//alert("작성일자:"+writeDt + ",max:" + maxDt + ",curDt:" + curDt + ",curDt20:" + curDt20);
		if(writeDt > maxRvsDt) {
			return false;
		}
		return true;
	}
	
	//과세기간 오류 메시지
	function cfncGetMstDt(fg) {
		var msg = "";
		/*
        msg = "과세기간이 지난 자료이므로 발행할 수 없습니다.\n\n"
            + "작성일자가 1월~6월인 경우는 6월 30일까지,\n"
            + "7월~12월인 경우는 12월 31일까지 발행이 가능합니다.\n"
            + "(단, 작성일자가 6월은 7월10일까지, 12월은 다음해 1월 10일까지 가능합니다)";
        */
        msg = "과세기간 이내에만 발행하실 수 있습니다.\n\n"
            + "단, 과세기간 마지막 달인 6월과 12월은\n\n"
            + "익월 10일까지 발행 가능합니다.";
        
        if(fg != null) {
            msg = "과세기간 이내에만 발행하실 수 있습니다.\n\n"
            	+ "내국신용장 사후개설은\n\n"
                + "작성일자가 1월~6월인 경우는 7월 20일까지,\n\n"
                + "7월~12월인 경우는 다음해 1월 20일까지 발행이 가능합니다.";
        }
		return msg;
	}
	
	//체크박스 전체 체크
	function cfncToggleCheckbox(toggleboxObj, checkboxName, maxChkCnt) {
		var chkCnt = 0;
		$("input[name*='" + checkboxName + "']").each(function() {
			if(this.disabled == "") {
				if(maxChkCnt == null) {
					this.checked = toggleboxObj.checked;
					chkCnt++;
				} else {
					if(chkCnt < maxChkCnt) {
						this.checked = toggleboxObj.checked;
						chkCnt++;
					} else {
						this.checked = "";
					}
				}
			} else {
				this.checked = "";
			}
		});
	}
	
	//중복체크
	function cfncIsDup(val, val2) {
		if(val ==  val2) {
			return true;
		}
		return false;
	}
	
	//값이 포함 여부
	//val:array, val2:array
	function cfncIsExist(val, list) {
		for(var i = 0; i < list.length; i++) {
			if(val ==  list[i]) {
				return true;
			}
		}
		return false;
	}
	
	// 날짜 Validation 
	/*
	 * startDtObjVal : 시작 일자 Value
	 * endDtObjVal   : 종료 일자 Value
	 * startDtObj    : 시작 일자 obj
	 * endDtObj      : 종료 일자 obj
	 */
	function cfChkDateValidate(startDtObjVal, endDtObjVal,startDtObj, endDtObj, todayVal){
		var startWriteMm = eval(startDtObjVal.substring(4, 6));
		var startWriteDd = eval(startDtObjVal.substring(6, 8));
		var startWriteYy = eval(startDtObjVal.substring(0, 4));
		
		var endWriteMm   = eval(endDtObjVal.substring(4, 6));
		var endWriteDd   = eval(endDtObjVal.substring(6, 8));
		var endWriteYy   = eval(endDtObjVal.substring(0, 4));
		//alert(startWriteMm);
		if( isNaN(startDtObjVal) || startDtObjVal.length!=8 ){
			alert("유효한 날짜가 아닙니다.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		}
		if( isNaN(endDtObjVal) || endDtObjVal.length!=8 ){
			alert("유효한 날짜가 아닙니다.");
			endDtObj.focus();
			endDtObj.select();
			return false;
		}
		if(!cfDtVt(startWriteMm, startWriteDd)){
			alert("유효한 날짜가 아닙니다.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		}
		if(!cfDtVt(endWriteMm, endWriteDd)){
			alert("유효한 날짜가 아닙니다.");
			endDtObj.focus();
			endDtObj.select();
			return false;
		}
		if( startDtObjVal == "" ){
			alert("작성일자를 확인하십시오.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		}
		if(  endDtObjVal == ""){
			alert("작성일자를 확인하십시오.");
			endDtObj.focus();
			endDtObj.select();
			return false;
		}
		
		if( !cfTodayValidate(startDtObj, startDtObjVal, todayVal)) return false;
		if( !cfTodayValidate(endDtObj,   endDtObjVal, todayVal)) return false;
		
		if( startWriteYy > endWriteYy ) { //2009 > 2008
			alert("날짜기간이 유효하지 않습니다.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		} else if ( startWriteYy == endWriteYy ) { //2009 == 2009
			
			if( startWriteMm > endWriteMm ) { //9 > 8
				alert("날짜기간이 유효하지 않습니다.");
				startDtObj.focus();
				startDtObj.select();
				return false;
			} else if ( startWriteMm == endWriteMm ) { // 9 == 9
				if( startWriteMm == 2){
					if( startWriteYy % 4 == 0 || startWriteYy % 100 == 0 ||startWriteYy % 400 == 0) {
						if(endWriteDd - startWriteDd > 27) {  //28 - 1
							alert("조회 기간을 한 달 이내로 조정하여 주십시오.");
							startDtObj.focus();
							startDtObj.select();
							return false;
						} else {
							
						}
					}else {
						if(endWriteDd - startWriteDd > 28) {  //29 - 1
							alert("조회 기간을 한 달 이내로 조정하여 주십시오.");
							startDtObj.focus();
							startDtObj.select();
							return false;
						}else {
							
						}
					}
				} else if( startWriteMm == 4 || startWriteMm == 6 || startWriteMm == 9 || startWriteMm == 11){
					if(endWriteDd - startWriteDd > 29) {  //30 - 1
						alert("조회 기간을 한 달 이내로 조정하여 주십시오.");
						startDtObj.focus();
						startDtObj.select();
						return false;
					} else {
						
					}
				}else {
					if(endWriteDd - startWriteDd > 30) {  //31 - 1
						alert("조회 기간을 한 달이내로 조정하여 주십시오.");
						startDtObj.focus();
						startDtObj.select();
						return false;
					} else {
						
					}
				}
			} else { //08 < 09  startWriteMm < endWriteMm
				if( endWriteMm - startWriteMm > 1 ) {// 08 09
					alert("조회 기간을 한 달 이내로 조정하여 주십시오.");
					startDtObj.focus();
					startDtObj.select();
					return false;
				} else if ( endWriteMm - startWriteMm == 1) { //09-08
					if(endWriteDd - startWriteDd >= 0 ) {  //02 -01
						alert("조회 기간을 한 달 이내로 조정하여 주십시오.");
						startDtObj.focus();
						startDtObj.select();
						return false;
					} else {
						
					}
				} else {
					
				}
			}
			
		} else { //2009 < 2010
			alert("조회 기간을 한 달 이내로 조정하여 주십시오.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		}
		
		
		return true;
	}
	
	function cfChkDateValidate2(startDtObjVal, endDtObjVal,startDtObj, endDtObj, todayVal){
		var startWriteMm = eval(startDtObjVal.substring(4, 6));
		var startWriteDd = eval(startDtObjVal.substring(6, 8));
		var startWriteYy = eval(startDtObjVal.substring(0, 4));
		
		var endWriteMm   = eval(endDtObjVal.substring(4, 6));
		var endWriteDd   = eval(endDtObjVal.substring(6, 8));
		var endWriteYy   = eval(endDtObjVal.substring(0, 4));
		if( isNaN(startDtObjVal) || startDtObjVal.length!=8 ){
			alert("유효한 날짜가 아닙니다.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		}
		if( isNaN(endDtObjVal) || endDtObjVal.length!=8 ){
			alert("유효한 날짜가 아닙니다.");
			endDtObj.focus();
			endDtObj.select();
			return false;
		}
		if(!cfDtVt(startWriteMm, startWriteDd)){
			alert("유효한 날짜가 아닙니다.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		}
		if(!cfDtVt(endWriteMm, endWriteDd)){
			alert("유효한 날짜가 아닙니다.");
			endDtObj.focus();
			endDtObj.select();
			return false;
		}
		if( startDtObjVal == "" ){
			alert("작성일자를 확인하십시오.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		}
		if(  endDtObjVal == ""){
			alert("작성일자를 확인하십시오.");
			endDtObj.focus();
			endDtObj.select();
			return false;
		}
		
		if( !cfTodayValidate(startDtObj, startDtObjVal, todayVal)) return false;
		if( !cfTodayValidate(endDtObj,   endDtObjVal, todayVal)) return false;
		
		if( startWriteYy > endWriteYy ) { //2009 > 2008
			alert("날짜기간이 유효하지 않습니다.");
			startDtObj.focus();
			startDtObj.select();
			return false;
		} else if ( startWriteYy == endWriteYy ) { //2009 == 2009
			if( startWriteMm > endWriteMm ) { //9 > 8
				alert("날짜기간이 유효하지 않습니다.");
				startDtObj.focus();
				startDtObj.select();
				return false;
			} 
		} 
		return true;
	}
	
	/* 검색기간 설정
	 * startDtObjVal : 시작 일자 Value
	 * endDtObjVal   : 종료 일자 Value
	 * type    : 'year', 'month', 'day'
	 * num      : 검색기간
	 * ex) cfChkSearchInterval('20100101', '20100201', 'day', 7)
	 */
 	function cfChkSearchInterval(startDtObjVal, endDtObjVal, type, num){

		var pre = startDtObjVal.replaceAll('-','');
		var next = endDtObjVal.replaceAll('-','');
		pre = pre.replaceAll('.','');
		next = next.replaceAll('.','');
		pre = pre.replaceAll('/','');
		next = next.replaceAll('/','');

		if (pre.length!=8 || isNaN(pre)) { alert('검색 시작일자가 유효하지 않습니다 '+pre); return false; }
		if (next.length!=8 || isNaN(next)) { alert('검색 종료일자가 유효하지 않습니다 '+next); return false; }

		pre = new Date(pre.substr(0,4),pre.substr(4,2)-1,pre.substr(6,2));
		next = new Date(next.substr(0,4),next.substr(4,2)-1,next.substr(6,2));

		var interval = next - pre;
		if (interval < 0) { alert('검색기간이 유효하지 않습니다 '); return false; }
		var day = 1000*60*60*24;
		var month = day*30;
		var year = month*12;

		if(type == 'year'){
			if(parseInt(interval/year, 10) < parseInt(num, 10) ){ return true; }
			else{ alert('검색기간은 '+ num +'년이내로 가능합니다.'); return false; }
		}else if(type == 'month'){
			if(parseInt(interval/month, 10) <  parseInt(num, 10)){  return true; }
			else{ alert('검색기간은 '+ num +'개월이내로 가능합니다.'); return false; }
		}else if(type == 'day'){
			if(parseInt(interval/day, 10) <  parseInt(num, 10) ){ return true; }
			else{ alert('검색기간은 '+ num +'일이내로 가능합니다.'); return false; }
		}


 	}

	// Email 체크
	function cfEmailValidate(obj, selectedObj) {
		if(obj.value=="") return true;
		var format = /^((\w|[\/\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
		if( obj.value.search(format)==-1 ) {
			alert("이메일 형식에 맞지 않습니다.");
			selectedObj.select();
			selectedObj.focus();
			return false;
		}
		return true;
	}
	
	function cfDtVt(objMmVal, objDtVal){
		if(objMmVal < 1 || objMmVal > 12) return false;
	
		if(objMmVal== 4 ||objMmVal== 6||objMmVal== 9||objMmVal== 11) {
			if( objDtVal > 30) return false;
		} else if(objMmVal== 1 ||objMmVal== 3||objMmVal== 5||objMmVal== 7 ||objMmVal== 8||objMmVal== 10||objMmVal== 12) {
			if( objDtVal > 31) return false;
		}
		return true;
	}
	
	function cfTodayValidate(objDt, objDtVal, todayVal){
		var todayYy      = ""; 
		var todayMm      = "";
		var todayDd      = "";
		
		if(todayVal == undefined || todayVal == ''){
			var today  = new Date(); 
			todayYy      = today.getFullYear(); 
			todayMm      = today.getMonth()+1;
			todayDd      = today.getDate(); 
		} else {
			todayYy = eval(todayVal.substring(0, 4));
			todayMm = eval(todayVal.substring(4, 6));
			todayDd = eval(todayVal.substring(6, 8));
		}
		
		var objYy = eval(objDtVal.substring(0, 4));
		var objMm = eval(objDtVal.substring(4, 6));
		var objDd = eval(objDtVal.substring(6, 8));
		
		if( objYy > todayYy){ // 2010 > 2009
			alert("오늘 이후 날짜를 조회할 수 없습니다.");
			objDt.focus();
			objDt.select();
			return false;
		} else if( objYy == todayYy) { // 2009 == 2009
			if( objMm > todayMm ) { //10 > 9
				alert("오늘 이후 날짜를 조회할 수 없습니다.");
				objDt.focus();
				objDt.select();
				return false;
			} else if( objMm ==  todayMm){ //8 == 8
				if( objDd > todayDd ) {
					alert("오늘 이후 날짜를 조회할 수 없습니다.");
					objDt.focus();
					objDt.select();
					return false;
				}else { // 30 == 30 or 29 < 30
					//무조건 참이므로 비교 대상 아님
				}
			} else { // 7 < 8
				//무조건 참이므로 비교 대상 아님
			}
		} else { // 2008 < 2009
			//무조건 참이므로 비교 대상 아님 
		}
		return true;
	}
	function cfSetValidEmail(fObj, sObj, resultObj){
		if( $.trim( fObj.value ) == "" && sObj.value !="") {
			resultObj.value = "";
		} 
		if( $.trim( fObj.value ) !="" && sObj.value !="") {
			resultObj.value = $.trim(fObj.value) + "@" + $.trim( sObj.value);	
		}	
		
		if ($.trim(resultObj.value) == "@"){
			resultObj.value = "";
		}
	}
	
	function cfValidCheck(obj, str, subObj){
		if($.trim(obj.value) == "" ) {
			alert(str+"은(는) 필수입력입니다.");		
			cfSetObjVal(obj,subObj);	
			return false;
		}else {
			return true;
		}
	}
	
	function cfSetObjVal(obj1, obj2) {
		if ( obj2.value =="0") obj2.value = "";
		obj1.focus();
		obj1.select();
	}
	
	//xml의 element값 가져오기
	function cfncGetElementVal(doc, elementName) {
		var sIdx = doc.indexOf("<"+elementName+">")+elementName.length+2;
		var eIdx = doc.indexOf("</"+elementName+">");
		return doc.substring(sIdx, eIdx);
	}
	
	//암복호화submit(isNotChk:true->validation 처리 & double posting 미처리)
	function cfncXecureSubmit(formNm, formTarget, formAction, allowDoublePosting) {
		//alert("암호화");
		cfAppendXecureForm();
		cfAppendXecureInput();
		var xForm = $("#"+formNm)[0];
		xForm.target = formTarget;
		xForm.action = formAction;
		// validation 처리 & double posting 미처리
		//if(ChkValid) xForm.submit();
		//else         
		xForm.submit(false, allowDoublePosting); //(submitByOriginal, allowDoublePosting)
		xForm.target = "";
		
		//더블포스팅, disable 해제
		//ebill_isSubmited = true;
		//var formFormater = new FormFormater();
		//formFormater.resetFormat();
	}
	
	//버튼 disable, enable(classNm:버튼에 적용된 클래스명)
	function cfncBtnEnable(classNm, fg) {
		if(fg) $("."+classNm).attr("disabled", "");
		else   $("."+classNm).attr("disabled", "disabled");
	}
	
	//html태그를 text로(&,<,>,"",') 함수
	function cfncHtmlToText(str) {
		return str.replaceAll("&amp;","&").replaceAll("&lt;","<").replaceAll("&gt;",">").replaceAll("&#034;","\"").replaceAll("&#039;","\'").replaceAll("!#$","\\");
	}
	
	//html태그를 text로(&,<,>,"",') prototype
	String.prototype.htmlToText = function() {
		return this.replaceAll("&amp;","&").replaceAll("&lt;","<").replaceAll("&gt;",">").replaceAll("&#034;","\"").replaceAll("&#039;","\'").replaceAll("!#$","\\");
	}

	//수정세금계산서 발행 방법
	function cfncDownCrossCertHelp() {
		cfDownloadFileAtFsEp('CrossCertWeb.pdf', '/form/CrossCertWeb.pdf','is');
	}