/////////////////////////////////////////////////////////////////////////////////////////////////////
//              ¾ç/À½·Â ¸¸³â´Þ·Â ÆäÀÌÁöÀÇ ÀÌº¥Æ® ÇÔ¼öµéÀÔ´Ï´Ù.
//
//                                                           by Albeniz(albenizforever@hotmail.com)
//                                                                        last updated : 2003-12-17
/////////////////////////////////////////////////////////////////////////////////////////////////////

// 1881-2050³â±îÁöÀÇ À½·Â µ¥ÀÌÅÍ
var LunarTable = new Array(
        "1212122322121", "1212121221220", "1121121222120", "2112132122122", "2112112121220",
        "2121211212120", "2212321121212", "2122121121210", "2122121212120", "1232122121212",
        "1212121221220", "1121123221222", "1121121212220", "1212112121220", "2121231212121",
        "2221211212120", "1221212121210", "2123221212121", "2121212212120", "1211212232212",
        "1211212122210", "2121121212220", "1212132112212", "2212112112210", "2212211212120",
        "1221412121212", "1212122121210", "2112212122120", "1231212122212", "1211212122210",
        "2121123122122", "2121121122120", "2212112112120", "2212231212112", "2122121212120",
        "1212122121210", "2132122122121", "2112121222120", "1211212322122", "1211211221220",
        "2121121121220", "2122132112122", "1221212121120", "2121221212110", "2122321221212",
        "1121212212210", "2112121221220", "1231211221222", "1211211212220", "1221123121221",
        "2221121121210", "2221212112120", "1221241212112", "1212212212120", "1121212212210",
        "2114121212221", "2112112122210", "2211211412212", "2211211212120", "2212121121210",
        "2212214112121", "2122122121120", "1212122122120", "1121412122122", "1121121222120",
        "2112112122120", "2231211212122", "2121211212120", "2212121321212", "2122121121210",
        "2122121212120", "1212142121212", "1211221221220", "1121121221220", "2114112121222",
        "1212112121220", "2121211232122", "1221211212120", "1221212121210", "2121223212121",
        "2121212212120", "1211212212210", "2121321212221", "2121121212220", "1212112112210",
        "2223211211221", "2212211212120", "1221212321212", "1212122121210", "2112212122120",
        "1211232122212", "1211212122210", "2121121122210", "2212312112212", "2212112112120",
        "2212121232112", "2122121212110", "2212122121210", "2112124122121", "2112121221220",
        "1211211221220", "2121321122122", "2121121121220", "2122112112322", "1221212112120",
        "1221221212110", "2122123221212", "1121212212210", "2112121221220", "1211231212222",
        "1211211212220", "1221121121220", "1223212112121", "2221212112120", "1221221232112",
        "1212212122120", "1121212212210", "2112132212221", "2112112122210", "2211211212210",
        "2221321121212", "2212121121210", "2212212112120", "1232212122112", "1212122122120",
        "1121212322122", "1121121222120", "2112112122120", "2211231212122", "2121211212120",
        "2122121121210", "2124212112121", "2122121212120", "1212121223212", "1211212221220",
        "1121121221220", "2112132121222", "1212112121220", "2121211212120", "2122321121212",
        "1221212121210", "2121221212120", "1232121221212", "1211212212210", "2121123212221",
        "2121121212220", "1212112112220", "1221231211221", "2212211211220", "1212212121210",
        "2123212212121", "2112122122120", "1211212322212", "1211212122210", "2121121122120",
        "2212114112122", "2212112112120", "2212121211210", "2212232121211", "2122122121210",
        "2112122122120", "1231212122212", "1211211221220", "2121121321222", "2121121121220",
        "2122112112120", "2122141211212", "1221221212110", "2121221221210", "2114121221221"
        );

// ¾ç·Â °¢´ÞÀÇ ÀÏ¼ö¸¦ ÀúÀåÇÑ ¹è¿­
var MonthTable = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

//À½·Â ³¯Â¥ Çü½Ä °´Ã¼ ¼±¾ð. JavaScript±âº» ³¯Â¥Çü½Ä¿¡¼­ À±´ÞÀÌ¶ó´Â ¼Ó¼ºÀ» Ãß°¡.
function LunarDate() {
    this.year = 1;
    this.month = 0;
    this.day = 1;
    this.isYunMonth = false;
}

//ÇØ´ç À½·Â³âµµÀÇ ÀüÃ¼ ³¯Â¥¸¦ ¹ÝÈ¯ÇÏ´Â ÇÔ¼ö
function nDaysYear(year) {
    var i, sum;

    sum = 0;
    for (i=0;i<13;i++) {
        if (parseInt(LunarTable[year-1881].charAt(i))) {
            sum += 29 + (parseInt(LunarTable[year - 1881].charAt(i)) + 1) % 2;
        }
    }

    return sum;
}

//ÇØ´ç À½·Â ¿ùÀÇ ³¯Â¥¼ö¸¦ ¹ÝÈ¯ÇÏ´Â ÇÔ¼ö
function nDaysMonth(lunar_date) {
    var nDays;

    if (lunar_date.month <= YunMonth(lunar_date.year) && !lunar_date.isYunMonth) yun = 0;
    else yun = 1;

    nDays = 29 + (parseInt(LunarTable[lunar_date.year - 1881].charAt(lunar_date.month + yun)) + 1) % 2;

    return nDays;
}

// ÇØ´ç À½·Â³âµµÀÇ À±´Þ³Ñ¹ö¸¦ ¹ÝÈ¯. À±´ÞÀÌ ¾øÀ¸¸é 12¸¦ ¹ÝÈ¯
function YunMonth(year) {
    var yun;

    yun = 0;
    do {
        if (LunarTable[year-1881].charAt(yun) > 2) {
            break;
        }
        yun++;
    } while (yun <= 12);

    return yun - 1;
}

// ¼­±â 1³â 1¿ù 1ÀÏ ÀÌÈÄ Áö³­ ³¯Â¥¼ö¸¦ ¹ÝÈ¯
function totalDays(solar_date) {
    var i, sum, tdays, nYears366;

    if (((solar_date.year % 4 == 0) && (solar_date.year % 100 != 0)) || (solar_date.year % 400 == 0)) MonthTable[1] = 29;
    else MonthTable[1] = 28;

    sum = 0;
    for (i=0;i<solar_date.month;i++) {
        sum = sum + MonthTable[i];
    }

    nYears366 = parseInt((solar_date.year - 1) / 4) - parseInt((solar_date.year - 1) / 100) + parseInt((solar_date.year - 1) / 400);

    tdays = (solar_date.year - 1) * 365 + sum + nYears366 + solar_date.day - 1;

    return tdays;
}

// ¾ç·Â³¯Â¥¸¦ À½·Âµ¥ÀÌÅÍÇü½ÄÀÇ ³¯Â¥·Î ¹ÝÈ¯
function SolarToLunar(solar_date) {
    var i, nDays, tmp;
    var FIRST_DAY;                  // ¼­±â 1³â 1¿ù 1ÀÏºÎÅÍ À½·Â 1881³â 1¿ù 1ÀÏ±îÁö ÃÑ Áö³­ ³¯Â¥¿¡ °üÇÑ º¯¼ö

    FIRST_DAY = 686685;
    nDays = totalDays(solar_date) - FIRST_DAY;  //À½·Â 1881³â 1¿ù 1ÀÏ ÀÌÈÄ Áö³­ ³¯Â¥

    var lunar_date = new LunarDate();           // ¹ÝÈ¯ÇÒ À½·Â ³¯Â¥¸¦ ¼±¾ð. À½·Â Ã¹³¯·Î ÃÊ±âÈ­
    lunar_date.year = 1881;
    lunar_date.month = 0;
    lunar_date.day = 1;
    lunar_date.isYunMonth = false;

    // nDays°¡ 0º¸´Ù ÀÛ¾ÆÁú¶§ ±îÁö, °¢³âµµÀÇ ÃÑ ³¯Â¥¼ö¸¦ »©´Â °É ¹Ýº¹ÇØ ±× ·çÇÁÈ½¼ö·Î¼­ ÇöÀç ³âµµ¸¦ °è»ê.
    // ÀÌ ·çÇÁ°¡ Á¾·áµÊ°ú µ¿½Ã¿¡ À½·Âµ¥ÀÌÅÍÀÇ year¼Ó¼ºÀº ÇöÀç ³âµµ°¡ ÀúÀåµÇ°Ô µÈ´Ù.
    do {
        tmp = nDays;
        nDays -= nDaysYear(lunar_date.year);
        if (nDays < 0) {
            nDays = tmp;
            break;
        }
        lunar_date.year++;
    } while (true);

    // 1³âÃÑ³¯Â¥ ÀÌÇÏ·Î ÀÛ¾ÆÁö nDays¸¦ ¸¶Âù°¡Áö·Î ¿ù ´ÜÀ§·Î »©´Â°É ¹Ýº¹ÇØ ÇöÀç ¿ùÀ» °è»ê.
    // ¸¸¾à¿¡ ´ÙÀ½·çÇÁ¿¡¼­ À±´ÞÀÌ¸é ¿ùÀ» Áõ°¡½ÃÅ°´Â°Ô ¾Æ´Ï¶ó À±´Þ ¼Ó¼º¸¸ true·Î ¼³Á¤.
    do {
        tmp = nDays;
        nDays -= nDaysMonth(lunar_date);;
        if (nDays < 0) {
            nDays = tmp;
            break;
        }

        if (lunar_date.month == YunMonth(lunar_date.year)&&!lunar_date.isYunMonth) {
            lunar_date.isYunMonth = true;
        }
        else {
            lunar_date.month++;
            lunar_date.isYunMonth = false;
        }
    } while (true);

    // ¸¶Áö¸·À¸·Î ¿ù´ÜÀ§ ³¯Â¥¼ö ÀÌÇÏ·Î ÀÛ¾ÆÁø nDays¸¦ ÀÌ¿ëÇØ ³¯Â¥¸¦ °è»ê
    lunar_date.day = nDays + 1;

    return lunar_date;
}

// ÆäÀÌÁöÀÇ Å×ÀÌºí¿¡ °è»êµÈ ´Þ·Â µ¥ÀÌÅÍ¸¦ »ðÀÔÇÑ´Ù. (´Þ·ÂÀ» ±×¸°´Ù.)
function drawCalendar(solar_date) {
    var i, week;

    solar_date.year = solar_date.getFullYear();
    solar_date.month = solar_date.getMonth();
    solar_date.day = 1;

    var today = new Date();

    curYear.innerHTML = solar_date.getFullYear();
    curMonth.innerHTML = solar_date.getMonth() + 1;

    week = (totalDays(solar_date) + 1) % 7;     // ÇöÀç ¿ùÀÇ Ã¹¹øÂ° ³¯Â¥ÀÇ ¿äÀÏÀ» °è»ê (0:¿ù, 1:È­, 2:¼ö...)

    // ´Þ·ÂÀÇ Ã¹¹øÂ° ³¯Â¥±îÁöÀÇ ºó°ø¶õÀ» ±×¸°´Ù.
    for (i=0;i<week;i++) {
        eval("s" + i + ".innerHTML=''");
        //eval("l" + i + ".innerHTML=''");
    }

    // ¾ç·Â ³¯Â¥µéÀ» °¢ Ä­¿¡ »ðÀÔÇÑ´Ù. if ÀýÀÌ ÀÖ´Â ÀÌÀ¯´Â ÀÏ¿äÀÏ, Åä¿äÀÏÀÇ »ö±òÀ» Æ²¸®°Ô ÇÏ±âÀ§ÇØ.
    do {
        eval("s" + (week + solar_date.day - 1) + ".style.backgroundColor=''");
        eval("l" + (week + solar_date.day - 1) + ".style.backgroundColor=''");

        if ((solar_date.day + week - 1) % 7 == 0) {
            eval("s" + (week + solar_date.day - 1) + ".innerHTML='<font color=#FF0000>" + solar_date.day + "</font>'");
        }
        else if ((solar_date.day + week - 1) % 7 == 6) {
            eval("s" + (solar_date.day + week - 1) + ".innerHTML='<font color=#0000FF>" + solar_date.day + "</font>'");
        }
        else {
           eval("s" + (solar_date.day + week - 1) + ".innerHTML='" + solar_date.day + "'");
        }

        //¿À´Ã ³¯Â¥¸¦ Ç¥½ÃÇÑ´Ù.
        if (solar_date.year == today.getFullYear() && solar_date.month == today.getMonth() && solar_date.day == today.getDate()) {
            eval("s" + (week + solar_date.day - 1) + ".style.backgroundColor='#DDF2F2'");
            eval("l" + (week + solar_date.day - 1) + ".style.backgroundColor='#DDF2F2'");
        }
    } while(++solar_date.day <= MonthTable[solar_date.month]);

    // ´Þ·Â ¸¶Áö¸· ³¯Â¥ ÀÌÈÄÀÇ ºó°ø¶õÀ» ±×¸°´Ù.
    for (i=week+MonthTable[solar_date.month];i<37;i++) {
        eval("s" + i + ".innerHTML=''");
       // eval("l" + i + ".innerHTML=''");
    }

    solar_date.day = 1;

    // À½·Â Ç¥±â ¹üÀ§¸¦ ¹þ¾î³­ ³âµµ¿¡ °üÇÑ ¿¹¿ÜÃ³¸®. ¾ç·Â µ¥ÀÌÅÍ¸¸ Ãâ·ÂÇÑ´Ù.
    if((solar_date.year < 1881) || (solar_date.year > 2051) || ((solar_date.year == 2051) && (solar_date.month > 1))) {
        for (i=0;i<37;i++) eval("l" + i + ".innerHTML=''");
        return;
    }

    if((solar_date.year == 1881) && (solar_date.month == 0)) {
        for (i=0;i<35;i++) eval("l" + i + ".innerHTML=''");
        eval("l35.innerHTML='1/1'");
        eval("l36.innerHTML='1/2'");
        return;
    }

    if((solar_date.year == 2051) && (solar_date.month == 1)) {
        for (i=3;i<13;i++) eval("l" + i + ".innerHTML='12/" + (i + 17) + "'");
        for (i=13;i<37;i++) eval("l" + i + ".innerHTML=''");
        return;
    }

    // Ã¹³¯Â¥¸¦ À½·ÂÀ¸·Î º¯°æ½ÃÄÑ ±× ÀÌÈÄ ³¯Â¥µéÀ» Áõ°¡½ÃÄÑ À½·Â³¯Â¥¸¦ Ãâ·ÂÇÑ´Ù.
    // Ã¹³¯Â¥¸¸À» À½·ÂÀ¸·Î º¯°æÇÏ´Â ÀÌÀ¯´Â SolarToLunar()ÇÔ¼ö°¡ ·çÇÁ¸¦ µ¿¹ÝÇÑ ÇÔ¼ö·Î½á
    // »ó´çÈ÷ ´À¸®±â ¶§¹®¿¡, °¢ ³¯Â¥¸¶´Ù À½·ÂÀ¸·Î º¯°æ½ÃÅ²´Ù´Â °Ç ³¶ºñÀÌ±â ¶§¹®ÀÌ´Ù.
    // µû¶ó¼­ ÄÚµå´Â Á» º¹ÀâÇØÁ³Áö¸¸, ÈÎ¾À ºü¸£´Ù.
    var lunar_date = new LunarDate();
    lunar_date = SolarToLunar(solar_date);

    do {
        if (lunar_date.day == 9 || lunar_date.day == 10 || lunar_date.day == 19 || lunar_date.day == 20 || lunar_date.day == 29 || lunar_date.day == 30) {
			eval("s" + (week + solar_date.day - 1) + ".innerHTML='<font color=red><b>" + solar_date.day + "</b></font>'");
        }

        if (lunar_date.day >= nDaysMonth(lunar_date)) {
            if (lunar_date.month < 11) {
                if ((lunar_date.month == YunMonth(lunar_date.year)) && !lunar_date.isYunMonth) {
                    lunar_date.isYunMonth = true;
                    lunar_date.day = 1;
                }
                else {
                    lunar_date.month++;
                    lunar_date.isYunMonth = false;
                    lunar_date.day = 1;
                }
            }
            else {
                lunar_date.year++;
                lunar_date.month = 0;
                lunar_date.day = 1;
            }
        }
        else lunar_date.day++;

    } while(++solar_date.day <= MonthTable[solar_date.month]);

}

/////////////////////////////////////////////////////////////////////////////////////////////////////
//              ¾ç/À½·Â ¸¸³â´Þ·Â ÆäÀÌÁöÀÇ ÀÌº¥Æ® ÇÔ¼öµéÀÔ´Ï´Ù.
//
//                                                           by Albeniz(albenizforever@hotmail.com)
//                                                                        last updated : 2003-12-17
/////////////////////////////////////////////////////////////////////////////////////////////////////

var currentDate = new Date();
var currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());

// °¢ ¾ç½ÄÇÊµåµé¿¡ °üÇÑ ÀÌº¥Æ® ÇÚµé·¯ ÇÔ¼öµé
function btNextMonth_onclick() {
    if (currentDate.getMonth() < 11) {
        currentDate.setMonth(currentDate.getMonth() + 1);
    }
    else {
        currentDate.setFullYear(currentDate.getFullYear() + 1);
        currentDate.setMonth(0);
    }

    drawCalendar(currentDate);
}

function btNextYear_onclick() {
    currentDate.setFullYear(currentDate.getFullYear() + 1);
    drawCalendar(currentDate);
}

function btPrevMonth_onclick() {
    if (currentDate.month > 0) {
        currentDate.setMonth(currentDate.getMonth() - 1);
    }
    else {
        currentDate.setFullYear(currentDate.getFullYear() - 1);
        currentDate.setMonth(11);
    }

    drawCalendar(currentDate);
}

function btPrevYear_onclick() {
    currentDate.setFullYear(currentDate.getFullYear() - 1);
    drawCalendar(currentDate);
}
