var myService;
//var feedurl1 = "http://www.google.com/calendar/feeds/beckerschool@gmail.com/private/full";
//var feedurl1 = "http://www.google.com/calendar/feeds/congregationemanuelhouston%40gmail.com/private-35602beb9940991adb61b8e07c7cb290/full";
//var feedurl1 = "http://www.google.com/calendar/feeds/congregationemanuelhouston@gmail.com/private/full";
var feedurl1 = "http://www.google.com/calendar/feeds/beckerschool%40gmail.com/private-5e85e682726696ffbc7cdd0c26e11a57/full";



/* Loads the Google data JavaScript client library */
google.load("gdata", "1");
google.setOnLoadCallback(setupMyService);




function setupMyService() {
  myService = new google.gdata.calendar.CalendarService('becker');
  loadCalendar(feedurl1);
}


/** 
* 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) { 

	document.getElementById('loader').style.display = "block";
	var nowString; 
	var currentTime = new Date();
	var month = currentTime.getMonth() + 1;
	var day = currentTime.getDate();
	var year = currentTime.getFullYear();
	nowString = ( year + "-" + padNumber(month) + "-" + day );
	
	
	var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
	query.setOrderBy('starttime');  
	query.setSortOrder('ascending');  
	query.setFutureEvents(false); 
	query.setSingleEvents(true); 
	query.setMaxResults(14);
	query.setMinimumStartTime(nowString);
	
	myService.getEventsFeed(query, listEvents, handleGDError);
	
}



/** 
* 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) {  
	
	var entries = feedRoot.feed.getEntries();  
	var eventDiv = document.getElementById('events');  
	
	if (eventDiv.childNodes.length > 0) {
    eventDiv.removeChild(eventDiv.childNodes[0]);
	}     
	/* create a new container div */  
	var div = document.createElement('div');  
	
	/* 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 descr = entry.getContent().getText(); 
		
		var startDateTime = null;    
		var startJSDate = null;
		var dateString = "";   
		
		var endDateTime = null;    
		var endJSDate = null;
		var dateString2 = "";
		
		var times = entry.getTimes();  
		  
		if (times.length > 0) {      
			startDateTime = times[0].getStartTime();     
	   		startJSDate = startDateTime.getDate(); 
			endDateTime = times[0].getEndTime();     
	   		endJSDate = endDateTime.getDate();   
			
			var compensateForAMPM;
			var AMPM;
			if (startJSDate.getHours() > 12) {
			compensateForAMPM = (startJSDate.getHours() - 12);
			AMPM = "PM";
			} else {
			compensateForAMPM = (startJSDate.getHours());
			AMPM = "AM";
			}
			
			var compensateForAMPM2;
			var AMPM2;
			if (endJSDate.getHours() > 12) {
			compensateForAMPM2 = (endJSDate.getHours() - 12);
			AMPM2 = "PM";
			} else {
			compensateForAMPM2 = (endJSDate.getHours());
			AMPM2 = "AM";
			}
			
			
	    }    
		if (startDateTime.isDateOnly()) {
			//then we know we have a span or a full day so we do not need times
			//add start date
			dateString = (startJSDate.getMonth() + 1) + "/" + startJSDate.getDate() + "/" + startJSDate.getYear(); 
			//check for end date match, if it's ONE day off we're going to assume it's a single day event and leave that off
			var dateCompare1 =new Date(startJSDate.getYear(), startJSDate.getMonth(), startJSDate.getDate()) //Month is 0-11 in JavaScript
			var dateCompare2 =new Date(endJSDate.getYear(), endJSDate.getMonth(), endJSDate.getDate()) //Month is 0-11 in JavaScript
			//Get 1 day in milliseconds
			var one_day=1000*60*60*24

			//Calculate difference btw the two dates, and convert to days
			var diff = (Math.ceil(dateCompare2-dateCompare1)/(one_day))


			
			if (diff > 1) {
				//span, add second date to string
				dateString += " - " + (endJSDate.getMonth() + 1) + "/" + endJSDate.getDate() + "/" + endJSDate.getYear();
			}
		
		} else {
			//we have a time so we assume we need start date but start AND end time
			dateString = (startJSDate.getMonth() + 1) + "/" + startJSDate.getDate() + "/" + startJSDate.getYear(); 
			dateString += "  " + compensateForAMPM + ":" + padNumber(startJSDate.getMinutes()) + AMPM + " - " + compensateForAMPM2 + ":" + padNumber(endJSDate.getMinutes()) + AMPM2;
		}
		  
		
		
		
		
		
		
		
		var selfLinkHref = null;    
		selfLinkHref = entry.getSelfLink().getHref();    
	        
		
		var span = document.createElement('span');    
	 
		span.appendChild(document.createTextNode(dateString)); 
		
		span.appendChild(document.createElement('br'));   
		//span.appendChild(document.createTextNode(title + ' - ' + descr));
		titleHolder = document.createElement('strong');  
		titleHolder.appendChild(document.createTextNode(title));
		span.appendChild(titleHolder);
		
		span.appendChild(document.createElement('br'));   
		span.appendChild(document.createElement('br'));  
		
		//updateLink = document.createElement('a');      
		//updateLink.setAttribute('href', 'javascript: void(0)');  
		//updateLink.setAttribute('ref', selfLinkHref); 
		//updateLink.setAttribute('alt', outputDiv); 
		//updateLink.onclick = updatePrep;
		//updateLink.appendChild(document.createTextNode('~'));     
		
		//span.appendChild(updateLink);
		//span.appendChild(document.createTextNode('   '));
		//deleteLink = document.createElement('a');      
		//deleteLink.setAttribute('href', 'javascript: void(0)');  
		//deleteLink.setAttribute('ref', selfLinkHref); 
		//deleteLink.setAttribute('alt', 'delete');	 
		//deleteLink.onclick = deleter;
		//deleteLink.appendChild(document.createTextNode('x'));     
		
		//span.appendChild(deleteLink); 
		   
		         
		/* append the list item onto the containter */    
		div.appendChild(span); 
	}	
	eventDiv.appendChild(div);
	//eventDiv.innerHTML = div;
	
	document.getElementById('loader').style.display = "none";
	
	
}

/** 
* 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());  
	}
}
/** 
* Adds a leading zero to a single-digit number.  Used for displaying dates. 
*/
function padNumber(num) {  
	if (num <= 9) {    
		return "0" + num;  
		}  
	return num;
}