var d = new Date();
var curr_year = d.getFullYear();
var curr_month = d.getMonth();
var curr_day = d.getDate();
//alert(curr_day);
//var calendarurl = 'https://www.google.com/calendar/feeds/adelaidegreenies%40gmail.com/public/full';
//var calendarurl = 'https://www.google.com/calendar/feeds/developer-calendar@google.com/public/full';
var calendarurl = 'https://www.google.com/calendar/feeds/tuscarts.org_3r49ar99ktvvibfrj5tb217rqc%40group.calendar.google.com/public/full';
var bamacalendarurl = 'https://www.google.com/calendar/feeds/website%40tuscarts.org/public/full';
var caccalendarurl = 'https://www.google.com/calendar/feeds/tuscarts.org_2vl44g11vjiqui4engd80rnang%40group.calendar.google.com/public/full';
//var calendarurl = 'http://www.google.com/calendar/feeds/tuscarts.org_3r49ar99ktvvibfrj5tb217rqc%40group.calendar.google.com/private-80a807e3bceb519f5c457ad76eeea7a2/basic';

var monthNames = [ "January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December" ];
    
    function ucfirst (str) {
    str += '';
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1);
}

var storedEntries = [];
var start = curr_year +"-"+padNumber(curr_month+1)+"-"+padNumber(curr_day)+"T00:00:00.000-08:00";
var end = curr_year +"-"+padNumber(curr_month+2)+"-00T00:00:00.000-08:00";

function NumCmp(a, b) { return a.getDate()-b.getDate(); }

/**
 * Adds a leading zero to a single-digit number.  Used for displaying dates.
 */
function padNumber(num) {
  if (num <= 9) {
    return "0" + num;
  }
  return num;
}

function calendarswap() {
	storedEntries = [];
	var digits =  $(this).attr('data');
	var newinfo = digits + "/" + curr_year;
	var month = $(this).find('a').html();
	$('#activedate').html(ucfirst(month.toLowerCase()) + " " + curr_year);
	$('#hmpgcalendar .current').removeClass('current');
	$(this).addClass('current');
	$('#calendarevents h1, #calendarevents h2, #calendarevents h3, ').css('opacity','0.3');
	$('#calendarevents').css('background-image','url(/images/loader.gif)').css('background-repeat','no-repeat').css('background-position','center');
	var start = curr_year +"-"+digits+"-01T00:00:00.000-08:00";
	var end = curr_year +"-"+padNumber(parseInt(digits,10)+1)+"-00T00:00:00.000-08:00";
	preloadCalendar(bamacalendarurl, start, end);
	preloadCalendar(caccalendarurl, start, end);
	setTimeout(loadCalendar(calendarurl, start, end), 10000);
	return false;
}

$(function() { 
	$('#hmpgcalendar li').click(calendarswap);
	$('#calendarevents').html('<br/><br/><br/><br/><br/>').css('background-image','url(/images/loader.gif)').css('background-repeat','no-repeat').css('background-position','center');
	google.setOnLoadCallback(init);
});

google.load("gdata", "2.x");

function init() {
	// init the Google data JS client library with an error handler
	google.gdata.client.init(handleGDError);
	// load the code.google.com developer calendar
	// loadDeveloperCalendar(); 
	preloadCalendar(bamacalendarurl, start, end);
	preloadCalendar(caccalendarurl, start, end);
	loadCalendar(calendarurl, start, end);
}

/**
 * Loads the Google Developers Event Calendar
 */
/*
function loadDeveloperCalendar() {
	var start = curr_year +"-"+padNumber(curr_month+1)+"-01T00:00:00.000-08:00";
	var end = curr_year +"-"+padNumber(curr_month+1)+"-31T00:00:00.000-08:00";
  loadCalendarByAddress('developer-calendar@google.com', start, end);
}
*/


/**
 * Determines the full calendarUrl based upon the calendarAddress
 * argument and calls loadCalendar with the calendarUrl value.
 *
 * @param {string} calendarAddress is the email-style address for the calendar
 */ 
function loadCalendarByAddress(calendarAddress) {
  var calendarUrl = 'https://www.google.com/calendar/feeds/' +
                    calendarAddress + 
                    '/public/full';
  loadCalendar(calendarUrl);
}

/**
 * Uses Google data JS client library to retrieve a calendar feed from the specified
 * URL.  The feed is controlled by several query parameters and a callback 
 * function is called to process the feed results.
 *
 * @param {string} calendarUrl is the URL for a public calendar feed
 */  
function loadCalendar(calendarUrl, start, end) {
	var service = new 
      google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
	var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
//  alert(start + " " + end);
	var startMin = google.gdata.DateTime.fromIso8601(start);
	var startMax = google.gdata.DateTime.fromIso8601(end);
	query.setMinimumStartTime(startMin);
	query.setMaximumStartTime(startMax);  
	query.setOrderBy('starttime');
	query.setSortOrder('ascending');
	query.setMaxResults(8);
/*
  query.setFutureEvents(true);
  query.setSingleEvents(true);
  query.setMaxResults(10);
*/

  	service.getEventsFeed(query, listEvents, handleGDError);
}
/**
 * Uses Google data JS client library to retrieve a calendar feed from the specified
 * URL.  The feed is controlled by several query parameters and a callback 
 * function is called to process the feed results.
 *
 * @param {string} calendarUrl is the URL for a public calendar feed
 */  
function preloadCalendar(calendarUrl, start, end) {
	var service = new 
      google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
	var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
//  alert(start + " " + end);
	var startMin = google.gdata.DateTime.fromIso8601(start);
	var startMax = google.gdata.DateTime.fromIso8601(end);
	query.setMinimumStartTime(startMin);
	query.setMaximumStartTime(startMax);  
	query.setOrderBy('starttime');
	query.setSortOrder('ascending');
	query.setMaxResults(8);
/*
  query.setFutureEvents(true);
  query.setSingleEvents(true);
  query.setMaxResults(10);
*/

  	service.getEventsFeed(query, storeEvents, handleGDError);
}

/**
 * Callback function for the Google data JS client library to call when an error
 * occurs during the retrieval of the feed.  Details available depend partly
 * on the web browser, but this shows a few basic examples. In the case of
 * a privileged environment using ClientLogin authentication, there may also
 * be an e.type attribute in some cases.
 *
 * @param {Error} e is an instance of an Error 
 */
function handleGDError(e) {
  document.getElementById('jsSourceFinal').setAttribute('style', 
      'display:none');
  if (e instanceof Error) {
    /* alert with the error line number, file and message */
    alert('Error at line ' + e.lineNumber +
          ' in ' + e.fileName + '\n' +
          'Message: ' + e.message);
    /* if available, output HTTP error code and status text */
    if (e.cause) {
      var status = e.cause.status;
      var statusText = e.cause.statusText;
      alert('Root cause: HTTP error ' + status + ' with status text of: ' + 
            statusText);
    }
  } else {
    alert(e.toString());
  }
}

function storeEvents(feedRoot) {
	storedEntries.push(feedRoot.feed.getEntries());
}

/**
 * Callback function for the Google data JS client library to call with a feed 
 * of events retrieved.
 *
 * Creates an unordered list of events in a human-readable form.  This list of
 * events is added into a div called 'events'.  The title for the calendar is
 * placed in a div called 'calendarTitle'
 *
 * @param {json} feedRoot is the root of the feed, containing all entries 
 */ 
function listEvents(feedRoot) {
	storedEntries.push(feedRoot.feed.getEntries());
  
	var $eventDiv = $('#calendarevents');
	$eventDiv.html('');
//	alert(storedEntries.length);
	/* create a new unordered list */
	var $ul = $('<ul/>').attr('id','callist');
	/* set the calendarTitle div with the name of the calendar */
	for(var xx=0; xx<storedEntries.length; xx++) {
	
		var entries = storedEntries[xx];
		/* 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 endDateTime = null;
		    var endJSDate = null;
		    var newStartTime = null;
		    var startDates = new Array;
		    var endDates = new Array;
		    
		    var times = entry.getTimes();
		    var location = entry.gd$where[0].valueString;
		    if (times.length > 0) {
		    	if(times.length == 1) {
				    startDateTime = times[0].getStartTime();
				    startJSDate = startDateTime.getDate();
				} else {
					for(var x = 0; x<times.length; x++) {
						startDates[x] = times[x].getStartTime();
						endDates[x] = times[x].getEndTime();
					}
					
					startDates = startDates.sort(NumCmp);
					endDates = endDates.sort(NumCmp);
					
					startDateTime = startDates[0];
					endDateTime = endDates[endDates.length-1];
					startJSDate = startDateTime.getDate();
					endJSDate = endDateTime.getDate();
			    }
		    }
	
		    var entryLinkHref = null;
		    if (entry.getHtmlLink() != null) {
	    		entryLinkHref = entry.getHtmlLink().getHref();
		    }
		    var dateString = monthNames[startJSDate.getMonth()] + " " + startJSDate.getDate() + ", " + startJSDate.getFullYear();
		    if(endJSDate) {
		    	dateString += " - " + monthNames[endJSDate.getMonth()] + " " + endJSDate.getDate() + ", " + endJSDate.getFullYear();
		    } else {
		    	if (!startDateTime.isDateOnly()) {
		//	    	dateString += " " + startJSDate.getHours() + ":" + padNumber(startJSDate.getMinutes());
		    	}
			}
		    var dateStringBasic = dateString;
	
		    if (!startDateTime.isDateOnly()) {
			    dateString += " " + startJSDate.getHours() + ":" + padNumber(startJSDate.getMinutes());
		    }
	
			var $li = $('<li/>').attr('starttime',padNumber(startJSDate.getFullYear()+startJSDate.getDate()+startJSDate.getMonth()+1)).append($('<h2/>').html(dateStringBasic)).append($('<h1/>').append($('<a/>').html(title).attr('href', entryLinkHref))).append($('<h3>').html(location));  
	
		    /* append the list item onto the unordered list */
	    	$li.appendTo($ul);
		}
	}
	
	$ul.appendTo($eventDiv);
	if($('#callist >li').size() == 0) {
		$eventDiv.html('<h2>No calendar entries found.</h2><br/>');
	}
	$('#callist > li').tsort({attr: 'starttime'});
	$('#callist > li:gt(8)').remove();
	$('#calendarevents').css('background-image','none');
	$('#homepage .col3').css('height','auto');
	fixcolheight();
}




