var gCalendar = (function(){
	//google.load('gdata', '2.x');
	var _allEntries = [];
	var _config = {
		queryType: null,
		calendarUrl: null,
		startDate: null,
		endDate: null,
		callback: null
	};
	var _handleGDError = function(e){
		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());
		  }
	};
	var _setDateQuery = function(startIndex){		
		var query = new google.gdata.calendar.CalendarEventQuery(_config.calendarUrl);			
		var startMin = google.gdata.DateTime.fromIso8601(_config.startDate, true);			
		var startMax = google.gdata.DateTime.fromIso8601(_config.endDate, true);		
		query.setMinimumStartTime(startMin);
		query.setMaximumStartTime(startMax);	
		query.setOrderBy('starttime');
	  	query.setSortOrder('ascending');
		query.setSingleEvents(true);
		query.setStartIndex(startIndex);
		query.setMaxResults(1000);
		return query;
	};
	var _callback = function(root){
		var eventEntries = root.feed.getEntries();	
	  	if (eventEntries.length > 0) {		
			_allEntries = _allEntries.concat(eventEntries);		
			_execQuery(_setDateQuery(eventEntries.length + _allEntries.length));
		} else {
			_config.callback(_allEntries, _config);
		}
	};
	var _execQuery = function(query){
		var service = new google.gdata.calendar.CalendarService('gCalendar');				
  		service.getEventsFeed(query, _callback, _handleGDError);
	};
	var _start = function(){
		_allEntries = [];
		google.gdata.client.init(_handleGDError);
		if(_config.queryType == 'date'){
			_execQuery(_setDateQuery(1));
		}					
	};
	return {
		init: function(url, params){						
			_config = params;
			_config.calendarUrl = 'http://www.google.com/calendar/feeds/' +
			                    url + 
			                    '/public/full';						
			//google.setOnLoadCallback(_start);				
			google.load('gdata', '2.x', {'callback': _start});
		}
	};
})();
