function CalendarPage(year, month) {
	this.year = year;
	this.month = month;
}

var Calendar = {
	initialize: function(previous, current, next) {
		this.previous = previous;
		this.current = current;
		this.next = next;
		this.calendarDisplay = $('#kalender1');
		this.calendarLoad = $('#kalender2');
		this.calendarLoad.hide();
		this.setEventHandlers(this.calendarDisplay);
	},
	setEventHandlers: function(calendar){
		var links = $('a', calendar);
		for (var i = 0; i < links.length; i++) {
			var link = $(links[i]);
			switch (links[i].rel) {
				case "thisMonth": link.bind('click', this, this.thisMonth); break;
				case "previousMonth": link.bind('click', this, this.previousMonth); break;
				case "nextMonth": link.bind('click', this, this.nextMonth); break;
			}
		}
	},
	thisMonth: function(e) {
		EventList.loadEvents(e.data.current.year, e.data.current.month);
		e.preventDefault();
		e.stopPropagation();
	},
	previousMonth: function(e) {
		e.data.loadCalendar(e.data.previous);
		EventList.loadEvents(e.data.previous.year, e.data.previous.month);
		e.preventDefault();
		e.stopPropagation();
	},
	nextMonth: function(e) {
		e.data.loadCalendar(e.data.next);
		EventList.loadEvents(e.data.next.year, e.data.next.month);
		e.preventDefault();
		e.stopPropagation();
	},
	loadCalendar: function(page) {
		this.calendarDisplay.fadeTo(500, 0.1);
		$.ajax({
			type: "GET",
			data: "year=" + page.year + "&month=" + page.month,
			url: "/system/modules/no.klapp.stiklestad/elements/kalender",
			success: function(kalender) {
				Calendar.calendarDisplay.html(kalender);
				Calendar.calendarDisplay.fadeTo(500, 1.0);
			}
		});
	}
}

var EventList = {
	initialize: function(year, month, sortKey, sortOrder) {
		this.year = year;
		this.month = month;
		this.sortKey = sortKey;
		this.sortOrder = sortOrder;
		this.listContainer = $('#arrangementListeContainer');
		var links = $('a', this.listContainer);
		for (var i = 0; i < links.length; i++) {
			var link = $(links[i]);
			var rel = links[i].rel;
			if (rel.indexOf('sort') == 0) {
				var sortParams = rel.split(',');
				links[i].sortKey = sortParams[1];
				links[i].sortOrder = sortParams[2];
				link.bind('click', this, this.sort);
			}
			switch (links[i].rel) {
				case "thisMonth": link.bind('click', this, this.thisMonth); break;
				case "previousMonth": link.bind('click', this, this.previousMonth); break;
				case "nextMonth": link.bind('click', this, this.nextMonth); break;
			}
		}
	},
	loadEvents: function(year, month, sortKey, sortOrder) {
		this.year = year;
		this.month = month;
		this.sortKey = sortKey == null ? this.sortKey : sortKey;
		this.sortOrder = sortOrder == null ? this.sortOrder : sortOrder;
		$('table', this.listContainer).hide(500);
		$.ajax({
			type: "GET",
			data: "year=" + year + "&month=" + month + "&sort=" + this.sortKey + "&order=" + this.sortOrder,
			url: "/system/modules/no.klapp.stiklestad/elements/arrangementliste",
			success: function(arrangementer) {
				EventList.listContainer.html(arrangementer);
				$('table', this.listContainer).show(500);
			}
		});
	},
	sort: function(e) {
		e.data.loadEvents(e.data.year, e.data.month, this.sortKey, this.sortOrder);
		e.preventDefault();
		e.stopPropagation();
	}
}
