google.load("gdata", "1");
google.setOnLoadCallback(getMyFeed);



var feedUrl = "http://www.google.com/calendar/feeds/daviddotmac%40gmail.com/public/full";
var dateArray;

function getMyFeed() {
  
  var currentDate = new Date();
  var month = currentDate.getMonth();
  var year = currentDate.getFullYear();
  
  var myService = new google.gdata.calendar.CalendarService("MyCompany-MyApp-MyVersion");
  var query = new google.gdata.calendar.CalendarEventQuery(feedUrl);
  
  //var startMin = google.gdata.DateTime.fromIso8601(year + "-" + month + "-" + daysInMonth(year, month) + "T23:59:59");
  //var startMax = google.gdata.DateTime.fromIso8601(year + "-" + month + "-01T23:59:59");
  //query.setMinimumStartTime(startMin);
  //query.setMaximumStartTime(startMax);
  
  query.setOrderBy('starttime');
  query.setSortOrder('ascending');
  
  query.setFutureEvents(true);

  myService.getEventsFeed(query, handleMyFeed, handleError);
}

function changeMonth(year, month, inst) {

  var myService = new google.gdata.calendar.CalendarService("MyCompany-MyApp-MyVersion");
  var query = new google.gdata.calendar.CalendarEventQuery(feedUrl);
 
  //query.setMaximumStartTime(Date(year, month - 1, daysInMonth(year, month), 23, 59, 59));
  //query.setMinimumStartTime(Date(year, month - 1, 1 , 0, 0, 0));

   query.setOrderBy('starttime');
  query.setSortOrder('ascending');
  
  query.setFutureEvents(true);
  
  myService.getEventsFeed(query, handleMyFeed, handleError);
}

var handleMyFeed = function(root) {
  //alert("This feed's title is: " + root.feed.getTitle().getText());

  // Obtain the array of matched CalendarEventEntry
  var eventEntries = root.feed.entry //.getEntries();

  // If there is matches for the date query
  if (eventEntries.length > 0) {
    
    // make the array the correct size
    dateArray = new Array(eventEntries.length);
    
    for (var i = 0; i < eventEntries.length; i++) {
      var event = eventEntries[i];
      // Print the event title of the matches
      
      var objWhen = event.getTimes();
      if (objWhen.length > 0)  {
        
        // we have an event, place it in the array
        
        var eventDate = event.getTimes()[0].getStartTime().getDate();
        strHTML = "";
        strHTML += "<img src=\"/images/top.png\" alt=\"\" />";
          
        strHTML += "<div class='event'>";
        strHTML += "<h2>" + event.getTitle().getText() + "&nbsp;</h2>";
        strHTML += "<p>" + createDateString(eventDate) + "</p>";
        if (event.getContent().getText().length > 0)
          strHTML += "<p class='comment'>" + event.getContent().getText() + "</p>";
        strHTML += "</div>";
        strHTML += "<img src=\"/images/bottom.png\" alt=\"\" />";
                
        dateArray[i] = [eventDate, event.getTitle().getText(), strHTML];
        
      }  
    }
  } 

  

  /*jQuery.each(jQuery(".hasEvent"), function () {
    
    $thisElement = jQuery(this);
   
    var startAttr = $thisElement.attr("onclick").toString().replace("return false;", "");
    $thisElement.attr("onclick", startAttr);
  });*/

  jQuery("#calendar").datepicker({
    beforeShowDay: checkDate,
    onChangeMonthYear: changeMonth,
    onSelect: dateSelected,
    nextText: "&raquo;",
    prevText: "&laquo;"
  });

  

}

// Error handling for debugging.
var handleError = function(e) {
  alert("There was an error!");
  alert(e.cause ? e.cause.statusText : e.message);
}

function daysInMonth(year, month) {
  var dd = new Date(year, month, 0);
  return dd.getDate();
}

function createDateString(d) {
  var d_names = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
  var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

  var curr_day = d.getDay();
  var curr_date = d.getDate();
  var sup = "";
  if (curr_date == 1 || curr_date == 21 || curr_date ==31)
    sup = "st";
  else if (curr_date == 2 || curr_date == 22)
    sup = "nd";
  else if (curr_date == 3 || curr_date == 23)
    sup = "rd";
  else
    sup = "th";

  var curr_month = d.getMonth();
  var curr_year = d.getFullYear();

  var a_p = "";
  var curr_hour = d.getHours();
  if (curr_hour < 12)
    a_p = "am";
  else
    a_p = "pm";
  
  if (curr_hour == 0)
    curr_hour = 12;
  if (curr_hour > 12)
    curr_hour = curr_hour - 12;
  
  var curr_min = d.getMinutes();
  curr_min = curr_min + "";

  if (curr_min.length == 1)
    curr_min = "0" + curr_min;
  
  return d_names[curr_day] + " " + curr_date + "<sup>" + sup + "</sup> " + m_names[curr_month] + " " + curr_year + " " + curr_hour + ":" + curr_min + a_p;

}


/// Function that will check a specific date and return any tooltip that has to be shown for this date
function checkDate(date) {

  var foundDate = false;
  var tooltip;

  for (var i = 0; i < dateArray.length; i++)
  { 
    if (dateArray[i][0].toDateString() === date.toDateString())
    {
      // we've found this date break out of the loop and return true
      foundDate = true;
      tooltip = dateArray[i][1];
      break;
    }
  }
  // check google's object to see if there is an event on this date
  if (foundDate)
  {
    // date has an event, return its tooltip
    return [true, "hasEvent", tooltip];
  }
  else
  {
    // no events on this day, return relevant array
    return [false, ""];
  }
 
}

var dateSelected = function(dateText, inst) {

  var selDate = new Date(dateText); 
  var toolText = "";
  
  for (var i = 0; i < dateArray.length; i++)
  {
    if (dateArray[i][0].toDateString() === selDate.toDateString())
    {
      // we've found this date break out of the loop and return true
      toolText = dateArray[i][2];
     
      break;
    }
  }
  
  jQuery("#popup").html(toolText);
  showPopup();
}
        
var showPopup = function() {

  /* var selDate = new Date();
  
  var toolText = "";
  
  for (var i = 0; i < dateArray.length; i++)
  {
    if (dateArray[i][0].toDateString() === selDate.toDateString())
    {
      // we've found this date break out of the loop and return true
      toolText = dateArray[i][2];
      break;
    }
  }

  jQuery("#popup").html(toolText); */
      
  jQuery("#popup").css({
    "position": "absolute",
    "left": posX - 25 + "px",
    "top": posY + "px"
  }).show();

}
  
var posX;
var posY;

jQuery(document).ready( function() {
    
  jQuery(document).mousemove(function(e) {
    posX = e.pageX;
    posY = e.pageY;
  });
  
  //jQuery(".hasEvent").live("click", function (e) {
    //showPopup(e);
  //});
  
  jQuery(document).mouseup(function () {
    var $popup = jQuery("#popup");
    if ($popup.is(":visible"))
      $popup.hide();
  });

});

