var currentTime = false;
var thisTime = false;
var months = ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"];
var loadcategories = true;
var calendarloading = false;

function loadCalendar(timestamp, category) {
	if(calendarloading) {
		return;
	} else {
		calendarloading = true;
	}
	if(!category) {
		category = "";
	}
	var url = "/calendar/load/?timestamp="+timestamp+"&category="+category;
	
	var elements = $("#calendar").find("td");
	$(elements).text("");
	$(elements).removeClass("eventday");
	$(elements).removeClass("passedday");
	$(elements).addClass("ordday");
	
	var dateobj = new Date();
	dateobj.setTime(timestamp*1000);
	dateobj.setDate(1);
	
	var year = new Number(dateobj.getFullYear());
	var month = new Number(dateobj.getMonth()+1);
	
	
	if(!thisTime) {
		thisTime = year+"|"+month;
	}
	
	currentTime = timestamp;
	
	//räkna ut vilka ruta i tabellen som utritningen ska börja och sluta på
	var firstday = dateobj.getDay();
	firstday--;
	if(firstday == -1) {
		firstday = 6;
	} else if(firstday == 0) {
		firstday = 7;
	}
	var dateobj2 = new Date(year, month, 0);
	var lastday = dateobj2.getDate()+firstday;
	var i;
	for(i=firstday,j=1;i<lastday;i++,j++) {
		$(elements)[i].innerHTML = j;
	}
	$("#calendarleftlink").css("visibility", (year+"|"+month == thisTime ? "hidden" : "visible"));
	
	$("#month").html(months[month-1] + " " + year);

	$.getJSON(url,
		function(data) {
			
			var stopdate = 0;
			var startdate = 0;
			var dateobj3 = new Date(data.thistime*1000);
			var thisdate = dateobj3.getDate();
			
			dateobj3.setDate(1);
			dateobj3.setMonth(dateobj3.getMonth()+1);
			dateobj3.setHours(0);
			dateobj3.setMinutes(0);
			dateobj3.setSeconds(0);
			
			
			$.each(data.events, function(i,event) {
				/* fix overlapping events */
				dateobj.setTime(event.fromdate*1000);
				
				dateobj2.setTime(event.todate*1000);
			
				if (event.fromdate < data.thistime) {
					startdate = thisdate;
				} else {
					startdate = dateobj.getDate();
				}

				
				//Här måste det fixas
				if(dateobj3.getTime() < event.todate*1000) {
					stopdate = dateobj3.getDate();
				} else {
					stopdate = dateobj2.getDate();
				}
				
				/*************************/
				
				for(i=startdate+firstday, j=startdate;i<=stopdate+firstday;i++,j++) {
					$(elements).eq(i-1).html("<a href='javascript:void(0);' onclick='showCalendarDate("+j+");'>"+j+"</a>");
					$(elements).eq(i-1).removeClass("ordday");
					$(elements).eq(i-1).addClass("eventday");
				}
			});

			if(dateobj3.getFullYear()+"|"+(dateobj3.getMonth()) == thisTime) {
				
				dateobj3 = new Date();
				for(i=0;i<firstday+dateobj3.getDate();i++) {
					$(elements).eq(i-1).html($(elements).eq(i-1).text());
					$(elements).eq(i-1).removeClass("ordday");
					$(elements).eq(i-1).addClass("passedday");
				}
			}
			calendarloading = false;
		});
}

function changeMonth(direction) {
	if(!thisTime) {
		return;
	}
	var dateobj = new Date(currentTime*1000);
	var dateobj2 = new Date(dateobj.getFullYear(), dateobj.getMonth() + direction, 1);
	
	loadCalendar(dateobj2.getTime()/1000, $("#category").children(":selected").val());
}

function loadEvents(timestamp, category) {
	if(!category) {
		category = "";
	}
	var url = "/calendar/loadevents/?timestamp="+timestamp+"&category="+category+"&loadcategories="+(loadcategories ? 1 : 0);
	loadcategories = false;
	
	$("#events").empty();
	$.getJSON(url,
			function(data){
				var dateobj;
				var dateobj2;
				var dateobj3 = new Date(data.thistime*1000);
				var month;
				var date;
				var titlehtml = "";
				var months = ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"];
				$.each(data.events, function(i,event) {
					dateobj = new Date(event.fromdate*1000);
					dateobj2 = new Date(event.todate*1000);
					if(dateobj3.getTime() > dateobj.getTime()) {
						titlehtml = '<td class="ongoing" valign="top">Idag</td>';
					} else {
						titlehtml = '<td class="eventdate" valign="top">' + dateobj.getDate() + " " + months[dateobj.getMonth()] + '</td>';
					}
					$("#events").append('<tr class="eventlistitem" id="eventitem'+event.id+'">' + titlehtml + '<td class="eventlisttitle">' + event.title + '</td></tr>');
				});
				
				$(".eventlistitem").bind("click", function(e) {
					showCalendarItem($(this));
				});
				
				$.each(data.categories, function(i, categoryobj) {
					if(categoryobj.id == category) {
						
						$("#category").append($("<option></option>").html(categoryobj.category).attr("value", categoryobj.id).attr("selected", "true"));
					} else {
						$("#category").append($("<option></option>").html(categoryobj.category).attr("value", categoryobj.id));
					}
				});
				
				
				
				
				
	});
}

function showCalendarItem(item) {
	$("#eventdialog").dialog('destroy');
	$("#eventdialog").attr("title", item.children(":last").text());
	$("#eventdialog").load("/calendar/showitem/?id="+item.attr("id").substr(9)).dialog({ width : 400, title : item.children(":last").text() });
}

function showCalendarDate(date) {
	var timestr = thisTime.split("|");
	var dateobj = new Date();
//	dateobj.setFullYear(timestr[0]);
//	dateobj.setMonth(timestr[1]-1);
	dateobj.setTime(currentTime*1000);
	dateobj.setDate(date);
	timestr = dateobj.toLocaleString();
	$("#eventdialog").dialog('destroy');
	$("#eventdialog").attr("title", "Händelser "+timestr.substr(4,timestr.length-12));
	$("#eventdialog").load("/calendar/showdate/?timestamp="+dateobj.getTime()/1000+"&category="+$("#category").children(":selected").val()).dialog({ width : 400, title : "Händelser "+timestr.substr(4,timestr.length-12) });
}

function printCalendar() {
	$('.eventsContainer').printElement({
		printMode:'popup',
		pageTitle:$("#eventdialog").dialog("option", "title"),
		overrideElementCSS:['/styles/default.css','/styles/printCalendar.css']
	});
}

