//google.load("dojo", "1.4");
google.load("gdata", "2.x");
dojo.require("dojo.parser");
dojo.require("dojox.data.FlickrStore");
dojo.require("dijit.dijit");

var pageCall;
var today;
var calURL = "http://www.google.com/calendar/feeds/6cpd6162gb17et40ec7ni9ms48@group.calendar.google.com/public/full";
//var picasaURL = "http://picasaweb.google.com/data/feed/base/user/105847255213610160601/albumid/5474657724736865361?alt=rss&kind=photo&hl=en_US"
var service;
var query;

function init() {
  // init the Google data JS client library with an error handler
  google.gdata.client.init(handleGDError);
  service = new google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
  query = new google.gdata.calendar.CalendarEventQuery(calURL);

  switch(pageCall) {
    case "home":
        loadCalendar(calURL);
        break;  
        
    case "shows":
        loadCalendar(calURL);
        getRecent(calURL);
        break;
        
    //case "photos":
    //    break;
        
    default: break;
  }    
}

google.setOnLoadCallback(init);

//QUERY FOR UPCOMING SHOWS
function loadCalendar(calendarUrl) {
    //var service = new
    //  google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
    //var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
    query.setOrderBy('starttime');
    query.setSortOrder('ascending');
    query.setFutureEvents(true);
    query.setSingleEvents(true);
    query.setMaxResults(10);
    
    service.getEventsFeed(query, listEvents, handleGDError);
}

//QUERY FOR RECENT SHOWS
function getRecent(calUrl) {
	//log("HIT query recent events");
	today = getToday();
	//var myService = new
	//  google.gdata.calendar.CalendarService('gdata-js-client-samples-simple');
	var query = new google.gdata.calendar.CalendarEventQuery(calUrl);
	query.setOrderBy('starttime');
	query.setSortOrder('descending');
	query.setFutureEvents(false);
	query.setSingleEvents(true);
	query.setMaximumStartTime(today);
	//log(today);
	service.getEventsFeed(query, listRecent, handleGDError);
	//log("Query service for recent");
}

/* RETRIEVE FUTURE EVENTS AND DISPLAY */
function listEvents(feedRoot) {
  var eventDiv = document.getElementById('entry');
  if (eventDiv != null) 
  {
	 var entries = feedRoot.feed.getEntries();
      //var sLink = "http://wildcatdaddies.com/shows/";
      if (eventDiv.childNodes.length > 0) {
        eventDiv.removeChild(eventDiv.childNodes[0]);
      }	  
      //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 h4 = document.createElement('h4');
        h4.appendChild(document.createTextNode(title)); 
          
        var where = entry.getLocations()[0].getValueString();
        
        var dateString = buildDate(entry);
        
        var entryLinkHref = null;
        if (entry.getHtmlLink() != null) {
          entryLinkHref = entry.getHtmlLink().getHref();
        }
        
        var entryDesc = entry.getContent().getText();
        var pp = document.createElement('p');
        var p2 = document.createElement('p');
        
        var showWhen = "When: " + dateString;
        var showWhere = "Where: " + where;
        pp.appendChild(document.createTextNode(showWhen));
        pp.appendChild(document.createElement('br'));
        pp.appendChild(document.createTextNode(showWhere));
        
        p2.appendChild(document.createTextNode(entryDesc));
        eventDiv.appendChild(h4);
        eventDiv.appendChild(pp);
        eventDiv.appendChild(p2);
      }
    } 
}

/* RETRIEVE RECENT EVENTS AND DISPLAY */
function listRecent(feedRoot) {
	var recentDiv = document.getElementById('recent');
	if (recentDiv != null)
	{
		var entries = feedRoot.feed.getEntries();
		//var sLink = "http://wildcatdaddies.com/shows/";
		if (recentDiv.childNodes.length > 0) {
			recentDiv.removeChild(recentDiv.childNodes[0]);
		}
		//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 h6 = document.createElement('h6');
			h6.appendChild(document.createTextNode(title));

			var where = entry.getLocations()[0].getValueString();

			//var dateString = buildDate(entry);
			var dateString = shortDate(entry);
			var entryLinkHref = null;
			if (entry.getHtmlLink() != null) {
				entryLinkHref = entry.getHtmlLink().getHref();
			}
			var pp = document.createElement('p');
			//var p2 = document.createElement('p');

			/*var showWhen = "When: " + dateString;
			var showWhere = "Where: " + where;
			pp.appendChild(document.createTextNode(showWhen));
			pp.appendChild(document.createElement('br'));
			pp.appendChild(document.createTextNode(showWhere));*/
			var info = dateString + " at " + where;
			pp.appendChild(document.createTextNode(info));

			recentDiv.appendChild(h6);
			recentDiv.appendChild(pp);
		}
	  //eventDiv.appendChild(ul);
	}
}

function handleGDError(e) {
  //document.getElementById('entry').setAttribute('style', 'display:none');
  if (e instanceof Error) {
    /* alert with the error line number, file and message */
    log('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;
      log('Root cause: HTTP error ' + status + ' with status text of: ' + 
            statusText);
    }
  } else {
    log(e.toString());
  }
}

function getToday() {
    var theDate = new Date();
    
    //MONTH MUST HAVE 2 DIGITS
    var moNum = theDate.getMonth() + 1;
    var month;
    if (moNum < 10) {
        month = "0" + moNum;
    }
    else { month = moNum; }
    
    today = theDate.getFullYear();
    today += "-";
    today += month;
    today += "-";
    today += theDate.getDate();
    
    return today;
}
function buildDate(entry)
{
    var d_names = new Array("Sunday", "Monday", "Tues.", "Wed.", "Thurs.", "Friday", "Saturday");
	/* display the date/time */
	var dateString = 'All Day Event';
	var times = entry.getTimes();
	if (times.length)
	{
		/* if the event has a date & time, override the default text */
		var startTime = times[0].getStartTime();
		var endTime = times[0].getEndTime();
		
		//Date
		var startJSDate = startTime.getDate();
		var endJSDate = new Date(endTime.getDate());
		
		//Day of the week
		var sDay = startJSDate.getDay();
		var eDay = endJSDate.getDay();
		sDay = d_names[sDay];
		eDay = d_names[eDay];
		
		//Start Time
		var sHr = startJSDate.getHours();
		var sMin = startJSDate.getMinutes();
		var sTime = formatTime(sHr, sMin);
		
		//End Time
		var eHr = endJSDate.getHours();
		var eMin = endJSDate.getMinutes();
		var eTime = formatTime(eHr, eMin);

		// If the start and end are dates (full day event)
		// then the end day is after the last day of the event (midnight that morning)
// 		var allDayEvent = false;
// 		if (startTime.isDateOnly() && endTime.isDateOnly())
// 		{
// 			endJSDate.setDate(endJSDate.getDate() - 1);
// 
// 			if (endJSDate.getTime() == startJSDate.getTime()) 
// 			{
// 				// This is a one day event.
// 				allDayEvent = true;
// 			}
// 		}
		
		var oneDayEvent = false;
		{
			var startDay = new Date(startJSDate.getFullYear(), startJSDate.getMonth(), startJSDate.getDate());
			var endDay = new Date(endJSDate.getFullYear(), endJSDate.getMonth(), endJSDate.getDate());
			if (startDay.getTime() == endDay.getTime())
			{
				oneDayEvent = true;
			}
		}

// 		if (allDayEvent)
// 		{
// 			dateString = 'All Day Event';
// 		}
		//else 
        if (oneDayEvent)
		{
			dateString = sDay;
			dateString += " ";
			dateString += formatDate(startJSDate);
			dateString += ' from ';
			dateString += sTime;
			dateString += ' to ';
			dateString += eTime;
		}
		else
		{
			if (!startTime.isDateOnly())
			{
				//dateString = startJSDate.toString("dddd MMMM d, yyyy h:mm");
				dateString = sDay;
    			dateString += " ";
			    dateString += formatDate(startJSDate);
			    dateString += sTime;
			}
			else
			{
				dateString = sDay;
    			dateString += " ";
			    dateString += formatDate(startJSDate);
			}
			dateString += ' to ';
			//dateString += endJSDate.toString("h:mm");
 			if (!endTime.isDateOnly())
 			{
 				//dateString += endJSDate.toString("MMMM d, yyyy h:mm");
 				dateString += eTime;
 			}
			//else
			//{
				//dateString += endJSDate.toString("dddd, MMMM d, yyyy");
			//}
		}
	}
	return dateString;
}
function shortDate(entry)
{
     /* display the date/time */
     var dateString;
	var times = entry.getTimes();
	if (times.length)
	{
		//Date
		var startTime = times[0].getStartTime();
		var startJSDate = startTime.getDate();
		var startDay = new Date(startJSDate.getFullYear(), startJSDate.getMonth(), startJSDate.getDate());
		dateString = formatDate(startJSDate);
	}
	return dateString;
}
function formatTime(hr, min) {
    var time = formatHr(hr);
    time += ":"
    time += formatMin(min);
    time += " " + getAP(hr);
    
    return time;    
}

function getAP(hr) {
    var ap = "";
    if (hr < 12)
    {
        ap = "AM";
    }
    else
    {
        ap = "PM";
    }
    return ap;
}

function formatHr(hr) {    
     if (hr == 0)
        {
            hr = 12;
        }
     if (hr > 12)
        {
            hr = hr - 12;
        }
     return hr;
}

function formatMin(m)   {
    curr_min = m + "";
    
    if (curr_min.length == 1)
       {
       curr_min = "0" + curr_min;
       }
       
    return curr_min;
}

function formatDate(date) {
    var m = date.getMonth();
    var yr = date.getFullYear();
    var d = date.getDate()
    if (d.length < 2)
    {
        d = d.slice(1);
    }
    var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", 
    "October", "November", "December");
	//Format string
	var sDate = m_names[m];
	sDate += " ";
	sDate += d;
	sDate += ", ";
	sDate += yr;
	
	return sDate;
}

function log(message)
{
	// Firebug debugging console
	console.log(message);
}

