<!--
/**
 * Converts an xs:date or xs:dateTime formatted string into the local timezone
 * and outputs a human-readable form of this date or date/time.
 *
 * @param {string} gCalTime is the xs:date or xs:dateTime formatted string
 * @return {string} is the human-readable date or date/time string
 */

function linkify(inputText) {
    //URLs starting with http://, https://, or ftp://
    var replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
    var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');

    //URLs starting with www. (without // before it, or it'd re-link the ones done above)
    var replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
    var replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');

    //Change email addresses to mailto:: links
    var replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
    var replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');

    return replacedText;
}


function formatGCalTime(gCalTime) {

  // text for regex matches
  var remtxt = gCalTime;

  function consume(retxt) {
    var match = remtxt.match(new RegExp('^' + retxt));
    if (match) {
      remtxt = remtxt.substring(match[0].length);
      return match[0];
    }
    return '';
  }

  // minutes of correction between gCalTime and GMT
  var totalCorrMins = 0;

  var year = consume('\\d{4}');
  consume('-?');
  var month = consume('\\d{2}');
  consume('-?');
  var dateMonth = consume('\\d{2}');
  var eventdate = year+''+month+''+dateMonth;


var currentTime = new Date()
var currentmonth = currentTime.getMonth() + 1
var currentday = currentTime.getDate()
var currentyear = currentTime.getFullYear()

if (currentmonth < 10){var currentmonth = '0'+currentmonth;}
if (currentday < 10){var currentday = '0'+currentday;}

var todayis = currentyear+''+currentmonth+''+currentday;

  var timeOrNot = consume('T');

	var MonthsOfYear = new Array(12);
		MonthsOfYear[1] = "Jan";
		MonthsOfYear[2] = "Feb";
		MonthsOfYear[3] = "Mar";
		MonthsOfYear[4] = "Apr";
		MonthsOfYear[5] = "May";
		MonthsOfYear[6] = "Jun";
		MonthsOfYear[7] = "Jul";
		MonthsOfYear[8] = "Aug";
		MonthsOfYear[9] = "Sept";
		MonthsOfYear[10] = "Oct";
		MonthsOfYear[11] = "Nov";
		MonthsOfYear[12] = "Dec";



  // if a DATE-TIME was matched in the regex 
  if (timeOrNot == 'T') {
    var hours = consume('\\d{2}');
    consume(':?');
    var mins = consume('\\d{2}');
    consume('(:\\d{2})?(\\.\\d{3})?');
    var zuluOrNot = consume('Z');

    // if time from server is not already in GMT, calculate offset
    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)));
      }
    } 

    // get time since epoch and apply correction, if necessary
    // relies upon Date object to convert the GMT time to the local
    // timezone
    var originalDateEpoch = Date.UTC(year, month - 1, dateMonth, hours, mins);
    var gmtDateEpoch = originalDateEpoch + totalCorrMins * 1000 * 60;
    var ld = new Date(gmtDateEpoch);

    // date is originally in YYYY-MM-DD format
    // time is originally in a 24-hour format
    // this converts it to MM/DD hh:mm (AM|PM) 

	if (eventdate <= todayis) {
	dateString =  MonthsOfYear[parseInt(currentmonth, 10)] + ' ' + parseInt(currentday, 10);
	} else {
	dateString =  MonthsOfYear[parseInt(month, 10)] + ' ' + parseInt(dateMonth, 10);
	}


    //dateString = MonthsOfYear[(ld.getMonth()) + 1] + ' ' + ld.getDate();
//If you want times included:
    //dateString = (ld.getMonth() + 1) + '/' + ld.getDate() + ' ' + 
 	//((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 {
    // if only a DATE was matched
	if (eventdate <= todayis) {
	dateString =  MonthsOfYear[parseInt(currentmonth, 10)] + ' ' + parseInt(currentday, 10);
	} else {
	dateString =  MonthsOfYear[parseInt(month, 10)] + ' ' + parseInt(dateMonth, 10);
	}
  }
  return dateString;
}

function formatGCalEndTime(gCalTime) { 
  // text for regex matches
  var remtxt = gCalTime;

  function consume(retxt) {
    var match = remtxt.match(new RegExp('^' + retxt));
    if (match) {
      remtxt = remtxt.substring(match[0].length);
      return match[0];
    }
    return '';
  }

  // minutes of correction between gCalTime and GMT
  var totalCorrMins = 0;

  var year = consume('\\d{4}');
  consume('-?');
  var month = consume('\\d{2}');
  consume('-?');
  var dateMonth = consume('\\d{2}');

  var timeOrNot = consume('T');

	var MonthsOfYear = new Array(12);
		MonthsOfYear[1] = "Jan";
		MonthsOfYear[2] = "Feb";
		MonthsOfYear[3] = "Mar";
		MonthsOfYear[4] = "Apr";
		MonthsOfYear[5] = "May";
		MonthsOfYear[6] = "Jun";
		MonthsOfYear[7] = "Jul";
		MonthsOfYear[8] = "Aug";
		MonthsOfYear[9] = "Sept";
		MonthsOfYear[10] = "Oct";
		MonthsOfYear[11] = "Nov";
		MonthsOfYear[12] = "Dec";

  if (timeOrNot != 'T') {
	var dateMonth = dateMonth - 1;
	if (dateMonth == 0) {
		var month = month - 1;
			if (month == 0) { var month = 12; }
		var dateMonth = 32 - new Date(year, month, 32).getDate();
	}
  }

  // if a DATE-TIME was matched in the regex 
  if (timeOrNot == 'T') {
    var hours = consume('\\d{2}');
    consume(':?');
    var mins = consume('\\d{2}');
    consume('(:\\d{2})?(\\.\\d{3})?');
    var zuluOrNot = consume('Z');

    // if time from server is not already in GMT, calculate offset
    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)));
      }
    } 

    // get time since epoch and apply correction, if necessary
    // relies upon Date object to convert the GMT time to the local
    // timezone
    var originalDateEpoch = Date.UTC(year, month - 1, dateMonth, hours, mins);
    var gmtDateEpoch = originalDateEpoch + totalCorrMins * 1000 * 60;
    var ld = new Date(gmtDateEpoch);

    // date is originally in YYYY-MM-DD format
    // time is originally in a 24-hour format
    // this converts it to MM/DD hh:mm (AM|PM) 

    enddateString =  MonthsOfYear[parseInt(month, 10)] + ' ' + parseInt(dateMonth, 10);
    //enddateString = MonthsOfYear[(ld.getMonth()) + 1] + ' ' + ld.getDate();
//If you want times included:
    //enddateString = (ld.getMonth() + 1) + '/' + ld.getDate() + ' ' + 
 	//((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 {
    // if only a DATE was matched
    enddateString =  MonthsOfYear[parseInt(month, 10)] + ' ' + parseInt(dateMonth, 10);
  }
  return enddateString;
}

/**
 * Creates an unordered list of events in a human-readable form
 *
 * @param {json} root is the root JSON-formatted content from GData
 * @param {string} divId is the div in which the events are added
 */ 
function listEvents(root, divId) {
  var feed = root.feed;
  var events = document.getElementById(divId);

  if (events.childNodes.length > 0) {
    events.removeChild(events.childNodes[0]);
  }	  

  // create a new unordered list
  var ul = document.createElement('ul');

  // loop through each event in the feed
  for (var i = 0; i < feed.entry.length; i++) {
    var entry = feed.entry[i];
    var title = entry.title.$t;
    //var content = document.createTextNode(entry.content.$t);
    var content = entry.content.$t;
    var start = entry['gd$when'][0].startTime;
    var end = entry['gd$when'][0].endTime;

    // get the URL to link to the event
    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 contcon = content;
    var dateString = formatGCalTime(start);
    var enddateString = formatGCalEndTime(end);
    var li = document.createElement('li');
    var br = document.createElement('br');
    var span = document.createElement('span');
    // if we have a link to the event, create an 'a' element
    if (typeof entryLinkHref != 'undefined') {
      entryLink = document.createElement('a');
      entryLink.setAttribute('href', entryLinkHref);
      entryLink.appendChild(document.createTextNode(title));
	if (dateString >= enddateString) {
		li.appendChild(document.createTextNode(dateString));
	} else {
		li.appendChild(document.createTextNode(dateString + ' - ' + enddateString));
	}
      li.appendChild(br);
      li.appendChild(entryLink).target="_blank";
      li.appendChild(span);
      span.appendChild(document.createTextNode(contcon));
	} else {
	if (dateString >= enddateString) {
		li.appendChild(document.createTextNode(dateString));
	} else {
		li.appendChild(document.createTextNode(dateString + ' - ' + enddateString));
	}
      li.appendChild(br);
      li.appendChild(title);
      li.appendChild(span);
      span.appendChild(document.createTextNode(contcon));
    }	    

    // append the list item onto the unordered list
    ul.appendChild(li);
  }
  events.appendChild(ul);
}

/**
 * Callback function for the GData json-in-script call
 * Inserts the supplied list of events into a div of a pre-defined name
 * 
 * @param {json} root is the JSON-formatted content from GData
 */ 
function insertAgenda(root) {
  listEvents(root, 'agenda');
}
//-->
