﻿/******************************************************************* 
  FUNCTION			:	isNumber
  DESCRIPTION		:	문자열이 숫자만으로 구성되어 있는지 여부를 check한다.
  PARAMETER		:	input			check할 문자열
*******************************************************************/
function isNumber(input){
    var chars = "0123456789";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isAlphabet
  DESCRIPTION		:	문자열이 영문자만으로 구성되어 있는지 여부를 체크한다.
  PARAMETER		:	str			check할 문자열
*******************************************************************/
function isAlphabet(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isAlphaNum
  DESCRIPTION		:	문자열이 영문자와 숫자만으로 구성되어 있는지 여부를 체크한다.
  PARAMETER		:	str			check할 문자열
*******************************************************************/
function isAlphaNumId(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isAlphaNum
  DESCRIPTION		:	문자열이 영문자와 숫자만으로 구성되어 있는지 여부를 체크한다.
  PARAMETER		:	str			check할 문자열
*******************************************************************/
function isAlphaNum(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isHangul
  DESCRIPTION		:	문자열이 한글로만 구성되어 있는지 여부를 check한다.
  PARAMETER		:	str		check할 문자열
*******************************************************************/
function isHangul(str){
    if(isEmpty(str)) return false;
    for(var idx=0;idx < str.length;idx++){
      var c = escape(str.charAt(idx));
      if ( c.indexOf("%u") == -1 ) {
            return false;
        }
    }
    return true;
}

/******************************************************************* 
  FUNCTION			:	isEmpty
  DESCRIPTION		:	입력값에 스페이스 이외의 의미있는 값이 있는지 체크
  PARAMETER		:	value		check할 문자열
  EXAMPLE--------------------------------------------------------
		if( isEmpty(document.formname.objectname.value) ) {
			alert("필수 기입 요소입니다");
			return;
		}
*******************************************************************/
function isEmpty(value) {
    if (value == null || value == "" ) {
        return true;
    } else if ( trim(value) == "" ) {
		return true;
	}
    return false;
}

/******************************************************************* 
  FUNCTION			:	containsCharsOnly
  DESCRIPTION		:	입력값이 특정 문자(chars)만으로 되어있는지 체크
								특정 문자만 허용하려 할 때 사용
  PARAMETER		:	input		check할 문자열
								chars	허용할 문자
  EXAMPLE--------------------------------------------------------
		if( !containsCharsOnly(document.formname.objectname.value, "ABO") ) {
			alert("혈액형은 A,B,O로만 구성되어 있습니다");
			return;
		}
*******************************************************************/
function containsCharsOnly(input,chars) {
	if( isEmpty(input) ) {
		return false;
	}
    for (var inx = 0; inx < input.length; inx++) {
       if (chars.indexOf(input.charAt(inx)) == -1) {
           return false;
	   }
    }
    return true;
}

/******************************************************************* 
  FUNCTION			:	isUpperCase
  DESCRIPTION		:	입력값이 알파벳 대문자인지 체크
  PARAMETER		:	input		check할 문자열
*******************************************************************/
function isUpperCase(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isLowerCase
  DESCRIPTION		:	입력값이 알파벳 소문자인지 체크
  PARAMETER		:	input		check할 문자열
*******************************************************************/
function isLowerCase(input) {
    var chars = "abcdefghijklmnopqrstuvwxyz ";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isAlphaNum
  DESCRIPTION		:	입력값이 알파벳,숫자로 되어있는지 체크
  PARAMETER		:	input		check할 문자열
*******************************************************************/
function isAlphaNum(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isBigAlphaNum
  DESCRIPTION		:	입력값이 알파벳 대문자,숫자로 되어있는지 체크
  PARAMETER		:	input		check할 문자열
*******************************************************************/
function isBigAlphaNum(input) {
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isNumDash
  DESCRIPTION		:	입력값이 숫자,대시(-)로 되어있는지 체크
  PARAMETER		:	input		check할 문자열
*******************************************************************/
function isNumDash(input) {
    var chars = "-0123456789";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isNumComma
  DESCRIPTION		:	입력값이 숫자,콤마(,)로 되어있는지 체크
  PARAMETER		:	input		check할 문자열
*******************************************************************/
function isNumComma(input) {
    var chars = ",0123456789";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	isNumDot
  DESCRIPTION		:	입력값이 숫자,콤마(,)로 되어있는지 체크
  PARAMETER		:	input		check할 문자열
*******************************************************************/
function isNumDot(input) {
    var chars = ".0123456789";
    return containsCharsOnly(input,chars);
}

/******************************************************************* 
  FUNCTION			:	getByteLength
  DESCRIPTION		:	입력값의 바이트 길이를 리턴
  PARAMETER		:	input		check할 문자열
  EXAMPLE--------------------------------------------------------
		if (getByteLength(form.title.value) > 100) {
			alert("제목은 한글 50자(영문 100자) 이상 입력할 수 없습니다.");
		}
*******************************************************************/
function getByteLength(input) {
    var byteLength = 0;
    for (var inx = 0; inx < input.length; inx++) {
        var oneChar = escape(input.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              : checkByteLength
  DESCRIPTION           : 입력값의 바이트 길이를 maxlength와 비교하여 메세지로 알린다.
  PARAMETER             : input     검사할 input Field
                                maxlen      해당 Field 입력값의 maxlength
                                msg         해당 Field이 title을 메세지 내용에 포함하여 알려준다.
  EXAMPLE--------------------------------------------------------
            onBlur="javascrtip:checkByteLength(this, 5);"
*******************************************************************/
function checkByteLength(elm, maxlength, msg) {
	if(getByteLength(elm.value) > eval(maxlength)) {
		if(msg == "")	alert(maxlength + " byte 이상 입력할수 없습니다.");
		else		alert("\""+msg+"\"는 " + maxlength + " byte 이상 입력할수 없습니다.");
	}
}

/******************************************************************* 
  FUNCTION			:	addComma
  DESCRIPTION		:	입력값에 콤마를 더한다.
  PARAMETER		:	srcNumber		콤마를 더할 문자열 (숫자와 '.'으로만 구성되어 있어야 함)
*******************************************************************/
function addComma(srcNumber) {
	srcNumber = removeChar(srcNumber, 'Y', '.');
	if( isEmpty(srcNumber) ) {
		return 0;
	}
	var txtNumber = '' + srcNumber;
	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');
	arrNumber[0] += '.';
	do {
		arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));
	if (arrNumber.length > 1) {
		return arrNumber.join('');
	} else {
		return arrNumber[0].split('.')[0];
	}
}

/******************************************************************* 
  FUNCTION			:	removeComma
  DESCRIPTION		:	입력값에서 콤마를 없앤다.
  PARAMETER		:	input		콤마를 없앨 문자열 
*******************************************************************/
function removeComma(input) {
    return input.replace(/,/gi,"");
}

/******************************************************************* 
  FUNCTION			:	removeChar
  DESCRIPTION		:	입력값에서 문자를 없앤다. (숫자만 남긴다)
  PARAMETER		:	input				문자를 업앨 문자열
								removeEn		영문자를 남겨둘 것인지 여부
								ignoreChar		남겨둘 문자 (1byte character만 인식됨. 문자열은 인식 안됨)
*******************************************************************/
function removeChar(input, removeEn, ignoreChar) {
	if( isEmpty(input) ) {
		return "";
	}
    var chars = "";
	if( isEmpty(removeEn) || removeEn == 'Y') {
		chars = "0123456789";
	} else {
		chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
	}
	if( !isEmpty(ignoreChar) ) {
		chars += ignoreChar;
	}
	var result = "";

	for(var i = 0; i < input.length; i++) {
		var oneChar = input.charAt(i);
		if( chars.indexOf(oneChar) != -1 ) {
			result = result + oneChar;
		}
	}

	return result;
}

/******************************************************************* 
  FUNCTION			:	substrInverse
  DESCRIPTION		:	문자열의 오른쪽 끝에서 부터 지정된 개수만큼의 문자들을 리턴한다.
  PARAMETER		:	str		잘라낼 문자열
								num	잘라낼 갯수
*******************************************************************/
function substrInverse(str, num) {
	var len;
	len = str.length;
	return str.substr(len - num, num);
}

/******************************************************************* 
  FUNCTION			:	substrMid
  DESCRIPTION		:	문자열의 특정위치로부터 지정된 개수의 문자들을 리턴한다.
  PARAMETER		:	str		잘라낼 문자열
								idx	잘라낼 시작 위치
								num	잘라낼 갯수
*******************************************************************/
function substrMid(str, idx, num) {
	if( str.length > idx+num) {
		return str.substr( idx-1, num);
	} else {
		return str.substr(idx-1, str.length-idx);
	}
}

/******************************************************************* 
  FUNCTION			:	replace
  DESCRIPTION		:	문자열에 있는 특정문자패턴을 다른 문자패턴으로 바꾸는 함수.
  PARAMETER		:	targetStr		대상 문자열
								searchStr	검색할 문자열
								replaceStr	바꿀 문자열
*******************************************************************/
function replace(targetStr, searchStr, replaceStr) {
    var len, i, tmpstr;

    len = targetStr.length;
    tmpstr = "";

    for ( i = 0 ; i < len ; i++ ) {
        if ( targetStr.charAt(i) != searchStr ) {
            tmpstr = tmpstr + targetStr.charAt(i);
        }
        else {
            tmpstr = tmpstr + replaceStr;
        }
    }
    return tmpstr;
}

/******************************************************************* 
  FUNCTION			:	trim
  DESCRIPTION		:	문자열에서 좌우 공백제거
  PARAMETER		:	str		공백 제거할 문자열
*******************************************************************/
function trim(str) {
    return replace(str," ","");
}

/******************************************************************* 
  FUNCTION			:	getEndDate
  DESCRIPTION		:	월의 끝 일자 얻기
  PARAMETER		:	datestr		끝 일자를 얻어올 연월
  EXAMPLE--------------------------------------------------------
		getEndDate('200407') --> 31
*******************************************************************/
function getEndDate(datestr) {

    //널인지?
    if(isEmpty(datestr)){
        return null;
    }

    //숫자인지?
    if(!isNumber(datestr)){
        return null;
    }

    //길이가 6자리?
    if(datestr.length != 6){
        return null;
    }

    var yy = Number(datestr.substring(0,4));
    var mm = Number(datestr.substring(4,6));

    //윤년 검증
    var boundDay = "";

    if(mm != 2){
        var mon=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        boundDay = mon[mm-1];
    }
    else{
        if (yy%4 == 0 && yy%100 != 0 || yy%400 == 0){
            boundDay = 29;
        }
        else{
            boundDay = 28;
        }
    }

    return boundDay;
}


/******************************************************************* 
  FUNCTION			:	getEndDate수정 
  DESCRIPTION		:	월의 끝 일자 얻기
  PARAMETER		:	datestr		끝 일자를 얻어올 연월
  EXAMPLE--------------------------------------------------------
		getEndDate('200407') --> 31
*******************************************************************/
function getEndDate2(Year,Month) {
	
   //널인지?
   

    var yy = Year;
    var mm = Month;
	 //윤년 검증
    var boundDay = "";

    if(mm != 2){
        var mon=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        boundDay = mon[mm-1];
    }
    else{
        if (yy%4 == 0 && yy%100 != 0 || yy%400 == 0){
            boundDay = 29;
        }
        else{
            boundDay = 28;
        }
    }

    return boundDay;
}

/******************************************************************* 
  FUNCTION			:	lpad
  DESCRIPTION		:	Left 빈자리 만큼 padStr 을 붙인다.
  PARAMETER		:	src		패딩할 문자열
								len		패딩할 길이
								padStr	패딩 문자
  EXAMPLE--------------------------------------------------------
		lpad('asdf','10','*') --> ******asdf
*******************************************************************/
function lpad(src, len, padStr){
    var retStr = "";
    var padCnt = Number(len) - String(src).length;
    for(var i=0;i<padCnt;i++) retStr += String(padStr);
    return retStr+src;
}

/******************************************************************* 
  FUNCTION			:	rpad
  DESCRIPTION		:	Right 빈자리 만큼 padStr 을 붙인다.
  PARAMETER		:	src		패딩할 문자열
								len		패딩할 길이
								padStr	패딩 문자
  EXAMPLE--------------------------------------------------------
		rpad('asdf','10','*') --> asdf******
*******************************************************************/
function rpad(src, len, padStr){
    var retStr = "";
    var padCnt = Number(len) - String(src).length;
    for(var i=0;i<padCnt;i++) retStr += String(padStr);
    return src+retStr;
}

/******************************************************************* 
  FUNCTION			:	isValidDDDPhoneNum
  DESCRIPTION		:	전화번호 국번검증
  PARAMETER		:	dddphonenum		검증할 전화번호 국번
*******************************************************************/
function isValidDDDPhoneNum(dddphonenum) {
    // 널인가?
    if (isEmpty(dddphonenum)) {
        return null;
    }


    if ( dddphonenum != "02" && dddphonenum != "031" && dddphonenum != "032" && dddphonenum != "033" && dddphonenum != "041" &&
         dddphonenum != "042" && dddphonenum != "043" && dddphonenum != "051" && dddphonenum != "052" && dddphonenum != "053" &&
         dddphonenum != "054" && dddphonenum != "055" && dddphonenum != "061" && dddphonenum != "062" && dddphonenum != "063" &&
         dddphonenum != "064" && dddphonenum != "011" && dddphonenum != "016" && dddphonenum != "017" && dddphonenum != "018" && dddphonenum != "019" ) {

        //ERR_MSG = "잘못된 전화번호 국번입니다.";
        return false;
    }

    return true;
}

/******************************************************************* 
  FUNCTION			:	getToday
  DESCRIPTION		:	오늘날짜 얻어오기
  PARAMETER		:	N/A
*******************************************************************/
function getToday() {

    var date = new Date();

    var year  = date.getFullYear();
    var month = date.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
    var day   = date.getDate();

    if (("" + month).length == 1) { month = "0" + month; }
    if (("" + day).length   == 1) { day   = "0" + day;   }

    return ("" + year + month + day)

}

/******************************************************************* 
  FUNCTION			:	isValidMonth
  DESCRIPTION		:	유효한(존재하는) 월(月)인지 체크
  PARAMETER		:	mm		검색할 월
*******************************************************************/
function isValidMonth(mm) {
    var m = parseInt(mm,10);
    return (m >= 1 && m <= 12);
}

/******************************************************************* 
  FUNCTION			:	isValidDay
  DESCRIPTION		:	해당 연도 해당 월에 해당 일이 존재하는지 여부를 체크
  PARAMETER		:	yyyy		검색할 연도
								mm		검색할 월
								dd			유효성 체크할 날짜
*******************************************************************/
function isValidDay(yyyy, mm, dd) {
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}


/******************************************************************* 
  FUNCTION			:	isValidWeek
  DESCRIPTION		:	유효한(존재하는) 주차(week)인지 체크
  PARAMETER		:	week		해당년도의 주차 (200435)
*******************************************************************/
function isValidWeek(week) {

	//널인지?
    if(isEmpty(week))		return false;

    //숫자인지?
    if(!isNumber(week))	return false;

    //길이가 6자리?
    if(week.length != 6)	return false;


	var yyyy = Number(week.substring(0,4));
    var ww = Number(week.substring(4,6));

	if(parseInt(ww) < 1 || parseInt(ww) > 52) {
		return false;	
	} else return true;
}


/******************************************************************* 
  FUNCTION			:	isValidHour
  DESCRIPTION		:	유효한(존재하는) 시(時)인지 체크
  PARAMETER		:	hh		유효성 체크할 시간
*******************************************************************/
function isValidHour(hh) {
    var h = parseInt(hh,10);
    return (h >= 0 && h < 24);
}

/******************************************************************* 
  FUNCTION			:	isValidMin
  DESCRIPTION		:	유효한(존재하는) 분(分)인지 체크
  PARAMETER		:	mi		유효성 체크할 분(分)
*******************************************************************/
function isValidMin(mi) {
    var m = parseInt(mi,10);
    return (m >= 0 && m < 60);
}

/******************************************************************* 
  FUNCTION			:	isValidSec
  DESCRIPTION		:	유효한(존재하는) 초인지 체크
  PARAMETER		:	ss		유효성 체크할 초
*******************************************************************/
function isValidSec(ss) {
    var s = parseInt(ss,10);
    return (s >= 0 && ss < 60);
}

/******************************************************************* 
  FUNCTION			:	isValidTime
  DESCRIPTION		:	유효한(존재하는) 시간인지 체크
  PARAMETER		:	time		유효성 체크할 시간(分)
*******************************************************************/
function isValidTime(time) {
	if( time.length != 4 && time.length != 6 ) {
		return false;
	}

	var h = time.substr(0,2);
	var m = time.substr(2,2);
	var s = time.length==4?"00":time.substr(4,2);

	if( isValidHour(h) && isValidMin(m) && isValidSec(s) ) {
		return true;
	} else {
		return false;
	}
}

/******************************************************************* 
  FUNCTION			:	getDayOfWeek
  DESCRIPTION		:	오늘 요일 가져오기
  PARAMETER		:	N/A
  EXAMPLE--------------------------------------------------------
		alert('오늘은 ' + getDayOfWeek() + '요일입니다.');
*******************************************************************/
function getDayOfWeek() {
    var now = new Date();

    var day = now.getDay(); 
    var week = new Array('일','월','화','수','목','금','토');

    return week[day];
}

/******************************************************************* 
  FUNCTION			:	isValidHour
  DESCRIPTION		:	일자 유효 검증
  PARAMETER		:	datestr		유효성 검증할 날짜
*******************************************************************/
function isValidDate(datestr){
    //널인지?
    if(isEmpty(datestr)){
        return false;
    }
    //숫자인지?
    if(!isNumber(datestr)){
        //ERR_MSG = "숫자를 입력하셔야 합니다.";
        return false;
    }
    //길이가 8자리?
    if(datestr.length != 8){
        //ERR_MSG = "년월일 8자리를 입력하셔야 합니다.";
        return false;
    }
    var yy = Number(datestr.substring(0,4));
    var mm = Number(datestr.substring(4,6));
    var dd = Number(datestr.substring(6,8));
    //월 검증
    if( !(mm > 0 && mm < 13) ){
        //ERR_MSG = "월은 1~12 까지만 입력할 수 있습니다.  ";
        return false;
    }
    //윤년 검증
    var boundDay = "";
    if(mm != 2){
        var mon=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
        boundDay = mon[mm-1];
    }
    else{
        if (yy%4 == 0 && yy%100 != 0 || yy%400 == 0){
            boundDay = 29;
        }
        else{
            boundDay = 28;
        }
    }
    //일 검증
    if( (dd <= 0) || (dd > boundDay) ){
        //ERR_MSG = "유효하지 않은 일자입니다.\n(" + yy + "년 " + mm + "월은 " + boundDay + "일 까지 있습니다.)";
        return false;
    }
    return true;
}

/******************************************************************* 
  FUNCTION			:	isValidDateYYYYMM
  DESCRIPTION		:	년월만 검증
  PARAMETER		:	datestr		유효성 검증할 날짜
*******************************************************************/
function isValidDateYYYYMM(datestr){
    //널인지?
    if(isEmpty(datestr)){
        return false;
    }
    //숫자인지?
    if(!isNumber(datestr)){
        //ERR_MSG = "숫자를 입력하셔야 합니다.";
        return false;
    }
    //길이가 8자리?
    if(datestr.length != 6){
        //ERR_MSG = "년월 6자리를 입력하셔야 합니다.";
        return false;
    }
    var yy = Number(datestr.substring(0,4));
    var mm = Number(datestr.substring(4,6));
    //월 검증
    if( !(mm > 0 && mm < 13) ){
        //ERR_MSG = "월은 1~12 까지만 입력할 수 있습니다.  ";
        return false;
    }
    return true;
}

/******************************************************************* 
  FUNCTION			:	checkValidPeriod
  DESCRIPTION		:	기간 유효성 검증
								기간이 잘못되었을 경우 자동으로 끝 날짜를 수정해 주기 위해 
								파라미터는 input object 타입으로 받는다.
								만약 두 날짜 중 empty이거나 유효하지 않은 날짜가 들어왔을 경우 다음과 같이 처리된다.

								--------------------------------------------
												시작날짜				끝날짜
								--------------------------------------------
								Empty		오늘날짜				시작날짜+기간
								오류			해당연월끝날짜		시작날짜+기간
								--------------------------------------------

								*** 주의할 것은, autoCorrect 여부에 따라 return값이 달라진다.
								autoCorrect가 true인 경우 오류사항이 있을시 자동 수정되며 return값은 무조건 true이다.
									(autoCorrect가 true인 경우 오류사항 발생시 경고 없이 자동으로 수정된다)
								autoCorrect가 false인 경우 오류사항이 있을시 자동으로 수정된 startDate,endDate의 array가 반환된다. 
									( return array: [0]=startDate, [1]=endDate )

								*** 또 주의할 점. 
								두 날짜 (시작일, 끝일) 가 필수항목일 경우 이 메소드만 적용해도 무방하다.
								하지만 필수항목이 아닐 경우 이 메소드를 호출하기 전에 날짜값이 입력되었는지 여부를 먼저 check한 후
								날짜값이 입력되었을 때에만 이 메소드를 호출해야 한다. (안그러면 자동으로 필수값처럼 인식이 됨)

  PARAMETER		:	startDateObj		기간 check 시작일
								endDateObj		기간 check 끝 일
								term					시작일로부터 유효한 기간
								autoCorrect		자동 수정 여부
*******************************************************************/
function checkValidPeriod(startDateObj, endDateObj, term, autoCorrect) {
	var startDateVal = startDateObj.value;
	var endDateVal = endDateObj.value;

	// 시작일 유효성 검증
	if( isEmpty(startDateVal) || startDateVal.length != 8 ) {
		startDateVal = getToday();
	} else {
		if( !isValidDate(startDateVal) ) {
			alert("검색 시작 날짜가 유효하지 않으므로 자동 수정합니다.");
			if( isValidDateYYYYMM(startDateVal.substr(0, 6)) ) {
				startDateVal = startDateVal.substr(0, 6)+getEndDate(startDateVal.substr(0, 6));
			} else {
				startDateVal = getToday();
			}
		}
	}

	// 끝 날짜 유효성 검증
	if( isEmpty(endDateVal) || endDateVal.length != 8 ) {
		endDateVal = getToday();
	} else {
		if( !isValidDate(endDateVal) ) {
			alert("검색 종료 날짜가 유효하지 않으므로 자동 수정합니다.");
			if( isValidDateYYYYMM(endDateVal.substr(0, 6)) ) {
				endDateVal = endDateVal.substr(0, 6)+getEndDate(endDateVal.substr(0, 6));
			} else {
				endDateVal = getToday();
			}
		}
	}

	// 입력받은 날짜들을 Date 포맷으로 변경시킴
	var re_date = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/;

	re_date.exec(""+startDateVal.substr(0,4)+"-"+startDateVal.substr(4,2)+"-"+startDateVal.substr(6,2)+" 00:00:00");
	var startDate = new Date (RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);
	re_date.exec(""+endDateVal.substr(0,4)+"-"+endDateVal.substr(4,2)+"-"+endDateVal.substr(6,2)+" 00:00:00");
	var endDate = new Date (RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);

	// 두 날짜 사이의 차이를 구함
	var diff = Math.round( (endDate-startDate)/(24*60*60*1000) )*1;

	// 시작일이 끝 날짜보다 작거나 두 날짜 사이의 기간이 사용자정의 기간보다 클 경우 날짜를 수정함 (시작일 기준으로 끝 날짜가 변경됨)
	if( diff < 0 || diff > term ) {
		if( autoCorrect == true ) {
			alert("검색 기간이 유효범위를 벗어났으므로 자동 수정합니다."); 
		} else {
			alert("검색 기간이 유효범위를 벗어났습니다."); 
			return false;
		}
		endDate.setYear(startDate.getYear());
		endDate.setMonth(startDate.getMonth());
		endDate.setDate(startDate.getDate()+term);
	}

	// 최종적으로 변경된 사항을 반영한다.
	if( autoCorrect == true ) {
		startDateObj.value=""+startDate.getYear()+lpad(startDate.getMonth()+1, 2, "0")+lpad(startDate.getDate(), 2, "0");
		endDateObj.value=""+endDate.getYear()+lpad(endDate.getMonth()+1, 2, "0")+lpad(endDate.getDate(), 2, "0");
		return true;
	} else {
		var result = new Array;
		result[0] = ""+startDate.getYear()+lpad(startDate.getMonth()+1, 2, "0")+lpad(startDate.getDate(), 2, "0");
		result[1] = ""+endDate.getYear()+lpad(endDate.getMonth()+1, 2, "0")+lpad(endDate.getDate(), 2, "0");
		return result;
	}

}

/******************************************************************* 
  FUNCTION			:	isValidEmail
  DESCRIPTION		:	EMAIL 유효성 검증
  PARAMETER		:	email		검증할 E-Mail
*******************************************************************/
function isValidEmail(email){
    //널인지?
    if(isEmpty(email)){
        return null;
    }
    //올바른 EMAIL 인지 검증
    var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
    if (email.search(format) == -1) {
       //ERR_MSG = "유효하지 않은 이메일 형식입니다.";
       return false
    }
    return true;
}

/******************************************************************* 
  FUNCTION			:	isValidRegNo
  DESCRIPTION		:	주민등록번호 유효성 검증
  PARAMETER		:	input		검증할 주민등록번호
*******************************************************************/
function isValidRegNo(input) {
    //널인지?
    if(isEmpty(input.value)){
        return null;
    }
    // 13자리 숫자인가? -> 주민번호
    if((getByteLength(input) != 13) || (!isNumber(input.value)) ) {
        //ERR_MSG = "주민등록번호는 13자리 숫자입니다.";
        return false;
    }
    
    if(input.value.substring(6,7) == '7' || input.value.substring(6,7) == '8'){
    	//외국인경우
    	return true;
    }
    
    //올바른 주민등록번호인지 검증
    var ju = input.value.substring(0,6);
    var ju1 = input.value.substring(6);
    juid = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0);
    for(var i = 0; i<6;i++)
        juid[i] = ju.substring(i,i+1);
    for(i=0;i<7;i++)
        juid[i+6] = ju1.substring(i,i+1);
    for(var sum = 0, i = 0;i<12;i++)
        sum += juid[i] * ((i >7) ? (i-6) : (i+2));
    var mod = 11 - sum%11;
    if(mod >= 10)
        mod -= 10;
    if(mod != juid[12]) {
         //ERR_MSG = "올바르지 않은 주민등록번호입니다.";
         return false;
    }
    else {
        return true;
    }
}

/******************************************************************* 
  FUNCTION			:	isValidCustNo
  DESCRIPTION		:	사업자번호 유효성 검증
  PARAMETER		:	input		검증할 사업자등록번호
*******************************************************************/
function isValidCustNo(input) {
    //널인지?
    if(isEmpty(input.value)){
        return null;
    }
    // 10자리 숫자인가?
    if((getByteLength(input) != 10) || (!isNumber(input.value)) ) {
        //ERR_MSG = "사업자등록번호는 10자리 숫자입니다.";
        return false;
    }
    sumMod	=	0;
    sumMod	+=	Number(input.value.substring(0,1));
    sumMod	+=	Number(input.value.substring(1,2)) * 3 % 10;
    sumMod	+=	Number(input.value.substring(2,3)) * 7 % 10;
    sumMod	+=	Number(input.value.substring(3,4)) * 1 % 10;
    sumMod	+=	Number(input.value.substring(4,5)) * 3 % 10;
    sumMod	+=	Number(input.value.substring(5,6)) * 7 % 10;
    sumMod	+=	Number(input.value.substring(6,7)) * 1 % 10;
    sumMod	+=	Number(input.value.substring(7,8)) * 3 % 10;
    sumMod	+=	Math.floor(Number(input.value.substring(8,9)) * 5 / 10);
    sumMod	+=	Number(input.value.substring(8,9)) * 5 % 10;
    sumMod	+=	Number(input.value.substring(9,10));
    if	(sumMod % 10	!=	0)
    {
        //ERR_MSG = "올바르지 않은 사업자등록번호입니다.";
        return false;
    }
    return	true;
}




/******************************************************************* 
  FUNCTION			:	checkValidPeriodWeek
  DESCRIPTION		:	주차 검색 기간의 유효성 체크
  PARAMETER		:	startWeekObj		검색할 시작주차
								endWeekObj		검색할 마지막주차
								autoCorrect			자동수정 여부
*******************************************************************/
function checkValidPeriodWeek(startWeekObj, endWeekObj, autoCorrect) {
	var message = "";
	var tmp;
	var startWeekVal = '' + startWeekObj.value;
	var endWeekVal = '' + endWeekObj.value;


	// 시작주차 유효성 검증
	if( !isValidWeek(startWeekVal) ) {
		//alert("검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.");
		message += "검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.";
		startWeekVal = (new Date()).getYear() + '' + getWeekOfYear(getToday());
	} 
	
	// 끝주차 유효성 검증
	if( !isValidWeek(endWeekVal) ) {
		//alert("검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.");
		message += "검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.";
		endWeekVal = (new Date()).getYear() +'' + getWeekOfYear(getToday());	
	} 


	// 주차기간 차이 계산
	var diffYear = parseInt(endWeekVal.substring(0,4)) - parseInt(startWeekVal.substring(0,4));
	var diffWeek = parseInt(endWeekVal.substr(4,2)) - parseInt(startWeekVal.substr(4,2));

	if( (diffYear < 0) || (diffWeek < 0) )  {
		if(autoCorrect == true) {
			//alert("검색 주차기간이 유효범위를 벗어났으므로 자동 수정합니다.");
			if(message.length > 0)	 message += "\n";			
			message += "검색 주차기간이 유효범위를 벗어났으므로 자동 수정합니다.";
		} else {
			//alert("검색기간이 유효범위를 벗어났습니다.");
			if(message.length > 0)	 message += "\n";			
			message += "검색기간이 유효범위를 벗어났습니다.";
			//return false;
		}
				endWeekVal = startWeekVal;
	}

	if(message.length > 0)			alert(message);	// 에러메세지 알림


	// 변경 사항 반영
	if( autoCorrect == true ) {
		startWeekObj.value = '' + startWeekVal;
		endWeekObj.value = '' + endWeekVal;
		return true;
	} else {
		var result = new Array;
		result[0] = startWeekVal;
		result[1] = endWeekVal;
		return result;
	}

}



/******************************************************************* 
  FUNCTION			:	checkValidPeriodMonth
  DESCRIPTION		:	달차 검색 기간의 유효성 체크
  PARAMETER		:	Day1		검색할 시작달차
							Day2		검색할 마지막달차
							
*******************************************************************/
function checkValidPeriodMonth(startDateObj,endDateObj) {
	
	var Day1 = startDateObj.value;
	var Day2 = endDateObj.value;
	var value1 =  Day1.substring(0,6);
	var value2 =  Day2.substring(0,6);
	var month1 = Day1.substring(4,6);
	var month2 = Day2.substring(4,6);
	var day1 = Day1.substring(6,8);
	var day2 = Day2.substring(6,8);
	var year=Day1.substring(0,4);
	
	var date = new Date();
	var year1= date.getYear();
    var month = date.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
	var totalDays = 0;
	
	//////////////////////////////// Day1와 Day2 value값 체크 ////////////////////////////////
	if(month1<13&&Day1.length==8){
		if(value1==value2){
			if(month2 == 4 || month2 == 6 || month2 == 9 || month2 == 11){
	        	totalDays = 30;
	        
		        if(totalDays<day1){
			        day2=totalDays;
			    }    
		       
	        }else{
		        totalDays = 31;
		        if(totalDays<day2){
			        day2=totalDays;
			    }
		    }
		    if(month2 == 2){
		        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
		            totalDays = 29;
		            if(totalDays<day2){
				        day2=totalDays;
				     }
				     
		        }else{
		            totalDays = 28;
		             if(totalDays<day2){
				        day2=totalDays;
				      }
		      	}
		 	}
			
			var day_val1 = value1 +'01';
		 	var day_val2 = value1+day2;
		 	
		 	startDateObj.value=""+day_val1;
			endDateObj.value=""+day_val2;
			 
		 	var result = new Array;
			result[0] = day_val1;
			result[1] = day_val2;
			return result;
		 	
			}else{
			var totalDays = 0;
		 
		 		if(month1 == 4 || month1 == 6 || month1 == 9 || month1 == 11){
		            totalDays = 30;
		        }else{
		            totalDays = 31;
		        }
		        if(month1 == 2){
		            if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
		                totalDays = 29;
		            }else{
		                totalDays = 28;
		       		}
		     	}
		     
		    var day_val1 = value1 +'01';
		 	var day_val2 = value1+totalDays;
		 	
		 	startDateObj.value=""+day_val1;
			endDateObj.value=""+day_val2;
			
		 	var result = new Array;
			result[0] = day_val1;
			result[1] = day_val2;
			return result;
		 	}
	 }else{
		
	    if(month == 4 || month == 6 || month == 9 || month == 11){
		            totalDays = 30;
        }else{
            totalDays = 31;
        }
        if(month == 2){
            if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
                totalDays = 29;
            }else{
                totalDays = 28;
       		}
		}
		
		var day_val1 = year1 + lpad(month) + '01';
		var day_val2 = year1 + lpad(month) + totalDays;
	 	
		var result = new Array;
		result[0] = day_val1;
		result[1] = day_val2;
		
		startDateObj.value=""+day_val1;
		endDateObj.value=""+day_val2;
		 
		return result;
	 }	
}
	 



/******************************************************************* 
  FUNCTION			:	resizeText
  DESCRIPTION		:	String을 넘겨 주면 (한글, 영문, ASCII특수문자 포함) 원하는 길이로 잘라서
								끝에 ... 을 반환시켜주는 method.  
								자르고자 하는 사이즈(maxval)가 30일 경우 실제 String은 28byte만 차지하게 되고
								나머지 2byte는 "..." 이 차지하게 됨.  (by Gadenia)
  PARAMETER		:	value		resizing할 text
								maxval	resizing할 길이
*******************************************************************/
function resizeText(value, maxval) {
	var cnt = 0;
	var result = "";

	for(var i = 0; i < value.length; i++) {

		if( cnt+3 > eval(maxval) ) {
			return result+"...";
		} else {
			if( value.charCodeAt(i) < 129 ) {
				if( cnt+1 < eval(maxval) ) {
					cnt = cnt + 1;
					result += value.charAt(i);
				} else {
					return result+"...";
				}
			} else {
				if( cnt+2 < eval(maxval) ) {
					cnt = cnt + 1;
					result += value.charAt(i);
				} else {
					return result+"...";
				}
			}
		}
	}
	return result;
}


/******************************************************************* 
  FUNCTION			:	CheckStrLen
  DESCRIPTION		:	textarea 입력값 사이즈 체크
  PARAMETER		:	maxlen		입력가능하게 할 최대 한글 글자수.
  								field		체크할 textarea Object값(this)
*******************************************************************/
function CheckStrLen(maxlen,field){
   var temp;
   var msglen;
   msglen = maxlen*2;
   var value= field.value;
   
   l =  field.value.length; 
   tmpstr = "" ;

   if (l == 0){
    value = maxlen*2;
   }else{
	    for(k=0;k<l;k++){
		     temp =value.charAt(k);

		     if (escape(temp).length > 4)
			msglen -= 2;
		     else
			msglen--;
		    
		     if(msglen < 0){
			alert("총 영문 "+(maxlen*2)+"자 또는 한글 " + maxlen + "자 까지 입력할 수 있습니다.");
			field.value= tmpstr;
			break;
		     }else{
			tmpstr += temp;
		     }
	    }
   }
}


/******************************************************************* 
  FUNCTION			:	getWeekOfYear
  DESCRIPTION		:	날짜를 입력하면 해당연도 해당일이 속한 주차를 반환한다.
								입력받은 날짜가 입력형식(yyyyMMdd)에 맞지 않을 경우
								'' (empty string)이 반환된다.
									(단, 입력날짜에서 문자열은 자동 제거된 후 검사한다.
									 그러므로, 입력받은 문자열에 날짜항목만의 형식이 
									 yyyyMMdd이면 된다. )
  PARAMETER		:	date		주차를 가져올 날짜
*******************************************************************/
function getWeekOfYear(date) {
	if( isEmpty(date) ) {
		return '';
	}
	date = removeChar(date);
	if( date.length != 8 ) {
		return '';
	}

	// 입력받은 날짜들을 Date 포맷으로 변경시킴
	var dateFormatter = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/;

	dateFormatter.exec(""+date.substr(0,4)+"-"+date.substr(4,2)+"-"+date.substr(6,2)+" 00:00:00");
	var formattedDate = new Date (RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);


	var totalDaysFromFirstDayOfYear = 0;
	var daysPerMonth = [31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

	if (Math.round(formattedDate.getYear()/4) == formattedDate.getYear()/4) {
		daysPerMonth[1] = 29;
	}else{
		daysPerMonth[1] = 28;
	}

	if (formattedDate.getMonth() == 0) {
		totalDaysFromFirstDayOfYear = totalDaysFromFirstDayOfYear + formattedDate.getDate();
	}else{
	var curMonth = formattedDate.getMonth();
	for (var count = 1; count <= curMonth; count++) {
		totalDaysFromFirstDayOfYear = totalDaysFromFirstDayOfYear + daysPerMonth[count - 1];
	}
		totalDaysFromFirstDayOfYear = totalDaysFromFirstDayOfYear + formattedDate.getDate();
	}
	var week = Math.round(totalDaysFromFirstDayOfYear/7);
	return week;
}


/******************************************************************* 
    function : ConvertAmount(date_val)
	설명 : 금액 데이터를 "," 로 구분하기
********************************************************************/
function ConvertAmount(amount_val) {
  if(amount_val==null)  return "";
  
  var m_last = "";
  var pos = amount_val.indexOf(".");
  var m_prev;
  
  if(pos!=-1) {
    m_last = amount_val.substring(pos, amount_val.length);
    m_prev = amount_val.substring(0,pos);
  } else {
    m_prev = amount_val;
  }
  
  var mlength = m_prev.length;
  var m_val = "";
  
  while(mlength >= 3) {
    m_val = m_prev.substring(m_prev.length-3, m_prev.length) + m_val;
    m_prev = m_prev.substring(0, m_prev.length-3);
    
    if(mlength >3)  m_val = "," + m_val;
    
    mlength = m_prev.length
  }
  return m_prev + m_val + m_last;
}  


/******************************************************************* 
  FUNCTION			:	FormatToNum
  DESCRIPTION		:	입력값에 천단위로 ','를 찍어주는 함수
  PARAMETER		    :	objtext	해당 input태그 Object
*******************************************************************/
function FormatToNum(objtext) { 
    str = objtext.value;

    var minus = "";
    var tmp = "";
    for(i=0; i < (str.length); i++){
      if( str.charAt(i) == "-"){ 
         minus = str.charAt(i);
      }
      else 
         tmp += str.charAt(i);
    }
    str = tmp;

    for(i=0; i<((str.length)/3); i++) { 
   		 str = ""+ str.replace(",","") +""; 
    }
    
    var retValue = "";
	
    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( minus == "") {
        objtext.value = retValue;
    }
    else {
        objtext.value = minus + retValue;
    }
    return; 
}

/******************************************************************* 
  FUNCTION			:	IsNumber
  DESCRIPTION		:	입력값의 숫자 타입 체크 후 메세지 출력
*******************************************************************/
function IsNumber() {
	if ((event.keyCode<48)||(event.keyCode>57)) {
            if(event.keyCode != 13){
		alert("숫자로만 입력해 주십시요");
		event.returnValue=false;
            }
	}
}

/******************************************************************* 
  FUNCTION			:	LimitAttach
  DESCRIPTION		:	업로드할 파일을 제한한다.
*******************************************************************/
function LimitAttach(object) {
	// 업로드 제한할 확장자
	var extArray = new Array(".asp", ".jsp", ".php");
	allowSubmit = true;

	var file = object.value;

	while (file.indexOf("\\") != -1) {
		file = file.slice(file.indexOf("\\") + 1);
	}
	ext = file.slice(file.indexOf(".")).toLowerCase();

	for (var i = 0; i < extArray.length; i++) {
		if (extArray[i] == ext) { 
			allowSubmit = false; 
			break; 
		}
	}

	return allowSubmit;
}

/******************************************************************* 
  FUNCTION		:	autoTab
  DESCRIPTION		:	input obj 의 탭 이동
*******************************************************************/
function autoTab(_ele, _index){
   if(event.keyCode == 13 &&  _ele.length > ++_index){
       _ele[_index].focus();
   }
}


/******************************************************************* 
  FUNCTION			:	checkValidPeriodWeek
  DESCRIPTION		:	주차 검색 기간의 유효성 체크
  PARAMETER		:	startWeekObj		검색할 시작주차
								endWeekObj		검색할 마지막주차
								autoCorrect			자동수정 여부
*******************************************************************/
function checkValidPeriodWeekwithTerm(startWeekObj, endWeekObj, term, autoCorrect) {
	var message = "";
	var tmp;
	var startWeekVal = '' + startWeekObj.value;
	var endWeekVal = '' + endWeekObj.value;


	// 시작주차 유효성 검증
	if( !isValidWeek(startWeekVal) ) {
		//alert("검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.");
		message += "검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.";
		startWeekVal = (new Date()).getYear() + '' + getWeekOfYear(getToday());
	} 
	
	// 끝주차 유효성 검증
	if( !isValidWeek(endWeekVal) ) {
		//alert("검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.");
		message += "검색 주차 시작일이 유효하지 않으므로 자동 수정합니다.";
		endWeekVal = (new Date()).getYear() +'' + getWeekOfYear(getToday());	
	} 


	// 주차기간 차이 계산
	var diff = parseInt(endWeekVal) - parseInt(startWeekVal);
	//var diffYear = parseInt(endWeekVal.substring(0,4)) - parseInt(startWeekVal.substring(0,4));
	//var diffWeek = parseInt(endWeekVal.substr(4,2)) - parseInt(startWeekVal.substr(4,2));

	if( (diff > term) || (diff < 0) )  {
		if(autoCorrect == true) {
			//alert("검색 주차기간이 유효범위를 벗어났으므로 자동 수정합니다.");
			if(message.length > 0)	 message += "\n";			
			message += "검색 주차기간이 유효범위를 벗어났으므로 자동 수정합니다.";
		} else {
			//alert("검색기간이 유효범위를 벗어났습니다.");
			if(message.length > 0)	 message += "\n";			
			message += "검색기간이 유효범위를 벗어났습니다.";
			//return false;
		}

		endWeekVal = startWeekVal;
	}

	if(message.length > 0)			alert(message);	// 에러메세지 알림


	// 변경 사항 반영
	if( autoCorrect == true ) {
		startWeekObj.value = '' + startWeekVal;
		endWeekObj.value = '' + endWeekVal;
		return true;
	} else {
		var result = new Array;
		result[0] = startWeekVal;
		result[1] = endWeekVal;
		return result;
	}

}


