<!--
	// ******* カレンダ作成関数ライブラリ (calender2.js) 2007.01.07 Y.Etou *******

var WeekDays2 = new Array("日","月","火","水","木","金","土");
var Mdays2 = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

// ***** yy,mm の月の日数を返す *****
function GetMonthDays(yy,mm) {
	Mdays2[1] = 28;	// 閏年の処理開始
	if ((yy % 4) == 0) Mdays2[1] = 29;
	if ((yy % 100) == 0) Mdays2[1] = 28;
	if ((yy % 400) == 0) Mdays2[1] = 29;  // 閏年の処理終了
	return Mdays2[mm - 1];
}

// ***** yy,mm,dd から年通日を計算 (1/1 は、1.0 とする) *****
function GetYearDays(yy,mm,dd) {
	var m,days;
	days = dd;
	m = GetMonthDays(yy,mm);	// 閏処理のためのダミー
	for (m = 0; m < (mm - 1); m++) days += Mdays2[m];
	return days;
}

// ***** 曜日の文字を返す('日' .. '土') *****
function GetWeekDayStr(yy,mm,dd) {
	var idx;
	idx = GetWeekDays(yy,mm,dd);
	return WeekDays2[idx];
}

// ***** year,month から、春分・秋分の日付を計算 *****
// month : 3 or 9
var Syunbunpar1 = new Array(19.8277,20.8357,20.8431,21.8510);
var Syunbunpar2 = new Array(22.2588,23.2588,23.2488,24.2488);

function Syunbun(year,month) {
	var ans,p1,tyear;

	if ((year >= 1851) && (year <= 1899)) p1 = 0;
	else if ((year >= 1900) && (year <= 1979)) p1 = 1;
	else if ((year >= 1980) && (year <= 2099)) p1 = 2;
	else if ((year >= 2100) && (year <= 2150)) p1 = 3;
	else return 0;  // エラー（範囲外）

	tyear = 1980;
	
	tyear = (year - tyear);
	if (month == 3) // 春分の日
	{
		ans = Math.floor(Syunbunpar1[p1]+0.2421904*tyear-Math.floor((tyear+0.1)/4));
	}
	else if (month == 9) // 秋分の日
	{
		ans = Math.floor(Syunbunpar2[p1]+0.2421904*tyear-Math.floor((tyear+0.1)/4));
	}
	else ans = 0;  // 春分でも秋分でもない
	return ans;
}

var dayend,month,year = -9999;
var iwaimend  = new Array(-1,-1);  // 月末日が祝日となる月をセット。最後は -1
var iwaimends = new Array("","");  // 月末が祝日になる場合の祝日名
var iwaiday   = new Array();
var iwaidayS  = new Array();
var iwaidayE  = new Array();
var IwaiOrg   = "101,115,151,211,398,429,429,503,504,505,720,761,915,961,997,999,1010,1051,1103,1123,1223,9000";
var IwaiOrgS  = "1949,1949,2000,1967,1949,1949,1989,1949,1986,1949,1996,2003,1966,2003,2003,1948,1966,2000,1948,1948,1989,9000";
var IwaiOrgE  = "9000,1999,9000,9000,9000,1988,9000,9000,-99,9000,2002,9000,2002,9000,-99,9000,1999,9000,9000,9000,9000,9000";
var iwaistr   = new Array("元日","成人の日","成人の日","建国記念の日","春分の日","昭和の日",
"昭和の日","憲法記念日","みどりの日","こどもの日","海の日","海の日","敬老の日","敬老の日",
"国民の休日","秋分の日","体育の日","体育の日","文化の日","勤労感謝の日","天皇誕生日","終わり");

// ***** 祝日の日付データの初期化。年が変わるときは必ず実行すること。 *****
function InitIwai() {
	var i;
	iwaiday  = IwaiOrg.split(",");
	iwaidayS = IwaiOrgS.split(",");
	iwaidayE = IwaiOrgE.split(",");
	for (i = 0; ; i++) {
		iwaiday[i] = eval(iwaiday[i]);
		if (iwaiday[i] >= 5000) break;
	}
}

// ***** 移動祝日の日付計算(iwaiday[] の数字設定) *****
function Initvariable(year) {
	var i,j,day,tmp,mon;

	for (i = 0; iwaiday[i] < 5000 ; i++) {
		tmp = iwaiday[i] % 100;
		if (tmp == 98) iwaiday[i] = 300 + Syunbun(year,3);  // 春分の日の計算
		if (tmp == 99) iwaiday[i] = 900 + Syunbun(year,9);  // 秋分の日の計算
		if (iwaidayE[i] == -99) {   // 国民の休日
			if (tmp == 97) {        // 秋分の日の前の「国民の休日」を計算
				iwaiday[i] = Syunbun(year,9) - 1;
				if (GetWeekDays(year,9,iwaiday[i]) == 2) iwaidayE[i] = 9000;  // 火曜日なら国民の休日
				iwaiday[i] += 900;
			} else {
				mon = Math.floor(iwaiday[i] / 100);
				if (GetWeekDays(year,mon,tmp) > 1) iwaidayE[i] = 9000;       // 火曜日以降は国民の休日
			}
		}
		if ((tmp > 31) && (tmp < 90)) {
			mon = Math.floor(iwaiday[i] / 100);
			day = tmp % 10;
			tmp = (Math.floor(tmp / 10) - 4) * 7 + 1;
			for (j = tmp; j < (tmp + 7); j++) {  // 第何週の何曜日という祝日の計算 51 : 第２週の月曜
				if (GetWeekDays(year,mon,j) == day) {
					iwaiday[i] = mon * 100 + j;
					break;
				}
			}
		}
	}
}

// ***** 春分、秋分の日付の設定(iwaiday[] の数字設定) *****
function InitSyunbun(year,month) {
	var i,day,tmp;
	i   = 0;
	day = 0;
	
	tmp = -9999;
	if (month == 3) tmp = 321;
	if (month == 9) tmp = 922;
	if (tmp < 0) return;

	for(i = 0; day < 5000 ; i++) {
		day = iwaiday[i];
		if (day == tmp)
		{
			iwaiday[i] = Syunbun(year,month) + month * 100;	// 春分と秋分の日付の計算
			break;
		}
	} 
}

// ***** １桁の数値の場合は、前'0'を付加して返す *****
function monthZero(n) {
	if (n < 10) return '0' + n;
	else return '' + n;
}

// ***** year,monthのカレンダを作成 (today が 0以下なら、「今日」のマークは入れない) *****
// exflag = 1 なら、日付表示後に拡張文字列を挿入する
function calender_main(year,month,today,exflag,exstr) {
	var i,dflag,day;
	var iwaid = new Array(0,0,0,0,0,0);
	var iwais = new Array("","","","","","");
	var iws,iw1,iw2;
	var bm,nm,ny,by;

	InitIwai();          // 祝日日付配列の初期化
	Initvariable(year);  // 移動する祝日の処理

	dayend = GetMonthDays(year,month);

	iw2 = 1;
	for (i = 0; iwaiday[i] < 5000 ; i++)
	{
		// ***** 祝日が有効となる年の範囲判定 *****
		if ((year >= iwaidayS[i]) && (year <= iwaidayE[i])) {
			if (Math.floor((iwaiday[i] + 0.1) / 100) == month)
			{
				iwaid[iw2] = iwaiday[i] % 100;
				iwais[iw2] = iwaistr[i];
				iw2++;
			}
		}
	}
	// ***** today が 0 以下なら、今日の日付チェックは不要 *****
	if (today <= 0) today = -99;
    var sendtag = '';
	sendtag += "<table width=168 border=0 cellspacing=0 celpadding=0>";
	sendtag += "<tr><td width=48 height=20 bgcolor=\"#e0e0cf\" align=\"center\">";
	// ***** 次、前月の移動判定処理 *****
	ny = year;
	by = year;
	bm = month-1;
	nm = month+1;
	if (nm>12) { nm=1;  ny = year+1; }
	if (bm<1)  { bm=12; by = year-1; }
	sendtag += "<a href=\"javascript:calreload("+by+","+bm+");\" title=\"前月\">";
	sendtag += "<img src=\"../image/back.gif\" width=24 height=21 border=0 align=\"absmiddle\"></a></td>";
	sendtag += "<td width=72 height=20 bgcolor=\"#e0e0cf\" align=\"center\">";
	sendtag += "<button style=\"width:72;height:20;border:0;color:#222222;background-color:#e0e0cf;text-align:center;cursor:hand;\"";
	sendtag += " title=\"当月\" onclick=\"initcal();\">"+year+"年"+monthZero(month)+"月"+"</button></td>";
	sendtag += "<td width=48 height=20 bgcolor=\"#e0e0cf\" align=\"center\">";
	sendtag += "<a href=\"javascript:calreload("+ny+","+nm+");\" title=\"翌月\">";
	sendtag += "<img src=\"../image/next.gif\" width=24 height=21 border=0 align=\"absmiddle\"></a></td></tr>";
	sendtag += "<tr><td colspan=3 height=1 bgcolor=\"#cccccc\"></td></tr>";
	sendtag += "</table>";

	sendtag += "<table width=168 border=0 bgcolor=\"#e9e9e9\" cellspacing=1 celpadding=0>";
	for (i = 0; i < 7 ; i++) {
		if (i == 0) sendtag += "<tr><td width=24 height=20 align=\"center\" bgcolor=\"#ffcece\">"+WeekDays2[i]+"</td>";
		else if (i == 6) sendtag += "<td width=24 height=20 align=\"center\" bgcolor=\"#cfffff\">"+WeekDays2[i]+"</td></tr>";
		else sendtag += "<td width=24 height=20 align=\"center\" bgcolor=\"#ffff15\">"+WeekDays2[i]+"</td>";
	}
	// ***** 0日の曜日を求める（日曜日 = 0） *****
	day = GetWeekDays(year,month,0); 
	iws = 1;
	if (day == 0) {
		tmp = month - 1;
		if (tmp < 1) tmp = 12;
		for (i = 0; iwaimend[i] >= 0 ; i++) {
			if (tmp == iwaimend[i]) {
				iws = 0;  // 前月末が日曜かつ祝日の場合の処理
				iwaid[0] = 1;
				iwais[0] = iwaimends[i] + '(振替)';
			}
		}
	}

	day = -day;
	// ***** 前月末日が土曜日なら先頭の空白は入れる必要なし *****
	if (day == -6) day = 1;
	for (;;)
	{
		sendtag += "<tr align=\"center\">";
		for (i = 0; i < 7 ; i++) {
			dflag = i;
			for (iw1 = iws; iw1 < iw2 ; iw1++) {
				if (iwaid[iw1] == day) {
					// ***** 日曜日なら翌日が振り替え休日 *****
					if (i == 0) {
						iwaid[iw1]++;
						iwais[iw1] = iwais[iw1] + '(振替)';
					} else dflag = 0;  // ***** 祝日（休みにする） *****
				}
			}
			if (day == today) dflag = -1;

			if (dflag == -1) sendtag += "<td bgcolor=\"#00ffff\" align=\"center\">";
			else if ((dflag == 0) && ((day >= 1) && (day <= dayend))) sendtag += "<td bgcolor=\"#ffcece\" align=\"center\">";
			else if ((dflag == 6) && ((day >= 1) && (day <= dayend))) sendtag += "<td bgcolor=\"#cfffff\" align=\"center\">";
			else sendtag += "<td bgcolor=\"#ebeeee\">";
			if ((day >= 1) && (day <= dayend)) {
				sendtag += ""+day;
				// ***** exflag = 1 なら、拡張文字列の挿入 *****
				if (exflag == 1) {
					sendtag += ""+exstr;
				}
			}
			else sendtag += "&nbsp;";
			sendtag += "</td>";
			day++;
		}
		sendtag += "</tr>";
		if (day > dayend) break;
	}
	sendtag += "<tr bgcolor=\"#0066bb\"><td height=20 align=\"left\" colspan=7>&nbsp;";
	sendtag += "<font color=\"#ffffff\">今月の祝日・休日</font></td></tr>";
	if (iw2 > 0) {
		for (iw1 = iws ; iw1 < iw2 ; iw1++) {
			sendtag += "<tr align=\"center\"><td bgcolor=\"#dd0000\"><font color=\"#ffffff\">" + iwaid[iw1] + "</font></td>";
			sendtag += "<td colspan=6 bgcolor=\"#ebeeee\" align=\"left\">&nbsp;" + iwais[iw1] + "</td></tr>";
		}
	}
	else sendtag += "<tr bgcolor=\"#ffffff\"><td align=\"left\" colspan=7>祝日なし</td></tr>";

	sendtag += "</table>";
	document.getElementById('calput').innerHTML = sendtag;
}

// ***** カレンダー表示を指示するための関数 *****
function calender(YY,MM,DD) {
	calender_main(YY,MM,DD,0,"");
}

// ***** イニシャルスタート *****
function initcal() {
	var myD       = new Date();
	var myYear    = myD.getYear();
	var myYear4   = (myYear < 2000) ? myYear+1900 : myYear;
	var myMonth   = myD.getMonth() + 1;
	var myDate    = myD.getDate();
	calender(myYear4,myMonth,myDate);
}

// ***** カレンダ移動処理 *****
function calreload(y,m) {
	calender(y,m,0);
}
// -->

