dojo.require("dojo.date");
dojo.require("dojo.date.locale");
dojo.require("dojo.fx");
dojo.require("dijit.Tooltip");

google.load("gdata", "1");
google.setOnLoadCallback(feedsLoaded);

var feedUris = ["http://www.google.com/calendar/feeds/calendar@rrccdoc.org/public/full",
                "http://www.google.com/calendar/feeds/d61gqba20fdhgvua3j3ggseeb4@group.calendar.google.com/public/full",
                "http://www.google.com/calendar/feeds/iuf7e2gdrhgmibjs07kgratfnk@group.calendar.google.com/public/full",
                "http://www.google.com/calendar/feeds/ph3eecloch6g9i761kapraevhs@group.calendar.google.com/public/full",
                "http://www.google.com/calendar/feeds/tqjkmclrcpfgp8b8ehvitap9ts@group.calendar.google.com/public/full",
                "http://www.google.com/calendar/feeds/jmgpslp9lhojdsb04qavetee7k@group.calendar.google.com/public/full"];

function getFeeds() {
  var calendarService = new google.gdata.calendar.CalendarService('exampleCo-exampleApp-1');
  var feedsUri = "http://www.google.com/calendar/feeds/calendar@rrccdoc.org";

  calendarService.getEventsFeed(feedsUri, feedsLoaded, eventError);
}

function feedsLoaded(feedsRoot) {
  var calendarService = new google.gdata.calendar.CalendarService('exampleCo-exampleApp-1');
  //var feedUris = feedsRoot.getLinks();
  dojo.forEach(feedUris, function(Uri) {
    try {
      var query = new google.gdata.calendar.CalendarEventQuery(Uri);
      var now = new Date();
      var startMin = new google.gdata.DateTime(dojo.date.add(now, "day", -1));
      var startMax = new google.gdata.DateTime(dojo.date.add(now, "day", 10));
      query.setMinimumStartTime(startMin);
      query.setMaximumStartTime(startMax);
      query.setOrderBy("starttime");
      query.setSortOrder("ascending");
      query.setSingleEvents(true);
      calendarService.getEventsFeed(query, eventsLoaded, eventError);
    } catch (e) {
      // Do nothing for now
    }
  });
}

var delay = 0;
var firstFeed = true;
function eventsLoaded(eventsRoot) {
  // Obtain the array of CalendarEventEntry
  var entries = eventsRoot.feed.entry;

  var container = dojo.byId("googleEvents");
  if (firstFeed) { firstFeed = false; container.innerHTML = ""; }

  if (eventsRoot.feed.getTotalResults().getValue()) {
    var titleDiv = dojo.doc.createElement("div");
    titleDiv.innerHTML = "<b><u>" + eventsRoot.feed.title.getText() + "</u></b>";
    container.appendChild(titleDiv);
    delay += 200;
    dojo.fadeIn({node:titleDiv}).play(delay);
  }

  var buffer = [];
  //Iterate over the items that were retrieved
  dojo.forEach(entries, function(entry){

    try {
      //Calling getValue returns a single value.
      var title = entry.getTitle();
      //var summary = entry.getSummary().getText();
      var link = entry.getHtmlLink();
      var times = entry.getTimes();
      var when = null;
      if (times.length > 0) {
        var start = times[0].getStartTime().getDate();
        when = dojo.date.locale.format(start);
      }
      var tip = "";
      var content = entry.getContent();
      if (content) {
        tip += (content.getText()) ? "Details: " + content.getText() + "<br/>" : "";
      }
      var locations = entry.getLocations();
      if (locations.length > 0) {
        tip += locations[0].getValueString() ? "Where: " + locations[0].getValueString() + "<br/>" : "";
      }

      var div = dojo.doc.createElement("div");
      var id = entry.id.getValue();
      dojo.attr(div, "id", id);
      div.innerHTML = "<b>" + when + "</b><br/><a href='" + link.getHref() + "' target='_new'>" + title.getText() + "</a><br/>&nbsp;";
      dojo.style(div, "opacity", "0");
      container.appendChild(div);
      if (tip) {
        var tool = new dijit.Tooltip({connectId: [id], label: tip});
      }

      //Fade in the results.
      delay += 200;
      dojo.fadeIn({node:div}).play(delay);
    } catch (e) {
      // Do nothing for now
    };
  });
}

function eventError(e) {
  alert("There was an error loading events: " + (e.cause ? e.cause.statusText : e.message));
}
