/**
 Autor: Marco Ladermann
 Datum: 10.12.2009
 &Auml;nderung:
 Zweck: Stellt Funktionen zur Abfrage der Google Kalender bereit und erzeugt Tabelleneintr&auml;ge
 in einer Struktur, die wie folgt aussieht:
 
 <table width="100%" border="2">
	 <thead>
		 <th align="left">Was?</th>
		 <th align="left">Wann?</th>
	 </thead>
	 <tbody id="feed">
	 </tbody>
 </table>
 Eintr&auml;ge erfolgen dann unter der id="feed"
 */

// Adresse de Kalender
var veranstaltungsUri = 'http://www.google.com/calendar/feeds/6tji1buv2qtajf2qikhsbj5d7k%40group.calendar.google.com/public/full';
var allgemeinUri = 'http://www.google.com/calendar/feeds/0o28vrso0hmq0pc9nfmdabq664%40group.calendar.google.com/public/full';
var basisUri ='http://www.google.com/calendar/feeds/eahv5hes1g34i07jji84qq5qro%40group.calendar.google.com/public/full';
var agilityUri= 'http://www.google.com/calendar/feeds/bo2luv4om8gck4o7ria89nlunc%40group.calendar.google.com/public/full';
var obedienceUri= 'http://www.google.com/calendar/feeds/rbiov6f2u8v7s00op4l1k9sevk%40group.calendar.google.com/public/full';
var thsUri= 'http://www.google.com/calendar/feeds/1q2ooiqta9hd04r7d9br4o9gb8%40group.calendar.google.com/public/full';
var kurseUri= 'http://www.google.com/calendar/feeds/ldq43bpsbc9lfgh0agl4girorg%40group.calendar.google.com/public/full';

// service variable
var service;

function toHtmlEntities(str)
{
	str = str.replace(/ä/g, '&auml;');
	str = str.replace(/Ä/g, '&auml;');
	str = str.replace(/ü/g, '&auml;');
	str = str.replace(/Ü/g, '&auml;');
	str = str.replace(/ö/g, '&auml;');
	str = str.replace(/Ö/g, '&auml;');
	str = str.replace(/ß/g, '&szlig;');
	return str;
}

// Falls Fehler auftreten, melde den Grund
var errorHandler = function(e) {
	alert("Upps. Ein Fehler!");
	alert(e.cause ? e.cause.statusText : e.message)
}

// wandle Date in Zeichenkette
function toDate(date)
{
	var day  = (date.getDate()  < 10 ? "0" : "")+date.getDate();
	var month= (date.getMonth() < 9 ? "0" : "")+(date.getMonth()+1);
	var hour = (date.getHours() < 10 ? "0" : "")+(date.getHours());
	var min  = (date.getMinutes() < 10 ? "0" : "")+(date.getMinutes());
	return day+"."+month+"."+date.getFullYear()+" "+hour+":"+min;
}

// bbCode Ersetzungen
function bbDecode(text)
{
	var html = text.replace(/\[url=([^\]]+)\]([^\]]*)\[\/url\]/g,"<a href='$1'>$2</a>"); 
	html = html.replace(/\[b\]([^\[]*)\[\/b\]/g,"<span style='font-weight:bold;'>$1</span>"); 
	html = html.replace(/\[i\]([^\[]*)\[\/i\]/g,"<em>$1</em>"); 
	return html;
}

// wandle in Google Date
function toGDateTime(then)
{
	var day   = (then.getDate() < 10 ? "0": "")+then.getDate();
	var month = (then.getMonth() < 9 ? "0": "")+(then.getMonth()+1);
	return then.getFullYear()+"-"+month+"-"+day;
}

// Mache was mit den gefundenen Terminen
var resultHandler = function(root) {
	// Hole das Feld der Termine
	var eventEntries = root.feed.getEntries();
	// Gibt's da was zu tun?
	if (eventEntries.length > 0) {
		// Suche das Element wo die 
		var container = document.getElementById('feed');
		
		for (var i = 0; i < eventEntries.length; i++) {
			var entry = eventEntries[i];
			var title = entry.getTitle().getText();
			var content = entry.getContent();
			var description = (content != null? content.getText() : "-");
			var whenArray = entry.getTimes();
			var when;
			if (whenArray.length > 1) {
				when = whenArray[0].getStartTime().getDate();
				for( var w=1; w < whenArray.length; ++w)
				{
					var x = whenArray[w].getStartTime().getDate();
					if (x < when) when = x;
				}
			}
			else
			{
				when = whenArray[0].getStartTime().getDate();
			}
			when = toDate(when);
			var row = document.createElement('tr');
			var td;
			
			// Spalte 1
			td = document.createElement('td');
			td.setAttribute("class", "title");
			var a = document.createElement('a');
			a.setAttribute("href", entry.getHtmlLink().getHref()+"&ctz=CET");
			a.setAttribute("target", "_blank");
			a.appendChild(document.createTextNode(title));
			td.appendChild(a);
			row.appendChild(td);
			
			// Spalte 2
			td = document.createElement('td');
			td.setAttribute("class", "description");
			td.innerHTML = bbDecode(description);
			//td.appendChild(document.createTextNode(description));
			row.appendChild(td);
			
			// Spalte 3
			td = document.createElement('td');
			td.setAttribute("class", "when");
			td.appendChild(document.createTextNode(when));
			row.appendChild(td);
			
			container.appendChild(row);
		}
	}
	else {
		// No match is found for the full text query
		alert('no events are matched from the query!');
	}
}

// Funktion zum Erzeugen einer Feedfunktion (Bindet Name und Uri)
function getFeed(name, calendarUri, singleEvents)
{
	if(typeof(singleEvents) == 'undefined') singleEvents = true;
	return function ()
	{
		service = new google.gdata.calendar.CalendarService(name);
		var query = new google.gdata.calendar.CalendarEventQuery(calendarUri);
		query.setMinimumStartTime(toGDateTime(new Date()));
		query.setMaxResults(15);
		query.setSingleEvents(singleEvents);
		query.setOrderBy(google.gdata.calendar.CalendarEventQuery.ORDERBY_START_TIME);
		query.setSortOrder(google.gdata.calendar.CalendarEventQuery.SORTORDER_ASCENDING);
		service.getEventsFeed(query, resultHandler, errorHandler);
	};
}

