// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// 
// 전자세금계산서 외부 공통
//
// ----------------------------------------------------------------------------
//
// Companion 적용을 위해 파일 인코딩을 반드시 UTF-8로 설정
//
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

var cErrObj = null;
var cErrMsg = null;
var cMsgDic = {
				"ERR.OVER_LENGTH_L":"@는 @ 이내이어야  합니다",
				"ERR.OVER_LENGTH_O":"@은 @ 이내이어야  합니다"
              };

function cfSMF() {
	alert(cErrMsg);
	cErrObj.select();
	cErrObj.focus();
}

function cfSetErr(obj, msg) {
	if(cErrObj == null) {
		cErrObj = obj;
		cErrMsg = msg;
	}
}

/* ------------------------------------------------------------------------
* cfGetMsg		: 메시지 반환
* Parameter
  - code		: [String]  찾을 메시지 코드
  - arguments	: [String]  대체 문자
  - separator	: [String]  구분자
* Return		: [boolean]
------------------------------------------------------------------------ */
function cfGetMsg(code, arguments, separator) {
	if(code==null || code=="") {
		return null;
	}

	var xMessage = cMsgDic[code];
	
	if(arguments!=null) {
		if(separator==null) {
			xMessage = xMessage.replace("@", arguments);
		} else {
			var xArgumentArray = arguments.split(separator);
			var xIndex = 0;
			var xCount = 0;
			
			while( (xIndex = xMessage.xIndexOf("@", xIndex)) != -1 ) {
				xMessage = xMessage.replace("@", xArgumentArray[xCount]);
				xCount++;
			}
		}
	}
	
	return xMessage;
}

/* ------------------------------------------------------------------------
 * cfIsDate		: 날짜 유효성 여부
 * Parameter
   - date		: [String]  대상문자열 (형식:[YYYY] || [YYYYMM] || [YYYYMMDD])
 * Return       : [boolean]
 ------------------------------------------------------------------------ */
function cfIsDate(date) {
    var xYear;
    var xMon   = 1;
    var xDay   = 1;
    var xDate;

    if (date.length != 4 && date.length != 6 && date.length != 8) return false;

    if (isNaN(date)) return false;

    xYear  = parseInt(date.substring(0,4), 10);
	xMon   = parseInt(date.substring(4,6), 10);
	xDay   = parseInt(date.substring(6,8), 10);

    xDate  = new Date(xYear, xMon - 1, xDay);

    if (xYear != xDate.getFullYear()) return false;
    if (xMon != (xDate.getMonth() + 1)) return false;
    if (xDay != xDate.getDate()) return false;

    return true;
}

/* --------------------------------------------------------------------
 * cfIsEmail	: E-MAIL 유효성 여부
 * Parameter
	- email		: [String]  대상문자열
 * Return		: boolean
 * See Also		: none
------------------------------------------------------------------------ */
/***********************************************
* Email Validation script- ⓒ Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
function cfIsEmail(email) {
	//var xFilter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i;
	var xFilter = /^((\w|[\/\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/; //[]안에 가능한문자 (특수문자표시는 "\~")
	return xFilter.test(email);
}

 /* ------------------------------------------------------------------------
  * cfIsMoney    : 금액 여부 
  * Parameter
    - str        : [String]  	대상 문자열
  * Return       : [boolean]	true/false  금액형/금액형 아님
  ------------------------------------------------------------------------ */
function cfIsMoney(str) {
    if(str.trim() == "") return true;

    if(isNaN(str)) {
        return false;
    }
    
    if(str.substring(0, 1) == "-") {
    	if(str.substring(1, 2) == "0") return false;
    } else {
    	if(str.substring(0, 1) == "0") return false;
    }

    return true;
}

/* ------------------------------------------------------------------------
* cfIsDigit		: 0 ~ 9로 구성 여부
* Parameter
  - str       	: [String]  대상 문자열
* Return      	: [boolean]	true/false  0 ~ 9로구성/숫자 이외 문자 포함
------------------------------------------------------------------------ */
function cfIsDigit(str) {
	var x_re = new RegExp("\\D","ig");
	return !x_re.test(str);
}

/* ------------------------------------------------------------------------
 * cfGetByteLenght	: 문자의 Byte 수 반환
 * Parameter
   - str       	: [String]  대상 문자열
 * Return      	: [int]
------------------------------------------------------------------------ */
function cfGetByteLenght(str) {
	var xLen = 0;
	var xChr;

	for(var i = 0; i < str.length; i++) {
		xChr = escape(str.charAt(i));

		if (xChr.length == 1) {
			xLen ++;
		} else if (xChr.indexOf("%u") != -1)  {
			xLen += 2;
		} else if (xChr.indexOf("%") != -1)  {
			xLen += xChr.length / 3;
		}
	}

	return xLen;
	/*
	var xEscape = escape(str);
	var xEscLen = xEscape.length;
	var xEscCnt = cfGetCountEscape(xEscape);
	var xSpcCnt = cfGetCountChar(xEscape, '%');

	return xEscLen - (xEscCnt * 4) - ((xSpcCnt - xEscCnt) * 2);
	*/
}

/* ------------------------------------------------------------------------
* cfGetCountChar	: 특정 char 갯수 반환
* Parameter
  - str       	: [String]  대상 문자열
  - chr       	: [String]  특정 char
* Return      	: [int]
------------------------------------------------------------------------ */
function cfGetCountChar(str, chr) {
	var xLen = 0;

	for(var i = 0; i < str.length; i++) {
		if(str.charAt(i) == chr) {
			xLen++;
		}
	}

	return xLen;
}

/* ------------------------------------------------------------------------
* cfSetEmailDomainList	: SELECT 박스에 이메일 도메인 설정
* Parameter
  - obj       	: [Object]  대상 객체
* Return      	: none
------------------------------------------------------------------------ */
function cfSetEmailDomainList(obj) {
	var xDomain = new Array(
			["direct_input","직접입력"],
			["chollian.net","chollian.net"],
			["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;
	
	obj.length = 0;
	for(var i = 0; i < xDomain.length; i++) {
		cfAddOption(obj, xDomain[i][1], xDomain[i][0]);
	}
}

/* ------------------------------------------------------------------------
* cfAddOption	: SELECT Option 항목 추가
* Parameter
  - obj       	: [Object]  대상 객체
  - text       	: [String]  문자
  - value       : [String]  값
* Return      	: none
------------------------------------------------------------------------ */
function cfAddOption(obj, text, value) {
	var xOption = document.createElement("option");
	var xText = document.createTextNode(text);
	
	xOption.setAttribute("value", value);
	xOption.appendChild(xText);

	obj.appendChild(xOption);
}

/* ------------------------------------------------------------------------
* cfIsEmailAddr	: 이메일 유효성 여부
* Parameter
  - str       	: [String]  대상 문자열
* Return      	: boolean
------------------------------------------------------------------------ */
function cfIsEmailAddr(str) {
	//var xEmailFilter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i;
	var xEmailFilter = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;

	if(!xEmailFilter.test(str)) {
		return false;
	} else {
		return true;
	}
}

/* ------------------------------------------------------------------------
* cfGRV			: radio 값 반환
* Parameter
  - name       	: [String]  radio 객체 이름
* Return      	: boolean
------------------------------------------------------------------------ */
function cfGRV(name) {
	return $(":input:radio[name=" + name + "]:checked").val();
}

/* ------------------------------------------------------------------------
* cfGetCheckBoxCheckedCnt	: checkbox의 체크된 갯수 반환
* Parameter
  - name       				: [String]  checkbox 객체 이름
* Return      				: int
------------------------------------------------------------------------ */
function cfGetCheckBoxCheckedCnt(name) {
	var checkCnt = 0;
		 
	$("input[name='" + name + "']").each(function() {
		if(this.checked) {
			checkCnt++;
		}
	});

	return checkCnt;
}
  
/* ------------------------------------------------------------------------
* cfSRV			: radio 값 설정(대상 radio 객체는 id가 반드시 있어야 함)
* Parameter
  - name       	: [String]  radio 객체 이름
  - value      	: [String]  설정 값
* Return      	: boolean
------------------------------------------------------------------------ */
function cfSRV(name, value) {
	$("input[name='" + name + "']").each(function() {
		if($("#" + this.id).val() == value) {
			this.checked = "checked";
			return;
		} else {
			this.checked = "";
		}
	});
}

  /* ------------------------------------------------------------------------
   * cfCheckPwdPattern	    : 대표자 주민번호 특수문자제거
   * Parameter
     - str       			: [String]  대상 문자열
   * Return      			: boolean
  ------------------------------------------------------------------------ */
  function cfCheckResIdPattern(str) {  

    var xRegSN = /[~!@\#$%^&*\()\-=+'`<>]/gi;	  
  
  	if (xRegSN.test(str)) return false;
  	
  	return true;
  }  
  
/* ------------------------------------------------------------------------
 * cfCheckPwdPattern	: 비밀번호 패턴 체크
 * Parameter
   - str       			: [String]  대상 문자열
 * Return      			: boolean
------------------------------------------------------------------------ */
function cfCheckPwdPattern(str) {
	var xRegAN = /[^A-Za-z0-9]/i;
	var xRegA = /[A-Za-z]/i;
	var xRegN = /[0-9]/i;

	if (xRegAN.test(str)) return false;
	if (!xRegA.test(str)) return false;
	if (!xRegN.test(str)) return false;

	return true;
}

/* ------------------------------------------------------------------------
 * cfCheckIdPattern	: 아이디 패턴 체크
 * Parameter
   - str       		: [String]  대상 문자열
 * Return      		: boolean
------------------------------------------------------------------------ */
function cfCheckIdPattern(str) {
	var xRegAN = /[^A-Za-z0-9]/i;
	var xRegA = /[A-Za-z]/i;

	if (xRegAN.test(str)) return false;
	if (!xRegA.test(str)) return false;

	return true;
}

/* ------------------------------------------------------------------------
 * cfCheckNumberSize	: 아이디 패턴 체크
 * Parameter
   - number     		: [int]  대상 수
   - nSize     			: [int]  정수 자리
   - pSize     			: [int]  소수 자리
 * Return      			: boolean
 * Warnning				: 15자리 이하만 지원함(javascript 정밀도가 떨어짐)
------------------------------------------------------------------------ */
function cfCheckNumberSize(number, nSize, pSize) {
	
	var xStr = Math.abs(number) + "";
	var xLen = xStr.length;
	var xPos = xStr.indexOf(".");

	if(xPos == -1) {
		if(xLen > nSize) {
			return false;
		} else {
			return true;
		}
	}
	
	if(nSize < xPos) return false;
	if(pSize < (xLen - (xPos + 1))) return false;
	
	return true;
}

/* ------------------------------------------------------------------------
 * cfParseNum   : 숫자형문자를 읽어서 아무것도 없으면 0 을 리턴하고
                  문자가 있을때는 숫자로 변화해서 리턴한다.
 * Parameter
   - str        : [String]  숫자형문자
 * Return       : [int]     숫자
 * Warnning		: 15자리 이하만 지원함(javascript 정밀도가 떨어짐) 
 ------------------------------------------------------------------------ */
function cfParseNum(str) {
    if((str + "").trim() == "") {
        return 0;
    } else {
        var x_temp  = new Number(str).valueOf();
        return x_temp;
    }
}

/* ------------------------------------------------------------------------
 * cfAppendXecureForm   : Xecure Form 생성
 * Parameter			: none
 * Return       		: none
 ------------------------------------------------------------------------ */
function cfAppendXecureForm() {
	if($("#xecure")[0] == undefined) {
		$("body").append("<form id=\"xecure\" name=\"xecure\" method=\"post\"><input type=\"hidden\" name=\"p\" /></form>");
	}
}

/* ------------------------------------------------------------------------
* cfAppendXecureInput   : XecureSubmit 사용을 감지하기 위한 객체 생성
* Parameter				: none
* Return       			: none
------------------------------------------------------------------------ */
function cfAppendXecureInput() {
	$("body").append("<input type=\"hidden\" id=\"callXecureSubmit\" name=\"callXecureSubmit\"/>");
}

/* ------------------------------------------------------------------------
* cfRemoveXecureInput   : XecureSubmit 사용을 감지하기 위한 객체 제거
* Parameter				: none
* Return       			: none
------------------------------------------------------------------------ */
function cfRemoveXecureInput() {
	$("#callXecureSubmit").remove();
}
