//Getting all events stored in the ProxyCal calendar and storing them in global
//variable events
ProxyCal.getEventFeed = function(uri){
	var query = new google.gdata.calendar.CalendarEventQuery(uri);
	var handleError = function(error) {
	  alert('Oops! Something went wrong! Refresh your browser');
	}
	var callback = function(root){
		for(i=0;i<root.feed.getEntries().length;i++)
		{
			event = root.feed.getEntries()[i];
			events.push(event);
		}
		links = root.feed.getLinks();
		var flag=0;
		for(i=0;i<links.length;i++)
		{
			link = links[i];
			if(link.rel=="next")
			{
				next_link = link.href;
				ProxyCal.getEventFeed(next_link);
				flag=1;
			}
		}
		if(flag==0)
		{
			events = events.sort(sortEvents);
			ProxyCal.displayCalendar();
		}
	}
	calendarService.getEventsFeed(query, callback, handleError);
}

ProxyCal.getEvents = function(){
	var feedUri = 'http://www.google.com/calendar/feeds/'+calendarId+'/private/full';

	var query = new google.gdata.calendar.CalendarEventQuery(feedUri);
	ProxyCal.generateLoader("Loading statuses for "+current_day.getMonthName()+"...");
	var startMin = google.gdata.DateTime.fromIso8601(current_day.toString("yyyy-MM")+'-01T00:00:00.000'+timezone_offset);
	var no_of_days = current_day.getDaysInMonth()+1;
	var startMax = google.gdata.DateTime.fromIso8601(current_day.toString("yyyy-MM-")+no_of_days+'T00:00:00.000'+timezone_offset);
	query.setMinimumStartTime(startMin);
	query.setMaximumStartTime(startMax);
	query.setMaxResults(999);
	//alert(feedUri);
	var handleError = function(error) {
	  alert('Oops!Something went wrong! Refresh your browser!');
	}

	var callback = function(root){
		var flag=0;
		events.length=0;
		events = root.feed.getEntries();
		links = root.feed.getLinks();
		for(i=0;i<links.length;i++)
		{
			link = links[i];
			if(link.rel=="next")
			{
				next_link = link.href;
				ProxyCal.getEventFeed(next_link);
				flag=1;
			}
		}
		if(flag == 0)
		{
			events = events.sort(ProxyCal.sortEvents);
			ProxyCal.displayCalendar();
		}
	}
	// Submit the request using the calendar service object. Notice the CalendarEventQuery
	// object is passed in place of the feed URI
	calendarService.getEventsFeed(query, callback, handleError);
}

//To change/update the status for a particular date i.e. oldeventdate
ProxyCal.updateEvent = function(eventdate,neweventtitle){
	/*
	* Update an event
	*/
	disablePopup();
	ProxyCal.generateLoader("Updating Calendar...");
	var feedUri = 'http://www.google.com/calendar/feeds/'+calendarId+'/private/full';

	// Create a CalendarEventQuery, and specify that this query is
	// applied toward the "private/full" feed
	var query = new google.gdata.calendar.CalendarEventQuery(feedUri);
	var eventdatemax = eventdate + 1;
	if(eventdate<10)
	{
		eventdate = "0"+String(eventdate);
	}
	if(eventdatemax<10)
	{
		eventdatemax = "0"+String(eventdatemax);
	}

	var oldeventmin = current_day.toString("yyyy-MM-")+eventdate;
	var oldeventmax = current_day.toString("yyyy-MM-")+eventdatemax;
	query.setMinimumStartTime(oldeventmin);
	query.setMaximumStartTime(oldeventmax);

	// Flag to indicate whether a match is found
	var eventFound = false;

	// The first matched event entry will have its title updated to this string
	var newTitle = neweventtitle;

	// This callback method that will be called when getEventsFeed() returns feed data
	var callback = function(result) {
		// Obtain the array of matched CalendarEventEntry
		var entries = result.feed.entry;

		// If there is matches for the full text query
		if (entries.length > 0) {	
		    // update the first matched event's title
		    var event = entries[0];
		    event.setTitle(google.gdata.Text.create(neweventtitle));
		    	event.updateEntry(function(result) {
					ProxyCal.getEvents();
				},
				handleError
			);
		} 
		else {
			// No match is found for the full text query
			alert('Cannot find event');
	 	}
	}

	// Error handler to be invoked when getEventsFeed() or updateEntry()
	// produces an error
	var handleError = function(error) {
	  alert(error);
	}

	// Submit the request using the calendar service object
	calendarService.getEventsFeed(query, callback, handleError);
}

ProxyCal.addEvent = function(eventdate,eventname){
	disablePopup();
	ProxyCal.generateLoader("Updating Calendar...");

	var feedUri = 'http://www.google.com/calendar/feeds/'+calendarId+'/private/full';

	// Create an instance of CalendarEventEntry representing the new event
	var entry = new google.gdata.calendar.CalendarEventEntry();

	// Set the title of the event
	entry.setTitle(google.gdata.Text.create(eventname));
	// Create a When object that will be attached to the event
	var when = new google.gdata.When();
	// Set the start and end time of the When object
	if(eventdate<10)
	{
		eventdate = "0"+String(eventdate);
	}
	var startTime = google.gdata.DateTime.fromIso8601(current_day.toString("yyyy-MM-")+eventdate+"T00:00:00.000"+timezone_offset);
	var endTime = google .gdata.DateTime.fromIso8601(current_day.toString("yyyy-MM-")+eventdate+"T15:00:00.000"+timezone_offset);
	when.setStartTime(startTime);
	when.setEndTime(endTime);

	// Add the When object to the event
	entry.addTime(when);

	// The callback method that will be called after a successful insertion from insertEntry()
	var callback = function(result) {
			document.getElementById("popup").innerHTML+="<br/><br/>Status Added!";
			ProxyCal.getEvents();
	}

	// Error handler will be invoked if there is an error from insertEntry()
	var handleError = function(error) {
	 alert(error);
	}

	// Submit the request using the calendar service object
	calendarService.insertEntry(feedUri, entry, callback,
	    handleError, google.gdata.calendar.CalendarEventEntry);	
}

ProxyCal.sortEvents = function(a,b){
	return a.getTimes()[0].endTime.substring(8,10) - b.getTimes()[0].endTime.substring(8,10);
}


//Add default events to the previous dates of this month ( if not already added)
ProxyCal.addEventsInBackground = function(){
	var current = current_day;
	var status;
	events_to_add_no = events_to_add.length;
	if(events_to_add.length>0)
	{
		ProxyCal.generateLoader("Adding Default statuses to "+current_day.getMonthName()+"...");
	}
	for(var i = 0;i < events_to_add.length; i++)
	{

		current.set({day:parseInt(events_to_add[i])});
		if(current.getDayName()!="Sunday" && current.getDayName()!="Saturday")
		{
			status = "went";
		}
		else
		{
			status = "off";
		}
		ProxyCal.addBackgroundEvent(events_to_add[i],status,i);
	}
	events_to_add.length=0;
}

//To add an event to a particular date i.e. eventdate
ProxyCal.addBackgroundEvent = function(eventdate,eventname,eventno){
	var feedUri = 'http://www.google.com/calendar/feeds/'+calendarId+'/private/full';

	// Create an instance of CalendarEventEntry representing the new event
	var entry = new google.gdata.calendar.CalendarEventEntry();

	// Set the title of the event
	entry.setTitle(google.gdata.Text.create(eventname));
	// Create a When object that will be attached to the event
	var when = new google.gdata.When();
	// Set the start and end time of the When object
	if(eventdate<10)
	{
		eventdate = "0"+String(eventdate);
	}

	var startTime = google.gdata.DateTime.fromIso8601(current_day.toString("yyyy-MM-")+eventdate+"T00:00:00.000"+timezone_offset);

	var endTime = google .gdata.DateTime.fromIso8601(current_day.toString("yyyy-MM-")+eventdate+"T15:00:00.000"+timezone_offset);
	//alert(current_day.toString("yyyy-MM-")+eventdate+"T02:00:00.000"+timezone_offset);
	when.setStartTime(startTime);
	when.setEndTime(endTime);

	// Add the When object to the event
	entry.addTime(when);

	// The callback method that will be called after a successful insertion from insertEntry()
	var callback = function(result) {
		events_to_add_no--;	
		//alert(events_to_add_no);
		//events_to_add.splice(eventno,0);
		//alert(events_to_add_no);
		if(events_to_add_no==0)
		{
			ProxyCal.getEvents();
		}
	}

	// Error handler will be invoked if there is an error from insertEntry()
	var handleError = function(error) {
	 alert(error);
	}

	// Submit the request using the calendar service object
	calendarService.insertEntry(feedUri, entry, callback,
	    handleError, google.gdata.calendar.CalendarEventEntry);
}

//To display the popup to change the status of a date
ProxyCal.changeEventPopup = function(eventdate){
	popup = document.getElementById("popup");
	var html = [];
	html.push("<a id='popupContactClose' href='javascript:disablePopup();'>x<\/a>");
	html.push("<h3>"+eventdate+" "+current_day.getMonthName()+" "+current_day.toString('yyyy')+"<\/h3>");
	html.push("Current Status :");
	for(var i=0;i < events.length;i++)
	{
		event = events[i];
		if(event.getTimes()[0].endTime.substring(8,10)==eventdate && event.getTimes()[0].endTime.substring(0,7)==current_day.toString("yyyy-MM"))
		{
			html.push(" "+event.getTitle().getText()+"<br/>");
			html.push("<h4>Change Status?<\/h4>");
			newevent="went";
			func = "ProxyCal.updateEvent("+eventdate+",'"+newevent+"')";
			html.push("<input id='but3' class='button' type='button' onclick="+func+" value='Went'><\/form>");
			newevent="notwent";
			func = "ProxyCal.updateEvent("+eventdate+",'"+newevent+"')";
			html.push("<input id='but3' class='button' type='button' onclick="+func+" value='Took a Leave'><\/form>");			
			newevent="off";
			func = "ProxyCal.updateEvent("+eventdate+",'"+newevent+"')";
			html.push("<input id='but3' class='button' type='button' onclick="+func+" value='College was Off'><\/form>");					
		}
	}
	popup.innerHTML = html.join('');
	PopUp();
}

//To display the popup for setting the status for a date for the first time

ProxyCal.addEventPopup = function(eventdate){
	popup = document.getElementById("popup");
	var html = [];
	html.push("<a id='popupContactClose' href='javascript:disablePopup();'>x<\/a>");
	html.push("<h3>"+eventdate+" "+current_day.getMonthName()+" "+current_day.toString('yyyy')+"<\/h3>");
	html.push("Currently Status for this Day hasn't been set. Add Status: <br/>");
	func = "ProxyCal.addEvent('"+eventdate+"','went')";
	html.push("<input id='but1' class='button' type='button' onclick="+func+" value='Went'><\/form>");
	func = "ProxyCal.addEvent('"+eventdate+"','notwent')";			
	html.push("<input id='but2' class='button' type='button' onclick="+func+" value='Took a Leave'><\/form>");
	func = "ProxyCal.addEvent('"+eventdate+"','off')";			
	html.push("<input id='but3' class='button' type='button' onclick="+func+" value='College was off'><\/form>");
	popup.innerHTML = html.join('');
	PopUp();
}