/* Loads the Google data JavaScript client library */
google.load("gdata", "2.x");

function init() {
  // init the Google data JS client library with an error handler
  google.gdata.client.init(handleGDError);
}

/**
 * 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 objDate = new Date();
  var Today = DateToString(objDate);
  var service = new 
      google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
  var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl+'?start-min='+Today+'T00:00:00&start-max='+Today+'T23:59:00');
  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]);
  }	  
  /* create a new unordered list */
  var ul = document.createElement('ul');
  /* loop through each event in the feed */
  var len = entries.length;
  if(len != 0){
	  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();
	    if (!startDateTime.isDateOnly()) {
	      dateString = startJSDate.getHours() + ":" + 
	          padNumber(startJSDate.getMinutes());
	    }else{
	    	dateString = " ";
	    }
	    var li = document.createElement('li');
	    entryTime = document.createElement('span');
	    entryTime.className ="event-time"
	    entryTime.appendChild(document.createTextNode(dateString));

	    li.appendChild(document.createTextNode(title));	    
	    li.appendChild(entryTime);	    

	    /* append the list item onto the unordered list */
	    ul.appendChild(li);
	  }
	}else{
		var title = '本日予定のイベントはありません';
	    var li = document.createElement('li');
	    li.appendChild(document.createTextNode(title));

	    /* append the list item onto the unordered list */
	    ul.appendChild(li);
	}
	eventDiv.appendChild(ul);
}

function DateToString(objDate)
{
  var result = "";
  var temp;

  result += objDate.getFullYear();
  result += "-";

  temp = "0" + (objDate.getMonth() + 1);
  temp = temp.substr(temp.length - 2, temp.length);
  result += temp;
  result += "-";

  temp = "0" + objDate.getDate();
  temp = temp.substr(temp.length - 2, temp.length);
  result += temp;
  return result;
}

google.setOnLoadCallback(init);

