

function SimpleCalendar() {}
SimpleCalendar.prototype = {
	cal : null,
	defaultBackgroundColors : new Object(),
	to_year : '',
	to_month : '',
	to_day : '',
	cal_year : '',
	cal_month : '',
	cal_day : '',
	classNames : new Array('holyday','xday','birthday'),
	tdOver : function (obj){
		this.defaultBackgroundColors[obj] = obj.style.backgroundColor;
		obj.style.backgroundColor = '#E8EEF9';
	},
	tdOut : function (obj){
		obj.style.backgroundColor = this.defaultBackgroundColors[obj];
	},
	spanOver : function (obj){
		this.defaultBackgroundColors[obj] = obj.style.backgroundColor;
		obj.style.color = '#FF9900';
	},
	spanOut : function (obj){
		obj.style.color = this.defaultBackgroundColors[obj];
	},
	currentCal : function (){
		this.cal_year = this.to_year;
		this.cal_month = this.to_month;
		this.cal_day = this.to_day;
		this.writeCal(this.cal_year,this.cal_month,this.cal_day);
	},
	prevCal : function (){
		this.cal_month -= 1;
		if(this.cal_month < 1){
			this.cal_month = 12;
			this.cal_year -= 1;
		}
		this.writeCal(this.cal_year,this.cal_month,0);
	},
	nextCal : function (){
		this.cal_month += 1;
		if(this.cal_month > 12){
			this.cal_month = 1;
			this.cal_year += 1;
		}
		this.writeCal(this.cal_year,this.cal_month,0);
	},
	getWeek : function (year,month,day){
		if (month == 1 || month == 2) {
			year--;
			month += 12;
		}
		var week = Math.floor(year + Math.floor(year/4) - Math.floor(year/100) + Math.floor(year/400) + Math.floor((13 * month + 8) / 5) + day) % 7;
		return week;
	},
	init : function (cal,year,month,day,holyday){
		this.cal = cal;
		this.to_year = this.cal_year = year;
		this.to_month = this.cal_month = month;
		this.to_day = this.cal_day = day;
		this.holyday = holyday;
		this.writeCal(year,month,day);
	},
	writeCal : function (year,month,day){
				
		var calendars = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
		var weeks = new Array("日","月","火","水","木","金","土");
		//var monthName = new Array('none','January','February','March','April','May','June','July','August','September','October','November','December');
		var monthName = new Array('none','１月','２月','３月','４月','５月','６月','７月','８月','９月','10月','11月','12月');
		
		var cal_flag = 0;
		if(year % 100 == 0 || year % 4 != 0){
			if(year % 400 != 0){
				cal_flag = 0;
			}
			else{
				cal_flag = 1;
			}
		}
		else if(year % 4 == 0){
			cal_flag = 1;
		}
		else{
			cal_flag = 0;
		}
		calendars[2] += cal_flag;
		
		var cal_start_day = this.getWeek(year,month,1);
		var cal_tags = "<table border='0' cellspacing='0' cellpadding='0' class='calendar'>";
		cal_tags += "<tr><th colspan='7'>";
		cal_tags += "<span onMouseOver='"+this.cal.id+".spanOver(this);' onMouseOut='"+this.cal.id+".spanOut(this);' onClick='"+this.cal.id+".nextCal();'></span>";
		cal_tags += "<span onMouseOver='"+this.cal.id+".spanOver(this);' onMouseOut='"+this.cal.id+".spanOut(this);' onClick='"+this.cal.id+".currentCal();'></span>";
		cal_tags += "<span onMouseOver='"+this.cal.id+".spanOver(this);' onMouseOut='"+this.cal.id+".spanOut(this);' onClick='"+this.cal.id+".prevCal();'></span>";
		cal_tags += year + '年' + monthName[month] + "</th></tr>";
		cal_tags += "<tr class='headline'>";
		for(var i=0;i<weeks.length;i++){
			cal_tags += "<td>" + weeks[i] + "</td>";
		}
		cal_tags += "</tr><tr>";
		for(var i=0;i < cal_start_day;i++){
			cal_tags += "<td>&nbsp;</td>";
		}
		
		//main
		for(var cal_day_cnt = 1;cal_day_cnt <= calendars[month];cal_day_cnt++){
			var cal_day_match = year + "/" + month + "/" + cal_day_cnt;
			var dayClass = "";
			
			if(this.holyday[cal_day_match] != undefined){
				dayClass = ' class="'+this.classNames[this.holyday[cal_day_match]]+'"';
			}
			else if(cal_day_cnt == day){
				dayClass = ' class="Today"';
			}
			else if(cal_start_day == 0){
				dayClass = ' class="Sun"';
			}
			else if(cal_start_day == 6){
				dayClass = ' class="Sat"';
			}
			cal_tags += "<td onMouseOver='"+this.cal.id+".tdOver(this);' onMouseOut='"+this.cal.id+".tdOut(this);'"+dayClass+">" + cal_day_cnt + "</td>";
			if(cal_start_day == 6){
				cal_tags += "</tr>";
				if(cal_day_cnt < calendars[month]){
					cal_tags += "<tr>";
				}
				cal_start_day = 0;
			}
			else{
				cal_start_day++;
			}
		}
		while(cal_start_day <= 6 && cal_start_day != 0){
			cal_tags += "<td>&nbsp;</td>";
			if(cal_start_day == 6){
				cal_tags += "</tr>";
			}
			cal_start_day++;
		}
		cal_tags += "</table>";
		this.cal.innerHTML = cal_tags;
	}
}

