/*
* Create existing calendar of existing trip
* 
* Triggers: PANEL_OPENED, PANEL_CLOSING
*/
(function($) { 
$.ti.recalculateCalendarActivities = $.prototype = {
	
	// Update tripData for moved activity - this can be a new activity moved from the bag
	// Recieves: target, string id of droppable in format dXrX
	// Reciever: duration, number of days of activity
	addActivity: function(target, duration, activity) {
		var node, id, rel;
		
		// Rel contains the node id for this activity in the tripData object	
		rel = parseInt($(activity).attr('rel'), 10);
		// Get that activity node using the id obtained from the rel
		node = $.ti.utils.getArrayItem($.ti.tripData.trip.tripActivities.activity, 'id', rel);
		
		if(node.actRowColumnDays) {
			node.actRowColumnDays += ',' + target + '_' + duration;
		} else {
			node.actRowColumnDays = target + '_' + duration;
		}
//console.log('called1');		
		this.calculateHeader(activity, duration);
	},
	
	moveActivity: function(target, activity) {
		var node, id, rel;		
		// Rel contains the node id for this activity in the tripData object	
		rel = parseInt($(activity).attr('rel'), 10);
		// Get that activity node using the id obtained from the rel
		node = $.ti.utils.getArrayItem($.ti.tripData.trip.tripActivities.activity, 'id', rel);
		// First 4 characters of id contain the old grid reference
		id = $(activity).attr('id').substr(0, 4);
		// A reference must already exist so we replace the old with the new
		node.actRowColumnDays = node.actRowColumnDays.replace(id, target);
	},
	
	// Update the duration of an activity
	resizeActivity: function(activity, oldDuration, newDuration) {
		var rel, node, reference;
		
		rel = parseInt($(activity).attr('rel'), 10);
		node = $.ti.utils.getArrayItem($.ti.tripData.trip.tripActivities.activity, 'id', rel);		
		reference = $(activity).attr('id').split('_')[0];
		reference = reference.replace(/Activity/, '');
		
		node.actRowColumnDays = node.actRowColumnDays.replace(reference + '_' + oldDuration, reference + '_' + newDuration);	
//console.log('called1');	
		this.calculateHeader(activity, newDuration);	
	},
	
	// Remove and activity from tripData
	// activity: id of the activity
	// reference: the grid reference to remove
	deleteActivity: function(activity, reference) {		
		var node;
		
		node = $.ti.utils.getArrayItem($.ti.tripData.trip.tripActivities.activity, 'id', parseInt(activity, 10));
		
		// Delete reference
		node.actRowColumnDays = node.actRowColumnDays.replace(reference, '');
		
		// Tidy commas
		node.actRowColumnDays = $.ti.utils.tidyCommas(node.actRowColumnDays);		
	},
	
	// Clear ALL activities from the calender grid
	clearActivities: function() {
		$('.dayGridActivity', '#calendarDays').remove();
		// Resotore accommodation instruction if needed
		$('.dayGridAccommodation', '#calendarDays').each(function() {
			$.ti.createCalendarActivity.setInstruction(this);
		})
		$.ti.recalculateCalendarGrid.clearGrid();
		$.ti.recalculateCalendarActivities.clearGridReferences();
	},
	
	// Remove ALL grid position references from trip activities.
	clearGridReferences: function() {
		var activity;
		for(activity in $.ti.tripData.trip.tripActivities.activity) {
			if($.ti.tripData.trip.tripActivities.activity.hasOwnProperty(activity)) {
				if($.ti.tripData.trip.tripActivities.activity[activity].actRowColumnDays) {					
					delete $.ti.tripData.trip.tripActivities.activity[activity].actRowColumnDays;
				}
			}
		}
	},
	
	// Calculate the character limit for activity header
	calculateHeader: function(activity, duration, data) {
		duration = duration || 1;
		duration = (duration < 1) ? 1 : duration;
		var data_used = new Array();
		data_used.actName = '';
		//var data_used.actName = 'empty';
		var data_bag = $('#' + $(activity).attr('rel')).closest('li').data('data');
		
		if(data_bag === undefined) { 
			if(data === undefined){
				//do nothing	
				data_used = new Array();
				data_used.actName = ''; 
			}else{
				data_used = data;
			}
			  
		} 
		else { 
			data_used = data_bag;  
		}
	//	console.log('name:' + data_used.actName);
	//	console.log('data_bag:' + data_bag);
	//	console.log('data:' + data);
	//	var data_bag = $('#' + $(activity).attr('rel')).closest('li').data('data');
		if(data_used.actName == '') { data_used.actName = ''; } else {
			var heading = $.ti.utils.mixCase(data_used.actName);
			heading = $.ti.utils.truncate(heading, ($.ti.createTripCalendar.dayCharacterLimit*duration));
			$('.activityHeading', activity).html(heading);
		}
	}
	
};
})(jQuery);
