/* 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);
  // load the code.google.com developer calendar
  loadCalendar('http://www.google.com/calendar/feeds/jhj6ks3f0id73q0rcqqf475s3c%40group.calendar.google.com/public/full');
}
/**
 * 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) {
  	var service = new google.gdata.calendar.CalendarService('eastside-baptist-church-website');
  	var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
	query.setOrderBy('starttime');
	query.setSortOrder('ascending');
	query.setFutureEvents(true);
	query.setSingleEvents(true);
	query.setMaxResults(3);

	service.getEventsFeed(query, eventsList, handleGDError);
}

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());
  }
}

function monthText(monthNum, full) {
	var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	if (full) {
		return months[monthNum-1];
	}
	return months[monthNum-1].truncate(3, "");
}

function eventsList (feedRoot) {
	var entries = feedRoot.feed.getEntries();
	var len = entries.length;
	var events = new Array();
	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 dateString = (startJSDate.getMonth() + 1) + "/" + startJSDate.getDate();
		var dateMonth = monthText((startJSDate.getMonth() + 1));
	    if (!startDateTime.isDateOnly()) {
	      dateString += " " + startJSDate.getHours() + ":" + 
	          padNumber(startJSDate.getMinutes());
	    }
	var eventItem = $H({dateString : dateString, dateMonth : dateMonth, day : startJSDate.getDate(), 
						link: entryLinkHref, title : title, startTime : entry.getTimes()[0].getStartTime().getDate(), 
						endTime : entry.getTimes()[0].getEndTime().getDate(), times: entry.getTimes(), calLink: feedRoot.feed.getHtmlLink().getHref() });
	events.push(eventItem);
	//alert(eventItem.get('end'));
	}
	buildCal(events);
}

function buildCal(events) {
	var eventsDiv = $('events');
	$('calLink').href = events[0].get('calLink');
	for (var x=0; x<events.length; x++) {
		var event = events[x];
		var element = Builder.node('div',{ className: 'event'}, [
						Builder.node('a', { href: event.get('link'), target: '_blank' }, [
							Builder.node('div', {className: 'eventdate'}, [
								Builder.node('span', {className: 'month'}, event.get('dateMonth')),
								Builder.node('span', {className: 'day'}, event.get('day'))
							]),
			    			Builder.node('h4', event.get('title')),
			    			Builder.node('p', event.get('startTime').getTimeString() + "  ––  " + event.get('endTime').getTimeString())
						])
			  		]);
		eventsDiv.appendChild(element);
	}	
}

google.setOnLoadCallback(init);
//-->
