    var oObjDate = null;
    var oObjForm = null;
    //var oPopup   = window.createPopup();    // 팝업 윈도우를 선언한다.
    var chkHoli  = false;
    var monDays = "31;28;31;30;31;30;31;31;30;31;30;31;".split(";");

    // 입력된 일자 Data의 형식을 검사한다.
    function appCheckData( arg ) {
        var date = arg.split(".");

        if( arg == "" ) {
        	return true;
        } else if( arg.indexOf(" ") != -1 || date.length != 3 ) {   // 년.월.일 형식이 맞는지 검사
            alert("YYYY.MM.DD 형식으로 넣어주세요");
            oObjDate.focus();
            return false;
        } else {
            // year check
            if( date[0].length != 4 ) {
                alert("연도 정보가 잘못 입력되었습니다.");
                oObjDate.focus();
                return false;
            }

            // month check
            if( date[1].length != 2 || new Number(date[1]) > 12 || new Number(date[1]) < 1 ) {
                alert("월 정보가 잘못 입력되었습니다.");
                oObjDate.focus();
                return false;
            }

            // day check
            var lastDay;
            // 월별 마지막 날짜를 얻는다.
            if( date[1] == "02" )
                lastDay = getFebLength( date[0] );
            else
                lastDay = parseInt(monDays[ date[0] - 1 ]);

            // 일자가 마지막 날짜를 넘었는지 확인한다.
            if( date[2].length != 2 || new Number(date[2]) > lastDay ) {
                alert("일 정보가 잘 못 되었습니다.");
                oObjDate.focus();
                return false;
            }
            return true;
        }
    }

    // 윤달 여부를 계산한다.
    function getFebLength(theYear) {
        theYear = (theYear < 1900) ? theYear + 1900 : theYear;
        if( ( theYear % 4 == 0 && theYear % 100 != 0 ) || theYear % 400 == 0 ) {
            return 29;
        }
        return 28;
    }

    // 해당 연도의 첫째 요일을 구한다.
    function getFirstDay(theYear){
        var firstDate = new Date(theYear,this.offset,1);
        return firstDate.getDay();
    }

    // 월, 일 정보가 한자리인경우 앞에 '0'을 붙인다.
    function setCalendarZero(sVal)   {
        sVal = sVal.toString();
        if( sVal.length == 1 ) {
            return sVal = "0" + sVal;
        } else {
            return sVal = sVal;
        }
    }

    // 달력을 그려 준다.
    function reDrawCalendar(sDate)   {
        var tDate = sDate;
        var nLoop = 0;
        //var oObj  = tblDayList.rows;

        var nLastDay   = parseInt(monDays[ sDate.substring(4,6) - 1  ]);

        if( sDate.substring(4, 6) == "02" ) {
            nLastDay = getFebLength(sDate.substring(0,4));
        }

        document.getElementById('nowYear').innerHTML  = sDate.substring(0,4);
        document.getElementById('nowMonth').innerHTML = sDate.substring(4,6);

        var anchorDay  = new Date(sDate.substring(0,4) + "/" + sDate.substring(4,6) + "/01");
        var firstDay   = anchorDay.getDay();

        var nRoop      = 0; // 주 정보
        var nCoop      = 0; // 요일 정보
        var nChk       = parseInt(sDate.substring(6,8));    // 현재 일자
        var sTblList   = "<table id='tblDayList' width='170' border='1' cellpadding='0' cellspacing='0' style=\"border-color:#A4A15D;\">";

        var activeHeight = "24px";
        var loopCount    = 5;

        ///////////////////////////////////////////////////////
        // 요일에 따라 Loop의 회수를 구한다.
        ///////////////////////////////////////////////////////
        if( ( firstDay > 4 && nLastDay > 30 ) || ( firstDay > 5 && nLastDay > 29 ) ) {
        	activeHeight = "20px";
        	loopCount    = 6;
		}

        for ( nRoop = 0; nRoop < loopCount; nRoop++ ) {
            sTblList = sTblList + "<tr align=center height='" + activeHeight + "' bgcolor='#F3F2DB'>";
            for( nCoop = 0; nCoop < 7; nCoop++ ) {
                absDay = nRoop * 7 + nCoop;
                // 첫주의 이전달이거나 마지막주의 다음달 정보인 경우
                if( ( absDay < firstDay ) || ( absDay >= ( nLastDay + firstDay ) ) )  {
                    if( nCoop == 0 ) {
                        sTblList = sTblList + "<td width='15%' style=\"line-height:14px; font-size: 8pt;\">&nbsp;</td>";
                    } else if( nCoop == 6 ) {
                        sTblList = sTblList + "<td width='15%' style=\"line-height:14px; font-size: 8pt;\">&nbsp;</td>";
                    } else {
                        sTblList = sTblList + "<td width='14%' style=\"line-height:14px; font-size: 8pt;\">&nbsp;</td>";
                    }
                } else { // 일자 정보 출력
                    prnDay = absDay - firstDay + 1;
                    if( nChk == prnDay ) {  // 선택된 일자인 경우
                        if( nCoop == 0 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #8A0017; font-weight: bold; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</TD>";
                        } else if( nCoop == 6 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #004B9F; font-weight: bold; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        } else {
                            sTblList = sTblList + "<td width='14%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #333333; font-weight: bold; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        }
                    } else {
                        if( nCoop == 0 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #8A0017; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        } else if( nCoop == 6 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #004B9F; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        } else {
                            sTblList = sTblList + "<td width='14%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #333333; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        }
                    }
                }
            }
            sTblList = sTblList + "</tr>";
        }
        document.getElementById('divDayList').innerHTML = sTblList + "</table>";
    }

    // 월 정보가 바뀌는 경우 달력을 다시 그린다.
    function resetMonth(nMonth) {
        var oYear = document.getElementById('nowYear');
        var oMonth = document.getElementById('nowMonth');

        var anchorDay = new Date(oYear.innerHTML + "/" + oMonth.innerHTML + "/01");
        anchorDay.setMonth(anchorDay.getMonth() + nMonth);
        var sDate = anchorDay.getFullYear() + setCalendarZero(anchorDay.getMonth() + 1) + setCalendarZero(anchorDay.getDate());

        var nLastDay   = parseInt(monDays[ sDate.substring(4,6) - 1  ]);
        if( sDate.substring(4, 6) == "02" ) {
            nLastDay   =  getFebLength(sDate.substring(0,4));
        }

        oYear.innerHTML  = sDate.substring(0,4);
        oMonth.innerHTML = sDate.substring(4,6);

        var anchorDay  = new Date(sDate.substring(0,4) + "/" + sDate.substring(4,6) + "/01");
        var firstDay = anchorDay.getDay();

        var nRoop      = 0;
        var nCoop      = 0;
        var nChk       = parseInt(oObjDate.value.substring(8, 10));
        if( nChk > nLastDay )
            nChk = nLastDay;

        var sTmp = sDate.substring(0,4) + "." + sDate.substring(4,6) + "." + nChk;
        if( sTmp.length == 9 )
            sTmp = oYear.innerHTML + "." + oMonth.innerHTML + "." + "0" + nChk;
        //oObjDate.value = sTmp;

        var sTblList   = "<table id='tblDayList' width='170' border='1' cellpadding='0' cellspacing='0'  style=\"border-color:#A4A15D;\">";


        var activeHeight = "24px";
        var loopCount    = 5;
        if( ( firstDay > 4 && nLastDay > 30 ) || ( firstDay > 5 && nLastDay > 29 ) ) {
        	activeHeight = "20px";
        	loopCount    = 6;
		}
        for( nRoop = 0; nRoop < loopCount; nRoop++ ) {
            sTblList = sTblList + "<tr align=center height=" + activeHeight + " bgcolor='#F3F2DB'>";
            for( nCoop = 0; nCoop < 7; nCoop++ ) {
                absDay = nRoop * 7 + nCoop;
                if( ( absDay < firstDay ) || ( absDay >= ( nLastDay + firstDay ) ) ) {
                    if( nCoop == 0 ) {
                        sTblList = sTblList + "<td width='15%' style=\"line-height:14px; font-size: 8pt;\">&nbsp;</td>";
                    } else if( nCoop == 6 ) {
                        sTblList = sTblList + "<td width='15%' style=\"line-height:14px; font-size: 8pt;\">&nbsp;</td>";
                    } else {
                        sTblList = sTblList + "<td width='14%' style=\"line-height:14px; font-size: 8pt;\">&nbsp;</td>";
                    }
                } else {
                    prnDay = absDay - firstDay + 1;
                    if( nChk == prnDay ) {
                        if( nCoop == 0 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #8A0017; font-weight: bold; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</TD>";
                        } else if( nCoop == 6 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #004B9F; font-weight: bold; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        } else {
                            sTblList = sTblList + "<td width='14%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #333333; font-weight: bold; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        }
                    } else {
                        if( nCoop == 0 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #8A0017; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        } else if( nCoop == 6 ) {
                            sTblList = sTblList + "<td width='15%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #004B9F; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        } else {
                            sTblList = sTblList + "<td width='14%' class='calendar_dayText' style=\"line-height:14px; font-size: 8pt; color: #333333; \" onclick=\"selDay( this.innerHTML)\">" + prnDay + "</td>";
                        }
                    }
                }
            }
            sTblList = sTblList + "</tr>";
        }
        document.getElementById('divDayList').innerHTML = sTblList + " </table>";
    }

	//오늘날짜

	function toDate(){

		var now = new Date();

		var year = now.getYear();

		var month = now.getMonth()+ 1;

	var day = now.getDate();


	if(month < 10){

			month = "0" + month;

		}

		if(day < 10){

	day = "0" + day;

		}
		return year +"."+ month +"."+ day;
	}

    // 화면에 달력을 출력한다.
    function showCalendar(oDate, oObj, nX, nY) {
        var objDate = eval(oDate);
		var curCalDate = "";
        oObjDate = oDate;

        if( appCheckData(objDate.value) == false )      // 기 입력되어있는 Date 정보를 검사한다. (input 객체)
            return;

        //var oPopupBody = oPopup.document.body;          // 팝업 윈도우의 body객체
		if( objDate.value == "") {
			curCalDate = toDate();
			//objDate.value = curCalDate ;
		}else {
			curCalDate = objDate.value;
		}
        var date = curCalDate.split(".");

        reDrawCalendar(date[0] + date[1] + date[2]);    // 달력을 그린다.


        //oPopupBody.innerHTML = divCalendar.innerHTML;   // 그려진 달력을 팝업 윈도우에 삽입한다.
        //oPopup.show(nX, nY, 169, 167, oObj);
        //oPopup.show(nX+360, nY+320, 169, 167, oObj);
        //oPopup.show(nX - 156, nY + 9, 169, 167, oObj);  // 팝업 윈도우를 화면에 출력한다.
        document.getElementById('divCalendar').style.top = nX+'px';
        document.getElementById('divCalendar').style.left = nY+'px';
        document.getElementById('divCalendar').style.display = "block";
    }

    function selDay(sDay)  {
        var oYear = document.getElementById('nowYear');
        var oMon = document.getElementById('nowMonth');
        // 년,월,일 정보를 yyyy.mm.dd 포멧으로 변경한다.
        var sTmp = oYear.innerHTML + "." + oMon.innerHTML + "." + sDay;
        if( sTmp.length == 9 )
            sTmp = oYear.innerHTML + "." + oMon.innerHTML + "." + "0" + sDay

        oObjDate.value = sTmp;  // 선택된 일 정보를 해당 일자 필드에 적용한다.
		oObjDate.focus();
        //oPopup.hide();          // 달력을 숨긴다.
        document.getElementById('divCalendar').style.display = "none";
    }

    function callCalendar(frmDate) {
        var posValue = getAbsolutePosition(frmDate);
        var dtObj = null;
        if( (dtObj = eval(frmDate) ) != null ) {

            //showCalendar(dtObj, document.body, event.x, event.y );
            showCalendar(dtObj, document.body, posValue.top-170, posValue.left-100 );
        }
    }

    function getAbsolutePosition(obj){
        var results={top:0,left:0};

        while (obj.offsetParent){
            results.top = results.top + obj.offsetTop;
            results.left = results.left + obj.offsetLeft;
            obj = obj.offsetParent;
        }
        return results;
    };

    // 기간인 경우 From - To의 일자가 바뀌는것을 확인한다.
    function chkFromTo( date1, date2 ) {
        var fDate = date1.value.split(".");
        var tDate = date2.value.split(".");

        var date11 = fDate[0] + fDate[1] + fDate[2];
        var date22 = tDate[0] + tDate[1] + tDate[2];

        if( eval(date22 - date11) < 0 ) {
            date2.focus();
            return false;
        }
        return true;
    }

	///////////////////////////////////////////////////////////////////////////////
	// 함수명 : SubtractDate(strBaseDate, interval)
	// 내  용 : 기준일(strBaseDate)로 부터 n(interval)일 이전의 날짜 추출
	// strBaseDate  Format : YYYYMMDD
	// Return Value Format : YYYYMMDD
	function SubtractDate(strBaseDate, interval) {

		var year   = strBaseDate.substring( 0, 4 );
		var month  = parseInt(strBaseDate.substring( 4, 6 )) - 1;
		var day    = strBaseDate.substring( 6, 8 );

		var todate = new Date(year,month,day);

		var date = new Date();

		date.setTime(todate.getTime() - (1000 * 60 * 60 * 24 * interval));

		yyyy = date.getFullYear().toString();
		mm   = (parseInt(date.getMonth()) + 1).toString();
		dd   = date.getDate().toString();

		yyyy = (yyyy.length ==1) ? '0'+yyyy : yyyy;
		mm   = (mm.length == 1)  ? '0'+mm   : mm;
		dd   = (dd.length == 1)  ? '0'+dd   : dd;

		return yyyy+mm+dd;

	}

	///////////////////////////////////////////////////////////////////////////////
	// 함수명 : CheckInterval(strBaseDate, interval)
	// 내  용 : strBaseDate가 현재 시점부터 n(interval)일 사이에 존재하는가를 검사
	// strBaseDate  Format : YYYYMMDD
	// Return Value Format : YYYYMMDD
	// n일 이내에 있으면 true
	// n일을 벗어나 있으면 false
	function CheckInterval(strBaseDate, interval) {

		var year   = parseInt(strBaseDate.substring( 0, 4 ));
		var month  = parseInt(strBaseDate.substring( 4, 6 )) - 1;
		var day    = parseInt(strBaseDate.substring( 6, 8 ));

		var baseDate = new Date(year,month,day);
		var nowDate  = new Date();

		var days_interval = nowDate.getTime() - baseDate.getTime();

		var days = Math.floor(days_interval / (1000 * 60 * 60 * 24));

		if (days > interval) {
			return false;
		} else {
			return true;
		}
	}        
