/**
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">';
	
	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><span class="event-title">' + itemTitle + '</span><br />';
			outputHTML += '<span class="event-info-keyword">When: </span>' + formatTimeOutput(itemTimeRaw) + '<br />';
			outputHTML += '<span class="event-info-keyword">Where: </span>' + itemLocation + '<br />';
			outputHTML += '<span class="event-info-keyword">Description: </span>' + itemDescr + '<br />';
			outputHTML += '<a href="' + itemLink + '&ctz=America/Los_Angeles" target="_blank">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;
	}
	
	formattedTime += " on ";
	formattedTime += formatMonthOutput(month) + " ";
	formattedTime += date + ", ";
	formattedTime += year;
	
	return (formattedTime);
}

/* 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 "January";
		case 2: return "February";
		case 3: return "March";
		case 4: return "April";
		case 5: return "May";
		case 6: return "June";
		case 7: return "July";
		case 8: return "August";
		case 9: return "September";
		case 10: return "October";
		case 11: return "November";
		case 12: return "December";
		default: return "";
	}
}

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

