var CFC = {};

CFC.gCal = function(){

	function formatGCalTime(gCalTime) { 
	  var remtxt = gCalTime;
	  var totalCorrMins = 0;

	  var year = consume('\\d{4}');
	  consume('-?');
	  var month = consume('\\d{2}');
	  consume('-?');
	  this.dateMonth = consume('\\d{2}');
	  var timeOrNot = consume('T');

	  function consume(retxt) {
	    var match = remtxt.match(new RegExp('^' + retxt));
	    if (match) {
	      remtxt = remtxt.substring(match[0].length);
	      return match[0];
	    }
	    return '';
	  }

	  if (timeOrNot == 'T') {
	    var hours = consume('\\d{2}');
	    consume(':?');
	    var mins = consume('\\d{2}');
	    consume('(:\\d{2})?(\\.\\d{3})?');
	    var zuluOrNot = consume('Z');

	    if (zuluOrNot != 'Z') {
	      var corrPlusMinus = consume('[\\+\\-]');
	      if (corrPlusMinus != '') {
	        var corrHours = consume('\\d{2}');
	        consume(':?');
	        var corrMins = consume('\\d{2}');
	        totalCorrMins = (corrPlusMinus=='-' ? 1 : -1) * 
	            (Number(corrHours) * 60 + 
		    (corrMins=='' ? 0 : Number(corrMins)));
	      }
	    } 

	    var originalDateEpoch = Date.UTC(year, month - 1, dateMonth, hours, mins);
	    var gmtDateEpoch = originalDateEpoch + totalCorrMins * 1000 * 60;
	    var ld = new Date(gmtDateEpoch);

	    dateString = (ld.getMonth() + 1) + '/' + ld.getDate() + ' at ' + 
	        ((ld.getHours()>12)?(ld.getHours()-12):(ld.getHours()===0?12:
		ld.getHours())) + ':' + ((ld.getMinutes()<10)?('0' + 
		ld.getMinutes()):(ld.getMinutes())) + ' ' + 
		((ld.getHours()>=12)?'PM':'AM');
	  } else {
	    dateString =  parseInt(month, 10) + '/' + parseInt(dateMonth, 10);
	  }
		return dateString;
		
	}

	function listEvent(root, divId) {
	  var feed = root.feed;
	  var events = document.getElementById(divId);

	  if (events.childNodes.length > 0) {
	    events.removeChild(events.childNodes[0]);
	  }	  

	  var ul = document.createElement('ul');

	  for (var i = 0; i < feed.entry.length; i++) {
	    var entry = feed.entry[i];
	    var title = entry.title.$t;
	    var start = entry['gd$when'][0].startTime;
	    var end = entry['gd$when'][0].endTime;

	    for (var linki = 0; linki < entry['link'].length; linki++) {
	      if (entry['link'][linki]['type'] == 'text/html' &&
	          entry['link'][linki]['rel'] == 'alternate') {
	        var entryLinkHref = entry['link'][linki]['href'];
	      }
	    }

	    var dateString = formatGCalTime(start);
	    var li = document.createElement('li');
			li.appendChild(document.createTextNode(dateString));
	    ul.appendChild(li);
	  }
	  events.appendChild(ul);
	}

	this.insertAgenda = function(root) {
	  listEvent(root, 'date');
	}
		
}();
