/** 
 * VIEW 단 문자 관련 Javascript
 * 
 * @author  장영조, foresight@topnwise.com
 * @version 1.0, 2004/08/17
 * @since   1.0
 *
 * Copyright. (c) 2004 by Kyobo Life
 */

 /* =============================================================
  Function : 에러 메세지 Factory
  Return   : N/A
  Usage    : 
================================================================= */

//alert("[/CN_StringUtil.js]: [test_3]");

function CN_StringUtil() {

	this.isNull        		= isNull;
	this.isEmpty       		= isEmpty;
	this.containsChars 		= containsChars;
	this.containsCharsOnly 	= containsCharsOnly;
	this.isKorean			= isKorean;
	this.isEnglish			= isEnglish;
	this.isUpperCase		= isUpperCase;
	this.isLowerCase		= isLowerCase;
	this.isNumber			= isNumber;
	this.isAlphaNum			= isAlphaNum;
	this.isNumDash			= isNumDash;
	this.isNumComma			= isNumComma;
	this.isNumDot			= isNumDot;
	this.removeComma		= removeComma;
	this.isValidFormat		= isValidFormat;
	this.isValidEmail		= isValidEmail;
	this.isValidPhone		= isValidPhone;
	this.getByteLength		= getByteLength;
	this.trim				= trim;
	this.startTrim			= startTrim;
	this.endTrim			= endTrim;
	this.moneyStrForm		= moneyStrForm;
	this.commaCut			= commaCut;
	this.slashCut			= slashCut;
	this.slashAdd			= slashAdd;
}

/* =============================================================
  Function : 입력값에 Null 이 있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isNull(input) {
    if (input.value == null || input.value == "") {
        return true;
    }
    return false;
}

/* =============================================================
  Function : 입력값에 스페이스 이외의 의미 있는 글이 있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isEmpty(input) {
    if (input.value == null || input.value.replace(/ /gi,"") == "") {
        return true;
    }
    return false;
}

/* =============================================================
  Function : 입력값에 특정 문자(chars)가 있는지 체크
  			 특정 문자를 허용하지 않으려 할 때 사용
  Return   : N/A
  Usage    : 
================================================================= */
function containsChars(input,chars) {
    for (var inx = 0; inx < input.value.length; inx++) {
       if (chars.indexOf(input.value.charAt(inx)) != -1)
           return true;
    }
    return false;
}

/* =============================================================
  Function : 입력값이 특정 문자(chars)만으로 되어있는지 체크
  			 특정 문자만 허용하려 할 때 사용
  Return   : N/A
  Usage    : 
================================================================= */
function containsCharsOnly(input,chars) {
    for (var inx = 0; inx < input.value.length; inx++) {
       if (chars.indexOf(input.value.charAt(inx)) == -1)
           return false;
    }
    return true;
}

/* =============================================================
  Function : 한글이외의 캐릭터가 있을경우 false
 			 한자나 숫자 영문의 경우 false
  Return   : N/A
  Usage    : 
================================================================= */
function isKorean(koreanChar) {
   koreanChar = koreanChar.split(' ').join('');

   //if ( koreanChar == null ) return false ;

   for(var i=0; i < koreanChar.length; i++){

     var c=koreanChar.charCodeAt(i);

     //( 0xAC00 <= c && c <= 0xD7A3 ) 초중종성이 모인 한글자
     //( 0x3131 <= c && c <= 0x318E ) 자음 모음

     if( !( ( 0xAC00 <= c && c <= 0xD7A3 ) || ( 0x3131 <= c && c <= 0x318E ) ) ) {
        return false ;
     }
   }
   return true ;
}

/* =============================================================
  Function : 영문 이외의 캐릭터가 있을경우 false
  Return   : N/A
  Usage    : 
================================================================= */
function isEnglish(englishChar) {
    var englishChar = englishChar.split(' ').join('');

    // if ( englishChar == null ) return false ;

    for( var i=0; i < englishChar.length;i++){
       var c=englishChar.charCodeAt(i);
       if( !( (  0x61 <= c && c <= 0x7A ) || ( 0x41 <= c && c <= 0x5A ) ) ) {
        return false ;
       }
     }
    return true ;
}

/* =============================================================
  Function : 입력값이 알파벳 대문자인지 체크
  Return   : N/A
  Usage    : 
================================================================= */

function isUpperCase(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    return containsCharsOnly(input,chars);
}

/* =============================================================
  Function : 입력값이 알파벳 소문자인지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isLowerCase(input) {
    var chars = "abcdefghijklmnopqrstuvwxyz";
    return containsCharsOnly(input,chars);
}

/* =============================================================
  Function : 입력값에 숫자만 있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isNumber(input) {
    var chars = "0123456789";
    return containsCharsOnly(input,chars);
}


/* =============================================================
  Function : 입력값이 알파벳,숫자로 되어있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isAlphaNum(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    return containsCharsOnly(input,chars);
}

/* =============================================================
  Function : 입력값이 숫자,대시(-)로 되어있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isNumDash(input) {
    var chars = "-0123456789";
    return containsCharsOnly(input,chars);
}

/* =============================================================
  Function : 입력값이 숫자,콤마(,)로 되어있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isNumComma(input) {
    var chars = ",0123456789";
    return containsCharsOnly(input,chars);
}

/* =============================================================
  Function : 입력값이 숫자,콤마(.)로 되어있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isNumDot(input) {
    var chars = ".0123456789";
    return containsCharsOnly(input,chars);
}

/* =============================================================
  Function : 입력값이 숫자,/로 되어있는지 체크
  Return   : N/A
  Usage    : 
================================================================= */
function isNumSlash(input) {
    var chars = "/0123456789";
    return containsCharsOnly(input,chars);
}

/* =============================================================
  Function : 입력값에서 콤마를 없앤다.
  Return   : N/A
  Usage    : 
================================================================= */
function removeComma(input) {
    return input.value.replace(/,/gi,"");
}

/* =============================================================
  Function : isValidFormat
  Return   : N/A
  Usage    : 입력값이 사용자가 정의한 포맷 형식인지 체크
             자세한 format 형식은 자바스크립트의 'regular expression'을 참조
================================================================= */
function isValidFormat(input,format) {
    if (input.value.search(format) != -1) {
        return true; //올바른 포맷 형식
    }
    return false;
}

/* =============================================================
  Function : isValidEmail(input)
  Return   : N/A
  Usage    : 입력값이 이메일 형식인지 체크
================================================================= */
function isValidEmail(input) {
//    var format = /^(\S+)@(\S+)\.([A-Za-z]+)$/;
    var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
    return isValidFormat(input,format);
}

/* =============================================================
  Function : isValidPhone
  Return   : N/A
  Usage    : 입력값이 전화번호 형식(숫자-숫자-숫자)인지 체크
================================================================= */
function isValidPhone(input) {
    var format = /^(\d+)-(\d+)-(\d+)$/;
    return isValidFormat(input,format);
}

/* =============================================================
  Function : getByteLength(input)
  Return   : N/A
  Usage    : 입력값의 바이트 길이를 리턴
================================================================= */
function getByteLength(input) {
    var byteLength = 0;
    for (var inx = 0; inx < input.value.length; inx++) {
        var oneChar = escape(input.value.charAt(inx));
        if ( oneChar.length == 1 ) {
            byteLength ++;
        } else if (oneChar.indexOf("%u") != -1) {
            byteLength += 2;
        } else if (oneChar.indexOf("%") != -1) {
            byteLength += oneChar.length/3;
        }
    }
    return byteLength;
}

/* =============================================================
  Function : trim(str)
  Return   : N/A
  Usage    : Input Data 의 처음,마지막  Space를 제거한다.
================================================================= */
function trim(str)
{
  return endTrim(startTrim(str));
}

/* =============================================================
  Function : startTrim(str)  
  Return   : N/A
  Usage    : Input Data 의 처음 Space를 제거한다.
================================================================= */
function startTrim(str)
{
    var src = new String(str);
    var i, len = src.length;

    for(i = 0;i < len;i++)
    {
        if(src.charAt(i) != " " && src.charAt(i) != "\t")
        {
  	  break;
        }
    }
    return src.substring(i);
}

/* =============================================================
  Function : endTrim(str)  
  Return   : N/A
  Usage    : Input Data 의 마지막의 Space를 제거한다.
================================================================= */
function endTrim(str)
{
    var src = new String(str);
    var i, len = src.length;

    for(i = len-1;i > 0;i--)
    {
        if(src.charAt(i) != " " && src.charAt(i) != "\t")
        {
  	  break;
        }
    }
    return src.substring(0,i+1);
}

/* ===================================================================
	Function : moneyForm(obj)
	Return 	 :
	Usage 	 : form을 넘겨받아 form에 변환된 값을 setting한다.
=================================================================== */
function moneyForm(obj){
   	var num = obj.value;
	if(obj.value.length >= 4){
		// "$" and "," 입력 제거
		re = /^\$|,/g;
		num = num.replace(re, "");

		fl = "";
		if(isNaN(num)){
			alert("문자는 사용할 수 없습니다.");
			obj.value = "";
			return 0;
		}
		if(num==0) return num;

		if(num<0){
			num = num * (-1);
			fl = "-";
		}else{
			num = num * 1; //처음 입력값이 0부터 시작할때 이것을 제거한다.
		}

		num = new String(num);
		temp = "";
		co = 3;
		num_len = num.length;
		while(num_len>0){
			num_len = num_len-co;
			if(num_len < 0){
				co = num_len + co;
				num_len = 0;
			}
			temp = "," + num.substr(num_len, co) + temp;
		}

		obj.value =  fl+temp.substr(1);
 	}
}

function moneyValue(obj){
   	var num = obj+"";
	if(num.length >= 4){
		// "$" and "," 입력 제거
		re = /^\$|,/g;
		num = num.replace(re, "");

		fl = "";
		if(isNaN(num)){
			alert("문자는 사용할 수 없습니다.");
			//obj.value = "";
			return 0;
		}
		if(num==0) return num;

		if(num<0){
			num = num * (-1);
			fl = "-";
		}else{
			num = num * 1; //처음 입력값이 0부터 시작할때 이것을 제거한다.
		}

		num = new String(num);
		temp = "";
		co = 3;
		num_len = num.length;
		while(num_len>0){
			num_len = num_len-co;
			if(num_len < 0){
				co = num_len + co;
				num_len = 0;
			}
			temp = "," + num.substr(num_len, co) + temp;
		}
		//alert(fl+temp.substr(1));
		return fl+temp.substr(1);
 	}
}

/* ===================================================================
	Function : moneyStrForm(str)
	Return 	 :
	Usage 	 : 문자열로 입력을 받아 변환한 문자열을 넘겨준다.
=================================================================== */
function moneyStrForm(str){
	str = ""+str+"";
	var retValue = "";
	var number = new Number(str);

	// 음수인 경우 "-" 제거하고 "," 처리
	if( number < 0 ) str = str.substring(1);

	for(i=0; i<str.length; i++){
		if(i > 0 && (i%3)==0){
			retValue = str.charAt(str.length - i -1) + "," + retValue;
		}else{
			retValue = str.charAt(str.length - i -1) + retValue;
		}
	}

	// 음수인 경우 "-"를 붙혀준다.
	if( number < 0 ) retValue = "-" + retValue;

	return retValue;
}

/* ===================================================================
	Function : commaCut(money)
	Return 	 :
	Usage 	 : 입력된 문자열의 ','를 없앤 문자열을 리턴한다.
=================================================================== */
function commaCut(money){
	if(money == '') return '';
	return money.split(",").join("");
}

/* ===================================================================
	Function : slashCut(date)
	Return 	 :
	Usage 	 : 입력된 날짜의 '/'를 없앤 문자열을 리턴한다. ('YYYY/MM/DD' -> 'YYYYMMDD')
=================================================================== */
function slashCut(date){
	return date.split("/").join("");
}

/* ===================================================================
	Function : strSelect(obj)
	Return 	 :
	Usage 	 : 
=================================================================== */
function strSelect(input){
	return input.select();
}

/* ===================================================================
	Function : slashAdd(date)
	Return 	 :
	Usage 	 : 입력된 날짜에 '/'를 추가한 문자열을 리턴한다. ('YYYYMMDD' -> 'YYYY/MM/DD')
=================================================================== */
function slashAdd(date){
	return (date.substring(0,4) + '/' + date.substring(4,6) + '/' + date.substring(6));
}

// CN_StringUtil.js 에 위치 함
/* ===================================================================
	Function : funcMoneyToHan(obj, type)
 	Parameter : obj(입력받는 필드 Obj), type(화폐단위)
	Return    : String
=================================================================== */

hanNumber   = new Array ('영', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구' );
fourFour    = new Array ('일', '만', '억', '조' );
fourDigit   = new Array ('일', '십', '백', '천' );

function funcMoneyToHan(obj, type) {

	var returnVal = "";
	num = obj.value;
	str = "";
	strr = num.split(",");
	for (i=0; i<strr.length; i++){
		str += strr[i];
	}
	num = str;

	// 한글금액 처리
	delimiter = ' ';
	var endValue = '원';
	var endZValue= '영';

	bPos = 0; // 만, 억, 조
	sPos = 0; // 십, 백, 천
	digit = 0;

	if (type==null){		// 원단위
		bPos = 0; // 만, 억, 조
		sPos = 0; // 십, 백, 천
		endValue = "원";
		endZValue = "영원";
	} else if (type=='1'){	//만단위
		bPos = 1; // 만, 억, 조
		sPos = 0; // 십, 백, 천
		endValue = "원";
		endZValue = "영 만원";
	} else if (type=='2') {	//십만단위
		bPos = 1; // 만, 억, 조
		sPos = 1; // 십, 백, 천
		endValue = "만원";
		endZValue = "영 십만원";
	}

	szDigit = '';
	is_start = false;
	appendFF = false;
	len = num.length;
	szHan = '';

	for (i=len-1;i>=0;i--) {
		szDigit = num.substring(i,i+1);
		digit = parseInt(szDigit);

		if (digit!=0) {
			if (bPos!=0 && sPos==0) {
				if (is_start==true) szHan += delimiter;
				szHan += fourFour[bPos]; // 만, 억
				appendFF=false;
			}
			if (bPos!=0 && appendFF==true) {
				if (is_start==true) szHan += delimiter;
				szHan += fourFour[bPos]; // 만, 억
				appendFF=false;
			}
			if (sPos!=0) szHan += fourDigit[sPos]; // 십, 백, 천
			szHan += hanNumber[digit]; // 일, 이, 삼
			is_start=true;

		}
		else if (sPos==0 && bPos!=0) appendFF = true;
		sPos++;
		if (sPos%4==0) {
			sPos=0;
			bPos++;
			if (bPos>=4) return "(범위초과)";
		}
	}

	if (is_start==false)
	{
		rslt = '';
		returnVal = rslt + endZValue;

	}
	else
	{
		rslt = '';
		for(i = szHan.length - 1; i >= 0; i--) {
			rslt += szHan.substring(i, i + 1);
		}
		returnVal = rslt + endValue;
	}
	return returnVal;
}

/* ===================================================================
	Function : dashCut(str)
	Return 	 :
	Usage 	 : 입력된 날짜의 '-'를 없앤 문자열을 리턴한다. ('YYYY-MM-DD' -> 'YYYYMMDD')
=================================================================== */
function dashCut(str){
	return str.split("-").join("");
}

/* ===================================================================
	Function : inputOnlyNum(obj)
	Return 	 :
	Usage 	 : 숫자만 입력되도록 한다.
=================================================================== */
function inputOnlyNum(obj) {
	val=obj.value;
    re=/[^0-9]/gi;
    obj.value=val.replace(re,"");
}

/* ===================================================================
	Function : autoTab(obj, max, nextId)
	Return 	 :
	Usage 	 : Max 로 입력시 다음 obj 으로 넘어간다
=================================================================== */
function autoTab(obj, max, nextId) {
	if(obj.value.length >= max && (nextId != "" && nextId != undefined))
	{
		document.getElementById(nextId).select();
	}
}

/* ===================================================================
	Function : autoTab(obj, max, nextId)
	Return 	 :
	Usage 	 : Max 로 입력시 다음 obj 으로 넘어간다
=================================================================== */
function strSelect(Id) {
	document.getElementById(Id).select();
}
