/* Loads the Google data JavaScript client library */
google.load("gdata", "2.x");

function init() {
// init the Google data JS client library with an error handler
google.gdata.client.init(handleGDError);
// load the code.google.com developer calendar
//loadDeveloperCalendar();
}

/**
* Loads the Google Developers Event Calendar
*/
function loadDeveloperCalendar(xEntries, dstart) {
loadCalendarByAddress('bereakalender@gmail.com', xEntries, dstart);
}

/**
* Adds a leading zero to a single-digit number. Used for displaying dates.
*/
function padNumber(num) {
if (num <= 9) {
return "0" + num;
}
return num;
}

/**
* Determines the full calendarUrl based upon the calendarAddress
* argument and calls loadCalendar with the calendarUrl value.
*
* @param {string} calendarAddress is the email-style address for the calendar
*/ 
function loadCalendarByAddress(calendarAddress, yEntries, dxstart) {
var calendarUrl = 'http://www.google.com/calendar/feeds/' +
calendarAddress + 
'/public/full';
loadCalendar(calendarUrl, yEntries, dxstart);
}

/**
* Uses Google data JS client library to retrieve a calendar feed from the specified
* URL. The feed is controlled by several query parameters and a callback 
* function is called to process the feed results.
*
* @param {string} calendarUrl is the URL for a public calendar feed
*/ 
function loadCalendar(calendarUrl, maxEntries, dystart) {
var service = new  google.gdata.calendar.CalendarService('MyApp');

var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
query.setOrderBy('starttime');
query.setSortOrder('ascending');
//query.setFutureEvents(true);
var startMin = google.gdata.DateTime.fromIso8601(dystart+'T00:00:00.000-08:00');
//var startMax = google.gdata.DateTime.fromIso8601(deind.getFullYear()+'-'+(deind.getMonth()+1)+'-'+deind.getDate()+'T00:00:00.000-08:00');
query.setMinimumStartTime(startMin);
//query.setMaximumStartTime(startMax);
query.setSingleEvents(true);
query.setMaxResults(maxEntries);

service.getEventsFeed(query, listEvents, handleGDError);
}

/**
* Callback function for the Google data JS client library to call when an error
* occurs during the retrieval of the feed. Details available depend partly
* on the web browser, but this shows a few basic examples. In the case of
* a privileged environment using ClientLogin authentication, there may also
* be an e.type attribute in some cases.
*
* @param {Error} e is an instance of an Error 
*/
function handleGDError(e) {
document.getElementById('jsSourceFinal').setAttribute('style', 
'display:none');
if (e instanceof Error) {
/* alert with the error line number, file and message */
alert('Error at line ' + e.lineNumber +
' in ' + e.fileName + '\n' +
'Message: ' + e.message);
/* if available, output HTTP error code and status text */
if (e.cause) {
var status = e.cause.status;
var statusText = e.cause.statusText;
alert('Root cause: HTTP error ' + status + ' with status text of: ' + 
statusText);
}
} else {
alert(e.toString());
}
}

/**
* Callback function for the Google data JS client library to call with a feed 
* of events retrieved.
*
* Creates an unordered list of events in a human-readable form. This list of
* events is added into a div called 'events'. The title for the calendar is
* placed in a div called 'calendarTitle'
*
* @param {json} feedRoot is the root of the feed, containing all entries 
*/ 
function lpad(element) {
			
		if (element.length > 2)
			{return (element.substr(1,2))}
		else
			{return element}
}

function listEvents(feedRoot) {
	var entries = feedRoot.feed.getEntries();
	var eventDiv = document.getElementById('events');
	if (eventDiv.childNodes.length > 0) {
		eventDiv.removeChild(eventDiv.childNodes[0]);
	} 

/* create a new unordered list */
	var ul = document.createElement('ul');
	ul.style.listStyleType='none';

/* set the calendarTitle div with the name of the calendar */
	document.getElementById('calendarTitle').innerHTML = 
	"Kalender: " + feedRoot.feed.title.$t;
/* loop through each event in the feed */
	var len = entries.length;
	for (var i = 0; i < len; i++) {
		var entry = entries[i];
		var title = entry.getTitle().getText();
		var startDateTime = new Date();
		var endDateTime = new Date();
		var startJSDate = new Date();
		var endJSDate = new Date();
		var times = entry.getTimes();
		var location = entry.getLocations()[0].getValueString();;
		if (location.length == "" ) {
 			location = 'Onbekend';
		}

		if (times.length > 0) {
			startDateTime = times[0].getStartTime();
			endDateTime = times[0].getEndTime();
			startJSDate = startDateTime.getDate();
			endJSDate = endDateTime.getDate();
		}
	
		var entryLinkHref = null;
		if (entry.getHtmlLink() != null) {
			entryLinkHref = entry.getHtmlLink().getHref();
		}
		var DoW = ["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag","Zondag"] ;
		var MoJ = ["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec","Jan"];
		var MoJfull = ["Janari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December","Januari"];

		var dateString = DoW[startJSDate.getDay()] + " " + startJSDate.getDate() + "-" + MoJ[(startJSDate.getMonth())];
		if (!startDateTime.isDateOnly()) {
			dateString += " " + startJSDate.getHours() + ":" + 
			padNumber(startJSDate.getMinutes());
		}

		var edateString = DoW[endJSDate.getDay()] + " " + endJSDate.getDate() + "-" + MoJ[(endJSDate.getMonth())];
		if (!endDateTime.isDateOnly()) {
			edateString += " " + endJSDate.getHours() + ":" + 
			padNumber(endJSDate.getMinutes());
		}
		var jaar=startJSDate.getFullYear();
		var maand=MoJ[(startJSDate.getMonth())];
		var dag=lpad(startJSDate.getDate());
		
		var li = document.createElement('li');
		li.className='newsentry';
		
		// datum rechts uitgelijnd
		//
		var div01 = document.createElement('div');
		div01.className='ddate';
		div01.id='date11';
	
		
		var div02 = document.createElement('div');
		div02.id='mon11';
		div02.appendChild(document.createTextNode(maand));
		div01.appendChild(div02);
		
		var div03 = document.createElement('div');
		div03.id='day11';
		div03.appendChild(document.createTextNode(dag));
		div01.appendChild(div03);

		var div04 = document.createElement('div');
		div04.id='year11';
		div04.appendChild(document.createTextNode(jaar));
		div01.appendChild(div04);
		
		li.appendChild(div01);
		//
		//
/* if we have a link to the event, create an 'a' element (was != null) */
		if (entryLinkHref != null) {
			entryLink = document.createElement('strong');
			/*entryLink.setAttribute('href', entryLinkHref);*/
			entryLink.appendChild(document.createTextNode(title));
			li.appendChild(entryLink);
			entryLink = document.createElement('br');
			li.appendChild(entryLink);
			entryLink = document.createElement('strong');
			li.appendChild(entryLink);
			li.appendChild(document.createTextNode('Start: ' ));
			li.appendChild(document.createTextNode(dateString + ' - Einde: ' + edateString));
			entryLink = document.createElement('br');
			li.appendChild(entryLink);
			entryLink = document.createElement('strong');
			li.appendChild(entryLink);
			li.appendChild(document.createTextNode('Locatie: ' + location ));
		} else {
			li.appendChild(document.createTextNode(title + ' - ' + dateString + ' - ' + edateString + ' ==> ' + location));
		} 
			  	
/* append the list item onto the unordered list */
		ul.appendChild(li);		
	}

	eventDiv.appendChild(ul);
}

google.setOnLoadCallback(init);

