/* Loads the Google data JavaScript client library */
google.load("gdata", "1");

function init()
{
	// init the Google data JS client library with an error handler
	google.gdata.client.init(handleGDError);
}

/**
 * Adds a leading zero to a single-digit number.	Used for displaying dates.
 */
function padNumber(num)
{
	if (num <= 9) {
		return "0" + num;
	}
	return num;
}

/**
 * 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,div)
{
	var service = new google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
	var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
	query.setOrderBy('starttime');
	query.setSortOrder('ascending');
	query.setFutureEvents(true);
	query.setSingleEvents(true);
	query.setMaxResults(9);
	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 listEvents(feedRoot)
{
	var entries = feedRoot.feed.getEntries();
	var eventDiv = document.getElementById(feedRoot.feed.title.$t + ' List');
	if (eventDiv.childNodes.length > 0)
	{
		eventDiv.removeChild(eventDiv.childNodes[0]);
	}
	
	// set the calendarTitle div with the name of the calendar
	document.getElementById(feedRoot.feed.title.$t + ' Title').innerHTML = 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 = null;
		var startJSDate = null;
		var times = entry.getTimes();
		if (times.length > 0)
		{
			startDateTime = times[0].getStartTime();
			startJSDate = startDateTime.getDate();
		}
		var entryLinkHref = null;
		if (entry.getHtmlLink() != null)
		{
			entryLinkHref = entry.getHtmlLink().getHref();
		}
		var hour = startJSDate.getHours();
		var ampm = "am";						// presets am/pm to am
		if (hour > 11) { ampm = "pm"; }			// switches am to pm if after noon
		if (hour > 12) { hour = hour - 12; }	// converts 24hr time to 12hr if after 1:00pm
		var dateString = (startJSDate.getMonth() + 1) + "/" + startJSDate.getDate();
		
		// overrides time if event is all-day
		if (startDateTime.isDateOnly())
		{
			var timeString = "all-day";
		}
		else
		{
			var timeString = hour + ":" + padNumber(startJSDate.getMinutes()) + "&nbsp;" + ampm;
		}
		
		var eventRow = document.createElement("tr");
		var eventDate = document.createElement("td");
		eventDate.setAttribute("class","event_date");
		eventDate.innerHTML = dateString;
		var eventTime = document.createElement("td");
		eventTime.setAttribute("class","event_time");
		eventTime.innerHTML = timeString;
		var eventName = document.createElement("td");
		eventName.setAttribute("class","event_name");
		var eventLink = document.createElement("a");
		eventLink.setAttribute("alt", title);
		eventLink.setAttribute("href", entryLinkHref);
		eventLink.innerHTML = title;
		eventName.appendChild(eventLink);
		eventRow.appendChild(eventDate);
		eventRow.appendChild(eventTime);
		eventRow.appendChild(eventName);
		document.getElementById(feedRoot.feed.title.$t + ' List').appendChild(eventRow);
		var returnCode = "true";
	}
	if (returnCode == "true")
	{
		return true;
	}
	else
	{
		return false;
	}
}

google.setOnLoadCallback(init);
