// JavaScript Document
// UTF-8N LF で保存のこと

//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
/*@cc_on _d=document;eval('var document=_d')@*/
//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
//  変数
//++++++++++++++++++++++++++++++++++++++++++++++++++++++*

var calendar = [];

// それぞれの月が何日あるか
calendar.maxMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
calendar.month = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

// カレンダー上部の曜日の表記法
calendar.days = new Array('SUN','MON','TUE','WED','THU','FRI','SAT');

//年月日を取得
calendar.d = new Date();
calendar.yy = calendar.d.getFullYear(); // 西暦
calendar.mm = calendar.d.getMonth()+1; // 月
calendar.dd = calendar.d.getDate(); // 日
calendar.wd  = calendar.d.getDay(); // 曜日

calendar.date = {
	year: calendar.yy,
	month: calendar.mm,
	day: calendar.dd,
	wd: 0
};

calendar.num = new Array();
calendar.holiday = new Array();
calendar.holiday2 = new Array();
calendar.holiday3 = new Array();
calendar.notHoliday = new Array();

calendar.check = {
	td: 0,
	tr: 0,
	yy: 0,
	mm: 0
};

//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
//  開始
//++++++++++++++++++++++++++++++++++++++++++++++++++++++*

if(window.addEventListener) {
	window.addEventListener("load", calendar_S, false);
}else if(window.attachEvent) {
	window.attachEvent("onload", calendar_S);
}else {
	window.onload = calendar_S;
};

function calendar_S() {
	var c = calendar;
	
	for (i = 0, len = c.num.table; i < len; i++){
		var calendarDiv = document.createElement('div');
		calendarDiv.id = 'calendarTable_'+ i;
		calendarDiv.style.overflow = 'hidden';
		var objBody = document.getElementById('calendarBox');
		objBody.appendChild(calendarDiv);
	};
	
	calendarNext(0);
};

//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
//  カレンダー表示
//++++++++++++++++++++++++++++++++++++++++++++++++++++++*

var calendarNext = function (m){
	var c = calendar;
	
	c.check.td = 0;
	c.check.tr = 0;
	
	// prev，nextボタンを押した時
	c.date.month = c.date.month + m;
	if (c.date.month > 12){
		c.date.month = 1;
		c.date.year = c.date.year + 1;
	}else if(c.date.month < 1){
		c.date.month = 12;
		c.date.year = c.date.year - 1;
	};
	
	// h2
	var cHtml = '';
	
	if (c.num.num == 0){
		c.check.yy = c.date.year;
		c.check.mm = c.date.month;
		
		cHtml += '<h2 class="calendarH2"><span class="calendarDisp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+ c.date.year +'年&nbsp;'+ c.date.month +'月</span><span class="monthNex" onclick="calendarNext(1)">&nbsp;&gt;&gt;</span><span class="monthNow" onclick="monthNow()">今月</span><span class="monthPre" onclick="calendarNext(-1)">&lt;&lt;&nbsp;</span></h2>';
	}else {
		cHtml += '<h2 class="calendarH2"><span class="calendarDisp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+ c.date.year +'年&nbsp;'+ c.date.month +'月</span></h2>';
	};
	
	cHtml += '<table cellpadding="0" cellspacing="0" border="0" width="100%" class="calendarTable">';
	
	// 曜日のth
	cHtml += '<tr>';
	for (i = 0, len = calendar.days.length; i < len; i++){
		if (c.holiday.week[i] == 1 || c.holiday2.week[i] == 1){
			cHtml += '<th class="holiday">'+ calendar.days[i] +'</th>';
		}else {
			cHtml += '<th>'+ calendar.days[i] +'</th>';
		};
	};
	cHtml += '</tr>';
	
	// max
	var maxD = c.maxMonth[c.date.month - 1];
	// うるう年
	if (c.date.month == 2 && ((c.date.year % 4 == 0 && c.date.year % 100 != 0) || c.date.year % 400 == 0)){
		maxD = 29;
	};
	
	// 日付の書き出し
	for (i = 1, len = maxD + 1; i < len; i++){
		if (c.check.td == 0){
			cHtml += '<tr class="calendarTr_'+ c.check.tr +'">';
			c.check.tr = c.check.tr + 1;
		};
		
		// 前半の空白のtd
		if (i == 1){
			// 表示月が何曜日から始まるか
			var day2 = new Date(c.date.year, c.date.month - 1, 1);
			c.date.day = day2.getDay();
			// 表示月の空白のtd
			for (j = 0, len2 = c.date.day; j < len2; j++){
				cHtml += '<td class="kuhaku">&nbsp;</td>';
				c.check.td = c.check.td + 1;
			};
		};
		
		// 日付のtd
		if (c.holiday.week[c.check.td] == 1){
			// 日曜日、祝祭日
			if (c.yy == c.date.year && c.mm == c.date.month && c.dd == i){
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'" class="holiday today">'+ i +'</td>';
			}else {
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'" class="holiday">'+ i +'</td>';
			};
		}else if (c.holiday2.week[c.check.td] == 1){
			// 土曜日
			if (c.yy == c.date.year && c.mm == c.date.month && c.dd == i){
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'" class="holiday2 today">'+ i +'</td>';
			}else {
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'" class="holiday2">'+ i +'</td>';
			};
		}else if (c.holiday3.week[c.check.td] == 1){
			// 休業日
			if (c.yy == c.date.year && c.mm == c.date.month && c.dd == i){
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'" class="holiday3 today">'+ i +'</td>';
			}else {
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'" class="holiday3">'+ i +'</td>';
			};
		}else {
			// 平日営業日
			if (c.yy == c.date.year && c.mm == c.date.month && c.dd == i){
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'" class="today">'+ i +'</td>';
			}else {
				cHtml += '<td id="calendarTd_'+ c.date.year + c.date.month + i +'">'+ i +'</td>';
			};
		};
		
		c.check.td = c.check.td + 1;
		if (c.check.td == 7){
			c.check.td = 0;
			cHtml += '</tr>';
		};
	};
	
	if (c.check.td != 0){
		for (i = c.check.td; i < 7; i++){
			if (c.check.td == 6){
				cHtml += '</tr>';
			}else {
				cHtml += '<td class="kuhaku">&nbsp;</td>';
			};
		};
	};
	
	cHtml += '</table>';
	document.getElementById('calendarTable_'+ c.num.num).innerHTML = cHtml;
	
	calendarHoliday_fc();
};

//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
//  曜日指定定休
//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
var calendarHoliday_fc = function (){
	var c = calendar;
	
	if (calendar.holiday['y'+ c.date.year]){
		/// 日曜日、祝祭日
		if (calendar.holiday['y'+ c.date.year][c.month[c.date.month - 1]][1]){
			var tdId = calendar.holiday['y'+ c.date.year][c.month[c.date.month - 1]];
			for (i = 0, len = tdId.length; i < len; i++){
				if (document.getElementById('calendarTd_'+ c.date.year + c.date.month  + tdId[i])){
					if (c.yy == c.date.year && c.mm == c.date.month && c.dd == tdId[i]){
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = 'holiday today';
					}else {
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = 'holiday';
					};
				};
			};
		};
	};
	if (calendar.holiday2['y'+ c.date.year]){
		/// 土曜日
		if (calendar.holiday2['y'+ c.date.year][c.month[c.date.month - 1]][1]){
			var tdId = calendar.holiday2['y'+ c.date.year][c.month[c.date.month - 1]];
			for (i = 0, len = tdId.length; i < len; i++){
				if (document.getElementById('calendarTd_'+ c.date.year + c.date.month  + tdId[i])){
					if (c.yy == c.date.year && c.mm == c.date.month && c.dd == tdId[i]){
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = 'holiday2 today';
					}else {
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = 'holiday2';
					};
				};
			};
		};
	};
	if (calendar.holiday3['y'+ c.date.year]){
		/// 休業日
		if (calendar.holiday3['y'+ c.date.year][c.month[c.date.month - 1]][1]){
			var tdId = calendar.holiday3['y'+ c.date.year][c.month[c.date.month - 1]];
			for (i = 0, len = tdId.length; i < len; i++){
				if (document.getElementById('calendarTd_'+ c.date.year + c.date.month  + tdId[i])){
					if (c.yy == c.date.year && c.mm == c.date.month && c.dd == tdId[i]){
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = 'holiday3 today';
					}else {
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = 'holiday3';
					};
				};
			};
		};
	};
	if (calendar.notHoliday['y'+ c.date.year]){
		// 定休解除
		if (calendar.notHoliday['y'+ c.date.year][c.month[c.date.month - 1]][1]){
			tdId = calendar.notHoliday['y'+ c.date.year][c.month[c.date.month - 1]];
			for (i = 0, len = tdId.length; i < len; i++){
				if (document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i])){
					if (c.yy == c.date.year && c.mm == c.date.month && c.dd == tdId[i]){
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = 'today';
					}else {
						document.getElementById('calendarTd_'+ c.date.year + c.date.month + tdId[i]).className = '';
					};
				};
			};
		};
	};
	
	c.num.num = c.num.num + 1;
	if (c.num.num < c.num.table ){
		calendarNext(1);
	}else {
		c.date.year = c.check.yy;
		c.date.month = c.check.mm;
		c.num.num = 0;
	};
};

//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
//  今月
//++++++++++++++++++++++++++++++++++++++++++++++++++++++*
var monthNow = function (){
	var c = calendar;
	
	c.date.year = calendar.yy;
	c.date.month = calendar.mm;
	
	calendarNext(0);
};
