/*
	カレンダー表示
*/

if(typeof(dChains) == 'undefined') {
	dChains = {};
}
if(typeof(dChains.Calendar) == 'undefined') {
	dChains.Calendar = {};
}

dChains.Calendar = {

	_arrWeekTitle :  ['日','月','火','水','木','金','土'],

	show : function(id, year, month, arrHoliday) {
		// テーブル準備
		var table = $("<table />");
		var rowCount = 0;

		// 年月
		var row = $("<tr />");
		var cell = $("<th />");
		cell.text(year + "年" + month + "月")
		    .attr("colSpan", 7);
		row.append(cell);
		table.append(row);


		// 曜日
		row = $("<tr />");
		for(var i=0; i<7; i++) {
			cell = $("<td />").text(dChains.Calendar._arrWeekTitle[i]);
			switch(i) {
			case 0:	// 日
				cell.addClass("week_sun");
				break;
			case 6: // 土
				cell.addClass("week_sat");
				break;
			default:
				cell.addClass("week_day");
				break;
			}
			row.append(cell);
		}
		table.append(row);

		var lastDay = dChains.Calendar.getLastday(year, month);
		var firstWeek = dChains.Calendar.getWeek(year, month, 1);

		// 日付の箱を準備
		var arrDay = new Array(7*6);
		var pos = 0;
		for(var cnt=0; cnt<firstWeek; cnt++, pos++) {
			arrDay[pos] = '';
		}
		for(var cnt=1; cnt<=lastDay; cnt++, pos++) {
			arrDay[pos] = cnt;
		}
		for(cnt=pos; cnt<7*6; cnt++, pos++) {
			arrDay[pos] = '';
		}
		// 休日を設定
		for(key in arrHoliday) {
			arrDay[firstWeek + arrHoliday[key] - 1] = -arrHoliday[key];
		}

		// 出力
		for(var i=0; i<6; i++) {
			row = $("<tr />");
			for(var j=0; j<7; j++) {
				cell = $("<td />");
				var day = arrDay[i*7+j];
				if(day < 0) {
					cell.text(-day)
						.addClass("day_holiday");
				} else {
					cell.text(day);
					switch(j) {
					case 0:	// 日
						cell.addClass("day_sun");
						break;
					case 6: // 土
						cell.addClass("day_sat");
						break;
					default:
						cell.addClass("day_day");
						break;
					}
				}
				row.append(cell);
			}
			table.append(row);
		}

		$("#"+id).append(table);
	},

	// 指定された月の最終日を取得
	getLastday : function(year, month) {
		month++;
		if(month > 12 ) {
			year++;
			month = 1;
		}

		var dt = new Date(year, month-1, 0);
		return dt.getDate();
	},

	// 指定された日の曜日を取得
	getWeek : function(year, month, day) {
		var dt = new Date(year, month-1, day);
		return dt.getDay();
	}

};
