// イベントカレンダー（要jQuery）

function CalendarControl(type, requestManager, maxDate){
	this.type = type;
	this.curDate = new Date();
	this.rm = requestManager;
	this.maxDate = maxDate;
}
CalendarControl.prototype.prev = function(){
	var d = getPrevWeekDate(this.curDate, 1);
	var currWeekFirstDay = getPrevWeekDate(getNextWeekDate(today, 1), 1)
	if(currWeekFirstDay > d){
		alert("現在週より前の日付は表示できません")
		return ;
	}
	this.curDate = d;
	this.executeChangeCalendar();
}
CalendarControl.prototype.next = function(){
	var d = getNextWeekDate(this.curDate, 1);
	if(d > this.maxDate){
		return ;
	}
	this.curDate = d;
	this.executeChangeCalendar();
}
CalendarControl.prototype.executeChangeCalendar = function(){
	this.rm.sendRequest(
		contextPath + "/ajax_top_calendar.json",
		this.getParamObject(),
		function(self){return function(response){self.handleResponse(response["response"])}}(this)
	);
}
CalendarControl.prototype.getParamObject = function(){
	var self = this;
	return {"type" : self.type, "currentWeek" : self.curDate.toYyyyMMddString()}
}
CalendarControl.prototype.handleResponse = function(response){
	if (this.type == "event") {
		$("#module-schedule-header h3").html("これから開催されるオープンキャンパス");
	} else if (this.type == "exam") {
		$("#module-schedule-header h3").html("出願受付中の入試");
	}
	var calendarArea = $("#schedule").find("tr:nth-child(2)")
	calendarArea.children().remove();
	var first = true;
	for(var dayKey in response.dayMap){
		var dateItem = response.dayMap[dayKey];
		var date = parseDateFromYyyyMMdd(dateItem.yyyyMMdd);
		var url = createUrlString(date);
		var week = createDateCellClassName(date);
		var tdAttr = {"class" : week};
		if(first){
			tdAttr["scope"] = "row";
			first = false;
		}

		if(calendarControl.type == "event" ? (dateItem.hitNum > 0 && date >= today) : (dateItem.hitNum > 0)){
			calendarArea.append(
				$("<td>").attr(tdAttr).html(
					(date.getMonth() + 1) + "/" + date.getDate() + "<br />"
				).append(
					$("<a>").attr("href", url).html("（" + dateItem.hitNum + "）")
				)
			);
		}else{
			calendarArea.append(
				$("<td>").attr(tdAttr).html(
					(date.getMonth() + 1) + "/" + date.getDate() + "<br />（" + dateItem.hitNum + "）"
				)
			);
		}
	}
}


var createUrlString = function(date){
	var ret = null;
	var dateString = '' + date.getFullYear() + date.getZeroPaddingMonth() + date.getZeroPaddingDate();
	var cm = '' + date.getFullYear() + date.getZeroPaddingMonth();
	if (calendarControl.type == "event") {
		ret = contextPath + "/search/event/#eds=" + dateString + "&ede=" + dateString + "&ecm=" + cm + "&eht=1";
	} else if (calendarControl.type == "exam") {
		ret = contextPath + "/search/nyuushi/#exds=" + dateString + "&exde=" + dateString + "&excm=" + cm;
	}
	return ret;
}
var createDateCellClassName = function(date){
	var ret = null;
	if (date.getFullYear() == today.getFullYear() && date.getMonth() == today.getMonth() && date.getDate() == today.getDate()) {
		ret = "today";
	} else if (date.getDay() == 0) {
		ret = "sunday";
	} else if (date.getDay() == 6) {
		ret = "saturday";
	}
	return ret;
}

$(document).ready(function() {
	$("#calendarPrevLink").click(function(){
		calendarControl.prev();
		return false;
	});
	$("#calendarNextLink").click(function(){
		calendarControl.next();
		return false;
	});
});

var calendarControl = new CalendarControl("event", rm, parseDateFromYyyyMMdd(20120229));
