/*
 * cal.js
 * 2002/11/20 ver 1.1 Netscape Navigator 4.7x の 2000 年問題を修正
 * 2001/10/20 ver 1.0 新規作成
 */

/*
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日        天皇誕生日
*/


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 isHoliday(yyyy, mm, dd) {
	if ((mm == 1 && (dd == 1 || dd == mondayHoliday(yyyy)[0]))
			|| (mm == 2 && (dd == 11))
			|| (mm == 3 && (dd == equinoxDay(yyyy)[0]))
			|| (mm == 4 && (dd == 29))
			|| (mm == 5 && (dd == 3 || dd == 4 || dd == 5))
			|| (mm == 7 && (dd == mondayHoliday(yyyy)[1]))
			|| (mm == 9 && (dd == mondayHoliday(yyyy)[2] || dd == equinoxDay(yyyy)[1]))
			|| (mm == 10 && (dd == mondayHoliday(yyyy)[3]))
			|| (mm == 11 && (dd == 3 || dd == 23))
			|| (mm == 12 && (dd == 23))) {
		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 calendar() {
	emonth=new Array();
	emonth[1]="Jan.";
	emonth[2]="Feb.";
	emonth[3]="Mar.";
	emonth[4]="Apr.";
	emonth[5]="May ";
	emonth[6]="June";
	emonth[7]="July";
	emonth[8]="Aug.";
	emonth[9]="Sep.";
	emonth[10]="Oct.";
	emonth[11]="Nov.";
	emonth[12]="Dec.";
	var yyyy;
	var mm,mon;
	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年問題を回避するため
	}
	var isRokuyo = (calendar.arguments[2] == "on" ||
		calendar.arguments[2] == "true" ||
		calendar.arguments[2] == true ||
		calendar.arguments[2] == 1);
	if (mm == 0) {
		mm = today.getMonth() + 1;
	}
	mon=emonth[mm];
	var date = new Date(yyyy, mm - 1, 1);
	date.setTime(date.getTime() - date.getDay() * 24 * 60 * 60 * 1000);
//	document.write('<table cellspacing=1><tr><td><TABLE border="0" cellspacing=0 cellpading=0 bgcolor=#9966cc>');
	document.write('<TABLE border="0" cellspacing=0 cellpading=0 >');
	document.write('<TR><TH colspan="7" align="center"><font style="font-size:14px;font-family:Arial;font-style:italic;">' + yyyy + ' ' + mon + '</font></TH></TR>');
	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.getYear() == today.getYear() && date.getMonth() == today.getMonth() && date.getDate() == today.getDate()) {
					document.write('<TD bgcolor="#ffffff" style="font-weight:bold;font-size:14px;font-family:Arial;font-style:italic;" align="right">');
				} else {
					document.write('<TD style="font-size:12px;font-family:Arial;font-style:italic;" align="right">');
				}
				if (date.getDay() == 0 || 
						isHoliday(date.getYear(), date.getMonth() + 1, date.getDate()) == 1) {
					document.write('<FONT style="color:#ff9900;">');
				} else if (date.getDay() == 6) {
					document.write('<FONT style="color:#0000FF;">');
				}

				if (date.getMonth() == mm - 1) {
					document.write(date.getDate());
					if (date.getDay() == 0 || date.getDay() == 6 || isHoliday(date.getYear(), date.getMonth() + 1, date.getDate()) == 1) {
						document.write('</FONT>');
					}
					if (isRokuyo) {
						var kr = new kyureki(date.getJD());
						document.write('<BR><FONT size="1">' + kr.rokuyo + "</FONT>");
					}
				}
				document.write('</TD>');
				date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
			}
			document.write('</TR>');
		}
	}
	document.write('</TABLE><img src="images/spacer.gif" height=3 >');
//	document.write('</TABLE></td></tr></table>');
}