/**
gCalJSON
Copyright 2006 Mark Percival -  SquarePush, LLC
mark@squarepush.com
Released under GPL
A JSON implementation of gCalAjax.
**/

var today = new Date();
var startDate = today.getFullYear() + '-';
startDate += (today.getMonth()+1 < 10) ? '0'+(today.getMonth()+1) : today.getMonth()+1; 
startDate += '-';
startDate += (today.getDate() < 10) ? '0'+today.getDate() : today.getDate();

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

RSSRequest(gCalFeed);


function RSSRequest(url) {
	document.write("<script type='text/javascript' language='javascript' src='");
	document.write(gCalFeed);
	document.write("'></script>");
}

function jsonhandler(response) {
	var feed = response.feed;
	var outputHTML = '<ul class="event" id="event-list">';
	
	if(feed.entry) {
		for (var i = 0 ; i < feed.entry.length; i++) {
			var entry = feed.entry[i];
			var itemTitle = entry['title'].$t;
			var itemLink = entry['link'][0].href;
			var itemTimeRaw = (entry['gd$when']) ? entry['gd$when'][0].startTime : "";
			var itemLocation = entry['gd$where'][0].valueString;
			var itemDescr = entry['content'].$t;
			outputHTML += '<li class="event"><div class="event-title">' + itemTitle + '</div>';
			outputHTML += '<div class="event-time-place"><span class="event-info-keyword">When: </span><time datetime="'+itemTimeRaw.toString()+'">' + formatTimeOutput(itemTimeRaw) +'</time><br class="event-timeplace-linebreak"/>';
			outputHTML += '<span class="event-info-keyword">Where: </span>' + itemLocation + '</div>';
			outputHTML += '<span class="event-info-keyword">Description: </span>' + itemDescr + '<br />';
			outputHTML += '<a href="' + itemLink + '&ctz=America/Los_Angeles" target="_blank" class="event-add-link" title="Add to Google Calendar">Add to Google Calendar</a></li>';
		}
			outputHTML += "</ul>";
			setHTML("gcalajax", outputHTML);
			setHTML("status", "");
	}
	else setHTML("status", "No future events.");
}

/*
* Time Format - Hour
*/
function formatTimeOutput(dateObj) {
	var dateStr = dateObj.toString();
	
	var year = dateStr.substr(0,4) * 1;
	var month = dateStr.substr(5,2) * 1;	/* Converts str to num */
	var date = dateStr.substr(8,2) * 1;
	var hours = dateStr.substr(11,2) * 1;
	var minutes = dateStr.substr(14,2);
	var timeShift = dateStr.substr(23,3) * 1;
	
	var formattedTime = "";
	hours = handleTimeShift(hours, timeShift);
	if (is24Hour) {
		formattedTime = hours + ':' + minutes;
	} else {
		var ampm = "AM";
		if (hours > 12) {
			hours = hours - 12;
			ampm = "PM";
		}
		if (hours == 12) { ampm = "PM"; }
		if (hours == 0) { hours = 12; }
		formattedTime = hours + ':' + minutes + " " + ampm;
	}
	
	var datetime = "";
	datetime += '<span class="event-date">';
	datetime += '<span class="event-month">' + formatMonthOutput(month) + '</span> ';
	datetime += '<span class="event-day">' + date + '</span>';
	datetime += '<span class="event-date-comma">, </span>';
	datetime += '<span class="event-year">' + year + '</span>';
	datetime += '</span>';
	
	datetime += '<span class="event-datetime-separator"> - </span>';
	datetime += '<span class="event-time">' + formattedTime + '</span>';
	
	return (datetime);
}

/* Note: this only works for minor shifts in time. It will NOT shift the date if necessary. */
function handleTimeShift(hours, timeShift) {
	hours -= timeShift; /* Shift to GMT */
	hours -= 7;  /* Shift to Pacific Time */
	return (hours);
}

function formatDayOutput(dayNum) {
	switch (dayNum) {
		case 0: return "Sunday";
		case 1: return "Monday";
		case 2: return "Tuesday";
		case 3: return "Wednesday";
		case 4: return "Thursday";
		case 5: return "Friday";
		case 6: return "Saturday";
		default: return "";
	}
}

function formatMonthOutput(monthNum) {
	switch (monthNum) {
		case 1: return "Jan";
		case 2: return "Feb";
		case 3: return "March";
		case 4: return "April";
		case 5: return "May";
		case 6: return "June";
		case 7: return "July";
		case 8: return "Aug";
		case 9: return "Sept";
		case 10: return "Oct";
		case 11: return "Nov";
		case 12: return "Dec";
		default: return "";
	}
}

function setHTML(div, data) {
	var placeToAdd = document.getElementById(div);
	if(placeToAdd != null) placeToAdd.innerHTML += data;
	else document.write(data);
}   

