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


function formatTourDate(startDateString,endDateString) {

   var monthNames = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

   startDateArray     = startDateString.split("-");
	 startDateYear      = startDateArray[0];
	 startDateMonth     = startDateArray[1];
	 startDateMonthName = monthNames[startDateMonth - 1];
	 startDateDay       = startDateArray[2];
	 startDate          = new Date();
	 
	 startDate.setFullYear(startDateYear);
	 startDate.setMonth(startDateMonth-1);
	 startDate.setDate(startDateDay); 

   endDateArray     = endDateString.split("-");
	 endDateYear      = endDateArray[0];
	 endDateMonth     = endDateArray[1];
	 endDateMonthName = monthNames[endDateMonth - 1];
	 endDateDay       = endDateArray[2];
	 endDate          = new Date();
	 
	 endDate.setFullYear(endDateYear);
	 endDate.setMonth(endDateMonth-1);
	 endDate.setDate(endDateDay); 
	 
//	 alert(startDate);
//	 alert(endDate);

//	alert(endDate);
	 
   var days = Math.abs(Math.round((endDate.getTime()-startDate.getTime())/86400000)) + 1;
//	 alert(days);
	 
	 tourDate = "<tr>";
 	 tourDate = tourDate + "<td>"; 
	 tourDate = tourDate + startDateMonthName; 
	 tourDate = tourDate + "</td><td style=\"text-align: right\">"; 
	 tourDate = tourDate + startDateDay;
 	 tourDate = tourDate + "</td><td>"; 
	 tourDate = tourDate + "&nbsp;-&nbsp;";
	 tourDate = tourDate + "</td><td>";  
	 tourDate = tourDate + endDateMonthName;
	 tourDate = tourDate + "</td><td style=\"text-align: right\">";
	 tourDate = tourDate + endDateDay;
	 tourDate = tourDate + "</td><td>,&nbsp;</td><td style=\"text-align: right\">"; 
 
	 tourDate = tourDate + days;
	 tourDate = tourDate + "</td><td>"; 
	 tourDate = tourDate + "&nbsp;days";
 	 tourDate = tourDate + "</td>"; 
	 tourDate = tourDate + "</tr>";

	 
	 return tourDate;
	 
//	 alert(tourDate);
}



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() {
  loadCalendarByAddress('developer-calendar@google.com');
}

/**
 * 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) {
  var calendarUrl = 'http://www.google.com/calendar/feeds/' +
                    calendarAddress + 
                    '/public/full';
  loadCalendar(calendarUrl);
}

/**
 * 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('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(100);

  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('events');
  if (eventDiv.childNodes.length > 0) {
    eventDiv.removeChild(eventDiv.childNodes[0]);
  }
	eventDivHTML = "<table>";
  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();
			// start PR
			endDateTime = times[0].getEndTime();
			endJSDate = endDateTime.getDate();
			
			// If the time of the end date is 00:00 then subtract a little from the
			// date in order to take it into the previous day.  N.B.  Google mark the
			// end date of an event that spans multiple days as 00:00 on the day
			// following 
			
			
			if ((endJSDate.getHours() == 0) && (endJSDate.getMinutes() == 0)) {
				 endJSDate.setDate(endJSDate.getDate() - 1);
				 endJSDate.setHours(23);
				 endJSDate.setMinutes(59);
			}
    }
    var entryLinkHref = null;
    if (entry.getHtmlLink() != null) {
      entryLinkHref = entry.getHtmlLink().getHref();
    }
		var startDateString = startJSDate.getFullYear() + "-" + (startJSDate.getMonth() + 1) + "-" + startJSDate.getDate();
		var endDateString =  endJSDate.getFullYear() + "-" + (endJSDate.getMonth() + 1) + "-" + endJSDate.getDate();
//		alert(startDateTime);
    var dateString = formatTourDate(startDateString,endDateString);
		eventDivHTML = eventDivHTML + dateString;		
  }
		eventDivHTML = eventDivHTML + "</table>";
		eventDiv.innerHTML = eventDivHTML;
}

google.setOnLoadCallback(init);
