function Calendar(year, month, closed) {
	this.rclosed = closed;

	this.theYear = year;
	this.theMonth = month;
	this.getCal = getCal;
	this.nextMonth = nextMonth;
	this.prevMonth = prevMonth;
}
function getCal() {
		var col = 1;
		var calStr;
		var numOfDays = getMonthDays(this.theYear, this.theMonth);
		var dayOfWeek = getFirstDay(this.theYear, this.theMonth);
		var dayStr;
		var days = new Array("日", "月", "火", "水", "木", "金", "土");
		calStr ="<table class=tbl_cal><tr>";
		for (var i = 0; i < days.length; i++) {
			calStr += "<th>" + days[i] + "</th>";
		}
		calStr += "</tr><tr>";
		for (var i = 1; i <= dayOfWeek; i++) {
			col++;
			calStr += "<td></td>";
		};
		for (var day = 1; day <= numOfDays; day++) {
			if (col == this.rclosed) {

				dayStr = "<td id='d" + day + "' style='color:red'>" + day + "</td>";
			} else {
				dayStr = "<td id='d" + day + "'>" + day + "</td>";
			} 		
			if (col == 7) {
				calStr += dayStr + "</tr><tr>";
				col = 1;
			} else {
				calStr += dayStr;
				col++;
			}
		}
		calStr += "</tr></table>";
		return calStr;
}
function nextMonth() {
	if (this.theMonth == 11) {
		this.theMonth = 0;
		this.theYear++;
	} else {
		this.theMonth++;
	}
}
function prevMonth() {
	if (this.theMonth == 0) {
		this.theMonth= 11;
		this.theYear--;
	} else {
		this.theMonth--;
	}
}
function isLeapYear(year) {
	if (((year % 4 == 0) && (year % 100 != 0)) 
			|| (year % 400 == 0)) {
		return true;
	} else {
		return false;
	}
}
function getFirstDay(theYear, theMonth){
	var tmpDate = new Date(theYear, theMonth, 1);
	return tmpDate.getDay();
}
function getMonthDays(theYear, theMonth){
	var monthDays = new Array (31, 28, 31, 30, 31, 30, 31,
									31, 30, 31, 30, 31);
	if (isLeapYear(theYear)) {
		monthDays[1] = 29;
	}
	return monthDays[theMonth];
}
var rClosed = "1";
var Holidays =[
	aHoliday(2011, 12, 29),
	aHoliday(2011, 12, 30),
	aHoliday(2011, 12, 31),
	aHoliday(2012, 1, 1),
	aHoliday(2012, 1, 2),
	aHoliday(2012, 1, 3),
	aHoliday(2012, 1, 4),
]
function aHoliday(year, month ,day) {
	return new Date(year, month - 1, day);
}
function init() {
	var theDate = new Date();
	myCal = new Calendar(theDate.getFullYear(), theDate.getMonth(), rClosed);
	setCalendar();
}
function setCalendar() {
	var cal = document.getElementById("calContent");
	cal.innerHTML = myCal.getCal();
	var hContent = "<div id='calHeaer' style='text-align:center'>" 
			+ "<span id='prev'> &#171; </span>"
			+myCal.theYear + "年"
			+ (myCal.theMonth +1) + "月" 
			+ "<span id='next'> &#187;</span>"
			+ "&nbsp;&nbsp;</div>";
	var header = document.getElementById("calHeader");
	header.innerHTML = hContent;
	document.getElementById("prev").onclick = toPrevMonth;
	document.getElementById("next").onclick = toNextMonth;
	setHolidays();
}
function toPrevMonth() {
	myCal.prevMonth();
	setCalendar();
}
function toNextMonth() {
	myCal.nextMonth();
	setCalendar();
}
function setHolidays() {
	for (var i = 0; i < Holidays.length; i++) {
		var aDay = Holidays[i];
		if ((myCal.theYear == aDay.getFullYear()) 
			&& (myCal.theMonth == (aDay.getMonth()))) {
			document.getElementById("d" + aDay.getDate()).style.color = "red";
		}
	}
}

