// 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 ){
	switch( parseInt( month, 10 ) ){
	case 1:
		if( year >= 1949 ){
			if( day == 1 ){
				return '元日';
			}
			if( day == 2 && isSunday( year, month, 1 ) ){
				return '元日の振替休日';
			}

			if( year <= 1999 && year == 15 ){
				return '成人の日';
			}

			if( year >= 2000 && day == (getFirstMonday( year, month ) + 7) ){
				return '成人の日';
			}
		}
		break;
	case 2:
		if( year >= 1967 ){
			if( day == 11 ){
				return '建国記念の日';
			}
			if( day == 12 && isSunday(year, month, 11) ){
				return '建国記念の日の振替休日';
			}
		}
		break;
	case 3:
		if( 1979 < year && year < 2100 ){
			if( day == parseInt( 20.8431 + 0.242194 * (year - 1980) - parseInt( (year - 1980) / 4 ) ) ){
				return '春分の日';
			}
			if( day == (parseInt( 20.8431 + 0.242194 * (year - 1980) - parseInt( (year - 1980) / 4) ) + 1) && isSunday( year, month, day - 1) ){
				return '春分の日の振替休日';
			}
		}
		break;
	case 4:
		if( day == 29 ){
			if( 1949 <= year && year <= 1988 )			return '天皇誕生日';
			else if( 1989 <= year && year <= 2006 )		return 'みどりの日';
			else if( 2007 <= year )						return '昭和の日';
		}
		if( day == 30 && isSunday(year, month, 29) ){
			if( 1949 <= year && year <= 1988 )			return '天皇誕生日の振替休日';
			else if( 1989 <= year && year <= 2006 )		return 'みどりの日の振替休日';
			else if( 2007 <= year )						return '昭和の日の振替休日';
		}
		break;
	case 5:
		if( year >= 1949 ){
			if( day == 3 ){
				return '憲法記念日';
			}
			if( day == 4 ){
				if( year >= 2007 )	return 'みどりの日';
				return '国民の休日';
			}
			if( day == 5 ){
				return 'こどもの日';
			}
		}

		if( day == 6 && isSunday( year, month, 3 ) ){
			return '建国記念日の振替休日';
		}
		if( day == 6 && isSunday( year, month, 4 ) ){
			if( year >= 2007 )	return 'みどりの日の振替休日';
		}
		if( day == 6 && isSunday( year, month, 5 ) ){
			return 'こどもの日の振替休日';
		}
		break;
	case 7:
		if(year > 1996 && year <= 2002) {
			if( day == 20 ){
				return '海の日';
			}
			if( day == 21 && isSunday( year, month, 20 ) ){
				return '海の日の振替休日';
			}
		} else if( year >= 2003 ){
			if( day == (getFirstMonday(year, month) + 14) ){
				return '海の日';
			}
		}
		break;
	case 9:
		if(year > 1979 && year < 2100) {
			if( day == parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) ){
				return '秋分の日';
			}
			if( day == (parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1) ){
				return '秋分の日の振替休日';
			}
		}
		if( year >= 1966 && year <= 2002 ){
			if( day == 15 ){
				return '敬老の日';
			}
			if( day == 16 && isSunday(year, month, 15) ){
				return '敬老の日の振替休日';
			}
		} else if( year >= 2003 ){
			if (day == (getFirstMonday(year, month) + 14)) {
				return '敬老の日';
			}
			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 '国民の休日';
					}
					if (day2 + 1 == (parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1)) {
						return '秋分の日の振替休日';
					}
				}
			}
		}
		break;
	case 10:
		if( year >= 1966 && year <= 1999 ){
			if( day == 10 ){
				return '体育の日';
			}
			if (day == 11 && isSunday(year, month, 10)) {
				return '体育の日の振替休日';
			}
		} else if( year >= 2000 ){
			if( day == (getFirstMonday(year, month) + 7) ){
				return '体育の日';
			}
		}
		break;
	case 11:
		if( day == 3 ){
			return '文化の日';
		}
		if( day == 23 ){
			return '勤労感謝の日';
		}
		if (day == 4 && isSunday(year, month, 3)) {
			return '文化の日の振替休日';
		}
		if (day == 24 && isSunday(year, month, 23)) {
			return '勤労感謝の日の振替休日';
		}
		break;
	case 12:
		if (day == 23) {
			return '天皇誕生日';
		}
		if (day == 24 && isSunday(year, month, 23)) {
			return '天皇誕生日の振替休日';
		}
		break;
	}
	return '';
}

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');
            }
            td[i].setAttribute('title', isHoliday(year, month, day));
        } else if(isSunday(year, month, day)) {
            if (isToday(year, month, day)) {
                td[i].setAttribute('class', 'tsunday');
                td[i].setAttribute('className', 'tsunday');
            } else {
                td[i].setAttribute('class', 'sunday');
                td[i].setAttribute('className', 'sunday');
            }
        } 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');
            }
        }
    }
}

