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

// 曜日リスト
var WEEK_LIST = new Array("日", "月", "火", "水", "木", "金", "土");
// 月の日数リスト
var MONTH_LIST = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

// 最大移動月数
// 当月＋指定値の月まで移動可能
var MAX_MOVE_MONTH = 1;

// 休日区分
// 平日
var HOLIDAYKBN_NORMAL = 0;
// 休日
var HOLIDAYKBN_HOLIDAY = 1;
// 注意日
var HOLIDAYKBN_CAUTIONDAY = 2;

// 休日データファイル
var HOLIDAY_FILE1 = "http://www.inomatadental.com/itsutsubashi/data/holiday.txt";
// コメントデータファイル
var COMMENT_FILE1 = "http://www.inomatadental.com/itsutsubashi/data/comment.txt";
// データ登録PHPファイル
var REGIST_PHP_FILE1 = "./regist.php";

// データ読み込み失敗時のメッセージ
var STATUS_CODE = new Array();
STATUS_CODE["401"] = "認証失敗";
STATUS_CODE["403"] = "アクセスが許可されてません";
STATUS_CODE["404"] = "ファイルがありません";
STATUS_CODE["500"] = "内部エラー";

// 改行コード
var LF = String.fromCharCode(10);
// 区切り文字
var SEPARATOR = "<>";

// カレンダー表示エリア名
var SHOW_CAL_AREA1 = "showCalendar1";
// 休日データ保持用hidden名
var HDN_HOLIDAY_LIST1 = "holidayList1";
// コメントデータ保持用hidden名
var HDN_COMMENT_LIST1 = "comment1";
// フォーム名
var FORM_NAME1 = "calendarForm1";
// 休日データファイル名保持用hidden名
var HDN_HOLIDAY_FILE1 = "holidayFile1";
// コメントデータファイル名保持用hidden名
var HDN_COMMENT_FILE1 = "commentFile1";
// 年月保持用hidden名
var HDN_YM1 = "ym1";
// コメントデータ入力項目名
var TEXTAREA_COMMENT1 = "comment1";
// メッセージ表示項目名
var MESSAGE1 = "message1";

// 管理画面フラグ
// 1=管理画面、0=カレンダー表示
var admin_flg1 = 0;

//月のデータが存在するかを保持
var mdataf = 0;

// 初期処理
function initCalendar1(admin) {
	admin_flg1 = admin;

	date = new Date();

	// 当日の年月日を取得
	month = date.getMonth() + 1;
	if (month >= 10) {
		dataId = "" + date.getFullYear() + month;
	} else {
		dataId = "" + date.getFullYear() + "0" + month;
	}

	if (admin_flg1 == 1) {
		// 休日データファイル
		HOLIDAY_FILE1 = "../data/holiday.txt";
		// コメントデータファイル
		COMMENT_FILE1 = "../data/comment.txt";
	}

	return Try.these(
		// 休日データの内容を読み込む
		loadHolidayFile1(dataId),
		// コメントデータの内容を読み込む
		loadCommentFile1(dataId),
		function() {
			if (admin_flg1 == 1) {
				// 管理画面
				// ファイル名のセット
				$(HDN_HOLIDAY_FILE1).value = HOLIDAY_FILE1;
				$(HDN_COMMENT_FILE1).value = COMMENT_FILE1;

				$(HDN_YM1).value = dataId;
			}
		}
	);
}

function moveMonth1(showYear, showMonth) {
	date = new Date(showYear, showMonth, 1);

	// データ読み込み用のキーを取得
	month = date.getMonth() + 1;
	if (month >= 10) {
		dataId = "" + date.getFullYear() + month;
	} else {
		dataId = "" + date.getFullYear() + "0" + month;
	}

	if (admin_flg1 == 1) {
		// 休日データファイル
		HOLIDAY_FILE1 = "../data/holiday.txt";
		// コメントデータファイル
		COMMENT_FILE1 = "../data/comment.txt";
	}

	return Try.these(
		// 休日データの内容を読み込む
		loadHolidayFile1(dataId),
		// コメントデータの内容を読み込む
		loadCommentFile1(dataId),
		function() {
			if (admin_flg1 == 1) {
				// 管理画面
				// ファイル名のセット
				$(HDN_HOLIDAY_FILE1).value = HOLIDAY_FILE1;
				$(HDN_COMMENT_FILE1).value = COMMENT_FILE1;

				$(HDN_YM1).value = dataId;

				$(MESSAGE1).innerHTML = "";
			}
		}
	);
}

// カレンダー作成
function createCalendar1(showYear, showMonth) {
	date = new Date();

	// 当日の年月日を取得
	nowYear = date.getFullYear();
	nowMonth = date.getMonth();
	nowDay = date.getDate();

	if (!isNaN(showYear) && !isNaN(showMonth)) {
		// 月の指定がある場合、指定月で処理を行う
		date = new Date(showYear, showMonth, 1);
	}

	// カレンダーに表示する年月日を取得
	calYear = date.getFullYear();
	calMonth = date.getMonth();
	calDay = date.getDate();

	// うるう年の場合の2月の日数を取得
	calYear = (calYear < 2000) ? (1900 + calYear) : (calYear);
	if (((calYear % 4) == 0 && (calYear % 100) != 0) || (calYear % 400) == 0) {
		MONTH_LIST[1] = 29;
	}

	// 当月の1日をセット
	date = new Date(calYear, calMonth, 1);
	// 1日の曜日を取得
	week = date.getDay();
	// カレンダーの行数
//	calRow = 6;
	calRow = Math.ceil((week + MONTH_LIST[calMonth]) / 7);
	// 表のセル数分定義
	cellCnt = 7 * calRow;
	calCell = new Array(cellCnt);

	// カレンダーのセルの初期化
	for (i = 0; i < cellCnt; i++) {
		calCell[i] = "&nbsp;";
	}
	// セルに日付をセットする
	for (i = 0; i < MONTH_LIST[calMonth]; i++) {
		calCell[i + week] = i + 1;
	}

	calStr = "";
	calStr = calStr + "<table summary=\"IDC Schedule\">";
	calStr = calStr + "<tr class=\"header\">";

	// 比較文字列の取得
	if (nowMonth >= 10) {
		nowYM = "" + nowYear + nowMonth;
	} else {
		nowYM = "" + nowYear + "0" + nowMonth;
	}
	if (calMonth >= 10) {
		calYM = "" + calYear + calMonth;
	} else {
		calYM = "" + calYear + "0" + calMonth;
	}

	calStr = calStr + "<td colspan=\"7\">";
	if (nowYM < calYM) {
		calStr = calStr + "<div class=\"left_margin\"><img src=\"http://www.inomatadental.com/img/schedule_l_btn.gif\" alt=\"\" class=\"cursor_pointer\" onclick=\"moveMonth1(" + calYear + "," + (calMonth - 1) + ");\" /></div>";
	} else {
		calStr = calStr + "<div class=\"left_margin\"></div>";
	}
	calStr = calStr + "<div class=\"ym_title\">" + calYear + "年" + (calMonth + 1) + "月</div>";

	// 比較文字列の取得
	if (admin_flg1 == 1) {
		// 管理画面
		calStr = calStr + "<div class=\"right_margin\"><img src=\"http://www.inomatadental.com/img/schedule_r_btn.gif\" alt=\"\" class=\"cursor_pointer\" onclick=\"moveMonth1(" + calYear + "," + (calMonth + 1) + ");\" /></div>";
	} else {
		// カレンダー表示
		maxMonth = nowMonth + MAX_MOVE_MONTH;
		addYear = 0;
		while (maxMonth >= 12) {
			maxMonth = maxMonth - 12;
			addYear++;
		}
		maxYear = nowYear + addYear;
		if (maxMonth >= 10) {
			maxYM = "" + maxYear + maxMonth;
		} else {
			maxYM = "" + maxYear + "0" + maxMonth;
		}
		if ((calMonth + 1) > 12) {
			calYM = "" + (calYear + 1) + nowMonth;
		} else if ((calMonth + 1) >= 10) {
			calYM = "" + calYear + (calMonth + 1);
		} else {
			calYM = "" + calYear + "0" + (calMonth + 1);
		}
		if (maxYM >= calYM) {
			calStr = calStr + "<div class=\"right_margin\"><img src=\"http://www.inomatadental.com/img/schedule_r_btn.gif\" alt=\"\" class=\"cursor_pointer\" onclick=\"moveMonth1(" + calYear + "," + (calMonth + 1) + ");\" /></div>";
		} else {
			calStr = calStr + "<div class=\"right_margin\"></div>";
		}
	}
	calStr = calStr + "</td>";
	calStr = calStr + "</tr>";

	// 曜日の表示
	calStr = calStr + "<tr class=\"days\">";
	for (i = 0; i < 7; i++) {
		calStr = calStr + "<td >";
		calStr = calStr + WEEK_LIST[i];
		calStr = calStr + "</td>";
	}
	calStr = calStr + "</tr>";

	// 保持している休日リストを取得する
	holidayList = getHolidayList1();
	var mdatafl = mdataf

	// 日付の表示
	for (i = 0; i < calRow; i++) {
		// 行の開始
		calStr = calStr + "<tr class=\"days\">";
		for (j = 0; j < 7; j++) {
			// 日付の取得
			showDay = calCell[j + (i * 7)];
			// セルの作成
			if (!isNaN(showDay)) {
				calStr = calStr + "<td id=\"day" + showDay + "\" ";
			} else {
				calStr = calStr + "<td ";
			}
			// スタイルのセット
			classstr = "";

//			if (j == 0) {
//				// 休日
//				if (!isNaN(showDay)) {
//					if (mdatafl == 0){
//						classstr = classstr + "sun ";
//					}
//					if (admin_flg1 == 1) {
//						// 管理画面
//						classstr = classstr + "cursor_pointer";
//					}
//				} else {
//					// 空のセルの場合、マウスポインタのスタイルは指定しない
//					if (mdatafl == 0){
//						classstr = classstr + "sun";
//					}
//				}
//			} 
			//データ登録されていない月の場合の処理
			if (mdatafl == 0){
				if (j == 0){ //日曜
					if (!isNaN(showDay)) { //日付あり
						classstr = classstr + "sun";
						setHolidayD1(showDay);

					}
				}
			}
			// 平日
			if (mdatafl != 0){
				if (!isNaN(showDay)) {
					if (holidayList[showDay - 1] == HOLIDAYKBN_NORMAL) {
						//classstr = classstr + "normalday ";
					} else if (holidayList[showDay - 1] == HOLIDAYKBN_HOLIDAY) {
						classstr = classstr + "sun ";
					} else if (holidayList[showDay - 1] == HOLIDAYKBN_CAUTIONDAY) {
						classstr = classstr + "holiday ";
					}
					if (admin_flg1 == 1) {
						// 管理画面
						classstr = classstr + "cursor_pointer";
					}
				}
			}
			if (nowYear == calYear && nowMonth ==  calMonth && showDay == nowDay) {
				// 今日
				classstr = classstr + " today";
			}
			if (classstr.length > 0) {
				calStr = calStr + "class=\"" + classstr + "\" ";
			}
			// クリックイベントの追加
			if (!isNaN(showDay)) {
				if (admin_flg1 == 1) {
					// 管理画面
					calStr = calStr + "onclick=\"setHoliday1(" + showDay + ")\"";
				}
			}
			// tdの開始タグの閉じ括弧
			calStr = calStr + ">";
			// 日付セット
			calStr = calStr + showDay;
			calStr = calStr + "</td>";
		}
		calStr = calStr + "</tr>";
	}

	calStr = calStr + "</table>";

	return calStr;
}

function setHolidayD1(holiday) {
	// 保持している休日リストを取得する
	holidayList = getHolidayList1();

	if (holiday >= 1) {
		// 指定日の休日をセットする
		holidayList[holiday - 1] = HOLIDAYKBN_HOLIDAY;
		// 背景の変更
		//$("day" + holiday).addClassName("sun");
	}
	// 配列から区切り文字で結合した文字列に変換
	holidayList = holidayList.join(",");

	$(HDN_HOLIDAY_LIST1).value = holidayList;
}

function setHoliday1(holiday) {
	// 保持している休日リストを取得する
	holidayList = getHolidayList1();

	if (holiday >= 1) {
		// 指定日の休日をセットする
		if (holidayList[holiday - 1] == HOLIDAYKBN_NORMAL) {
			// 現在平日の場合、休日に変更
			holidayList[holiday - 1] = HOLIDAYKBN_HOLIDAY;
			// 背景の変更
			$("day" + holiday).addClassName("sun");
		} else if (holidayList[holiday - 1] == HOLIDAYKBN_HOLIDAY) {
			// 現在休日の場合、注意日に変更
			holidayList[holiday - 1] = HOLIDAYKBN_CAUTIONDAY;
			// 背景の変更
			$("day" + holiday).removeClassName("sun");
			$("day" + holiday).addClassName("holiday");
		} else if (holidayList[holiday - 1] == HOLIDAYKBN_CAUTIONDAY) {
			// 現在注意日の場合、平日に変更
			holidayList[holiday - 1] = HOLIDAYKBN_NORMAL;
			// 背景の変更
			$("day" + holiday).removeClassName("holiday");
		}
		// 配列から区切り文字で結合した文字列に変換
		holidayList = holidayList.join(",");
	}

	$(HDN_HOLIDAY_LIST1).value = holidayList;
}

// 保持している休日リストを配列で取得する
function getHolidayList1() {
	holidayList = $(HDN_HOLIDAY_LIST1).value;

	if (holidayList.length > 0) {
		holidayList = holidayList.split(",");
		mdataf = 1;
	} else {
		// 休日リストが入っていない場合、初期化する
		holidayList = "";
		for (i = 0; i < 31; i++) {
			if (i == 0) {
				holidayList = HOLIDAYKBN_NORMAL;
			} else {
				holidayList = holidayList + "," + HOLIDAYKBN_NORMAL;
			}
		}

		$(HDN_HOLIDAY_LIST1).value = holidayList;
		holidayList = holidayList.split(",");
		mdataf = 0;
	}

	return holidayList;
}

// 休日データの内容を読み込む
function loadHolidayFile1(pDataId){
	dataId = pDataId;

	new Ajax.Request(HOLIDAY_FILE1 + "?" + (new Date()), {
		method: "GET",
		onSuccess: getHolidaySuccess1,
		onFailure: getHolidayFailure1,
		onException: exception1
	});
}

// 取得した休日データの内容を表示する
function getHolidaySuccess1(httpObj){
	$(HDN_HOLIDAY_LIST1).value = "";
	dataList = httpObj.responseText.split(LF);
	for (i = 0; i < dataList.length; i++) {
		dataInfo = dataList[i].split(SEPARATOR);
		if (dataInfo[0] == dataId) {
			$(HDN_HOLIDAY_LIST1).value = dataInfo[1];
			break;
		}
	}
	// カレンダーの作成
	$(SHOW_CAL_AREA1).innerHTML = createCalendar1(dataId.substr(0, 4), dataId.substr(4, 2) - 1);
}

// 休日データの取得に失敗
function getHolidayFailure1(){
	$(HDN_HOLIDAY_LIST1).value = "";
	// カレンダーの作成
	$(SHOW_CAL_AREA1).innerHTML = createCalendar1(dataId.substr(0, 4), dataId.substr(4, 2) - 1);
}

// コメントデータの内容を読み込む
function loadCommentFile1(pDataId){
	dataId = pDataId;

	new Ajax.Request(COMMENT_FILE1 + "?" + (new Date()), {
		method: "GET",
		onSuccess: getCommentSuccess1,
		onFailure: getCommentFailure1,
		onException: exception1
	});
}

// 取得したコメントデータの内容を表示する
function getCommentSuccess1(httpObj){
	dataList = httpObj.responseText.split(LF);

	if (admin_flg1 == 1) {
		// 管理画面
		$(HDN_COMMENT_LIST1).value = "";
		for (i = 0; i < dataList.length; i++) {
			dataInfo = dataList[i].split(SEPARATOR);
			if (dataInfo[0] == dataId) {
				$(HDN_COMMENT_LIST1).value = dataInfo[1].unescapeHTML().gsub("<br />", "\n");
				break;
			}
		}
	} else {
		// カレンダー表示
		$(HDN_COMMENT_LIST1).innerHTML = "";
		for (i = 0; i < dataList.length; i++) {
			dataInfo = dataList[i].split(SEPARATOR);
			if (dataInfo[0] == dataId) {
				$(HDN_COMMENT_LIST1).innerHTML = dataInfo[1];
				break;
			}
		}
	}
}

// コメントデータの取得に失敗
function getCommentFailure1(){
	if (admin_flg1 == 1) {
		// 管理画面
		$(HDN_COMMENT_LIST1).value = "";
//		$(HDN_COMMENT_LIST1).value = "コメントデータの取得に失敗しました";
	} else {
		// カレンダー表示
		$(HDN_COMMENT_LIST1).innerHTML = "";
//		$(HDN_COMMENT_LIST1).innerHTML = "コメントデータの取得に失敗しました";
	}
}

// フォームの値を登録する
function registData1() {
	dataId = $(HDN_YM1).value;

	new Ajax.Request(REGIST_PHP_FILE1, {
		method: "POST",
		parameters: $(FORM_NAME1).serialize(),
		onSuccess: registSuccess1,
		onFailure: registFailure1,
		onException: exception1
	});
}

// フォームの値の登録
function registSuccess1(ajaxReq) {
	if (admin_flg1 == 1) {
		// 休日データファイル
		HOLIDAY_FILE1 = "../data/holiday.txt";
		// コメントデータファイル
		COMMENT_FILE1 = "../data/comment.txt";
	}

	return Try.these(
		// 休日データの内容を読み込む
		loadHolidayFile1(dataId),
		// コメントデータの内容を読み込む
		loadCommentFile1(dataId),
		function() {
			if (admin_flg1 == 1) {
				// 管理画面
				// ファイル名のセット
				$(HDN_HOLIDAY_FILE1).value = HOLIDAY_FILE1;
				$(HDN_COMMENT_FILE1).value = COMMENT_FILE1;

				$(HDN_YM1).value = dataId;

				$(MESSAGE1).innerHTML = "正常にデータを登録しました";
			}
		}
	);
}

// フォームの値の登録に失敗
function registFailure1(ajaxReq){
	$(MESSAGE1).innerHTML = "データの登録に失敗しました";
}

// 例外エラー
function exception1(ajaxReq, ex) {
	$(SHOW_CAL_AREA1).innerHTML = "エラーが発生しました<pre>" + ex.message + "</pre>";
}

