// Copyright (c) 2004-2009 koikikukan All Rights Reserved.

// http://www.koikikukan.com/

// License is granted if and only if this entire

// copyright notice is included. By Yujiro ARAKI.



// Ver1.00 2006.03.15 initial version.

// Ver1.01 2006.04.11 fix bug.

// Ver1.02 2006.04.15 fix bug.

// Ver1.03 2006.04.16 fix bug.

// Ver1.04 2006.08.03 fix bug.

// Ver1.05 2007.04.21 fix bug.

// Ver1.06 2007.11.05 fix bug.

// Ver1.07 2009.04.19 for change low.



var currentYear;

var currentMonth;

var currentDay;



function setCurrentDate() {

    data = new Date();

    currentYear = data.getYear();

    currentYear = (currentYear < 2000) ? currentYear + 1900 : currentYear;

    currentMonth = data.getMonth() + 1;

    currentDay = data.getDate();

}



function isToday(year, month, day) {

    if (year == currentYear && parseInt(month,10) == currentMonth && day == currentDay) {

        return true;

    }

    return false;

}



function isSaturday(year, month, day) {

    var week = new Date(year, month - 1, day).getDay();

    if (week == 6) {

        return true;

    }

    return false;

}



function isHoliday(year, month, day) {

    var week = new Date(year, month - 1, day).getDay();

    if (week == 0) {

        return true;

    }

    switch(parseInt(month,10)) {

    case 1:

        if (day == 1) {

            return true;

        }

        if (day == 2 && isSunday(year, month, 1)) {

            return true;

        }

        if (day == (getFirstMonday(year, month) + 7)) {

            return true;

        }

        break;

    case 2:

        if (day == 11) {

            return true;

        }

        if (day == 12 && isSunday(year, month, 11)) {

            return true;

        }

        break;

    case 3:

        if(year > 1979 && year < 2100) {

            if (day == parseInt(20.8431 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4))) {

                return true;

            }

            if (day == (parseInt(20.8431 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1)) {

                return true;

            }

        }

        break;

    case 4:

        if (day == 29) {

            return true;

        }

        if (day == 30 && isSunday(year, month, 29)) {

            return true;

        }

        break;

    case 5:

        if (day == 3 || day == 4 || day == 5) {

            return true;

        }

        if (day == 6 && (isSunday(year, month, 3) ||

                         isSunday(year, month, 4) ||

                         isSunday(year, month, 5))) {

            return true;

        }

        break;

    case 7:

        if (day == (getFirstMonday(year, month) + 14)) {

            return true;

        }

        break;

    case 9:

        if (day == (getFirstMonday(year, month) + 14)) {

            return true;

        }

        if(year > 1979 && year < 2100) {

            if (day == parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4))) {

                return true;

            }

            if (day == (parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1)) {

                return true;

            }

        }

        var day2 = parseInt(day, 10);

        if(day2 - 1 == (getFirstMonday(year, month) + 14))  {

            if(year > 2008 && year < 2100) {

                if (day2 + 1 == parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980)  / 4))) {

                    return true;

                }

                if (day2 + 1 == (parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1)) {

                    return true;

                }

            }

        }

        break;

    case 10:

        if (day == (getFirstMonday(year, month) + 7)) {

            return true;

        }

        break;

    case 11:

        if (day == 3 || day == 23) {

            return true;

        }

        if (day == 4 && isSunday(year, month, 3)) {

            return true;

        }

        if (day == 24 && isSunday(year, month, 23)) {

            return true;

        }

        break;

    case 12:

        if (day == 23) {

            return true;

        }

        if (day == 24 && isSunday(year, month, 23)) {

            return true;

        }

        break;

    }

    return false;

}



function isSunday(year, month, day) {

    var week = new Date(year, month - 1, day).getDay();

    if (week == 0) {

        return true;

    }

    return false;

}



function getFirstMonday(year, month) {

    var monday;

    for(monday = 1; monday < 8; monday++) {

        if(new Date(year, month - 1, monday).getDay() == 1) {

            break;

        }

    }

    return monday;

}



function setWeekendAndHoliday(y,m) {

    var element = document.getElementById("wp-calendar");

    var caption = document.getElementsByTagName("caption");

    var date = caption[0].innerHTML;

    var number = date.match(/\d{1,}/g);

    var year = number[0];

    var month = number[1];



    var tbody = element.getElementsByTagName("tbody");

    var td = tbody[0].getElementsByTagName("td");

    var day;

    for (i = 0; i < td.length; i++) {

        if(td[i].innerHTML.indexOf("href") != -1){

            day = td[i].getElementsByTagName("a")[0].innerHTML;

        } else {

            day = td[i].innerHTML;

        }

        if (isHoliday(year, month, day)) {

            if (isToday(year, month, day)) {

                td[i].setAttribute('class', 'tholiday');

                td[i].setAttribute('className', 'tholiday');

            } else {

                td[i].setAttribute('class', 'holiday');

                td[i].setAttribute('className', 'holiday');

            }

        } else if(isSaturday(year, month, day)) {

            if (isToday(year, month, day)) {

                td[i].setAttribute('class', 'tsaturday');

                td[i].setAttribute('className', 'tsaturday');

            } else {

                td[i].setAttribute('class', 'saturday');

                td[i].setAttribute('className', 'saturday');

            }

        } else {

            if (isToday(year, month, day)) {

                td[i].setAttribute('class', 'today');

                td[i].setAttribute('className', 'today');

            }

        }

    }

}


