function calendar()
{
	requestXML("../rssrelay.cgi", processXML);
	requestXML2("../rssrelay2.cgi", processXML2);
	$('result').innerHTML = "<div style='padding: 20px; text-align: center;'>読み込み中</div>";
	setCurrentDate();
	myDate  = new Date();
	myYear  = myDate.getFullYear();
	myMonth = myDate.getMonth()+1;

	var url = 'http://www.nuvc.info/schedule/log/'+myYear+myMonth+'.dat';
	
	myMonth = myMonth - 1;
	myWeekTbl = new Array("S","M","T","W","T","F","S");
	myWeekTbl_j = new Array("(日)","（月）","（火）","（水）","（木）","（金）","（土）");
	myMonthTbl= new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	myMonthnameTbl = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	
	if (((myYear%4)==0 && (myYear%100)!=0) || (myYear%400)==0)
		myMonthTbl[1] = 29;
	myToday = myDate.getDate();
	myDate.setDate(1);
	myWeek = myDate.getDay();
	myTblLine = Math.ceil((myWeek+myMonthTbl[myMonth])/7);
	myTable   = new Array(7*myTblLine);
	
	tabText = "";
	
	for(i=0; i<7*6; i++) myTable[i]="　";
	for(i=0; i<myMonthTbl[myMonth]; i++)myTable[i+myWeek]=i+1;
	
	var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				onComplete: getResponse
			});

}

function getResponse(originalRequest)
	{
		if ( currentDay+5 < myMonthTbl[myMonth] ) {
			showResponse(originalRequest);
			exit;
		}
		tabText += originalRequest.responseText;
		var nMonth = myMonth + 2;
		var nYear = myYear;
		if (nMonth > 12) {
			nYear = nYear + 1;
			nMonth = 1;
		}
		var url = 'http://www.nuvc.info/schedule/log/'+nYear+nMonth+'.dat';
		var myAjax_2 = new Ajax.Request(
			url, 
			{
				method: 'get', 
				onComplete: showResponse
			});
}

function showResponse(originalRequest)
	{
		tabText += originalRequest.responseText;
		var resultText = "<table cellpadding='0' cellspacing='0' class='calendar'><tr><th colspan='7' class='head'>" + myMonthnameTbl[myMonth] + "　" + myYear + "</th></tr><tr>";
		for(i=0; i<7; i++){
		resultText += "<td";
		if(i==0) resultText += " class='off'>";            // 日曜のセルの色
		else if(i==6) resultText += " class='sat'>";
		else resultText += ">";
		resultText += myWeekTbl[i];     // '日'から'土'の表示
		resultText += "</td>";
		}
		resultText += "</tr>";
		
		var LF = String.fromCharCode(10);
		lineData = tabText.split(LF);
		resultText2 = "";
		
		for(i=0; i<myTblLine; i++){
			resultText += "<tr>";
			for(j=0; j<7; j++){
				resultText += "<td";  
				myDat = myTable[j+(i*7)];
				myHoliday = isHoliday(myYear, (myMonth+1), myDat);
				for (var k=0; k<lineData.length; k++){
					wCount = lineData[k].split("<>");
					check = wCount[0].split("/");
					if(check[0] != currentMonth) continue;
					if(check[1] != myDat) continue; // ここで日付チェック
					if(wCount[1] == 3){
						resultText += " class='event'"; // ここで種類チェック
						if(myToday==myDat) resultText2 += "<div class='list'><p><span class='f_event'>イベント：</span>本日は"+wCount[2]+"の日です。"+wCount[3]+"</p></div>";
					}else if(wCount[1] == 2){
						resultText += " class='vol'";
						if(myToday==myDat) resultText2 += "<div class='list'><p><span class='f_vol'>ボランティア：</span>本日は"+wCount[2]+"の日です。"+wCount[3]+"</p></div>";
					}else if(wCount[1] == 1){
						resultText += " class='sm'";
						if(myToday==myDat) resultText2 += "<div class='list'><p><span class='f_sm'>ミーティング：</span>"+wCount[2]+"。"+wCount[3]+"</p></div>";
					}
				}
				resultText += "><span";
				if(myHoliday && (myDat > 0) && (myDat <= myMonthTbl[myMonth])) resultText += " class='f_red'";
				else if(j==6 && (myDat > 0) && (myDat <= myMonthTbl[myMonth])) resultText += " class='f_blue'";
				if( myToday==myDat && currentMonth==(myMonth + 1) ) resultText += "><span class='f_bold_blink'>"+myDat+"</span></span></td>";
				else resultText += ">"+myDat+"</span></td>";
			}
			resultText += "</tr>";                                 // 行の終わり
		}
		
		resultText += "</table><div class='width_180'>";
		
		myWeek = data.getDay();
		
		for (var i=0; i<5; i++){
			myHoliday = isHoliday(currentYear, currentMonth, myToday);
			resultText += "<div class='underline'>";
			var counta = 0;
			if(myHoliday) resultText += "<dt><span class='f_red'>" + currentMonth + "/" + myToday + myWeekTbl_j[myWeek] + "</span></dt>";
			else if(myWeek == 6) resultText += "<dt><span class='f_blue'>" + currentMonth + "/" + myToday + myWeekTbl_j[myWeek] + "</span></dt>";
			else resultText += "<dt>" + currentMonth + "/" + myToday + myWeekTbl_j[myWeek] + "</dt>";
			for (var j=0; j<lineData.length; j++){
				wCount = lineData[j].split("<>");
				check = wCount[0].split("/");
				if(check[0] != currentMonth) continue;
				if(check[1] != myToday) continue;
				if( wCount[1] < 1 || wCount[1] > 3 ) continue;
				resultText += "<dd>";
				if(wCount[1]==1) resultText += "<span class='f_sm'>M:</span>";
				else if(wCount[1]==2) resultText += "<span class='f_vol'>V:</span>";
				else if(wCount[1]==3) resultText += "<span class='f_event'>E:</span>";
				resultText += wCount[2] + "</dd>";
				counta = counta + 1;
				}
			if (counta==0) resultText += "<dd>特になし</dd>";
			myToday = myToday + 1;
			myWeek = myWeek + 1;
			if(myWeek > 6) myWeek = myWeek - 7;
			if(myToday > myMonthTbl[myMonth]){
				currentMonth = currentMonth + 1;
				if (currentMonth > 12){
					currentMonth = 1;
					currentYear = currentYear + 1;
				}
				myToday = myToday - myMonthTbl[myMonth];
			}
			resultText += "</div>";
		}
		
		resultText += "<div class='t_right'><span class='event'>■</span>…Event　<span class='vol'>■</span>…Volunteer<br><span class='sm'>■</span>…Meeting<br>&gt;&gt;<a href='schedule.html'>詳細スケジュールへ</a></div></div>";
		
		$('result').innerHTML = resultText;
		$('result_2').innerHTML = resultText2;
}


// 以下祝日判定プログラム

// Copyright (c) 2004-2009 koikikukan All Rights Reserved.
// http://www.koikikukan.com/
// License is granted if and only if this entire
// copyright notice is included. By Yujiro ARAKI.

// Ver1.00 2006.03.15 initial version.
// Ver1.01 2006.04.11 fix bug.
// Ver1.02 2006.04.15 fix bug.
// Ver1.03 2006.04.16 fix bug.
// Ver1.04 2006.08.03 fix bug.
// Ver1.05 2007.04.21 fix bug.
// Ver1.06 2009.02.17 for change low.

var currentYear;
var currentMonth;
var currentDay;

function setCurrentDate() {
    data = new Date();
    currentYear = data.getYear();
    currentYear = (currentYear < 2000) ? currentYear + 1900 : currentYear;
    currentMonth = data.getMonth() + 1;
    currentDay = data.getDate();
}

function isToday(year, month, day) {
    if (year == currentYear && parseInt(month,10) == currentMonth && day == currentDay) {
        return true;
    }
    return false;
}

function isSaturday(year, month, day) {
    var week = new Date(year, month - 1, day).getDay();
    if (week == 6) {
        return true;
    }
    return false;
}

function isHoliday(year, month, day) {
    var week = new Date(year, month - 1, day).getDay();
    if (week == 0) {
        return true;
    }
    switch(parseInt(month,10)) {
    case 1:
        if (day == 1) {
            return true;
        }
        if (day == 2 && isSunday(year, month, 1)) {
            return true;
        }
        if (day == (getFirstMonday(year, month) + 7)) {
            return true;
        }
        break;
    case 2:
        if (day == 11) {
            return true;
        }
        if (day == 12 && isSunday(year, month, 11)) {
            return true;
        }
        break;
    case 3:
        if(year > 1979 && year < 2100) {
            if (day == parseInt(20.8431 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4))) {
                return true;
            }
            if (day == (parseInt(20.8431 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1)) {
                return true;
            }
        }
        break;
    case 4:
        if (day == 29) {
            return true;
        }
        if (day == 30 && isSunday(year, month, 29)) {
            return true;
        }
        break;
    case 5:
        if (day == 3 || day == 4 || day == 5) {
            return true;
        }
        if (day == 6 && (isSunday(year, month, 3) ||
                         isSunday(year, month, 4) ||
                         isSunday(year, month, 5))) {
            return true;
        }
        break;
    case 7:
        if (day == (getFirstMonday(year, month) + 14)) {
            return true;
        }
        break;
    case 9:
        if (day == (getFirstMonday(year, month) + 14)) {
            return true;
        }
        if(year > 1979 && year < 2100) {
            if (day == parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4))) {
                return true;
            }
            if (day == (parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1)) {
                return true;
            }
        }
        var day2 = parseInt(day, 10);
        if(day2 - 1 == (getFirstMonday(year, month) + 14))  {
            if(year > 2008 && year < 2100) {
                if (day2 + 1 == parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980)  / 4))) {
                    return true;
                }
                if (day2 + 1 == (parseInt(23.2488 + 0.242194 * (year - 1980) - parseInt((year - 1980) / 4)) + 1) && isSunday(year, month, day - 1)) {
                    return true;
                }
            }
        }
        break;
    case 10:
        if (day == (getFirstMonday(year, month) + 7)) {
            return true;
        }
        break;
    case 11:
        if (day == 3 || day == 23) {
            return true;
        }
        if (day == 4 && isSunday(year, month, 3)) {
            return true;
        }
        if (day == 24 && isSunday(year, month, 23)) {
            return true;
        }
        break;
    case 12:
        if (day == 23) {
            return true;
        }
        if (day == 24 && isSunday(year, month, 23)) {
            return true;
        }
        break;
    }
    return false;
}

function isSunday(year, month, day) {
    var week = new Date(year, month - 1, day).getDay();
    if (week == 0) {
        return true;
    }
    return false;
}

function getFirstMonday(year, month) {
    var monday;
    for(monday = 1; monday < 8; monday++) {
        if(new Date(year, month - 1, monday).getDay() == 1) {
            break;
        }
    }
    return monday;
}
