/* 
	* 
	* Calendar Object ver 1.0.7
	* Coded by Mikkun
	* Copyright(c) 2008 NAKKS Co., Ltd.
	* 
	* このJavaScriptソースの無料での配布・改変は自由です。
	* このJavaScriptソースを使用して発生したいかなる障害についても
	* 著作者ならびに著作権者は責任を負いません。
	* 
	* 改定履歴
	* ver 1.0.8 ブログエントリー年月日のDB読み込み（要 prototype.js）
	* ver 1.0.7 祝祭日のファイル読み込み（要 prototype.js）
	* ver 1.0.6 祝祭日の着色設定
	* ver 1.0.5 ナビゲータの表示設定, 表示可能最小年・表示可能最大年の設定
	* ver 1.0.4 今日の着色設定
	* ver 1.0.3 当月以外の日付の表示設定
	* ver 1.0.2 左端の曜日の設定
	* ver 1.0.1 土日の着色設定
	* ver 1.0.0 カレンダーの表示
	* 
	*/

// 祝祭日リスト（グローバル変数）
var holidayList = new Array;

// ブログの日付リスト（グローバル変数）
var blogDates = new Array();

// 営業日の日付リスト（グローバル変数）
var eigyoDates = new Array();

// 空室状況の日付リスト（グローバル変数）
var reserveDates = new Array();

// 管理システム用空室状況の日付リスト（グローバル変数）
var reserveStaffDates = new Array();

var reserveStat = new Array();
var reservePlan = new Array();

// カレンダーオブジェクト
function objCalendar(){
	
	// プロパティ
	var tmpDate = new Date();         // 表示年月を現在の年月に初期化
	this.y = tmpDate.getFullYear();   // 表示年
	this.m = tmpDate.getMonth();      // 表示月(実際の月 - 1)
	this.ym = 'ym';                   // 年月表示エレメント
	this.e = "";                      // 表示先エレメント(id属性で設定されたもの)
	this.waitImage = "";              // 処理中表示画像
	this.waitMessage = "";            // 処理中表示メッセージ
	this.weeklanguage = "en";         // 曜日の言語(en: 英語, jp:日本語)
	this.dispSaturday = false;        // true : 土曜日を着色, false : 着色しない
	this.dispSunday = false;          // true : 日曜日を着色, false : 着色しない
	this.monday = false;              // true : 月曜日を左端に配置, false : 日曜日を左端に配置
	this.dispOtherDate = false;       // true : 当月以外の日付を表示, false : 表示しない
	this.dispToday = false;           // true : 今日を着色して表示する, false : 表示しない
	this.dispNavigator = false;       // false : ナビゲータを表示しない, 'top' : 上部に表示
									  // 'middle' : 中段に表示, 'bottom' : 下部に表示
	this.minYear = 1971;              // 表示可能最小年(西暦4桁)
	this.maxYear = 2037;              // 表示可能最大年(西暦4桁)
	this.dispBlogLink = false;        // true : ブログのリンクの表示, false : 表示しない
	this.dispHoliday = false;         // true : 祝祭日を着色, false : 着色しない
	this.holiday = new objHoliday();  // 祝祭日オブジェクト
	this.dispEigyo = false;           // true : 営業日を着色, false : 着色しない
	this.eigyoDateNumber = -1;        // 表示日に該当する営業日の日付リストの配列番号
	this.dispReserve = false;         // true : 空室状況を表示, false : 表示しない
	this.dispReserveStaff = false;    // true : 空室状況を表示(管理システム用), false : 表示しない
	this.preDate = 0;                 // 予約可能前日数
	
	// メソッド
	this.disp = CalendarDisp;                            // カレンダーの表示
	this.drawDateCell = CalendarDrawDateCell;            // 日付セルの表示
	this.drawNavigatorRow  = CalendarDrawNavigatorRow;   // ナビゲータの行の表示
	this.drawNavigatorCell = CalendarDrawNavigatorCell;  // ナビゲータのセルの表示
	this.getBlogDates = CalendarGetBlogDates;            // ブログエントリー年月日のDB読み込みメソッド
	this.isBlogDate = CalendarIsBlogDate;                // 当日のブログ書き込みチェックメソッド
	this.getEigyoDates = CalendarGetEigyoDates;          // 営業年月日のDB読み込みメソッド
	this.isEigyoDate = CalendarIsEigyoDate;              // 営業年月日のチェックメソッド
	this.getReserveDates = CalendarGetReserveDates;      // 空室状況のDB読み込みメソッド
	this.isReserveDate = CalendarIsReserveDate;          // 空室状況のチェックメソッド
	this.getReserveStaffDates = CalendarGetReserveStaffDates;      // 空室状況のDB読み込みメソッド(管理システム用)
	this.isReserveStaffDate = CalendarIsReserveStaffDate;          // 空室状況のチェックメソッド(管理システム用)
	
}
// 表示メソッド
function CalendarDisp(){
	
	// 表示先エレメントが設定されていない場合はエラー表示して終了
	if(this.e==""){
		// エラー表示
		alert("ERROR : DispCalendar() 表示先エレメントが設定されていません")
		// エラー終了
		return false;
	}
	
	// 出力バッファの初期化
	var str = "";
	
	// 処理中表示
	if(this.waitImage != "" || this.waitMessage != ""){
		if(this.waitImage != ""){
			str += "<img src=\"" + this.waitImage + "\" ";
			str += "width=\"66\" height=\"66\" ";
			if(this.waitMessage != ""){
				str += "alt=\"" + this.waitMessage + "\" ";
				str += "title=\"" + this.waitMessage + "\" ";
			}
			str += "/>";
			if(this.waitMessage != ""){
				str += "<p>" + this.waitMessage + "</p>";
			}
		}
		document.getElementById(this.e).innerHTML = str;
	};
	
	// 表示年月の1日で日時オブジェクトを生成
	var now = new Date(this.y, this.m, 1);
	var current_year = now.getFullYear();  // 当年
	var current_month = now.getMonth();    // 当月
	var current_1st_week = now.getDay();   // 曜日
	
	// 当月の日数を取得
	var current_lastdate = getLastDate(current_year, current_month);
	
	// week_nameに曜日の名前を設定
	if(this.weeklanguage=='jp') var week_name = Array("日", "月", "火", "水", "木", "金", "土");
	else var week_name = Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
	
	// 今日の年月日の取得
	if(this.dispToday){
		var today = new Date();
		var todayYear  = today.getFullYear();
		var todayMonth = today.getMonth();
		var todayDate  = today.getDate();
	}
	
	// 出力バッファの初期化
	str = "";
	
	// 表の開始
	str += "<table><tbody>";
	
	// 上部ナビゲータ
	if(this.dispNavigator=='top'){
		str += this.drawNavigatorRow(current_year, current_month);
	}
	
	// 表のタイトル
	var ym = current_year + " 年 " + parseInt(current_month + 1) +" 月";
	$(this.ym).innerHTML = ym;
	
	// 中段ナビゲータ
	if(this.dispNavigator=='middle'){
		str += this.drawNavigatorRow(current_year, current_month);
	}
	
	// 項目見出し
	str += "<tr>";
	if(this.monday){
		// 月曜日から土曜日のセル
		for(var i=1; i<week_name.length; i++){
			// セルの開始
			str += "<th";
			// 曜日別のスタイル設定
			str += " class=\"";
			if(i==6){
				if(this.dispSaturday) str += "saturday";
				else str += "weekday";
			}else{
				str += "weekday";
			}
			str += "\"";
			// 曜日の表示
			str += ">" + week_name[i];
			// セルの終了
			str += "</th>";
		}
		// 日曜日のセル
		// セルの開始
		str += "<th";
		// 曜日別のスタイル設定
		str += " class=\"";
		if(this.dispSunday) str += "holiday";
		else str += "weekday";
		str += "\"";
		// 曜日の表示
		str += ">" + week_name[0];
		// セルの終了
		str += "</th>";
	}else{
		// すべての曜日のセル
		for(var i=0; i<week_name.length; i++){
			// セルの開始
			str += "<th";
			// 曜日別のスタイル設定
			str += " class=\"";
			if(i==0){
				if(this.dispSunday) str += "holiday";
				else str += "weekday";
			}else if(i==6){
				if(this.dispSaturday) str += "saturday";
				else str += "weekday";
			}else{
				str += "weekday";
			}
			str += "\"";
			// 曜日の表示
			str += ">" + week_name[i];
			// セルの終了
			str += "</th>";
		}
	}
	str += "</tr>";
	
	// 日付の作図開始
	str += "<tr>";
	
	// 当月前のセルの処理
	if(this.dispOtherDate){
		// 先月の日付を表示
		if(this.monday){
			var sp1 = current_1st_week - 1;
			if(sp1==-1) sp1=6;
		}else{
			var sp1 = current_1st_week;
		}
		// 先月の書き込みを取得 //
		var kd1 = new Date(this.y, this.m, -sp1);
		var kd2 = new Date(this.y, this.m, 0);
		if(this.dispBlogLink) this.getBlogDates(kd1, kd2);
		if(this.dispEigyo) this.getEigyoDates(kd1, kd2);
		if(this.dispReserve) this.getReserveDates(kd1, kd2);
		if(this.dispReserveStaff) this.getReserveStaffDates(kd1, kd2);
		
		for(var i = 0; i<sp1; i++){
			// 今月の 1 日から sp1 - i 日前の日付オブジェクトを作成
			var preDate = new Date(this.y, this.m, 1 - ( sp1 - i ));
			// 今日の着色表示処理
			if(this.dispToday){
				// 今日の年月日と書き込む日付が同じならば本日フラグを立てる
				if(
					todayYear==preDate.getFullYear() && 
					todayMonth==preDate.getMonth() && 
					todayDate==preDate.getDate()
				){
					var isToday = true;
				}else{
					var isToday = false;
				}
			}else{
				var preFlag = false;
			}
			// 日付の表示
			str += this.drawDateCell(preDate, false, isToday);
		}
	}else{
		// 月の先頭の余白
		if(this.monday){
			var sp1 = current_1st_week - 1;
			if(sp1==-1) sp1=6;
		}else{
			var sp1 = current_1st_week;
		}
		for(var i = 0; i<sp1; i++) str += "<td></td>";
	}
	
	// 当月の書き込みを取得 //
	var kd1 = new Date(this.y, this.m, 1);
	var kd2 = new Date(this.y, this.m+1, 0);
	//var kd2 = new Date(this.y, this.m, current_lastdate);
	if(this.dispBlogLink) this.getBlogDates(kd1, kd2);
	if(this.dispEigyo) this.getEigyoDates(kd1, kd2);
	if(this.dispReserve) this.getReserveDates(kd1, kd2);
	if(this.dispReserveStaff) this.getReserveStaffDates(kd1, kd2);
	
	// 当月の日数回繰り返し
	for(var i = 0; i<current_lastdate; i++){
		// 書き込む日付のオブジェクトを生成
		var current_date = new Date(current_year, current_month, i+1);
		// 書き込む日付の曜日を取得
		var current_week = current_date.getDay();
		// 今日の着色表示処理
		if(this.dispToday){
			// 現在の年月日と書き込む日付が同じならば本日フラグを立てる
			if(todayYear==current_year && todayMonth==current_month && todayDate==i+1){
				var isToday = true;
			}else{
				var isToday = false;
			}
		}else{
			var isToday = false;
		}
		// 日付の表示
		str += this.drawDateCell(current_date, true, isToday);
		// 次の行を開始
		if(this.monday){
			// 日曜日かつ最終日でないならば、行を終了して次の行を開始
			if(current_week==0 && i!=current_lastdate - 1) str += "</tr><tr>";
		}else{
			// 土曜日かつ最終日でないならば、行を終了して次の行を開始
			if(current_week==6 && i!=current_lastdate - 1) str += "</tr><tr>";
		}
	}
	
	// 最終日が行末ならばフラグを降ろす
	var current_date = new Date(current_year, current_month, current_lastdate);
	var flag = true;
	if(this.monday){
		if(current_date.getDay()==0) flag = false;
	}else{
		if(current_date.getDay()==6) flag = false;
	}
	
	// 当月後のセルの処理
	if(flag){
		if(this.dispOtherDate){
			// 翌月の日付を表示
			if(this.monday){
				var sp2 = 7 - current_week;
			}else{
				var sp2 = 7 - current_week - 1;
			}
			// 翌月の書き込みを取得 //
			var kd1 = new Date(this.y, this.m, current_lastdate + 1);
			var kd2 = new Date(this.y, this.m, current_lastdate + sp2 + 1);
			if(this.dispBlogLink) this.getBlogDates(kd1, kd2);
			if(this.dispEigyo) this.getEigyoDates(kd1, kd2);
			if(this.dispReserve) this.getReserveDates(kd1, kd2);
			if(this.dispReserveStaff) this.getReserveStaffDates(kd1, kd2);
			for(var i=0; i<sp2; i++){
				// 今月の 最終日から i 日後の日付オブジェクトを作成
				var nextDate = new Date(this.y, this.m, current_lastdate + i + 1);
				// 今日の着色表示処理
				if(this.dispToday){
					// 現在の年月日と書き込む日付が同じならば本日フラグを立てる
					if(
						todayYear==nextDate.getFullYear() && 
						todayMonth==nextDate.getMonth() && 
						todayDate==nextDate.getDate()
					){
						var isToday = true;
					}else{
						var isToday = false;
					}
				}else{
					var nextFlag = false;
				}
				// 日付の表示
				str += this.drawDateCell(nextDate, false, isToday);
			}
		}else{
			// 月の最後の余白
			if(this.monday){
				var sp2 = 7 - current_week;
			}else{
				var sp2 = 7 - current_week - 1;
			}
			for(var i=0; i<sp2; i++) str += "<td></td>";
		}
	}
	
	// 日付の作図終了
	str += "</tr>";
	
	// 下部ナビゲータ
	if(this.dispNavigator=='bottom'){
		str += this.drawNavigatorRow(current_year, current_month);
	}
	
	// 表の本体の終了
	str += "</tbody></table>";
	
	// 表示先エレメントに出力
// alert(eigyoDates);
	document.getElementById(this.e).innerHTML = str;
	
}
// 日付セルの表示メソッド
function CalendarDrawDateCell(o, f, t){
	
	// o : 日付オブジェクト
	// f : true = 当月, false = 当月以外
	// t : true = 今日, 今日以外
	
	var y = o.getFullYear();
	var m = o.getMonth();
	var d = o.getDate();
	
	// 祝祭日の判定
	var strHoliday = "";
	if(this.dispHoliday) strHoliday = this.holiday.isHoliday(o);
	
	// 営業日の判定
	var strEigyo = "";
	if(this.dispEigyo){
		if(this.isEigyoDate(o)){
			strEigyo = eigyoDates[this.eigyoDateNumber].description;
		}else{
			strEigyo = "通常営業しています";
		}
	}
	
	// 出力バッファの初期化
	var str = "";
	
	// セルの開始
	str += "<td";
	// ラベルに祝祭日と営業内容を設定
	if(strHoliday || strEigyo) str += " title=\"";
	if(strHoliday) str += strHoliday;
	if(strEigyo){
		if(strHoliday) str += " - ";
		str += strEigyo;
	}
	if(strHoliday || strEigyo) str += "\"";
	str += ">";
	
	str += "<div";
	var w = o.getDay();
	if(this.dispEigyo){
		if(this.isEigyoDate(o)){
			str += " class=\"";
			// 営業日
			if(this.eigyoDateNumber==-1){
				str += "eigyo_normal"; // 通常営業
			}else if(eigyoDates[this.eigyoDateNumber].category==2){
				str += "eigyo_partial"; // 部分営業
			}else{
				str += "eigyo_all"; // 全休
			}
			str += "\"";
		}
	}else{
		// 今日の場合の処理
		str += " class=\"";
		if(t) str += "today";     // 今日の場合
		else  str += "other_day"; // 今日以外の場合
		str += "\"";
	}
	str += ">";
	
	// スタイルクラス名の設定
	var w = o.getDay();
	var styleClass = "";
	if(f){ // 当月
		if(strHoliday){ // 祝祭日のスタイル設定
			styleClass += "holiday";
		}else{
			// 曜日別のスタイル設定
			if(w==0){
				if(this.dispSunday) styleClass += "holiday";
				else styleClass += "weekday";
			}else if(w==6){
				if(this.dispSaturday) styleClass += "saturday";
				else styleClass += "weekday";
			}else{
				styleClass += "weekday";
			}
		}
	}else{ // 当月以外
		if(strHoliday){ // 祝祭日のスタイル設定
			styleClass += "holiday2";
		}else{
			// 曜日別のスタイル設定
			if(w==0){
				if(this.dispSunday) styleClass += "holiday2";
				else styleClass += "weekday2";
			}else if(w==6){
				if(this.dispSaturday) styleClass += "saturday2";
				else styleClass += "weekday2";
			}else{
				styleClass += "weekday2";
			}
		}
	}
	
	// 日付の表示
	str += "<span class=\"" + styleClass + "\">";
	var flag = false;
	if(this.dispBlogLink && this.isBlogDate(o)) flag = true;
	if(flag){
		str += "<a href=\"/blog/index.php\" ";
		str += "onclick=\"getBlogEntries(" + y + ", " + m + ", " + d + "); return false;\">";
	}
	var d = o.getDate();
	str += d;
	if(flag) str += "</a>";
	str += "</span>";
	
	// 空室状況マークの表示
	if(this.dispReserve){
		var stat = this.isReserveDate(o);
		var img = '';
		if(stat=='3'){
			img = "../images/reserve/end.gif";
			str += "<br /><img src=\"" + img + "\" width=\"16\" height=\"16\" ";
			str += "alt=\"予約は終了しました\" ";
			str += "title=\"予約は終了しました\" ";
			str += "/>";
		}else if(stat=='2'){
			img = "../images/reserve/full.gif";
			str += "<br /><img src=\"" + img + "\" width=\"16\" height=\"16\" ";
			str += "alt=\"満室です\" ";
			str += "title=\"満室です\" ";
			str += "/>";
		}else if(stat=='1'){
			img = "../images/reserve/remain.gif";
			str += "<br /><img src=\"" + img + "\" width=\"16\" height=\"16\" ";
			str += "alt=\"空室は残りわずかです\" ";
			str += "title=\"空室は残りわずかです\" ";
			str += "style=\"cursor: pointer;\" ";
			str += "onclick=\"$('year').value=\'" + y + "'; ";
			str += "$('month').value='" + (parseInt(m) + 1) + "'; ";
			str += "$('date').value='" + d + "'; ";
			str += "if(document.frmInput.roomtype[0].checked==false){";
			// str += "if($('roomtype').options[$('roomtype').selectedIndex].value!=0){";
			str += "$('frmInput').submit();";
			str += "}else{";
			str += "alert('お部屋タイプを選択してください');";
			str += "}";
			str += "\" />";
		}else{
			img = "../images/reserve/free.gif";
			str += "<br /><img src=\"" + img + "\" width=\"16\" height=\"16\" ";
			str += "alt=\"空室があります\" ";
			str += "title=\"空室があります\" ";
			str += "style=\"cursor: pointer;\" ";
			str += "onclick=\"$('year').value='" + y + "'; ";
			str += "$('month').value='" + (parseInt(m) + 1) + "'; ";
			str += "$('date').value='" + d + "'; ";
			str += "if(document.frmInput.roomtype[0].checked==false){";
			str += "$('frmInput').submit();";
			str += "}else{";
			str += "alert('お部屋タイプを選択してください');";
			str += "}";
			str += "\" />";
		}
	}
	
	// 空室状況マークの表示(管理システム用)
	if(this.dispReserveStaff){
		var stat = this.isReserveStaffDate(o);
		var y = o.getFullYear();
		var m = parseInt(o.getMonth()) + 1;
		var d = o.getDate();
		var img = '';
		if(stat=='2'){
			img = "../admin/images/reserve/full.gif";
			str += "<br /><img src=\"" + img + "\" width=\"20\" height=\"12\" ";
			str += "alt=\"満室です\" ";
			str += "title=\"満室です\" ";
			str += "style=\"cursor: pointer;\" ";
			str += "onclick=\"dispReserveList(" + y +", " + m + ", " + d + ");\"";
			str += "/>";
		}else if(stat=='1'){
			img = "../admin/images/reserve/remain.gif";
			str += "<br /><img src=\"" + img + "\" width=\"20\" height=\"12\" ";
			str += "alt=\"空室は残りわずかです\" ";
			str += "title=\"空室は残りわずかです\" ";
			str += "style=\"cursor: pointer;\" ";
			str += "onclick=\"dispReserveList(" + y +", " + m + ", " + d + ");\"";
			str += "/>";
		}else{
			img = "../admin/images/reserve/free.gif";
			str += "<br /><img src=\"" + img + "\" width=\"20\" height=\"12\" ";
			str += "alt=\"空室があります\" ";
			str += "title=\"空室があります\" ";
			str += "style=\"cursor: pointer;\" ";
			str += "onclick=\"dispReserveList(" + y +", " + m + ", " + d + ");\"";
			str += "/>";
		}
	}
	
	// セルの終了
	str += "</div>";
	str += "</td>";
	
	// 出力バッファを返す
	return str;
	
}
// ブログエントリー年月日のDB読み込みメソッド (カレンダーオブジェクト)
function CalendarGetBlogDates(kd1, kd2){
	
	// DBからデータを読み込む Ajax オブジェクト
	var y  = kd1.getFullYear();
	var m  = parseInt(kd1.getMonth()) + 1
	var d1 = kd1.getDate();
	var d2 = kd2.getDate();
	var params = 'y=' + encodeURIComponent(y);
	params += '&m=' + encodeURIComponent(m);
	params += '&d1=' + encodeURIComponent(d1);
	params += '&d2=' + encodeURIComponent(d2);
// alert(params);
	var ssl_url = "";
	if(location.href.match(/^https:\/\//)){
		ssl_url = "https://ssl41.heteml.jp/nakksoffice2/_nest-wgt";
	}
	new Ajax.Request(
		ssl_url + '/blog/getblogdates.php',
		{
			asynchronous: false,
			method: 'get',
			onComplete: getResponse,
			parameters: params
		}
	);
	
	// 読み込み成功時の処理
	function getResponse(req){
		// 配列をクリア
		blogDates.length = 0;
		// ブログエントリーリストにデータを代入
		var str = decodeURIComponent(req.responseText);
// alert(str);
		eval(str);
	}
	
	// 読み込み失敗時の処理
	function getError(req){
		alert(req.responseText);
	}
	
}
// 当日のブログ書き込みチェックメソッド (カレンダーオブジェクト)
function CalendarIsBlogDate(o){
	var flag = false;
	for(var i=0; i<blogDates.length; i++){
		if(
			blogDates[i].getFullYear()==o.getFullYear() &&
			blogDates[i].getMonth()==o.getMonth() &&
			blogDates[i].getDate()==o.getDate()
		){
			flag = true;
			break;
		}
	}
	return flag;
}
// 営業年月日のDB読み込みメソッド (カレンダーオブジェクト)
function CalendarGetEigyoDates(kd1, kd2){
	
	// DBからデータを読み込む Ajax オブジェクト
	var y  = kd1.getFullYear();
	var m  = parseInt(kd1.getMonth()) + 1
	var d1 = kd1.getDate();
	var d2 = kd2.getDate();
	var params = 'y=' + encodeURIComponent(y);
	params += '&m=' + encodeURIComponent(m);
	params += '&d1=' + encodeURIComponent(d1);
	params += '&d2=' + encodeURIComponent(d2);
// alert(params);
	var ssl_url = "";
	if(location.href.match(/^https:\/\//)){
		ssl_url = "https://ssl41.heteml.jp/nakksoffice2/_nest-wgt";
	}
	new Ajax.Request(
		ssl_url + '/parts/geteigyodates.php',
		{
			asynchronous: false,
			method: 'get',
			onComplete: getResponse,
			parameters: params
		}
	);
	
	// 読み込み成功時の処理
	function getResponse(req){
		// 配列をクリア
		eigyoDates.length = 0;
		// 営業日リストにデータを代入
		var str = decodeURIComponent(req.responseText);
//alert(str);
		eval(str);
//alert(eigyoDates.length);
	}
	
	// 読み込み失敗時の処理
	function getError(req){
		alert(req.responseText);
	}
	
}
// 当日の営業日チェックメソッド (カレンダーオブジェクト)
function CalendarIsEigyoDate(o){
	var flag = false;
	this.eigyoDateNumber = -1;
	for(var i=0; i<eigyoDates.length; i++){
		if(
			eigyoDates[i].getFullYear()==o.getFullYear() &&
			eigyoDates[i].getMonth()==o.getMonth() &&
			eigyoDates[i].getDate()==o.getDate()
		){
			this.eigyoDateNumber = i;
			flag = true;
			break;
		}
	}
	return flag;
}

// 空室状況のDB読み込みメソッド (カレンダーオブジェクト)
function CalendarGetReserveDates(kd1, kd2){
	
	// DBからデータを読み込む Ajax オブジェクト
	var y  = kd1.getFullYear();
	var m  = parseInt(kd1.getMonth()) + 1
	var d1 = kd1.getDate();
	var d2 = kd2.getDate();
	var p  = $('plan').value;
	var t  = 0;
	var n  = document.frmInput.roomtype.length;
	for(var i=0;i<n;i++){
		if(document.frmInput.roomtype[i].checked){
			t = document.frmInput.roomtype[i].value;
			break;
		}
	}
	// var t = $('roomtype').options[$('roomtype').selectedIndex].value;
	var params = 'y=' + encodeURIComponent(y);
	params += '&m=' + encodeURIComponent(m);
	params += '&d1=' + encodeURIComponent(d1);
	params += '&d2=' + encodeURIComponent(d2);
	params += '&p=' + encodeURIComponent(p);
	params += '&t=' + encodeURIComponent(t);
// alert(params);
	var ssl_url = "";
	if(location.href.match(/^https:\/\//)){
		ssl_url = "https://ssl41.heteml.jp/nakksoffice2/_nest-wgt";
	}
	new Ajax.Request(
		ssl_url + '/parts/getreservedates.php',
		{
			asynchronous: false,
			method: 'get',
			onComplete: getResponse,
			parameters: params
		}
	);
	
	// 読み込み成功時の処理
	function getResponse(req){
		// 配列をクリア
		reserveDates.length = 0;
		reserveStat.length = 0;
		// 空室情報リストにデータを代入
		var str = decodeURIComponent(req.responseText);
		eval(str);
	}
	
	// 読み込み失敗時の処理
	function getError(req){
		alert(req.responseText);
	}
	
}
// 当日の空室状況チェックメソッド (カレンダーオブジェクト)
function CalendarIsReserveDate(o){
	var flag = false;
	for(var i=0; i<reserveDates.length; i++){
		if(
			reserveDates[i].getFullYear()==o.getFullYear() &&
			reserveDates[i].getMonth()==o.getMonth() &&
			reserveDates[i].getDate()==o.getDate()
		){
			return reserveStat[i];
			break;
		}
	}
}

// 空室状況のDB読み込みメソッド(管理システム用) (カレンダーオブジェクト)
function CalendarGetReserveStaffDates(kd1, kd2){
	
	// DBからデータを読み込む Ajax オブジェクト
	var y  = kd1.getFullYear();
	var m  = parseInt(kd1.getMonth()) + 1
	var d1 = kd1.getDate();
	var d2 = kd2.getDate();
	var t = 0;
	var params = 'y=' + encodeURIComponent(y);
	params += '&m=' + encodeURIComponent(m);
	params += '&d1=' + encodeURIComponent(d1);
	params += '&d2=' + encodeURIComponent(d2);
	params += '&t=' + encodeURIComponent(t);
// alert(params);
	var ssl_url = "";
	if(location.href.match(/^https:\/\//)){
		ssl_url = "https://ssl41.heteml.jp/nakksoffice2/_nest-wgt";
	}
	new Ajax.Request(
		ssl_url + '/parts/getreservestaffdates.php',
		{
			asynchronous: false,
			method: 'get',
			onComplete: getResponse,
			parameters: params
		}
	);
	
	// 読み込み成功時の処理
	function getResponse(req){
		// 配列をクリア
		reserveStaffDates.length = 0;
		// 空室情報リストにデータを代入
		var str = decodeURIComponent(req.responseText);
//alert(str);
		eval(str);
	}
	
	// 読み込み失敗時の処理
	function getError(req){
		alert(req.responseText);
	}
	
}
// 当日の空室状況チェックメソッド(管理システム用) (カレンダーオブジェクト)
function CalendarIsReserveStaffDate(o){
	var flag = false;
	for(var i=0; i<reserveStaffDates.length; i++){
		if(
			reserveStaffDates[i].getFullYear()==o.getFullYear() &&
			reserveStaffDates[i].getMonth()==o.getMonth() &&
			reserveStaffDates[i].getDate()==o.getDate()
		){
			return reserveStat[i];
			break;
		}
	}
}

// ナビゲータの行の表示メソッド (カレンダーオブジェクト)
function CalendarDrawNavigatorRow(y, m){
	
	// y : カレント年
	// m : カレント月
	
	// 出力バッファの初期化
	var str = "";
	
	str += "<tr><th class=\"navi\" colspan=\"7\"><table><tbody><tr>"; // 行の開始
	str += this.drawNavigatorCell("prevYear",  "前年", y, m, -12);    // 前年セルの表示
	str += this.drawNavigatorCell("prevMonth", "前月", y, m, -1);     // 前月セルの表示
	var now = new Date();                                             // 今月セルの表示
	str += this.drawNavigatorCell("nowMonth",  "今月", now.getFullYear(), now.getMonth(), 0);
	str += this.drawNavigatorCell("nextMonth", "翌月", y, m, 1);      // 翌月セルの表示
	str += this.drawNavigatorCell("nextYear",  "翌年", y, m, 12);     // 翌年セルの表示
	str += "</tr></tbody></table></th></tr>";                         // 行の終了
	
	// 出力バッファを返す
	return str;
	
}
// ナビゲータのセルの表示メソッド (カレンダーオブジェクト)
function CalendarDrawNavigatorCell(e, s, y, m, v){
	
	// e : エレメント名
	// s : 表示文字列
	// y : カレント年
	// m : カレント月
	// v : 移動月数
	
	// 移動年月の算出
	var moveDate = new Date(y, m+v, 1);
	var vy = moveDate.getFullYear();
	var vm = moveDate.getMonth();
	
	// 出力バッファの初期化
	var str = "";
	// セルの表示開始
	str += "<td id=\"" + e + "\" ";
	// 表示範囲内の処理
	if(vy>=this.minYear && vy<=this.maxYear){
		// スタイルの設定
		str += "class=\"navLink\" ";
		// イベント処理
		str += "onclick=\"var calendar = new objCalendar();";
		str += "calendar.y = " + vy + ";";
		str += "calendar.m = " + vm + ";";
		str += "calendar.e = '" + this.e + "';";
		str += "calendar.dispSaturday = " + this.dispSaturday + ";";
		str += "calendar.dispSunday = " + this.dispSunday + ";";
		str += "calendar.monday = " + this.monday + ";";
		str += "calendar.dispOtherDate = " + this.dispOtherDate + ";";
		str += "calendar.dispToday = " + this.dispToday + ";";
		str += "calendar.dispNavigator = '" + this.dispNavigator + "';";
		str += "calendar.minYear = " + this.minYear + ";";
		str += "calendar.maxYear = " + this.maxYear + ";";
		str += "calendar.dispHoliday = " + this.dispHoliday + ";";
		str += "calendar.dispBlogLink = " + this.dispBlogLink + ";";
		str += "calendar.dispEigyo = " + this.dispEigyo + ";";
		str += "calendar.dispReserve = " + this.dispReserve + ";";
		str += "calendar.dispReserveStaff = " + this.dispReserveStaff + ";";
		str += "calendar.disp();\" ";
		str += "onmouseover=\"document.getElementById('" + e + "').className = ";
		str += "'navLinkMouseOver';\" ";
		str += "onmouseout=\"document.getElementById('" + e + "').className = ";
		str += "'navLink';\"";
	}else{
		// スタイルの設定
		str += "class=\"navLinkDisabled\" ";
	}
	// セルの表示終了
	str += ">" + s + "</td>";
	
	// 出力バッファを返す
	return str;
	
}
// 祝祭日オブジェクト
function objHoliday(){
	
	// プロパティ
	this.holidayList = Array();                    // 祝祭日リスト
	
	// メソッド
	this.readHolidayFile = HolidayReadHolidayFile; // 祝祭日ファイルのリード
	this.isHoliday       = HolidayIsHoliday;       // 祝祭日の判定
	
	// 初期化処理
	this.readHolidayFile(); // 祝祭日ファイルからデータを読み込む
	
}

// 祝祭日ファイルのリード (祝祭日オブジェクト)
function HolidayReadHolidayFile(){
	
	// 祝祭日ファイルが読み込み済みなら何もしない
	// if($('holiday_responce').innerHTML!="") return;
	if(holidayList!="") return;
	
	// holidays.json からデータを読み込む Ajax オブジェクト
	var ssl_url = "";
	if(location.href.match(/^https:\/\//)){
		ssl_url = "https://ssl41.heteml.jp/nakksoffice2/_nest-wgt";
	}
	new Ajax.Request(
		ssl_url + '/scripts/holidays.json',
		{ asynchronous: false, method: 'get', onComplete: getResponse, onFailure: getError }
	);
	
	// 読み込み成功時の処理
	function getResponse(req){
		// 祝祭日リストにデータを代入
		holidayList = eval(req.responseText);
	}
	
	// 読み込み失敗時の処理
	function getError(req){
		alert(req.responseText);
	}
	
}

// 祝祭日の判定メソッド (祝祭日オブジェクト)
function HolidayIsHoliday(o){
	
	// o : 日付オブジェクト
	
	// 日付オブジェクトの指定がない場合は今日の日付オブジェクトを作成
	if(!o) var o = new Date();
	
	// 判定する年月日のタイムスタンプ(1970年1月1日からの経過日数)
	var timestamp = Math.floor(o.getTime() / (24 * 3600 * 1000));
	
	// リストの数回繰り返し
	for(var i=0; i<holidayList.length; i++){
		// 祝祭日の判定
		if(timestamp == holidayList[i].timestamp){
			return holidayList[i].name; // 祝祭日の名前を返す
		}
	}
	
}

// 月の日数を取得する関数
function getLastDate(y, m){
	
	// y : 西暦(4桁)
	// m : 月から 1 を引いた数
	
	var today = new Date();               // 本日の日付オブジェクト
	if(isNaN(y)) y = today.getFullYear(); // 西暦の指定がない場合は本年を判定する
	if(isNaN(m)) m = today.getMonth();    // 月の指定がない場合は今月を判定する
	
	var lastdates = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var lastdate = lastdates[m];
	
	if(isLeapYear(y) && m==1) lastdate++; // 当月がうるう年の２月ならば１日増やす
	
	return lastdate;                      // 当月の日数を返す
	
}
// うるう年判定関数
function isLeapYear(y){
	
	// y : 西暦(4桁)
	
	var today = new Date();               // 本日の日付オブジェクト
	if(isNaN(y)) y = today.getFullYear(); // 西暦の指定がない場合は本年を判定する
	
	// うるう年の判定
	var f4, f100, f400;
	var leap0 = y % 4;
	var leap1 = y % 100;
	var leap2 = y % 400;
	if(leap0 == 0){ f4   = 1; }else{ f4   = 0; }
	if(leap1 == 0){ f100 = 1; }else{ f100 = 0; }
	if(leap2 == 0){ f400 = 1; }else{ f400 = 0; }
	if(f4 == 1 && f400 == 1 || f4 == 1 && f100 == 0 ) return true;
	else return false;
	
}

