google.gdata.client.init(function() { });

function ListEvents(feed)
{
	alert('test');
}

function GoogleCalendar(calendarAddress)
{
	this.calendarUrl = 'http://www.google.com/calendar/feeds/' + calendarAddress + '/public/full';
	this.service = new google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');

	this.loadDayEvents = function(datestring)
	{
		var query = new google.gdata.calendar.CalendarEventQuery(oGCal.calendarUrl);
		//alert(this.calendarUrl);
		query.setOrderBy('starttime');
		query.setSortOrder('ascending');
		query.setMaxResults(10);

		var startMin = google.gdata.DateTime.fromIso8601(datestring + 'T00:00:00.000-08:00');
		var startMax = google.gdata.DateTime.fromIso8601(datestring + 'T23:59:59.000-08:00');

		query.setMinimumStartTime(startMin);
		query.setMaximumStartTime(startMax);

		// @@@ hack for now
		oGCal.service.getEventsFeed(query, oGCal.listEventsLoader);
	}

	this.highlightDays = function(datestring)
	{
		var query = new google.gdata.calendar.CalendarEventQuery(oGCal.calendarUrl);
		query.setOrderBy('starttime');
		query.setSortOrder('ascending');
		query.setMaxResults(10);

		var year = datestring.substr(0, 4);
		var month = datestring.substr(4, 2);
		
		var d = new Date();
		d.setYear(year);
		d.setMonth(parseInt(month), 0);
		var daysInMonth = d.getDate();

		var startDateStr = year + '-' + month + '-01T00:00:00.000-08:00';
		var endDateStr = year + '-' + month + '-' + daysInMonth + 'T23:59:59.000-08:00';

		var startMin = google.gdata.DateTime.fromIso8601(startDateStr);
		var startMax = google.gdata.DateTime.fromIso8601(endDateStr);
		query.setMinimumStartTime(startMin);
		query.setMaximumStartTime(startMax);
	
		//alert(year + '-' + month + '-' + daysInMonth + 'T23:59:59.000-08:00');

		// @@@ hack for now
		oGCal.service.getEventsFeed(query, oGCal.highlightDaysLoader);
	}

	this.highlightDaysLoader = function(feedRoot)
	{
		var rel;

		var entries = feedRoot.feed.getEntries();

		var len = entries.length;
		for (var i = 0; i < len; i++) 
		{
			var entry = entries[i];
			var startDateTime = null;
			var oDate = null;

			var title = entry.getTitle().getText();
			//alert(title);

			var times = entry.getTimes();

			if (times.length > 0)
			{
				startDateTime = times[0].getStartTime();
				oDate = startDateTime.getDate();

				rel = oDate.getFullYear() + '-' + oCal.zeroPad(oDate.getMonth()+1) + '-' + oCal.zeroPad(oDate.getDate());
				//alert(rel);

				$("div[rel='" + rel + "']").addClass('cal_event_day');
			}
		}
	}

	this.listEventsLoader = function(feedRoot) 
	{
		var entries = feedRoot.feed.getEntries();
		var eventDiv = document.getElementById('events');
		if (eventDiv.childNodes.length > 0)
		{
			eventDiv.removeChild(eventDiv.childNodes[0]);
		}	  
		/* create a new unordered list */
		var ul = document.createElement('ul');
		/* set the calendarTitle div with the name of the calendar */
		document.getElementById('calendarTitle').innerHTML = "Calendar: " + feedRoot.feed.title.$t;
		/* loop through each event in the feed */
		var len = entries.length;
		for (var i = 0; i < len; i++) 
		{
			var entry = entries[i];
			var title = entry.getTitle().getText();
			var startDateTime = null;
			var startJSDate = null;
			var times = entry.getTimes();
			if (times.length > 0) 
			{
				startDateTime = times[0].getStartTime();
				startJSDate = startDateTime.getDate();
			}
			var entryLinkHref = null;
			if (entry.getHtmlLink() != null) 
			{
				entryLinkHref = entry.getHtmlLink().getHref();
			}
			var dateString = (startJSDate.getMonth() + 1) + "/" + startJSDate.getDate();
			if (!startDateTime.isDateOnly()) 
			{
				dateString += " " + startJSDate.getHours() + ":" + oCal.zeroPad(startJSDate.getMinutes());
			}
			var li = document.createElement('li');
			
			/* if we have a link to the event, create an 'a' element */
			if (entryLinkHref != null) 
			{
				entryLink = document.createElement('a');
				entryLink.setAttribute('href', entryLinkHref);
				entryLink.setAttribute('target', '_blank');
				entryLink.appendChild(document.createTextNode(title));
				li.appendChild(entryLink);
				li.appendChild(document.createTextNode(' - ' + dateString));
			}
			else 
			{
				li.appendChild(document.createTextNode(title + ' - ' + dateString));
			}	    
			
			/* append the list item onto the unordered list */
			ul.appendChild(li);
		}
		eventDiv.appendChild(ul);
	}

	//google.setOnLoadCallback(init);

}
