/* Google Calendar API **************************
*
*	NOTES: 	Matt Steen, Liquitech Web Tech. 2009
*
*************************************************** */

	var myService;
	var feedUrl;
	var calendarContainerElement;
	var calendarContainerElementId;
	var dateStartString;
	var dateEndString;
	var currentEventStartDate = null;
	
	function getTodaysGoogleCalendar(calendarContainerId, newFeedUrl)
	{
		var todaysDate = new Date();
		getGoogleCalendar(calendarContainerId, newFeedUrl, todaysDate, todaysDate);
	}
	
	function getGoogleCalendar(calendarContainerId, newFeedUrl, dateStart, dateEnd)
	{
		calendarContainerElementId = calendarContainerId;
		
		dateStartString = dateStart.getFullYear() + "-" + padNumber(dateStart.getMonth() + 1) + "-" + padNumber(dateStart.getDate());
		dateEndString = dateEnd.getFullYear() + "-" + padNumber(dateEnd.getMonth() + 1) + "-" + padNumber(dateEnd.getDate());
		
		google.load("gdata", "2.x");
		google.setOnLoadCallback(getMyFeed);
		
		feedUrl = newFeedUrl;
	}
	
	// Setup *************************
	
	function getMyFeed()
	{
		calendarContainerElement = getElement(calendarContainerElementId);	
		myService = new google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
		
		var query = new google.gdata.calendar.CalendarEventQuery(feedUrl);
		
		// Create and set the minimum and maximum start time for the date query
		//var todaysDate = new Date();
		//var todaysDate = new Date("10/21/2009");
		//var todayString = todaysDate.getFullYear() + "-" + padNumber(todaysDate.getMonth() + 1) + "-" + padNumber(todaysDate.getDate());
		
		// Time Format: 24 hour, Time Zone: Pacific - 08:00 
		var startMin = google.gdata.DateTime.fromIso8601(dateStartString + 'T00:00:00.000-08:00');
		var startMax = google.gdata.DateTime.fromIso8601(dateEndString + 'T23:59:59.000-08:00');
		query.setMinimumStartTime(startMin);
		query.setMaximumStartTime(startMax);
		
		query.setOrderBy("starttime");
		query.setSortOrder("ascending");
		query.setSingleEvents(true);
		
		myService.getEventsFeed(query, handleMyFeed, handleError);
		
	}
	
	function handleError(e)
	{
	  /*alert("There was an error!");
	  alert(e.cause ? e.cause.statusText : e.message);*/
	}
	
	// Display the Calendar **********************
	
	function handleMyFeed(myResultsFeedRoot)
	{
		 // Obtain the array of CalendarEventEntry
		 var entries = myResultsFeedRoot.feed.entry;    
		 
		 if (entries.length > 0)
		 {
			var temp = "";
			
			calendarContainerElement.innerHTML = "";
			
			 for (var i = 0; i < entries.length; i++ )
			 {
					var entry = entries[i];
					var eventTitle = entry.getTitle().getText();
					
					var startDateTime = null;
					var startJSDate = null;
					var showStartDate = null;
					
					var endDateTime = null;
					var endJSDate = null;
					var showEndDate = null;
					
					var times = entry.getTimes();
					
					if (times.length > 0)
					{
						startDateTime = times[0].getStartTime();
						startJSDate = startDateTime.getDate();
						
						if (startJSDate != null)
						{
							showStartDate = convertToStandardDate(startJSDate);
						}
						
						endDateTime = times[0].getEndTime();
						endJSDate = endDateTime.getDate();
						
						if (endJSDate != null)
						{
							showEndDate = convertToStandardDate(endJSDate);
						}
					}
					
					if ((showStartDate != null) & (showEndDate != null))
					{
						addCalendarEvent(eventTitle, convertToTextDate(startJSDate), convertToStandardTime(startJSDate), convertToStandardTime(endJSDate));	
					}
					
			  }
			  
			 // alert(temp);
		}
		else
		{
			calendarContainerElement.innerHTML = "No Events Today";
		}
		  
	}
	
	function convertToStandardDate(googleDateFormat)
	{
		var standardDate = (googleDateFormat.getMonth() + 1) + "/";
		standardDate += googleDateFormat.getDate() + "/";
		standardDate += padNumber(googleDateFormat.getYear() - 100) + " ";
		
		return standardDate;
	}
	
	function convertToStandardTime(googleDateFormat)
	{
		var thisHour 		= googleDateFormat.getHours()
		var thisMinute 		= padNumber(googleDateFormat.getMinutes());
		var thisAmPm		= "AM";
		
		if (thisHour > 11)
		{
			thisAmPm = "PM";
		}
		
		if (thisHour > 12)
		{
			thisHour = thisHour - 12;
		}
		
		var standardTime = padNumber(thisHour) + ":";
		standardTime += thisMinute + " ";
		standardTime += thisAmPm;
		
		return standardTime;
	}
	
	function convertToStandardDateTime(googleDateFormat)
	{
		var thisDate = convertToStandardDate(googleDateFormat);
		var thisTime = convertToStandardTime(googleDateFormat);
		
		return thisDate + " " + thisTime;
	}
	
	function convertToTextDate(googleDateFormat)
	{
		var monthArray 		= new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
		var weekDayArray 	= new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
		
		var textDate = weekDayArray[googleDateFormat.getDay()] + ", ";
		textDate += monthArray[googleDateFormat.getMonth()] + " ";
		textDate += googleDateFormat.getDate() + ", ";
		textDate += googleDateFormat.getYear()
		//textDate += (googleDateFormat.getYear() - 100) + 2000;  (old line)
		
		return textDate;
		
	}
	
	function padNumber(num)
	{
		if (num <= 9)
		{
			return "0" + num;
		}
	  
		return num;
	}

	
	function addCalendarEvent(eventTitle, eventStartDate, eventTimeStart, eventTimeEnd)
	{
		var newEvent = "<table cellpadding=\"0\" cellspacing=\"0\">";
		
		if (currentEventStartDate != eventStartDate)
		{
			newEvent 	+= "<tr class=\"ministrySectionRow\" valign=\"top\"><td colspan=\"2\">&nbsp;</td></tr>";
			newEvent 	+= "<tr class=\"ministrySectionRow\" valign=\"top\">";
			newEvent	+= "<td class=\"ministryEventDate\" colspan=\"2\">" + eventStartDate + "</td>";
			newEvent	+= "</tr>";
		}
		
		newEvent 	+= "<tr class=\"ministrySectionRow\" valign=\"top\">";
		newEvent 	+= "	<td class=\"ministryEventTimeStart\">" + eventTimeStart + " - " + eventTimeEnd + "</td>";
		newEvent 	+= "	<td class=\"ministryEventDetail\">" + eventTitle + "</td>";
		newEvent 	+= "</tr>";
		
		calendarContainerElement.innerHTML += newEvent;
		
		currentEventStartDate = eventStartDate;
	}
	
	
	