/**
 * Function : ±âÁØÀÏ·Î ºÎÅÍ Á¶°Ç Å¸ÀÔ¿¡ µû¸¥ ³¯Â¥¸¦ °è»êÇÏ¿© ¹ÝÈ¯ÇÑ´Ù.
 * @param   : baseDD   - ±âÁØÀÏÀÚ
 *          : type     - °è»êÅ¸ÀÔ(1:1ÀÏ, 2:1ÁÖÀÏ, 3:1°³¿ù, 4:3°³¿ù, 5:6°³¿ù, 6:1³â, 7:2³â, 8:3³â)
 *          : frDDFdNm - Target Field Name
 *          : toDDFdNm - Source Field Name
 *          : formNm   - Form Name
 * @return  : String   - °è»êµÈ ³¯Â¥
 */
function calcDate(baseDD, type, frDDFdNm, toDDFdNm, formNm) {
    var relativeDD = null;
    
    try {
        if(baseDD == null || trimmed(baseDD).length == 0) {
            baseDD = today();
        }
        if(frDDFdNm == null) {
            frDDFdNm = "FR_TRD_DD";
        }
        if(toDDFdNm == null) {
            toDDFdNm = "TO_TRD_DD";
        }
        
        if(type == 1) { relativeDD = baseDD; }                                 // 1ÀÏ Àü
        else if ( type == 2 ) { relativeDD = relativeDate(baseDD, -7); }       // 1ÁÖÀÏ Àü
        else if ( type == 3 ) { relativeDD = relativeMonth(baseDD, -1); }      // 1°³¿ù Àü
        else if ( type == 4 ) { relativeDD = relativeMonth(baseDD, -3); }      // 3°³¿ù Àü
        else if ( type == 5 ) { relativeDD = relativeMonth(baseDD, -6); }      // 6°³¿ù Àü
        else if ( type == 6 ) { relativeDD = relativeYear(baseDD, -1); }       // 1³â Àü
        else if ( type == 7 ) { relativeDD = relativeYear(baseDD, -2); }       // 2³â Àü
        else if ( type == 8 ) { relativeDD = relativeYear(baseDD, -3); }       // 3³â Àü
		else if ( type == 0) { relativeDD = "20040102"; }                      // ÀüÃ¼
        else { throw "³¯Â¥ °è»ê Å¸ÀÔ ÀÎ¼ö°¡ ºÎÀûÀýÇÕ´Ï´Ù.(" + type + ")"; }    // ¿¹¿Ü¹ß»ý
        
        if(formNm == null) {
            document.all[frDDFdNm].value = relativeDD;
            document.all[toDDFdNm].value = baseDD;
        }
        else {
            document.forms[formNm][frDDFdNm].value = relativeDD;
            document.forms[formNm][toDDFdNm].value = baseDD;
        }
    }
    catch(e) {
        dialogError(e);
    }
}

/**
 * Function : ¹®ÀÚ¿­ÀÇ ¾ÕµÚ space¸¦ Á¦°ÅÇÑ´Ù.
 * @param   : value
 * @return  : ¾ÕµÚÀÇ space°¡ Á¦°ÅµÈ ¹®ÀÚ¿­
 */
function trimmed(value) {
    value = value.replace(/^\s+/, "");     // remove leading white spaces
    value = value.replace(/\s+$/g, "");    // remove trailing while spaces
    
    return value;
}

/**
 * Function : ÇöÀçÀÏÀ» ¹ÝÈ¯ÇÑ´Ù.(Å¬¶óÀÌ¾ðÆ® ½Ã°¢)
 * @param   : delm   - ±¸ºÐÀÚ
 * @return  : String - ÇöÀçÀÏÀÚ
 */
function today(delm) {
    if(delm == null ) { delm = ""; }
    
    var now   = new Date();
    var year  = now.getYear();
    var month = now.getMonth() + 1;
    var date  = now.getDate();
    
    if(month < 10) { month = "0" + month; }
    if(date  < 10) { date  = "0" + date;  }
    
    return (year + delm + month + delm + date);
}

/**
 * Function : ±âÁØÀÏÀÇ »ó´ëÀûÀÎ ÀÏÀÚ¸¦ °è»êÇÑ ³¯Â¥¸¦ ±¸ÇÑ´Ù.
 * @param   : baseDD - ±âÁØÀÏ
 *          : n      - »ó´ëÀû ÀÏÀÚ¼ö
 * @return  : String - °è»êµÈ ³¯Â¥
 */
function relativeDate(baseDD, n) {
    var oDestDate = null;
    
    if(typeof baseDD == "object") {    // ±âÁØÀÏ Å¸ÀÔÀÌ Date °´Ã¼
        oDestDate = baseDD;
    }
    else {                             // ±âÁØÀÏ Å¸ÀÔÀÌ String °´Ã¼
        oDestDate = castDateType(baseDD);
    }
    
    oDestDate.setDate(oDestDate.getDate() + n);
    
    return castStrType(oDestDate);
}

/**
 * Function : ±âÁØÀÏÀÇ »ó´ëÀûÀÎ °³¿ù¸¦ °è»êÇÑ ³¯Â¥¸¦ ±¸ÇÑ´Ù.
 * @param   : bastDD - ±âÁØÀÏ
 *          : n      - »ó´ëÀû °³¿ù¼ö
 * @return  : String - °è»êµÈ ÀÏÀÚ
 */
function relativeMonth(bastDD, n) {
    var oldDate, newLastDate;
    var oDestDate = null;
    
    if(typeof bastDD == "object") {    // ±âÁØÀÏ Å¸ÀÔÀÌ Date °´Ã¼
        oDestDate = bastDD;
    }
    else {                             // ±âÁØÀÏ Å¸ÀÔÀÌ String °´Ã¼
        oDestDate = castDateType(bastDD);
    }
    
    // ÇöÀç ÀÏÀÚ¸¦ ¹é¾÷ÇØ µÎ°í 1ÀÏ·Î ¼¼ÆÃÇÑ ÈÄ »ó´ëÀûÀÎ °³¿ù °è»êÈÄ ´Ù½Ã ÇöÀçÀÏÀÚ¸¦ º¹¿øÇÑ´Ù.
    // ÀÌÀ¯) ±¸ÇÏ´Â »ó´ëÀÏÀÚÀÇ ³â¿ùÀÇ ¸¶Á÷¸· ÀÏÀÚ°¡ ÇöÀçÀÇ ÀÏÀÚº¸´Ù ÀûÀ» °æ¿ì,
    //       »ó´ëÀÏÀÚÀÇ ¸¶Áö¸·ÀÏÀÚ·Î ¼¼ÆÃÇØ¾ß ÇÔ
    //       ¿¹> 20050731 ÀÇ ÇÑ´ÞÀüÀ» ÀÏÀÚ´Â 20050631(X) °¡ ¾Æ´Ï°í 20050630 ÀÌ´Ù.
    oldDate = oDestDate.getDate();
    oDestDate.setDate(1);
    
    // »ó´ëÀûÀÎ °³¿ù °è»ê
    oDestDate.setMonth(oDestDate.getMonth() + n);
    
    // »ó´ëÀûÀÎ ³â¿ùÀÇ ¸¶Áö¸· ÀÏÀÚ¿Í ÀÌÀü ³â¿ù ÀÏÀÚ¸¦ ºñ±³ÇÑ ÈÄ Å¸´çÇÑ ÀÏÀÚ¸¦ ¼¼ÆÃ
    // ¿¹> 20050731 ÀÇ ÇÑ´ÞÀüÀ» ÀÏÀÚ´Â 20050631(X) °¡ ¾Æ´Ï°í 20050630 ÀÌ´Ù.
    var nTmp = oDestDate.getYear().toString();
    if(nTmp.length == 2) {
        nTmp = "19" + nTmp;
    }
    newLastDate = getDaysInMonth(eval(nTmp), oDestDate.getMonth() + 1);
    if(oldDate > newLastDate) {
        oDestDate.setDate(newLastDate);
    }
    else {
        oDestDate.setDate(oldDate);
    }
    
    if(bastDD.length == 6) {
        return castStrType(oDestDate, "yyyyMM");
    }
    else {
        return castStrType(oDestDate);
    }
}

/**
 * Function : ±âÁØÀÏÀÇ »ó´ëÀûÀÎ ³âµµ¸¦ °è»êÇÑ ³¯Â¥¸¦ ±¸ÇÑ´Ù.
 * @param   : bastDD - ±âÁØÀÏ
 *          : n      - »ó´ëÀû ³âµµ¼ö
 * @return  : String - °è»êµÈ ÀÏÀÚ
 */
function relativeYear(bastDD, n) {
    return relativeMonth(bastDD, n * 12);
}

/**
 * Function : String Çü½ÄÀ» Date Çü½ÄÀ¸·Î º¯È¯
 * @param   : strDate - String Çü½ÄÀÇ ³¯Â¥.
 * @return  : Date    - º¯È¯µÈ Date Çü½ÄÀÇ °´Ã¼
 */
function castDateType(strDate) {
    var dtRtn = null;
    
    if(strDate.length == 6) { strDate += "01"; }
    
    if(strDate.length == 10) {        // Æ÷¸ËÀ» °¡Áø ÇüÅÂ·Î Àü´ÞµÇ¾úÀ» °æ¿ì. (¿¹ 2005.01.01)
        var aDate = strDate.split(strDate.substring(4, 5));
        dtRtn = new Date(aDate[0], eval(aDate[1]) - 1, aDate[2]);
    }
    else if(strDate.length == 8) {    // Æ÷¸ËÀÌ ¾ø´Â ÇüÅÂ·Î Àü´ÞµÇ¾úÀ» °æ¿ì. (¿¹ 20050101)
        var year  = eval(strDate.substring(0, 4));
        var month = eval(strDate.substring(4, 6));
        var date  = eval(strDate.substring(6, 8));
        
        dtRtn = new Date(year, month - 1, date);
    }
    else {
        throw "ºÎÀûÇÕÇÑ ³¯Â¥ Çü½ÄÀÔ´Ï´Ù.(" + strDate + ")";
    }
    
    return dtRtn;
}

/**
 * Function : Date Çü½ÄÀ» String Çü½ÄÀ¸·Î º¯È¯
 * @param   : dtDate - Date Çü½ÄÀÇ ³¯Â¥.
 *          : delm   - ³¯Â¥ÀÇ Æ÷¸Ë ±¸ºÐÀÚ (¿¹ '.' -> 2005.08.01 )
 * @return  : String - º¯È¯µÈ String Çü½ÄÀÇ °´Ã¼
 */
function castStrType(dtDate, format) {
    var re = "";
    var delm = "";
    
    if(format == null)  { format = "yyyyMMdd"; }
    
    for(var i = 0; i < format.length; i++) {
        var vChr = format.charAt(i);
        if(vChr != 'y' && vChr != 'M' && vChr != 'd') { 
            delm = vChr;
            break;
        }
    }
    
    if(delm == "/") {
        re = eval("/\\" + delm + "/g");
    }
    else if(delm.length != 0) {
        re = eval("/" + delm + "/g");
    }
    
    format = format.replace(re, "");
    
    var year  = dtDate.getYear().toString().length == 2 ? "19" + dtDate.getYear() : dtDate.getYear();
    var month = dtDate.getMonth()+1;
    var date  = dtDate.getDate();
    
    if(month < 10) { month = "0" + month; }
    if(date  < 10) { date  = "0" + date;  }
    
    if(format == "yyyy") { return year; }
    else if (format == "yyyyMM") { return year + delm + month; }
    else if (format == "yyyyMMdd") { return year + delm + month + delm + date; }
}

/**
 * Function : ÇØ´ç¿ùÀÌ ¸îÀÏ±îÁö ÀÖ´ÂÁö °è»êÇÑ´Ù.
 *          : 13¿ù 15ÀÏ Ãß°¡.
 * @param   : year  - ³âµµ
 *          : month - ¿ù
 * @return  : days  - ÀÏ¼ö
 */
function getDaysInMonth(year, month) {
    var days;
    if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
        days = 31;
    }
    else if(month == 4 || month == 6 || month == 9 || month == 11) {
        days = 30;
    }
    else if(month == 2) {
        if(leapYear(year) == 1) {
            days = 29;
        }
        else {
            days = 28;
        }
    }
    else if(month == 13) {
        days = 15;
    }
    
    return (days);
}

/**
 * Function : ÇØ´ç³âÀÌ À±³âÀÎÁö °Ë»çÇÑ´Ù.
 * @param   : year  - ³âµµ
 *          : month - ¿ù
 * @return  : À±³âÀÌ¸é 1, ¾Æ´Ï¸é 0
 */
function leapYear(Year) {
    if(((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0))
        return (1);
    else
        return (0);
}

/**
 * Function : ´Þ·Â¸¦ Ç¥½ÃÇÑ´Ù.
 * @param   : oTgtFld   - ÀÏÀÚ°¡ ¼¼ÆÃµÉ ÀÔ·Â ÇÊµå °´Ã¼
 * @param   : vCategory - ºÐ·ù (* MS : À¯°¡Áõ±Ç, ¼±¹°, Ã¤±Ç * MQ : ÄÚ½º´Ú)
 * @param   : vSelMode  - [A]:ÀüÃ¼ÀÏÀÚ, [W]:ÆòÀÏ¸¸, [P]:±ÝÀÏÁ¦¿Ü Àå¿î¿µÀÏ,
 *                        [0]:ÀÏ, [1]:¿ù, [2]:È­, [3]:¼ö, [4]:¸ñ, [5]:±Ý, [6]:Åä, [-1]:ÀüÃ¼
 *                        < ±âº»°ª : -1 (±ÝÀÏÆ÷ÇÔ Àå¿î¿µÀÏ) >
 *                        [Y]:³â¸¸, [M]:¿ù¸¸, (ÇöÀç Àû¿ëµÇÁö ¾ÊÀº ¿É¼ÇÀÔ´Ï´Ù /writer. ¹è¼º·Ã)
 * @return  : none
 */
function showCalendar(oTgtFld, vCategory, vSelMode) {
    if(!oTgtFld) {
        dialogError("À¯È¿ÇÏÁö ¾Ê´Â ³¯Â¥ ÀÔ·Â ÇÊµåÀÔ´Ï´Ù.");
        return;
    }
    /*
    if(!vCategory || (vCategory != "MS" && vCategory != "MQ")) {
        dialogError("ÁÖ½Ä ºÐ·ù ÀÎ¼ö Àü´Þ ¿À·ù! (´Þ·Â ÄÄÆ÷³ÍÆ®)\n¿¹) * MS(À¯°¡Áõ±Ç, ¼±¹°, Ã¤±Ç) * MQ(ÄÚ½º´Ú)");
        return;
    }
    */
    // ´Þ·Â ·¹ÀÌ¾î ÅÂ±× »ý¼º.
    createCalLyrTag(160, 150);
    
    var oCalLyr = document.getElementById("calendarLyr");    // ´Þ·Â º¸ÀÌ±â/¼û±â±â ÄÁÆ®·Ñ ·¹ÀÌ¾î °´Ã¼
    var oCalIfm = document.getElementById("calendarIfm");    // ´Þ·Â JSP°¡ ¸µÅ©µÉ iframe °´Ã¼
    
    // ÀÏÀÚ°¡ ¼¼ÆÃµÉ input ÅÂ±× value °ª (´Þ·Â Ç¥½Ã½Ã ±âº»³â¿ùÀ» input ÅÂ±×¿¡ »õÆÃµÈ ³â¿ù·Î Ç¥½ÃÇÑ´Ù.)
    var vYymm = oTgtFld.value;
    
    //if(!vYymm || vYymm.length < 6) { vYymm = ""; }    // 20061221 ÁÖ¼®Ã³¸®
    if(!vYymm || vYymm.length < 6) { vYymm = "0"; }    // 20061221 ±³Ã¼
    else if(vYymm.length > 6) { vYymm = vYymm.substring(0, 6); }
    
    // ¼±ÅÃ ±âº»°ªÀ» ÀüÃ¼·Î ÇÑ´Ù.
    if(!vSelMode || trimmed(vSelMode) == "") { vSelMode = "-1"; }
    
    var param = vYymm + ";" + vCategory + ";" + vSelMode + ";" + oTgtFld.name;
    oCalIfm.src = "/calendar/calendar.jsp?param=" + param;    // 20061221 ±³Ã¼
    //"?yymm=" + vYymm +
    //"&category=" + vCategory +
    //"&sel_mode=" + vSelMode +
    //"&tgt_fld_nm=" + oTgtFld.name;    // 20061221 ÁÖ¼®Ã³¸®
    
    var x = event.clientX - event.offsetX + document.body.scrollLeft - 5;
    var y = event.clientY - event.offsetY + document.body.scrollTop + 19;
    
    oCalLyr.style.pixelLeft = x;
    oCalLyr.style.top = y;    //oCalLyr.style.pixelTop = y;
    oCalLyr.style.visibility = "visible";
}

/**
 * Function : ´Þ·Â ·¹ÀÌ¾î ÅÂ±×¸¦ »ý¼ºÇÑ´Ù.
 * @return  : none
 */
function createCalLyrTag(nW, nH) {
    // ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖÀ¸¸é ¸®ÅÏ
    if(document.getElementById("calendarLyr")) { return; }
    
    if(!nW) { nW = 212; }
    if(!nH) { nW = 162; }
    
    // ´Þ·Â ·¹ÀÌ¾î ÅÂ±×
    var vLyrElement = '<div id="calendarLyr" style="visibility:hidden; position:absolute;"></div>';
    // ´Þ·Â iframe ÅÂ±×
    var vIfmElement = '<iframe id="calendarIfm" width="' + nW + '" height="' + nH + '" scrolling="no" frameborder="0"></iframe>';
    
    // 1. body ÇÏÀ§¿¡ ´Þ·Â ·¹ÀÌ¾î ÅÂ±× »ðÀÔ
    var oCalLyr = document.createElement(vLyrElement);
    document.body.insertAdjacentElement("afterBegin", oCalLyr);
    
    // 2. ´Þ·Â ·¹ÀÌ¾î ÅÂ±× ÇÏÀ§¿¡ ´Þ·Â iframe ÅÂ±× »ðÀÔ
    var oCalIfm = document.createElement(vIfmElement);
    oCalLyr.insertAdjacentElement("afterBegin", oCalIfm);
}