function formatGCalTime(gCalTime) { 

	var remtxt = gCalTime;
	
	function consume(retxt) {
	
		var match = remtxt.match(new RegExp('^' + retxt));
		if (match) {
		
			remtxt = remtxt.substring(match[0].length);
			return match[0];
		}
		
		return '';
	}
	
	var totalCorrMins = 0;
	
	var year = consume('\\d{4}');
	consume('-?');
	var month = consume('\\d{2}');
	consume('-?');
	var dateMonth = consume('\\d{2}');
	var timeOrNot = consume('T');
	
	if (timeOrNot == 'T') {
	
	var hours = consume('\\d{2}');
	consume(':?');
	var mins = consume('\\d{2}');
	consume('(:\\d{2})?(\\.\\d{3})?');
	var zuluOrNot = consume('Z');
	
	if (zuluOrNot != 'Z') {
	
		var corrPlusMinus = consume('[\\+\\-]');
		if (corrPlusMinus != '') {
			var corrHours = consume('\\d{2}');
			consume(':?');
			var corrMins = consume('\\d{2}');
			totalCorrMins = (corrPlusMinus=='-' ? 1 : -1) * (Number(corrHours) * 60 + (corrMins=='' ? 0 : Number(corrMins)));
		}
	} 
	
	var originalDateEpoch = Date.UTC(year, month - 1, dateMonth, hours, mins);
	var gmtDateEpoch = originalDateEpoch + totalCorrMins * 1000 * 60;
	var ld = new Date(gmtDateEpoch);
	
	dateString = ld.getDate() + '. ' + (ld.getMonth() + 1) + '. od ' +
		ld.getHours() + '.' + ((ld.getMinutes()<10)?('0' + ld.getMinutes()):(ld.getMinutes()));
	
	} else {
	
		dateString = Number(dateMonth) + '. ' + Number(month) + '.';
	}
  
	return dateString;
}

function callback(root) {

	gcal_feed = root.feed;
}

function markup(s) {

	s = s.replace(/<\/?[^>]*>/gi, '');
	s = s.replace(/"([^"]+)"/ig, '„$1“');
	s = s.replace(/ - /ig, ' – ');
	s = s.replace(/([\w._-]+@[\w._-]+\w)/ig, '<a href="mailto:$1">$1</a>');
	s = s.replace(/(http:\/\/(www\.)?([^\/\s]+[^\/\s.,])(\/[^\s]*[^\s.,])?)/ig, '<a href="$1">$3</a>');
	s = s.replace(/(\d)(st|nd|rd|th)/ig, '$1<sup>$2</sup>');
	
	return s;
}

window.onload = function() {

	var events = document.getElementById("events");
	var feed   = gcal_feed;

	if ((feed.entry == null) || (feed.entry.length < 1)) {
		events.innerHTML = "<p>V kalendáři GP momentálně nejsou žádné plánované akce.</p>";
		return;
	}
	
	for (var i = 0; i < feed.entry.length; i++) {

		var entry = feed.entry[i];
		var title = entry.title.$t;
		var start = entry['gd$when'][0].startTime;
	
		for (var linki = 0; linki < entry['link'].length; linki++) {
			if (entry['link'][linki]['type'] == 'text/html' &&
				entry['link'][linki]['rel'] == 'alternate') {
				var entryLinkHref = entry['link'][linki]['href'];
			}
		}

		if (typeof entryLinkHref == 'undefined')
			continue;

		var dateString = formatGCalTime(start);
		var div = document.createElement('div');

		var heading = document.createElement('h2');
		heading.appendChild(document.createTextNode(title));
		div.appendChild(heading);
		
		var info = document.createElement('p');
		info.appendChild(document.createTextNode(dateString + ' – ' + entry.gd$where[0].valueString));
		div.appendChild(info);
		
		var content = document.createElement('p');
		content.innerHTML = markup(entry.content.$t);
		div.appendChild(content);

		events.appendChild(div);
	}
}

