﻿//-----------------------------------------------------------------
// イベントカレンダー
// 作成日：2009.03.17
//-----------------------------------------------------------------
HTTP_ROOT = location.protocol +"//"+ location.hostname + "/";
var g_AryHoliday_year = new Array();
var g_AryHoliday_month = new Array();
var g_AryHoliday_day = new Array();
var g_year;
var g_month;
var g_day;
var g_xml;
var g_strItemDir = "calendar_files/";
// 詳細画面URL
var add = HTTP_ROOT + "detail.php?id=";
//ターゲットウィンド
var reWind = "target = 'targetW'";

function loadDataFile(fName)
{
//	window.alert("loadDataFile");
//	new Ajax.Request(fName, { method: 'get', asynchronous: 'false', onComplete: displayData });
	new Ajax.Request(fName, { method: 'get', onComplete: displayData });
}

function displayData(httpObj)
{
//	parseTabText(httpObj.responseText);
//	window.alert("displayData");
	parseXML(httpObj.responseXML);

	var now = new Date();
	var dValue = document.getElementById("dValue");
	var search_flag;

	dValue.innerHTML = (new Date(g_year, g_month-1, 1)).getTime();
	var last_date = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
	var editMsg;

	// うるう年計算
	if( g_month == 2 ){
		if( g_year % 4 == 0 ){
			if( ( g_year % 100 == 0 ) && ( g_year % 400 != 0 ) ){
			}else{
				last_date[1] = 29;
			}
		}
	}

	editMsg = "";
	editMsg += "<div class='month'>\n";
	editMsg += "<p class='calendar_title'><a href='"+ HTTP_ROOT + "calendar_l.php?year="+ g_year +"&month="+ g_month +"'><b>イベントカレンダー</b><br /><img src='"+ HTTP_ROOT + g_strItemDir +"img/to_event.png' align='absmiddle' /></a></p>\n";
	editMsg += "<p><a class='arrow_l' href='javascript:carenda(1)'><img src='"+ HTTP_ROOT + g_strItemDir +"img/left.gif' /></a> <font class='date'>　　"  + g_year + "年<span class='span_month'>" + g_month + "月</span>　　</font><a class='arrow_r' href='javascript:carenda(2)'><img src='"+ HTTP_ROOT + g_strItemDir +"img/right.gif' /></a></p></div>\n";
	editMsg += "<div class='cl'><table cellspacing='0' summary='layouttable'>\n";
	editMsg += "<tr class='day'><td class='sun'>日</td>\n";
	editMsg += "<td>月</td><td>火</td><td>水</td><td>木</td><td>金</td>\n";
	editMsg += "<td class='sat'>土</td></tr>\n";



	for (dayIndex = 0; dayIndex < (new Date(g_year, g_month-1, 1)).getDay(); dayIndex++){
		switch(dayIndex){
			case 0: editMsg += "<tr><td class='sun'>&nbsp</td>\n"; break;
			default:editMsg += "<td>&nbsp</td>\n"; break;
		}
	}

	for (i = 1; i <= last_date[ g_month - 1 ]; i++)
	{
		var tagObj = g_xml.getElementsByTagName("e_" + g_year + "_" + g_month + "_" + i);

		if( dayIndex == 0 ){
			editMsg += "<tr>";
		}
		// 本日の処理
		if( i == g_day ){

			if( 0 < tagObj.length )
			{
				editMsg += "<td><b><a href='javascript:listResult("+ i +")' >" + i + "</a></b></td>\n";
			}else{
				editMsg += "<td><b>" + i + "</b></td>\n";
			}

		}else{

			if( 0 < tagObj.length )
			{
				editMsg += "<td><a href='javascript:listResult("+ i +")'>" + i + "</a></td>\n";
			}else{
				editMsg += "<td>" + i + "</td>\n";
			}
		}
		if(dayIndex == 6){
			editMsg += "</tr>\n";
		}
		dayIndex++; dayIndex %= 7;

	}




/*

		if( dayIndex == 0 ){
			editMsg += "<tr>";
		}
		// 本日の処理
		if(i == g_day ){
			switch(dayIndex){
				case 0: editMsg += "<td class='sun'><B>" + i + "</B></td>\n"; break;
				default:	// 1-6(Mon-Sat)
						search_flag = 0;
						for (j = 0; j < g_AryHoliday_year.length; j++) {
						// 表示しているカレンダーと休日データの年月が同じ
							if (g_year == g_AryHoliday_year[j] && g_month == g_AryHoliday_month[j]) {
								if (i == g_AryHoliday_day[j]) {
									editMsg += "<td class='sun'><B>" + i + "</B></td>\n";
									search_flag = 1; break;
								}
							}
						}
						if (search_flag) { break; }
						if (dayIndex == 6) {
							editMsg += "<td class='sat'><td><B>" + i + "</B></td>\n";
						} else {
							editMsg += "<td><B>" + i + "</B></td>\n"; break;
						}
						break;
			}
		}else{
			switch(dayIndex){
				case 0: editMsg += "<td class='sun'>" + i + "</td>\n"; break;
				default:	// 1-6(Mon-Sat)
						search_flag = 0;
						for (j = 0; j < g_AryHoliday_year.length; j++) {
						// 表示しているカレンダーと休日データの年月が同じ
							if (g_year == g_AryHoliday_year[j] && g_month == g_AryHoliday_month[j]) {
								if (i == g_AryHoliday_day[j]) {
									editMsg += "<td class='sun'>" + i + "</td>\n";
									search_flag = 1; break;
								}
							}
						}

						if (search_flag) { break; }
						if (dayIndex == 6) {
							editMsg += "<td class='sat'>" + i + "</td>\n"; break;
						} else {
							editMsg += "<td>" + i + "</td>\n"; break;
						}
						break;
			}
		}
		if(dayIndex == 6){
			editMsg += "</tr>\n";
		}
		dayIndex++; dayIndex %= 7;
	}
*/
	editMsg += "</table>\n";
	editMsg += "</div>\n";

	//当月の場合は本日のイベント表示
	if( g_month == now.getMonth() + 1 )
	{
		listResult( now.getDate() );
	}
	

	document.getElementById("calendar").innerHTML = editMsg;
}

//日付をクリック　イベント名表示
function listResult(i)
{
    var editMsg2 = "";
	var tagObj = g_xml.getElementsByTagName("e_" + g_year + "_" + g_month + "_" + i);
	var nID = 0;

    editMsg2 += "<table>";
	for(j = 0; j < tagObj.length; j++)
	{
        var strMonth = "";
        var strDay   = "";
		// 月日が1桁の時、10の位に0をつける。
		if( g_month < 10 )
		{
            strMonth = "0" + g_month;
		}
		else
		{
            strMonth = g_month;
		}
        if( i < 10 )
        {
            strDay = "0" + i;
        }
        else
        {
            strDay = i;
        }
		nID =tagObj[j].childNodes[0].firstChild.nodeValue;
		var strA = "<a href='"+ add + nID +"' onclick='openEx("+ nID + "); return false;'>";

        editMsg2 += "<tr>";
        editMsg2 += "<td>";
        editMsg2 += strA + g_year + "." +  strMonth + "." + strDay + "</a>";
        editMsg2 += "</td>";

		//イベント名を抽出・表示
		/*
		for(k = 1; k < tagObj[j].childNodes.length; k++)
		{
			editMsg2 += tagObj[j].childNodes[k].firstChild.nodeValue ;
		}
		*/
        editMsg2 += '<td style="padding-left:0.5em;">';
		editMsg2 += strA + tagObj[j].childNodes[1].firstChild.nodeValue + "</a>";
        editMsg2 += "</td>";
        editMsg2 += "</tr>";
	}
    editMsg2 += "</table>";
	document.getElementById("result").innerHTML = editMsg2;
}

function parseXML(XML)
{
	g_xml=XML;
}

// CSVファイルを解析して表示
function parseTabText(tabText)
{
	var CR = String.fromCharCode(13);	// 改行コード (CR)
	lineData = tabText.split(CR);
	for (var i=0; i<lineData.length; i++)
	{
		wCount = lineData[i].split(",");

		g_AryHoliday_year[i]  = wCount[0];	// 休日データ（年）
		g_AryHoliday_month[i] = wCount[1];	// 休日データ（月）
		g_AryHoliday_day[i]   = wCount[2];	// 休日データ（日）

	}
}

// カレンダー表示
function carenda(num){

	var now = new Date();
	var dValue = document.getElementById("dValue");
	var search_flag;


	switch(parseInt(num)){
		case 0:
			g_year = now.getFullYear();
			g_month = now.getMonth()+1;
			g_day = now.getDate();
			break;
		case 1:
			var backMDate = new Date(parseInt(dValue.innerHTML) - 24 * 60 * 60 * 1000 * 1);
			if(backMDate.getMonth() == now.getMonth() && backMDate.getFullYear() == now.getFullYear()){
				g_year = now.getFullYear();
				g_month = now.getMonth()+1;
				g_day = now.getDate();
			}else{
				g_year = backMDate.getFullYear();
				g_month = backMDate.getMonth() + 1;
				g_day = -1;
			}
			break;
		case 2:
			var nextMDate = new Date(parseInt(dValue.innerHTML) + 24*60*60*1000*31);
			if(nextMDate.getMonth() == now.getMonth() && nextMDate.getFullYear() == now.getFullYear()){
				g_year = now.getFullYear();
				g_month = now.getMonth()+1;
				g_day = now.getDate();
			}else{
				g_year = nextMDate.getFullYear();
				g_month = nextMDate.getMonth() + 1;
				g_day = -1;
			}
			break;
	}

	// 休日ファイルの読み込み（表示年月のみの情報）
	//ファイル名に乱数を付加してキャッシュを利用しない
	var filename = HTTP_ROOT + g_strItemDir + "events.xml"; //イベントファイル名
	filename += "?rand=" + Math.random(); //乱数を付加

	loadDataFile(filename);

	//div#result の表示を消去
	if ( document.getElementById("result") )
	{
		document.getElementById("result").innerHTML = "";
	}

//DebugPrint(editMsg);
}

function DebugPrint(str)
{
    var out = document.getElementById("debug");
    if (!out) return;
    out.value += str;
}
function openEx(nID)
{
    var w = window.open(add + nID, "detail", "width=680,height=700,menubar=yes,toolbar=no,location=yes,status=yes,resizable=yes,scrollbars=yes");
    w.focus();
}
