function isSaturday(year, month, day) {

	var week = new Date(year, month - 1, day).getDay();
	if (week == 6) { return true; }
	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 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:
		/* カレンダに振り替え日修正　胡祖徳　20091030 start*/
		/*
		if (year > 1979 && year < 2100) {
			if (day == parseInt(20.8431 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4))) {
				return true;
			}
		}
		*/
		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;
        	}
    	}
    	/* カレンダに振り替え日修正　胡祖徳　20091030 end*/
		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:
		/* カレンダに振り替え日修正　胡祖徳　20091030 start*/
		/*
		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 == (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;
        	}
    	}
    	/* カレンダに振り替え日修正　胡祖徳　20091030 end*/
		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;
}
