﻿/*
1月1日          元旦
1月第2月曜日    成人の日 
2月11日         建国記念の日
3月*日          春分の日
4月29日         緑の日
5月3日          憲法記念日
5月4日          国民の休日
5月5日          こどもの日
7月20日         海の日 (2003年から第三月曜日)
9月15日         敬老の日 (2003年から第三月曜日)
9月*日          秋分の日
10月第2月曜日   体育の日
11月3日         文化の日
11月23日        勤労感謝の日
12月23日        天皇誕生日
*/

// 月のセットは 1月=0 ～ 12月=11です
var privateDays = new Array(new Date(2005,11,30),
							new Date(2006, 0, 1),
							new Date(2006, 0, 2),
							new Date(2006, 0, 3),
							new Date(2007, 0, 1),
							new Date(2007, 0, 2),
							new Date(2007, 0, 3),
							new Date(2008, 0, 1),
							new Date(2008, 0, 2),
							new Date(2008, 0, 3),
							new Date(2009, 0, 1),
							new Date(2009, 0, 2),
							new Date(2009, 0, 3));



function getCalendar(num) {
	var nowDate = new Date();
	var tMonth = nowDate.getMonth() + 1 + num;
	tMonth = tMonth % 12;
	if(tMonth == 0){ tMonth = 12; }
	nowDate.setMonth(nowDate.getMonth() + num);
	calendar(nowDate.getYear(), tMonth);
}

function mondayHoliday(yyyy) {
	var h1; //2
	var h7 = 20; //3
	var h9 = 15; //3
	var h10; //2

	var date = new Date(yyyy, 0, 1);
	var day = date.getDay();
	switch (day) {
		case 0: h1 = 9; break;
		case 1: h1 = 8; break;
		case 2: h1 = 14; break;
		case 3: h1 = 13; break;
		case 4: h1 = 12; break;
		case 5: h1 = 11; break;
		case 6: h1 = 10; break;
	}

	date = new Date(yyyy, 9, 1);
	day = date.getDay();
	switch (day) {
		case 0: h10 = 9; break;
		case 1: h10 = 8; break;
		case 2: h10 = 14; break;
		case 3: h10 = 13; break;
		case 4: h10 = 12; break;
		case 5: h10 = 11; break;
		case 6: h10 = 10; break;
	}

	if (yyyy >= 2003) {
		date = new Date(yyyy, 6, 1);
		day = date.getDay();
		switch (day) {
			case 0: h7 = 16; break;
			case 1: h7 = 15; break;
			case 2: h7 = 21; break;
			case 3: h7 = 20; break;
			case 4: h7 = 19; break;
			case 5: h7 = 18; break;
			case 6: h7 = 17; break;
		}
		date = new Date(yyyy, 8, 1);
		day = date.getDay();
		switch (day) {
			case 0: h9 = 16; break;
			case 1: h9 = 15; break;
			case 2: h9 = 21; break;
			case 3: h9 = 20; break;
			case 4: h9 = 19; break;
			case 5: h9 = 18; break;
			case 6: h9 = 17; break;
		}
	}
	var array = new Array(4);
	array[0] = h1;
	array[1] = h7;
	array[2] = h9;
	array[3] = h10;
	return array;
}

function equinoxDay(year) {
	var temp; // 一時的な変数

	temp = (242194 * (year - 1980));
	temp -= ((year - 1980) >> 2) * 1000000;
	var s3 = (20843100 + temp) / 1000000;
	var s9 = (23248800 + temp) / 1000000;
	s3 = s3.toString();
	s3 = s3.substring(0, s3.indexOf('.'));
	s9 = s9.toString();
	s9 = s9.substring(0, s9.indexOf('.'));
	
	var array = new Array(2);
	array[0] = s3;
	array[1] = s9;

	return array;
}

function isPrivate(yyyy, mm, dd) {
	for(var i = 0; i < privateDays.length; i++) {
		tYear = privateDays[i].getYear();
		if(tYear < 1900){ tYear += 1900; }
		if(yyyy < 1900){ yyyy += 1900; }
		tMonth = privateDays[i].getMonth() + 1;
		tDay = privateDays[i].getDate();

		if(yyyy == tYear && mm == tMonth && dd == tDay){
			return 1;
		}
	}
	return 0;
}



function isHoliday(yyyy, mm, dd) {
	if(yyyy < 1900){ yyyy += 1900; }
	if ((mm == 1 && (dd == 1 || dd == 2 || dd == 3 || dd == 4))
			//|| (mm == 2 && (dd == 11))
			//|| (mm == 3 && (dd == equinoxDay(yyyy)[0]))
			//|| (mm == 4 && (dd == 29))
			//|| (mm == 5 && (dd == 3 || dd == 4 || dd == 5 ))
			/*|| (mm == 6 && (dd == 13))*/
			|| (mm == 7 && ( dd == 15 || dd == 16 || dd == 17 || dd == 19))
			|| (mm == 8 && ( dd == 15 || dd == 16 || dd == 17))
			//|| (mm == 9 && ( dd == 20 || dd == 23))
			/*|| (mm == 9 && (dd == mondayHoliday(yyyy)[2] || dd == equinoxDay(yyyy)[1]))*/
			|| (mm == 10 && ( dd == 11))
			//|| (mm == 10 && (dd == mondayHoliday(yyyy)[3]))
			//|| (mm == 11 && (dd == 3))
			|| (mm == 12 && (dd == 31))) {
		return 1;
	} else {
		if (mm == 2 && dd == 12) {
			if (new Date(yyyy, 1, 11).getDay() == 0) {
				return 1;
			}
		} else if (mm == 3 && dd == (equinoxDay(yyyy)[0] + 1)) {
			if (new Date(yyyy, 2, equinoxDay(yyyy)[0]).getDay() == 0) {
				return 1;
			}
		} else if (mm == 4 && dd == 30) {
			if (new Date(yyyy, 3, 29).getDay() == 0) {
				return 1;
			}
		} else if (mm == 5 && dd == 6) {
			if (new Date(yyyy, 4, 5).getDay() == 0) {
				return 1;
			}
		} else if (mm == 9 &&  dd == (equinoxDay(yyyy)[1] + 1)) {
			if (new Date(yyyy, 8, equinoxDay(yyyy)[1]).getDay() == 0) {
				return 1;
			}
		} else if (mm == 11 && dd == 4) {
			if (new Date(yyyy, 10, 3).getDay() == 0) {
				return 1;
			}
		/*} else if (mm == 11 && dd == 24) {
			if (new Date(yyyy, 10, 23).getDay() == 0) {
				return 1;
			}*/
		} else if (mm == 12 && dd == 24) {
			if (new Date(yyyy, 11, 23).getDay() == 0) {
				return 1;
			}
		} else {
			if (yyyy <= 2002) {
				if (mm == 7 && dd == (mondayHoliday(yyyy)[1] + 1)) {
					if (new Date(yyyy, 6, mondayHoliday(yyyy)[1]).getDay() == 0) {
						return 1;
					}
				} else if (mm == 9 && (dd == mondayHoliday(yyyy)[2] + 1)) {
					if (new Date(yyyy, 8, mondayHoliday(yyyy)[2]).getDay() == 0) {
						return 1;
					}
				}
			}
			return 0;
		}
	}
}


	
function isToday(yyyy, mm, dd) {
		today = new Date() ;
		tYear = today.getYear();

		if(tYear < 1900){ tYear += 1900; }
		if(yyyy < 1900){ yyyy += 1900; }
		
		tMonth = today.getMonth() + 1;
		tDay = today.getDate();

		if(yyyy == tYear && mm == tMonth && dd == tDay){
			return 1;
	}
	return 0;
}


function calendar() {
	var yyyy;
	var mm;
	var today = new Date();
	if (calendar.arguments.length == 0) {
		yyyy = today.getYear();
		mm = today.getMonth() + 1;
	} else {
		yyyy = calendar.arguments[0];
		mm = calendar.arguments[1];
	}
	if (yyyy < 1900) {
		yyyy += 1900; // Netscape の2000年問題を回避するため
	}
	if (mm == 0) {
		mm = today.getMonth() + 1;
	}

	var date = new Date(yyyy, mm - 1, 1);
	date.setTime(date.getTime() - date.getDay() * 24 * 60 * 60 * 1000);
	document.write('<table border="0" cellspacing="1" cellpadding="0" class="Calendar">');
	document.write('<tr><td colspan="7" class="Title">' + yyyy + '年' + mm + '月</td></tr>');
	document.write('<tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></th>');
	for (var i = 0; i < 6; i++) {
		if (i < 5 || date.getMonth() == mm - 1) {
			document.write('<tr align="center">');
			for (var j = 0; j < 7; j++) {
				if (date.getMonth() != mm - 1) {
					document.write('<td>　</td>');
					date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
					continue;
				}
				if (date.getDay() == 3 || 
						isHoliday(date.getYear(), date.getMonth() + 1, date.getDate()) == 1) {
				/*if (isHoliday(date.getYear(), date.getMonth() + 1, date.getDate()) == 1) {
					document.write('<td>');*/
					document.write('<td class="Holiday">');
					document.write(date.getDate() + '</td>');
				} else if (date.getDay() == 6) {
					document.write('<td class="">');
					document.write(date.getDate() + '</td>');
				} else if (isPrivate(date.getYear(), date.getMonth() + 1, date.getDate()) == 1) {
					document.write('<td class="Private">');
					document.write(date.getDate() + '</td>');
				} else if (isToday(date.getYear(), date.getMonth() + 1, date.getDate()) == 1) {
					document.write('<td class="Today">');
					document.write(date.getDate() + '</td>');
				} else {
					document.write('<td>');
					document.write(date.getDate() + '</td>');
				}
				date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
			}
			document.write('</tr>');
		}
	}
	document.write('</table>');
	document.write('<div class="padd"></div>');
	return "";
}

