/*----------------------
	可変カレンダー
----------------------*/

var aYear = new Array();
// メンテナンス部分 --------------------------------------
// 年間休日リスト（日曜以外）月の区切りは"0".配列の終端は"-1" 
aYear["A.D.2005"] = new Array(1,10,0,11,0,21,0,29,0,3,4,5,0,0,18,0,0,19,23,0,10,0,3,23,0,23,-1);
aYear["A.D.2006"] = new Array(2,9,0,11,0,2,0,29,0,3,4,5,0,0,17,0,0,18,23,0,9,0,3,23,0,23,-1);
aYear["A.D.2007"] = new Array(1,8,0,12,0,21,0,30,0,3,4,5,0,0,16,0,0,17,24,0,8,0,3,23,0,24,-1);
//-----------------------------------------------------

// 変数
var aDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var aWeek = new Array("日", "月", "火", "水", "木", "金", "土");
var objParent;
var tCalendar;
var nYear = 0;
var nMonth = 0;

// 初期化
function InitCalendar(parent_id)
{
	if (document.getElementById) {
		objParent = document.getElementById(parent_id);
		SetThisMonth();
	}
}

// カレンダーの表示
function SetCalendar(year, month)
{
	// 変数
	var nDate = new Date();	
	var nToday = nDate.getDate();
	var nDays;
	var nFirstDay;
	var bToday = false;
	var i, j;

	nYear = year;
	nMonth = month
     bToday = (nYear == nDate.getFullYear() && nMonth == nDate.getMonth() + 1)? true: false;

	// ひと月の日数
	nDays = aDays[nMonth-1];
	if (nMonth == 2) {
		if (nYear % 400 == 0) nDays =29;
		else if (nYear % 100 == 0) nDays = 28;
		else if (nYear % 4 == 0) nDays= 29;
	}
	
	// 年月の描画
	tCalendar = document.createElement("table");
	with (tCalendar) {
		style.width = "160px";
		style.margin = "0";
		style.tableLayout = "fixed";
		style.border = "1px solid #009900";
		style.backgroundColor = "#f5ffea";
		style.fontSize = "12px";
		style.lineHeight = "16px";
	}
	var tbCalendar = document.createElement("tbody");

	// 見出し行
	var trCaption = document.createElement("tr");
	var tdCaption = document.createElement("td");
	var strCaption = document.createTextNode(nYear + "年 " + nMonth + "月")
	with (tdCaption) {
		colSpan = "7";
		style.padding = "0px";
		style.borderBottom = "1px solid #cccccc";
		style.textAlign = "center";
	}
	trCaption.appendChild(tdCaption);	// 見出しセル
	tdCaption.appendChild(strCaption);

	// 月移動ボタン（リンク）
	var aHref = new Array("SetPrevMonth()", "SetThisMonth()", "SetNextMonth()");
	var aTarget = new Array("前月", "今月", "翌月");
	for (i = 0; i < 3; i++) {
		var lnk = document.createElement("a");
		lnk.style.marginLeft = "5px";
		lnk.style.fontSize= "11px";
		lnk.style.color = "green";
		lnk.href = "javascript:" + aHref[i];
		lnk.appendChild(document.createTextNode(aTarget[i]));
		tdCaption.appendChild(lnk);
	}

	tbCalendar.appendChild(trCaption);  // 見出し行

	// 曜日行
	var trWeek = document.createElement("tr");
	for (i = 0; i < 7; i++) {
		var tdWeek = document.createElement("td");
		with (tdWeek) {
			style.padding = "0";
			style.textAlign = "center";
			appendChild(document.createTextNode(aWeek[i]));
		}
		trWeek.appendChild(tdWeek);
	}
	tbCalendar.appendChild(trWeek);  // 曜日行

	// 日にち行
	nDate.setFullYear(nYear);
	nDate.setMonth(nMonth-1);
	nDate.setDate(1);
	nFirstDay = nDate.getDay();

	// 月末まで表示
	var row = document.createElement("tr");
	var cell = new Array(nDays);
	for (i = -nFirstDay, j = 0; i < nDays; i++) {
		cell[i] = document.createElement("td");
		with (cell[i]) {
			style.padding = "0";
			style.textAlign = "center";
			if (i < 0) {
				// 一日まで空白で埋める
				appendChild(document.createTextNode(" "));
			} else {
				appendChild(document.createTextNode(i+1));  // 日付
				// 背景色
				if (j == 0) style.backgroundColor = "#ffcccc";  //日曜日
				else if (j == 6) style.backgroundColor = "#ccccff"; // 土曜日
				else style.backgroundColor = "transparent";  // 平日
			}
			row.appendChild(cell[i]);
		}
		if (++j == 7 && i != nDays-1) {	/* 土曜でかつ月末以外の時 */
			tbCalendar.appendChild(row);
			row = document.createElement("tr");
			j = 0;
		} 
	}
	// 祭日の追加
	var aRefHoliday = aYear["A.D."+nYear];	// 祭日配列の参照
	if (aRefHoliday) {
		for (i=0, j=1; j+1<=nMonth; i++) 	{
			if (aRefHoliday[i] == -1) break;
			if (aRefHoliday[i] == 0) j++;
		}
		while (aRefHoliday[i] > 0) {
			cell[aRefHoliday[i++]-1].style.backgroundColor = "#ffcccc";  // 祭日
		}
	}
	if (bToday) cell[nToday-1].style.backgroundColor = "#99ff99"; // 今日
	tbCalendar.appendChild(row);
	
	//テーブルの表示
	tCalendar.appendChild(tbCalendar);
	objParent.appendChild(tCalendar);
}

// 前月の表示
function SetPrevMonth()
{
	if (nMonth == 1) {
		nMonth = 12;
		nYear--;
	} else {
		nMonth--;
	}
	if (tCalendar) objParent.removeChild(tCalendar);
	SetCalendar(nYear, nMonth);
}

// 翌月の表示
function SetNextMonth()
{
	if (nMonth == 12) {
		nMonth = 1;
		nYear++;
	} else {
		nMonth++;
	}
	if (tCalendar) objParent.removeChild(tCalendar);
	SetCalendar(nYear, nMonth);
}

// 今月の表示
function SetThisMonth()
{
	if (tCalendar) objParent.removeChild(tCalendar);
	var nDate = new Date();	// 現在の年、月の取得
	SetCalendar(nDate.getFullYear(), nDate.getMonth() + 1);
}

