var GroundUp = GroundUp ? GroundUp : function() {
	var feed = "http://www.google.com/calendar/feeds/groundupnl@gmail.com/public/full";
	var service;
	var entries;

	var pastWeeks = 1;
	var numWeeks = 4;

	var months = ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"];
	var monthsShort = ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"];

	var padNumber = function(num) {
		return (num <= 9) ? "0"+num : num;
	}

	var loadHeadline = function() {
		var query = new google.gdata.calendar.CalendarEventQuery(feed);
		query.setOrderBy("starttime");
		query.setSortOrder("ascending");
		query.setFutureEvents(true);
		query.setSingleEvents(false);
		query.setMaxResults(100);
		service.getEventsFeed(query, function(r) {
			var entry = r.feed.getEntries()[0];
			var start = entry.getTimes()[0].getStartTime().getDate();
			$("headline").innerHTML = "<a href='javascript:GroundUp.ShowEvent(1)'>&gt;&gt; " + start.getDate() + " " + monthsShort[start.getMonth()] + ": <em>" + entry.getTitle().$t + "</em></a>";
		}, handleGDError);
	}

	var loadEvents = function() {
		var query = new google.gdata.calendar.CalendarEventQuery("http://www.google.com/calendar/feeds/groundupnl@gmail.com/public/full");
		query.setOrderBy("starttime");
		query.setSortOrder("ascending");
		//query.setFutureEvents(false);
		//query.setSingleEvents(false);
		query.setMaxResults(1000);
		service.getEventsFeed(query, function(r) {
			entries = r.feed.getEntries();
			var headLine = true;

			for (var i = 0; i < entries.length; i++) {
				var start = entries[i].getTimes()[0].getStartTime().getDate();
				var time = start.getHours() + ":" + padNumber(start.getMinutes());
				var id = "d" + start.getFullYear() + padNumber(start.getMonth()) + padNumber(start.getDate());
				if ($(id)) {
					if (headLine && $(id).className.indexOf("past") == -1) {
						headLine = false;
						$("headline").innerHTML = "<a href='javascript:GroundUp.ShowEvent(" + i + ")'>&gt;&gt; " + start.getDate() + " " + monthsShort[start.getMonth()] + ": <em>" + entries[i].getTitle().$t + "</em></a>";
					}

					$(id).appendChild(Utils.MakeNode("p", {}, [
						Utils.MakeNode("a", {href: "javascript:GroundUp.ShowEvent(" + i + ")"}, [
							Utils.MakeNode("small", {}, Utils.MakeText(time)),
							Utils.MakeNode("em", {}, Utils.MakeText(entries[i].getTitle().$t))
						])
					]));
					$(id).className += " event";
				}

				var e = Utils.MakeNode("p", {}, [
					Utils.MakeNode("a", {href: "javascript:GroundUp.ShowEvent(" + i + ")"}, [
						Utils.MakeNode("small", {}, Utils.MakeText(
							padNumber(start.getDate()) + "/" + padNumber(start.getMonth()+1) + "/’" + start.getFullYear().toString().substr(2,2))
						),
						Utils.MakeNode("em", {}, Utils.MakeText(entries[i].getTitle().$t))
					])
				]);
				if (start < new Date()) e.className = "past";
				$("calendar").appendChild(e);
			}

			$("calendar").appendChild(Utils.MakeNode("a", {href: "javascript:GroundUp.ShowAgenda()"}, Utils.MakeText("<< terug")));
			var feesten = Utils.MakeNode("a", {href: "javascript:GroundUp.ShowCalendar()"}, Utils.MakeText(">> alle feesten"));
			feesten.id = "feesten";
			document.body.insertBefore(feesten, $("nieuws"));
		}, handleGDError);
	}

	var handleGDError = function(e) {
		if (e instanceof Error) {
			alert("Error at line " + e.lineNumber + " in " + e.fileName + "\nMessage: " + e.message);
			// if available, output HTTP error code and status text
			if (e.cause) alert("Root cause: HTTP error " + e.cause.status + " with status text of: " + e.cause.statusText);
		} else alert(e.toString());
	}

	return {
		Init: function() {
			var today = new Date();
			var day = (today.getDay()+6) % 7;
			var current = new Date(today.getTime() - day*24*60*60*1000 - pastWeeks*7*24*60*60*1000);
			for (var i = 0; i < numWeeks; i++) {
				var row = Utils.MakeNode("tr");
				row.className = (i-pastWeeks < 0) ? "" : (i-pastWeeks == 0) ? "dots1" : (i-pastWeeks == 1) ? "dots2" : "dots3";

				for (var j = 0; j < 7; j++) {
					var e = Utils.MakeNode("td", {
						id: "d" + current.getFullYear() + padNumber(current.getMonth()) + padNumber(current.getDate())
					}, Utils.MakeNode("span", {}, Utils.MakeText(current.getDate())));
					e.className = (current - today < 0) ? "past" : "";

					row.appendChild(e);
					current = new Date(current.getTime() + 24*60*60*1000);
				}

				$("table").appendChild(row);
			}

			service = new google.gdata.calendar.CalendarService("groundup-agenda-1");
			//loadHeadline();
			loadEvents();
		},

		ShowEvent: function(n) {
			$("details").innerHTML = "";

			var start = entries[n].getTimes()[0].getStartTime().getDate();
			var end = entries[n].getTimes()[0].getEndTime().getDate();
			var time = start.getHours() + ":" + padNumber(start.getMinutes()) + " - " + end.getHours() + ":" + padNumber(end.getMinutes());

			$("details").appendChild(Utils.MakeNode("h3", {}, Utils.MakeText(start.getDate() + " " + months[start.getMonth()] + " " + time + " ")));
			$("details").appendChild(Utils.MakeNode("h2", {}, Utils.MakeText(entries[n].getTitle().$t)));	

			var content = Utils.MakeNode("p");
			content.innerHTML = Utils.Linkify(entries[n].getContent().$t.replace(/\n+/g, '<br />'));
			$("details").appendChild(content);

			var address = Utils.MakeNode("p");
			address.innerHTML = entries[n].getLocations()[0].getValueString().replace(/, /g, '<br />');
			$("details").appendChild(address);

			$("details").appendChild(Utils.MakeNode("a", {href: "javascript:GroundUp.ShowAgenda()"}, Utils.MakeText("<< terug")));

			$("agenda").style.left = "-100%";
			$("nieuws").style.left = "-100%";
			$("details").style.left = "0%";
			$("calendar").style.left = "100%";
			$("feesten").style.left = "-15%";
		},

		ShowAgenda: function() {
			$("agenda").style.left = "0%";
			$("nieuws").style.left = "0%";
			$("details").style.left = "100%";
			$("calendar").style.left = "200%";
			$("feesten").style.left = "85%";
		},

		ShowCalendar: function() {
			$("agenda").style.left = "-200%";
			$("nieuws").style.left = "-200%";
			$("details").style.left = "-100%";
			$("calendar").style.left = "0%";
			$("feesten").style.left = "-115%";
		}
	}
}();
