/**
gCalJSON
Copyright 2006 Mark Percival - Percival Industries, LLC
Released under GPL
A JSON implementation of gCalAjax.
**/


var today = new Date();
var startDate = today.getFullYear() + '-';
function leadingZero(nr) {
	if (nr < 10) nr = "0" + nr;
	return nr;
}
startDate += leadingZero(today.getMonth()+1); 
startDate += '-';
startDate += leadingZero(today.getDate()); 

gCalFeed += '?alt=json-in-script&callback=jsonhandler&orderby=starttime&singleevents=true&sortorder=ascending&futureevents=true';
gCalFeed += '&start-min='+startDate;
gCalFeed += '&max-results=' + maxResults;

AddOnload(kickStart);

function kickStart() {
    RSSRequest(gCalFeed);
	setHTML("upcomingstatus","Loading calendar data...");
}

function RSSRequest(url) {
	var headTag = document.getElementsByTagName("head").item(0);
	var scriptTag = document.createElement("script");
	scriptTag.src = url;
	headTag.appendChild( scriptTag );
}

function jsonhandler(response) {
	var feed = response.feed;
	var outputHTML = "";
	var itemTimePrev = new Date();
	itemTimePrev.setTime(0);
	
	if(feed.entry) { 
		for (var i = 0 ; i <= feed.entry.length -1; i++) {
	      var entry = feed.entry[i];
	      var itemTitle = entry['title'].$t;
		  var itemLink = entry['link'][0].href;
		  var itemTimeRaw = entry['gd$when'][0].startTime;

		  var isAllDay = false; //init isAllDay variable
	      if (itemTimeRaw.length <= 10) isAllDay = true; //just the date is only 10 digits = all day event
	      var itemTime = new Date();
	      itemTime.setTime (Date.UTC(itemTimeRaw.substr(0,4),(itemTimeRaw.substr(5,2)-1),itemTimeRaw.substr(8,2),itemTimeRaw.substr(11,2),itemTimeRaw.substr(14,2)));
	      if ((itemTime.getUTCDate()!=itemTimePrev.getUTCDate())||(itemTime.getUTCMonth()!=itemTimePrev.getUTCMonth()))
	        outputHTML += '<li class=upper>' + getDayName(itemTime) + ' ' + getMonthName(itemTime) + ' ' + itemTime.getUTCDate() + '</li>';
	                    
	      outputHTML += '<br>'; 
	      if (!isAllDay) outputHTML += getTimeFormatted(itemTime) + ' - ';                
	      outputHTML += '<a href="' + itemLink + '">' + itemTitle + '</a><br>';
	      itemTimePrev.setTime(itemTime); //Save the last timestamp for next iteration comparison	  
	    }
	outputHTML += '<li class=upper>See <a href="http://www.google.com/calendar/embed?src=uwokendo%40gmail.com" target=_new>full events calendar...</a></li>';
	setHTML("gcalajax", outputHTML);
	setHTML("upcomingstatus", "");
	}
	else {setHTML("upcomingstatus", "No future events.");}
}

/*
* Time Format - Day of Week
*/
function getDayName(dateObject) {
    var d_names = new Array("Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat");
    return(d_names[dateObject.getUTCDay()]);
}

/*
* Time Format - Month
*/
function getMonthName(dateObject) {
    var m_names = new Array("January", "February", "March", 
    "April", "May", "June", "July", "August", "September", 
    "October", "November", "December");
    return(m_names[dateObject.getUTCMonth()]);
}

/*
* Time Format - Hour
*/
function getTimeFormatted(dateObject) {
    var hours = dateObject.getUTCHours();
    var minutes = dateObject.getUTCMinutes();
    var formattedTime = null;
    if (is24Hour) {
        if (minutes < 10){minutes = "0" + minutes;}
        formattedTime = hours + ':' + minutes;
        return (formattedTime);
    }
    else {
        var ampm = "AM";
        if (hours > 12){
            hours = hours - 12;
            ampm = "PM";}
        if (hours == 12){ampm = 'PM';}
        if (hours == 0) {hours = 12;}
        if (minutes < 10){minutes = "0" + minutes;}
        formattedTime = hours + ':' + minutes + ' ' + ampm;
		return (formattedTime);
    }
}

function setHTML(div, data)
{
	document.getElementById(div).innerHTML = data;
}

function AddOnload(myfunc) //Load before page loads if Mozilla/Firefox. If IE just do it the same old slow way. Thanks Microsoft.
{
	if(window.addEventListener)
	window.addEventListener('load', myfunc, false);
	else if(window.attachEvent)
	window.attachEvent('onload', myfunc);
}    
