// Array of calender IDs which are to be displayed
// set up an array of the calender IDs which we want to display
//var calenderIDs = new Array(	
//	"ci7kbs774sotbk6pk12dgftrf8@group.calendar.google.com",
//	"20uja4td0h9nppq2bsbmg3utss@group.calendar.google.com",
//	"arneco9rbpram63aj421meqdpg@group.calendar.google.com"
//);


var calenderIDs = new Array(	
	"oe02155@gmail.com"
);

// Initializing array of events 
var eventList = new Array();

//The running index of the array
var eventListIndex = 0 ;
var listCompiled = false;
var service;
var calenderCount=0;

/* Loads the Google data JavaScript client library */
google.load("gdata", "1");



function init_local() {
  // init the Google data JS client library with an error handler
  google.gdata.client.init(handleGDError);

    service = new 
       google.gdata.calendar.CalendarService('GoogleInc-jsguide-1.0');

	var i;
  // load the calendars one by one
	for (i = 0; i < calenderIDs.length; i++) {
	  var calendarUrl = 'http://www.google.com/calendar/feeds/' +
					calenderIDs[i] + 
					'/public/full';
		loadCalendar(calendarUrl);
	}

}

/**
 * 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 query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);

//  query.setOrderBy('starttime');
//  query.setSortOrder('ascending');
  query.setFutureEvents(true);
  query.setSingleEvents(true);
//  query.setMaxResults(10);
  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'
 *
 * Fetches events for the calender and stores those in the array of events "eventList". 
 * The list then will be displayed on the page in the required format
 * @param {json} feedRoot is the root of the feed, containing all entries 
 */ 
function listEvents(feedRoot) {

  var entries = feedRoot.feed.getEntries();
  /* loop through each event in the feed */
  calenderCount++;
  var len = entries.length;
  for(var i = 0; i < len; i++) {
	var events = new Array();
    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 = padNumber((startJSDate.getMonth() + 1)) + "/" + padNumber(startJSDate.getDate()) + "/" + startJSDate.getFullYear().toString().slice(2);

	
    /* if we do not have the link to the event default it to "" */
    if (entryLinkHref == null){
	  entryLinkHref="";
    }	    

   /* add the elements in the eventList array */
	// 1st element= calender title
	//2nd element = date
	// 3rd element = hyperlink to the event
	// 4th elelment = description of the event

   events[0]=feedRoot.feed.title.$t;
   events[1]=dateString;
   events[2]=entryLinkHref;
   events[3]=title;
   eventList[eventListIndex] = new Array();
   eventList[eventListIndex] = events;
   eventListIndex = eventListIndex + 1;
   
   if (calenderCount==calenderIDs.length)
   {
		printEventList();
	}

  }
}

/* sorting by date */
function mdyOrdA(a, b){
//var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4})/;
var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{2})/;

a = a[1].replace(dateRE,"$3$1$2");
b = b[1].replace(dateRE,"$3$1$2");
if (a>b) return 1;
if (a <b) return -1;
return 0; }



/* function to sort the event list by date */
function sortEventList()
{
eventList.sort( mdyOrdA );

}

function printEventList()
{
  var eventDiv = document.getElementById('events');
  if (eventDiv.childNodes.length > 0) {
    eventDiv.removeChild(eventDiv.childNodes[0]);
  }	  
  eventDiv.innerHTML="";
  /* sort the list */
  sortEventList();
  /* create a new unordered list */
//  var ul = document.createElement('ul');
  /* set the calendarTitle div with the name of the calendar */
  /* loop through each event in the feed */
  var eventsNo = eventList.length;
  var MAX_EVENTS = 4;
  var MAX_TITLE_LEN = 25;
  var eventsNo = (eventsNo > MAX_EVENTS) ? MAX_EVENTS : eventsNo;
  for (var i = 0; i < eventsNo; i++) {
  	var dateString = eventList[i][1];
	var entryLinkHref = eventList[i][2];
	var title = eventList[i][3];
 	var earlierHTML = (document.getElementById("events")).innerHTML;
	
 //   var li = document.createElement('li');
    /* if we have a link to the event, create an 'a' element */
    if (entryLinkHref != "") {
      entryLink = document.createElement('a');
      entryLink.setAttribute('href', entryLinkHref);
      entryLink.appendChild(document.createTextNode(title)); 
//	  var tempstr = dateString + ' - ' + "<a href=" + '"' +entryLinkHref+ '"  target="_blank"'+">"+title.substr(0,MAX_TITLE_LEN)+"</a><br/>";
	  var tempstr = dateString + ' - ' + "<a href=" + '"' +entryLinkHref+ '"  target="_blank"'+ " title='hyperlink to the calender for details' alt='hyperlink to the calender for details'"+">"+title.substr(0,MAX_TITLE_LEN)+"</a><br/>";
 
    	(document.getElementById("events")).innerHTML = earlierHTML+tempstr;
	//  li.appendChild(document.createTextNode(dateString + ' - '));
    //  li.appendChild(entryLink);
    } else {
	  	var tempstr = dateString + ' - ' + title.substr(0,MAX_TITLE_LEN)+'<br/>';
    	(document.getElementById("events")).innerHTML = earlierHTML+tempstr;	//  li.appendChild(document.createTextNode( dateString+ ' - ' + title));
    }	    
    /* append the list item onto the unordered list */
 //   ul.appendChild(li);
  }
 // eventDiv.appendChild(ul);
  
//  alert ('print done');
}




function printAllEvents()
{

	alert(eventList.length);

}

function old()
{
  var eventDiv = document.getElementById('eventslist');
  if (eventDiv.childNodes.length > 0) {
    eventDiv.removeChild(eventDiv.childNodes[0]);
  }	  
  eventDiv.innerHTML="";
  /* sort the list */
  sortEventList();
  /* create a new unordered list */
//  var ul = document.createElement('ul');
  /* set the calendarTitle div with the name of the calendar */
  /* loop through each event in the feed */
  var eventsNo = eventList.length;
  var MAX_EVENTS = 4;
  var MAX_TITLE_LEN = 25;
  var eventsNo = (eventsNo > MAX_EVENTS) ? MAX_EVENTS : eventsNo;
  for (var i = 0; i < eventsNo; i++) {
  	var dateString = eventList[i][1];
	var entryLinkHref = eventList[i][2];
	var title = eventList[i][3];
 	var earlierHTML = (document.getElementById("events")).innerHTML;
	
 //   var li = document.createElement('li');
    /* if we have a link to the event, create an 'a' element */
    if (entryLinkHref != "") {
      entryLink = document.createElement('a');
      entryLink.setAttribute('href', entryLinkHref);
      entryLink.appendChild(document.createTextNode(title)); 
//	  var tempstr = dateString + ' - ' + "<a href=" + '"' +entryLinkHref+ '"  target="_blank"'+">"+title.substr(0,MAX_TITLE_LEN)+"</a><br/>";
	  var tempstr = dateString + ' - ' + "<a href=" + '"' +entryLinkHref+ '"  target="_blank"'+ " title='hyperlink to the calender for details' alt='hyperlink to the calender for details'"+">"+title.substr(0,MAX_TITLE_LEN)+"</a><br/>";
 
    	(document.getElementById("events")).innerHTML = earlierHTML+tempstr;
	//  li.appendChild(document.createTextNode(dateString + ' - '));
    //  li.appendChild(entryLink);
    } else {
	  	var tempstr = dateString + ' - ' + title.substr(0,MAX_TITLE_LEN)+'<br/>';
    	(document.getElementById("events")).innerHTML = earlierHTML+tempstr;	//  li.appendChild(document.createTextNode( dateString+ ' - ' + title));
    }	    
    /* append the list item onto the unordered list */
 //   ul.appendChild(li);
  }
 // eventDiv.appendChild(ul);
  
//  alert ('print done');
}


//google.setOnLoadCallback(printEventList);
google.setOnLoadCallback(init_local);