//====================================================================
// カレンダ生成クラス スクリプト
//====================================================================
//月カレンダタイトル部の表示パターン
var CALMON_TITLE_ONLY			= 1;			/* タイトルのみ */
var CALMON_TITLE_MOVE			= 2;			/* 移動ボタン付（<< >>） */
var CALMON_TITLE_SELECT		= 3;			/* コンボボックス（年号なし） */
var CALMON_TITLE_SELECT2	= 4;			/* コンボボックス（年号付） */

var CALMON_ERA_SYMBOL			= "EBGKMTSH";		/* 元号シンボル */

//年間カレンダタイトル部の表示パターン
var CALYEAR_TITLE_ONLY		= 1;			/* タイトルのみ */
var CALYEAR_TITLE_MOVE		= 2;			/* 移動ボタン付（<< >>） */
var CALYEAR_TITLE_SELECT	= 3;			/* コンボボックス */

/*
'------------------------------------------------------------------------------
' 関数名	:CCalendar
' 機能		:カレンダ生成クラスコンストラクタ
' 返り値	:なし
' 引き数	:sdt - (入)開始日(Date型)
' 				 edt - (入)終了日(Date型)
' 				 sysdate - (入)システム日付(Date型)
' 機能説明:なし
' 備考		:なし
*/
function CCalendar(sdt, edt, sysdate) {
	if (arguments.length < 2) {
		alert("Error[CCalendar]: Invalid Arguments Count!!! [" + arguments.length + "]");
		return;
	}
	this.m_sdate = sdt;
	this.m_edate = edt;
	if (sysdate != null) {
		this.m_sysdate = sysdate;
	} else {
		this.m_sysdate = new Date();
	}
	this.m_MonthTitlePattern = CALMON_TITLE_SELECT;
	this.m_MonthTitleFormat = "yyyy年m月";
	this.m_TopWeekday = 0;
	this.m_DateSelect = true;
	this.m_TodayAccent = true;
	this.m_holiday_info = new CHolidayInfo(sdt.getFullYear(), edt.getFullYear());
	this.m_YearTitlePattern = CALYEAR_TITLE_ONLY;
	this.m_YearTitleFormat = "yyyy年";
	this.m_HolidayAccent = true;
	this.m_HolidayToolTip = true;
	this.m_HolidayCaption = false;
	this.m_MonthDisplayCount = 1;
	this.m_ColumnCount = 1;

	//public
	this.MonthTitlePattern = CCalendar_MonthTitlePattern;
	this.MonthTitleFormat = CCalendar_MonthTitleFormat;
	this.TopWeekday = CCalendar_TopWeekday;
	this.DateSelect = CCalendar_DateSelect;
	this.TodayAccent = CCalendar_TodayAccent;
	this.YearTitlePattern = CCalendar_YearTitlePattern;
	this.YearTitleFormat = CCalendar_YearTitleFormat;
	this.HolidayAccent = CCalendar_HolidayAccent;
	this.HolidayToolTip = CCalendar_HolidayToolTip;
	this.HolidayCaption = CCalendar_HolidayCaption;
	this.MonthDisplayCount = CCalendar_MonthDisplayCount;
	this.ColumnCount = CCalendar_ColumnCount;

	this.CalendarHTMLMake = CCalendar_CalendarHTMLMake;
	//private
	this.MonthCalendarHTMLMake = CCalendar_MonthCalendarHTMLMake;
	this.m_MakeHTMLdate = null;			//内部ワーク（MonthCalendarBlockHTMLMakeで使用）
	this.m_MakeMonthCount = 0;			//内部ワーク（YearCalendarHTMLMakeで使用）
	this.MonthCalendarBlockHTMLMake = CCalendar_MonthCalendarBlockHTMLMake;
	this.MonthHeaderHTMLMake = CCalendar_MonthHeaderHTMLMake;
	this.MonthHeaderTitleOnlyHTMLMake = CCalendar_MonthHeaderTitleOnlyHTMLMake;
	this.MonthHeaderTitleMoveHTMLMake = CCalendar_MonthHeaderTitleMoveHTMLMake;
	this.MonthHeaderTitleSelectHTMLMake = CCalendar_MonthHeaderTitleSelectHTMLMake;
	this.MonthHeaderTitleSelect2HTMLMake = CCalendar_MonthHeaderTitleSelect2HTMLMake;
	this.MonthTitleDayHTMLMake = CCalendar_MonthTitleDayHTMLMake;
	this.MonthWeekRowHTMLMake = CCalendar_MonthWeekRowHTMLMake;
	this.MonthFooterHTMLMake = CCalendar_MonthFooterHTMLMake;
	this.HolidayCaptionHTMLMake = CCalendar_HolidayCaptionHTMLMake;
	this.YearCalendarHTMLMake = CCalendar_YearCalendarHTMLMake;
	this.YearHeaderHTMLMake = CCalendar_YearHeaderHTMLMake;
	this.YearHeaderTitleOnlyHTMLMake = CCalendar_YearHeaderTitleOnlyHTMLMake;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthTitlePattern
' 機能		:月間カレンダタイトル部の表示パターンを設定する
' 返り値	:なし
' 引き数	:iPNo - (入)パターン番号
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthTitlePattern(iPNo) {
	this.m_MonthTitlePattern = iPNo;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthTitleFormat
' 機能		:月間カレンダタイトル部の表示フォーマットを設定する
' 返り値	:なし
' 引き数	:fmt - (入)表示フォーマット文字列
' 機能説明:なし
' 備考		:DateToString(date.js)を参照
*/
function CCalendar_MonthTitleFormat(fmt) {
	this.m_MonthTitleFormat = fmt;
}
/*
'------------------------------------------------------------------------------
' 関数名	:TopWeekday
' 機能		:表示先頭曜日を設定する
' 返り値	:なし
' 引き数	:day - (入)曜日（0:日 1:月 2:火 3:水 4: 木 5:金 6:土）
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_TopWeekday(day) {
	this.m_TopWeekday = day;
}
/*
'------------------------------------------------------------------------------
' 関数名	:DateSelect
' 機能		:日付選択表示有無を設定する
' 返り値	:なし
' 引き数	:bln - (入)日付選択表示有:true 日付選択表示無:false
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_DateSelect(bln) {
	this.m_DateSelect = bln;
}
/*
'------------------------------------------------------------------------------
' 関数名	:TodayAccent
' 機能		:当日強調表示有無を設定する
' 返り値	:なし
' 引き数	:bln - (入)強調表示有:true 強調表示無:false
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_TodayAccent(bln) {
	this.m_TodayAccent = bln;
}
/*
'------------------------------------------------------------------------------
' 関数名	:CalendarHTMLMake
' 機能		:カレンダのＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 				 era  - (入)元号シンボル
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_CalendarHTMLMake(yyyy, mm, era) {
	var sBuf, dt;

	sBuf = "";
	dt = new Date(yyyy, mm - 1, 1);
	if (!IsRangeDate(this.m_sdate, this.m_edate, dt)) {
		alert("カレンダ指定年月が不正です。[" + yyyy + "-" + mm + "]");
	} else {
		sBuf += "<table class='calendar-canvas'>";
		if (this.m_MonthDisplayCount == 1) {
			sBuf += "<tr><td>";
			sBuf = this.MonthCalendarHTMLMake(yyyy, mm, era);
			sBuf += "</td></tr>";
		} else {
			sBuf += this.YearHeaderHTMLMake(yyyy, mm);
			sBuf += this.YearCalendarHTMLMake(yyyy, mm);
		}
		sBuf += "</table>";
	}
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthCalendarHTMLMake
' 機能		:月間カレンダのＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 				 era  - (入)元号シンボル
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthCalendarHTMLMake(yyyy, mm, era) {
	var sBuf;

	sBuf = "";
	sBuf += "<table class='month-calendar-canvas'>";
	sBuf += "<tr><td>";
	sBuf += this.MonthCalendarBlockHTMLMake(yyyy, mm, era);
	sBuf += this.MonthFooterHTMLMake(yyyy, mm);
	sBuf += "</td></tr>";
	sBuf += "</table>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthCalendarBlockHTMLMake
' 機能		:月間カレンダのＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 				 era  - (入)元号シンボル
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthCalendarBlockHTMLMake(yyyy, mm, era) {
	var i, dt, sBuf, rowcnt;

	sBuf = this.MonthHeaderHTMLMake(yyyy, mm, era);
	sBuf += "<div class='month-calendar'>";
	sBuf += "<table class='month-calendar'>";
	sBuf += this.MonthTitleDayHTMLMake(yyyy, mm);
	this.m_MakeHTMLdate = new Date(yyyy, mm - 1, 1);
//alert(DateToString(this.m_MakeHTMLdate, "yyyy/mm/dd"));
	rowcnt = 0;
	do {
		sBuf += this.MonthWeekRowHTMLMake();
		rowcnt++;
	} while(this.m_MakeHTMLdate.getMonth() == (mm - 1))
	//ダミー行
	for (; rowcnt < 6; rowcnt++) {
		sBuf += "<tr>";
		for (i = 0; i < 7; i++) {
			sBuf += "<td class='dummy'>&nbsp;</td>";
		}
		sBuf += "</tr>";
	}
	sBuf += "</table>";
	sBuf += "</div>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthHeaderHTMLMake
' 機能		:月間カレンダヘッダー部のＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 				 era  - (入)元号シンボル
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthHeaderHTMLMake(yyyy, mm, era) {
	var dt, prvdt, nxtdt, SBuf, sSubPrev, sSubNext, sTitle;

	sBuf = "<div class='month-header'>";
	sBuf += "<table class='month-header'>";
	sBuf += "<tr>"
	switch(this.m_MonthTitlePattern) {
		case CALMON_TITLE_ONLY:					/* タイトルのみ */
			sBuf += this.MonthHeaderTitleOnlyHTMLMake(yyyy, mm);
			break;
		case CALMON_TITLE_MOVE:					/* 移動ボタン付（<< >>） */
			sBuf += this.MonthHeaderTitleMoveHTMLMake(yyyy, mm);
			break;
		case CALMON_TITLE_SELECT2:			/* コンボボックス（元号あり） */
			sBuf += this.MonthHeaderTitleSelect2HTMLMake(yyyy, mm, era);
			break;
		case CALMON_TITLE_SELECT:				/* コンボボックス（元号なし） */
		default:
			sBuf += this.MonthHeaderTitleSelectHTMLMake(yyyy, mm);
			break;
	}
	sBuf += "</tr>";
	sBuf += "</table>";
	sBuf += "</div>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthHeaderTitleOnlyHTMLMake
' 機能		:月間カレンダヘッダー部タイトルのＨＴＭＬ生成（タイトルのみ）
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthHeaderTitleOnlyHTMLMake(yyyy, mm) {
	var dt, SBuf, sTitle;

	sBuf = "";
	dt = new Date(yyyy, mm - 1, 1);
	sTitle = DateToString(dt, this.m_MonthTitleFormat);
	sBuf += "<th class='title'>" + sTitle + "</th>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthHeaderTitleMoveHTMLMake
' 機能		:月間カレンダヘッダー部タイトルのＨＴＭＬ生成（移動ボタン付（<< >>））
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthHeaderTitleMoveHTMLMake(yyyy, mm) {
	var dt, prvdt, nxtdt, SBuf, sSubPrev, sSubNext, sTitle;

	sBuf = "";
	dt = new Date(yyyy, mm - 1, 1);
	sTitle = DateToString(dt, this.m_MonthTitleFormat);
	if (this.m_ColumnCount == 1) {
		prvdt = getNthDate(dt, -1);
		if (IsRangeDate(this.m_sdate, this.m_edate, prvdt)) {
			sSubPrev = "MonthMoveButtonClick(-1)";
			sBuf += "<th class='move'><a class='move' href='javascript:void(0)' onclick='" + sSubPrev + "'><<</a></th>";
		} else {
			sBuf += "<th class='move'></th>";
		}
		sBuf += "<th class='title'>" + sTitle + "</th>";
		nxtdt = new Date(dt.getFullYear(), dt.getMonth() + 1, 1);
		if (IsRangeDate(this.m_sdate, this.m_edate, nxtdt)) {
			sSubNext = "MonthMoveButtonClick(1)";
			sBuf += "<th class='move'><a class='move' href='javascript:void(0)' onclick='" + sSubNext + "'>>></a></th>";
		} else {
			sBuf += "<th class='move'></th>";
		}
	} else {
		if (this.m_MakeMonthCount == 1) {
			prvdt = getNthDate(dt, -1);
			if (IsRangeDate(this.m_sdate, this.m_edate, prvdt)) {
				sSubPrev = "MonthMoveButtonClick(-1)";
				sBuf += "<th class='move'><a class='move' href='javascript:void(0)' onclick='" + sSubPrev + "'><<</a></th>";
			} else {
				sBuf += "<th class='move'></th>";
			}
			sBuf += "<th class='title'>" + sTitle + "</th>";
		} else if (this.m_MakeMonthCount == this.m_ColumnCount) {
			sBuf += "<th class='title'>" + sTitle + "</th>";
			nxtdt = new Date(dt.getFullYear(), dt.getMonth() + 1, 1);
			if (IsRangeDate(this.m_sdate, this.m_edate, nxtdt)) {
				sSubNext = "MonthMoveButtonClick(1)";
				sBuf += "<th class='move'><a class='move' href='javascript:void(0)' onclick='" + sSubNext + "'>>></a></th>";
			} else {
				sBuf += "<th class='move'></th>";
			}
		} else {
			sBuf += "<th class='title'>" + sTitle + "</th>";
		}
	}
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthHeaderTitleSelectHTMLMake
' 機能		:月間カレンダヘッダー部タイトルのＨＴＭＬ生成（コンボボックス）
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthHeaderTitleSelectHTMLMake(yyyy, mm) {
	var i, SBuf, sSubYYYY, sSubMM, tdt;

	sSubYYYY = "MonthSelYYYYonChange()";
	sSubMM = "MonthSelMMonChange()";
	sBuf = "";
	sBuf += "<th class='select'>";
	sBuf += "<select name='selYYYY' id='selYYYY' onchange='" + sSubYYYY + "'>";
	for (i = this.m_sdate.getFullYear(); i <= this.m_edate.getFullYear(); i++) {
		tdt = new Date(i, 0, 1);
		if (yyyy == i) {
			sBuf += "<option value='" + i + "' selected>" + i + "(" + DateToString(tdt, "wY") + ")年</option>";
		} else {
			sBuf += "<option value='" + i + "'>" + i + "(" + DateToString(tdt, "wY") + ")年</option>";
		}
	}
	sBuf += "</select>";
	sBuf += "<select name='selMM' id='selMM' onchange='" + sSubMM + "'>";
	for (i = 1; i <= 12; i++) {
		if (mm == i) {
			sBuf += "<option value='" + i + "' selected>" + i + "月</option>";
		} else {
			sBuf += "<option value='" + i + "'>" + i + "月</option>";
		}
	}
	sBuf += "</select>";
	sBuf += "</th>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthHeaderTitleSelect2HTMLMake
' 機能		:月間カレンダヘッダー部タイトルのＨＴＭＬ生成（コンボボックス元号付）
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 				 tera  - (入)元号シンボル
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthHeaderTitleSelect2HTMLMake(yyyy, mm, tera) {
	var i, SBuf, sSubERA, sSubERAYY, sSubERAMM, SPosEra, EPosEra, tdt, tyy, maxyy;

	sSubERA = "MonthSelERAonChange()";
	sSubERAYY = "MonthSelERAYYonChange()";
	sSubERAMM = "MonthSelERAMMonChange()";
	SPosEra = CALMON_ERA_SYMBOL.indexOf(getJapaneseYearSymbol(this.m_sdate), 0);
	EPosEra = CALMON_ERA_SYMBOL.indexOf(getJapaneseYearSymbol(this.m_edate), 0);
	sEra = CALMON_ERA_SYMBOL.substr(SPosEra, EPosEra + 1);
	tdt = new Date(yyyy, mm - 1, 1);
//alert(DateToString(tdt, "yyyy/mm/dd"));
	tyy = getJapaneseYear(tdt, tera);
	maxyy = getMaxEraYear(tera);
	sBuf = "";
	sBuf += "<th class='select'>";
	sBuf += "<select name='selERA' id='selERA' onchange='" + sSubERA + "'>";
	for (i = sEra.length - 1; i >= 0; i--) {
		era = sEra.substr(i, 1);
		if (era == tera) {
			sBuf += "<option value='" + era + "' selected>" + getJapaneseYearNameBySymbol(era) + "</option>";
		} else {
			sBuf += "<option value='" + era + "'>" + getJapaneseYearNameBySymbol(era) + "</option>";
		}
	}
	sBuf += "</select>";
	sBuf += "<select name='selERAYY' id='selERAYY' onchange='" + sSubERAYY + "'>";
	if (tyy == i) {
		sBuf += "<option value=1' selected >元年</option>";
	} else {
		sBuf += "<option value='1'>元年</option>";
	}
	for (i = 2; i <= maxyy; i++) {
		if (tyy == i) {
			sBuf += "<option value='" + i + "' selected>" + i + "年</option>";
		} else {
			sBuf += "<option value='" + i + "'>" + i + "年</option>";
		}
	}
	sBuf += "</select>";
	sBuf += "<select name='selERAMM' id='selERAMM' onchange='" + sSubERAMM + "'>";
	for (i = 1; i <= 12; i++) {
		if (mm == i) {
			sBuf += "<option value='" + i + "' selected>" + i + "月</option>";
		} else {
			sBuf += "<option value='" + i + "'>" + i + "月</option>";
		}
	}
	sBuf += "</select>";
	sBuf += "</th>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthTitleDayHTMLMake
' 機能		:月間カレンダ曜日表示部のＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthTitleDayHTMLMake() {
	var sBuf, i, w;

	sBuf = "<tr>";
	for (i = 0; i < 7; i++) {
		w = i + this.m_TopWeekday;
		if (w >= 7) { w -= 7; }
		switch(w) {
			case 0: sBuf += "<th class='sunday'>日</th>"; break;
			case 1: sBuf += "<th class='weekday'>月</th>"; break;
			case 2: sBuf += "<th class='weekday'>火</th>"; break;
			case 3: sBuf += "<th class='weekday'>水</th>"; break;
			case 4: sBuf += "<th class='weekday'>木</th>"; break;
			case 5: sBuf += "<th class='weekday'>金</th>"; break;
			case 6: sBuf += "<th class='saturday'>土</th>"; break;
		}
	}
	sBuf += "</tr>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthWeekRowHTMLMake
' 機能		:月間カレンダの日付行のＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:なし
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthWeekRowHTMLMake() {
	var sBuf, sSub, tdt, i, w, m;

	m = this.m_MakeHTMLdate.getMonth();
	sBuf = "<tr>";
	for (i = 0; i < 7; i++) {
		tdt = new Date(this.m_MakeHTMLdate);
		sSub = "SelectDate(" + tdt.getFullYear() + "," + m + " + 1, " + tdt.getDate() + ")";
		w = i + this.m_TopWeekday;
		if (w >= 7) { w -= 7; }
		if (tdt.getMonth() != m) {
			sBuf += "<td class='dummy'>&nbsp;</td>";
		} else if (tdt.getDay() != w) {
			sBuf += "<td class='dummy'>&nbsp;</td>";
		} else {
			if (this.m_DateSelect) {
				if (this.m_HolidayAccent && this.m_holiday_info.IsHoliday(tdt)) {
					if (IsSameDate(this.m_sysdate, tdt)) {
						if (this.m_HolidayToolTip) {
							sBuf += "<td class='today'><a class='date holidaycolor' title='" + this.m_holiday_info.getHolidayName(tdt) + "' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
						} else {
							sBuf += "<td class='today'><a class='date holidaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
						}
					} else {
						if (this.m_HolidayToolTip) {
							sBuf += "<td class='holiday'><a class='date holidaycolor' title='" + this.m_holiday_info.getHolidayName(tdt) + "' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
						} else {
							sBuf += "<td class='holiday'><a class='date holidaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
						}
					}
				} else if (tdt.getDay() == 0) {
					if (IsSameDate(this.m_sysdate, tdt)) {
						sBuf += "<td class='today'><a class='date sundaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
					} else {
						sBuf += "<td class='sunday'><a class='date sundaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
					}
				} else if (tdt.getDay() == 6) {
					if (IsSameDate(this.m_sysdate, tdt)) {
						sBuf += "<td class='today'><a class='date saturdaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
					} else {
						sBuf += "<td class='saturday'><a class='date saturdaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
					}
				} else {
					if (IsSameDate(this.m_sysdate, tdt)) {
						sBuf += "<td class='today'><a class='date weekdaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
					} else {
						sBuf += "<td class='weekday'><a class='date weekdaycolor' href='javascript:void(0)' onclick='" + sSub + "'>" + tdt.getDate() + "</a></td>";
					}
				}
			} else {
				if (this.m_HolidayAccent && this.m_holiday_info.IsHoliday(tdt)) {
					if (IsSameDate(this.m_sysdate, tdt)) {
						if (this.m_HolidayToolTip) {
							sBuf += "<td class='today holidaycolor' title='" + this.m_holiday_info.getHolidayName(tdt) + "'>" + tdt.getDate() + "</td>";
						} else {
							sBuf += "<td class='today holidaycolor'>" + tdt.getDate() + "</td>";
						}
					} else {
						if (this.m_HolidayToolTip) {
							sBuf += "<td class='holiday holidaycolor' title='" + this.m_holiday_info.getHolidayName(tdt) + "'>" + tdt.getDate() + "</td>";
						} else {
							sBuf += "<td class='holiday holidaycolor'>" + tdt.getDate() + "</td>";
						}
					}
				} else if (tdt.getDay() == 0) {
					if (IsSameDate(this.m_sysdate, tdt)) {
						sBuf += "<td class='today sundaycolor'>" + tdt.getDate() + "</td>";
					} else {
						sBuf += "<td class='sunday sundaycolor'>" + tdt.getDate() + "</td>";
					}
				} else if (tdt.getDay() == 6) {
					if (IsSameDate(this.m_sysdate, tdt)) {
						sBuf += "<td class='today saturdaycolor'>" + tdt.getDate() + "</td>";
					} else {
						sBuf += "<td class='saturday saturdaycolor'>" + tdt.getDate() + "</td>";
					}
				} else {
					if (IsSameDate(this.m_sysdate, tdt)) {
						sBuf += "<td class='today weekdaycolor'>" + tdt.getDate() + "</td>";
					} else {
						sBuf += "<td class='weekday weekdaycolor'>" + tdt.getDate() + "</td>";
					}
				}
			}
			this.m_MakeHTMLdate = getNthDate(tdt, 1);
		}
	}
	sBuf += "</tr>";
	return sBuf;
}

/*
'------------------------------------------------------------------------------
' 関数名	:YearTitlePattern
' 機能		:年間カレンダタイトル部の表示パターンを設定する
' 返り値	:なし
' 引き数	:iPNo - (入)パターン番号
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_YearTitlePattern(iPNo) {
	this.m_YearTitlePattern = iPNo;
}
/*
'------------------------------------------------------------------------------
' 関数名	:YearTitleFormat
' 機能		:年間カレンダタイトル部の表示フォーマットを設定する
' 返り値	:なし
' 引き数	:fmt - (入)表示フォーマット文字列
' 機能説明:なし
' 備考		:DateToString(date.js)を参照
*/
function CCalendar_YearTitleFormat(fmt) {
	this.m_YearTitleFormat = fmt;
}
/*
'------------------------------------------------------------------------------
' 関数名	:HolidayAccent
' 機能		:休日強調表示有無を設定する
' 返り値	:なし
' 引き数	:bln - (入)強調表示有:true 強調表示無:false
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_HolidayAccent(bln) {
	this.m_HolidayAccent = bln;
}
/*
'------------------------------------------------------------------------------
' 関数名	:HolidayToolTip
' 機能		:休日ツールチップ表示有無を設定する
' 返り値	:なし
' 引き数	:bln - (入)ツールチップ表示有:true ツールチップ表示無:false
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_HolidayToolTip(bln) {
	this.m_HolidayToolTip = bln;
}
/*
'------------------------------------------------------------------------------
' 関数名	:HolidayCaption
' 機能		:休日説明表示有無を設定する
' 返り値	:なし
' 引き数	:bln - (入)説明表示有:true 説明表示無:false
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_HolidayCaption(bln) {
	this.m_HolidayCaption = bln;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthDisplayCount
' 機能		:表示月数を設定する
' 返り値	:なし
' 引き数	:cnt - (入)表示月数
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthDisplayCount(cnt) {
	this.m_MonthDisplayCount = cnt;
}
/*
'------------------------------------------------------------------------------
' 関数名	:ColumnCount
' 機能		:表示列数を設定する
' 返り値	:なし
' 引き数	:cnt - (入)表示列数
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_ColumnCount(cnt) {
	this.m_ColumnCount = cnt;
}
/*
'------------------------------------------------------------------------------
' 関数名	:YearCalendarHTMLMake
' 機能		:年間カレンダのＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_YearCalendarHTMLMake(yyyy, mm) {
	var sBuf, col, dt;

	sBuf = "";
	this.m_MakeMonthCount = 1;
	col = this.m_ColumnCount;
	for (i = 0; i < this.m_MonthDisplayCount; i++, this.m_MakeMonthCount++) {
		if ((i % col) == 0) { sBuf += "<tr>"; }
			sBuf += "<td valign='top'>";
			dt = new Date(yyyy, mm - 1 + i, 1);
			sBuf += this.MonthCalendarHTMLMake(dt.getFullYear(), dt.getMonth() + 1);
			sBuf += "</td>";
		if ((i % col) == (col - 1)) { sBuf += "</tr>"; }
	}
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:YearHeaderHTMLMake
' 機能		:年間カレンダヘッダー部のＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_YearHeaderHTMLMake(yyyy, mm) {
	var dt, prvdt, nxtdt, SBuf, sSubPrev, sSubNext, sTitle;

	sBuf ="";
	sBuf += "<tr><td colspan='" + this.m_ColumnCount + "'>";
	sBuf += "<div class='year-header'>";
	sBuf += "<table class='year-header'>";
	sBuf += "<tr>"
	switch(this.m_YearTitlePattern) {
		case CALYEAR_TITLE_ONLY:					/* タイトルのみ */
			sBuf += this.YearHeaderTitleOnlyHTMLMake(yyyy, mm);
			break;
		case CALYEAR_TITLE_SELECT:				/* コンボボックス */
//			sBuf += this.YearHeaderTitleSelectHTMLMake(yyyy, mm);
			break;
		case CALYEAR_TITLE_MOVE:					/* 移動ボタン付 */
		default:
//			sBuf += this.YearHeaderTitleMoveHTMLMake(yyyy, mm);
			break;
	}
	sBuf += "</tr>";
	sBuf += "</table>";
	sBuf += "</div>";
	sBuf += "</td></tr>";
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:YearHeaderTitleOnlyHTMLMake
' 機能		:年間カレンダヘッダー部タイトルのＨＴＭＬ生成（タイトルのみ）
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_YearHeaderTitleOnlyHTMLMake(yyyy, mm) {
	var dt, SBuf, sTitle;

	sBuf = "";
	if (this.m_YearTitleFormat.length > 0) {
		dt = new Date(yyyy, mm - 1, 1);
		if ((mm == 1 || mm == 4) && this.m_MonthDisplayCount == 12) {
			sTitle = DateToString(dt, this.m_YearTitleFormat);
		} else {
			sTitle = DateToString(dt, this.m_YearTitleFormat);
			sTitle += "〜";
			dt = new Date(dt.getFullYear(), dt.getMonth() + this.m_MonthDisplayCount, 1);
			sTitle += DateToString(dt, this.m_YearTitleFormat);
		}
		sBuf += "<th class='title'>" + sTitle + "</th>";
	}
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:MonthFooterHTMLMake
' 機能		:月間カレンダフッター部のＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_MonthFooterHTMLMake(yyyy, mm) {
	var sBuf;

	sBuf = "";
	if (this.m_HolidayCaption) {
		sBuf += "<div class='month-footer'>";
		sBuf += "<table class='month-footer'>";
		sBuf += this.HolidayCaptionHTMLMake(yyyy, mm);
		sBuf += "</table>";
		sBuf += "</div>";
	}
	return sBuf;
}
/*
'------------------------------------------------------------------------------
' 関数名	:HolidayCaptionHTMLMake
' 機能		:月間カレンダの祝日説明部のＨＴＭＬ生成
' 返り値	:ＨＴＭＬ文字列
' 引き数	:yyyy - (入)西暦年
' 				 mm  - (入)月
' 機能説明:なし
' 備考		:なし
*/
function CCalendar_HolidayCaptionHTMLMake(yyyy, mm) {
	var sBuf, hlist, ahol, i, pos, dt, name;

	sBuf = "";
	hlist = this.m_holiday_info.getMonthHolidayList(yyyy, mm);
	if (hlist != "") {
		ahol = new Array();
		ahol = hlist.split("$");
		for (i = 0; i < ahol.length; i++) {
			pos = ahol[i].indexOf("|", 0);
			dt = ahol[i].substr(0, pos);
			name = ahol[i].substring(pos + 1);
			sBuf += "<tr>";
			sBuf += "<th class='explanation holidaycolor'>" + dt + "</th>";
			sBuf += "<td class='explanation holidaycolor'>" + name + "</td>";
			sBuf += "</tr>";
		}
	}
	return sBuf;
}
/*------<< EOF >>------*/

