(function($){

TravelPlanner.User = {

	loggedIn: false,
	info: {},	
	travelPad: [],
	savedTrips: [],

	init: function(){

		$('#trip-title').val('name your trip');
		
		$('.close-control-box').live('click', function(){
			var el = $(this);
			el.parent().hide();
			
			return false;
		});
		
		$('#trip-title')
			.click(function(){
				var el = $(this);
				el.focus().select();
			
				return false;
			}).blur(function(){
				var el = $(this);
				if (!el.val().length || el.val() === 'name your trip') {
					el.val('name your trip');
					TravelPlanner.Data.name = null;
				} else {
					TravelPlanner.Data.name = el.val();
				}
				
			});

		$('#saved-trips-box ol li a.edit-saved-trip').live('click', function(){
			if (!TravelPlanner.hasChanges || confirm('You did some changes in this trip without saving. Are you sure you want to load the saved trip?')){
				var el = $(this);
				var id = $(this).attr('href').split('#loadTrip-')[1];
				var data = TravelPlanner.User.savedTrips[id].json_data;
				TravelPlanner.loadTrip(data);
				$('#trip-title').val(el.parent().find('strong').text());
				$('.control-box').hide();
				// Set timeout because loadTrip will set hasChanges to true.
				setTimeout(function(){
					TravelPlanner.hasChanges = false;
				}, 10);
			}
			
			return false;
		});

		$('#saved-trips-box ol li a.delete-saved-trip').live('click', function(){
			var el = $(this);
			if (confirm('Are you sure you want to delete "' + el.parent().find('strong').text() + '"?')){
				var id = $(this).attr('href').split('#deleteTrip-')[1];
				TravelPlanner.User.deleteSavedTrip(id);
				$('.control-box').hide();
			}
			
			return false;
		});

		$('#travel-pad-box ol li a').live('click', function(){
			var el = $(this);
			var id = $(this).attr('href').split('#')[1];
			var htmlbody = $('html,body');
			if (!TravelPlanner.setHomeAirport){
				var homeAiport = $('#homeairport');
				htmlbody.animate({
					scrollTop: homeAiport.offset().top + homeAiport.outerHeight() - $(window).scrollTop()
				}, function(){
					$('#homeAirportField').focus().select();
					TravelPlanner.pub('message', ['error', 'noHomeAirport']);
				});
			} else {
				var addDestination = $('#add-destination');
				htmlbody.animate({
					scrollTop: addDestination.offset().top + addDestination.outerHeight() - $(window).scrollTop()
				}, function(){
					$('#destinationsSelect').val(id).trigger('change');
					$('#travelplanner .link-accept-destination').click();
				});
			}
			$('.control-box').hide();
			
			return false;
		});
		
		$('#share-trip').live('click', function(){
			var el = $(this);
			var box = $('#share-box');
			var id = null;

			$.each(TravelPlanner.User.savedTrips, function(i, d){
				if (d.trip_name === TravelPlanner.Data.name) {
					id = d.id;
					return false;
				}
			});

			if (!id) {
				msg = 'You need to save your trip before you can share.';
				TravelPlanner.User.showControlMessage(msg, 500);
				$('#trip-title').focus();
				return false;
			}

			var html = '';
			html += _.template(TravelPlanner.Templates.shareBox, {
				shareLink: 'http://travelplanner.southeastasia.org/trip/' + id,
				shareTitle: TravelPlanner.Data.name,
				shareDesc: 'Southeast Asia\'s Travel Planner.'
			});

			box.find('ol').html(html);

			$('.control-box').hide();
			box.show();

			return false;
		});

		$('#save-trip').live('click', function(){
			var el = $(this);
			var msg = '';
			if (!TravelPlanner.Data || !TravelPlanner.Data.destinations || TravelPlanner.Data.destinations.length<=1 ){
				msg = 'Please select your home airport and add at least one destination.';
				TravelPlanner.User.showControlMessage(msg, 500);
				return false;
			}
			
			var trip_name = TravelPlanner.Data.name;

			var title = $('#trip-title').val();
			if (!trip_name) var trip_name = (title.length && title === 'name your trip') ? '' : title;
			
			TravelPlanner.Data.name = trip_name;
			
			if (!TravelPlanner.Data.name) {
				msg = 'Please enter your trip name.';
				TravelPlanner.User.showControlMessage(msg, 500);
				$('#trip-title').focus();
				return false;
			}

			var overwrite = false;
			$.each(TravelPlanner.User.savedTrips, function(i, d){
				if (d.trip_name === trip_name) {
					overwrite = true;
					return false;
				}
			});

			var json_data = $.toJSON(TravelPlanner.Data);
			var screen_name = TravelPlanner.User['info'].screen_name;
			var member_id = TravelPlanner.User['info'].member_id;

			if (trip_name){
				$.post('/api/save_trip', {
						trip_name: trip_name,
						screen_name: screen_name,
						member_id: member_id,
						json_data: json_data
					}, function(data){
						if (!data) return false;
						console.log('Successfully saved ' + trip_name + ' to the database.');
						TravelPlanner.User.loadSavedTrips();
						TravelPlanner.hasChanges = false;
						msg = 'Successfully saved "' + trip_name + '".';
						if (overwrite) msg = 'Successfully updated "' + trip_name + '".';
						TravelPlanner.User.showControlMessage(msg, 500, true);
					});
			}

			return false;
		});

		$('#saved-trips').live('click', function(){
			var el = $(this);
			var box = $('#saved-trips-box');
			var html = '';

			if (TravelPlanner.User.savedTrips.length > 0){
				$.each(TravelPlanner.User.savedTrips, function(i, d){
					html += _.template(TravelPlanner.Templates.savedTripsBox, {
						tripIndex: i,
						tripID: d.id,
						tripName: d.trip_name
					});
				});
				box.find('ol').html(html);
			} else {
				box.find('ol').html('<li><span class="no-result">you have no saved trips</span></li>');
			}

			$('.control-box').hide();
			box.show();

			return false;
		});
		
		$('#travel-pad').live('click', function(){
			var el = $(this);
			var box = $('#travel-pad-box');

			var html = '';
			if (TravelPlanner.User.travelPad.length > 0){
				$.each(TravelPlanner.User.travelPad, function(i, d){
					$.each(d, function(j, city){
						var activities_html = '';
						$.each(city, function(k, activity){
							activities_html += '<em>' + activity.title + '</em>';
						});
						html += _.template(TravelPlanner.Templates.travelPadBox, {
							padID: TravelPlanner.Utils.getDestinationIndex(j),
							padCity: j,
							activityItems: activities_html
						});
					});
				});
				box.find('ol').html(html);
			} else {
				box.find('ol').html('<li><span class="no-result">There are no destinations in your travel pad</span></li>');
			}
			
			$('.control-box').hide();
			box.show();

			return false;
		});

		TravelPlanner.User.checkLoggedIn();
	},
	
	showControlMessage: function(msg, timeout, msgType){
		if (!timeout) timeout = 5000;
		if (!msgType) msgType = false;
		var el = $('#control-msg');
		if (msgType) el.addClass('success');
		el.text(msg).fadeIn(1000).fadeTo(2000, 1).fadeOut(2000);
	},
	
	checkLoggedIn: function(){
		var url = 'http://www.southeastasia.org/index.php/ajaxrequests/whoami?callback=?';
		TravelPlanner.User.loggedIn = false;
		$.getJSON(url, function(data){
			if (data && data.screen_name){
				TravelPlanner.User.loggedIn = true;
				TravelPlanner.User['info'] = data;

				$('#Container .memberNav').html(_.template('<li>'
					+ 'Welcome '
					+ '<a href="{rootURL}/user/profile/{username}/">{username}</a>, '
					+ '<a href="{rootURL}?ACT=10">Log out</a>, '
					+ '<a href="{rootURL}/user/settings/">Settings</a>'
				+ '</li>', {
					rootURL: TravelPlanner.rootURL,
					username: data.screen_name
				}));

				TravelPlanner.User.loadSavedTrips();
				TravelPlanner.User.loadTravelPad(data.screen_name);

				$('#planner').addClass('logged-in');
			} else {
				TravelPlanner.User.loggedIn = false;
				TravelPlanner.User['info'] = {};

				$('#Container .memberNav').html(_.template('<li>'
					+ '<a href="{rootURL}/user/login/" class="seperator">Sign In</a> '
					+ '<a class="linkRegister" href="{rootURL}/user/register/">Register</a>'
				+ '</li>', {
					rootURL: TravelPlanner.rootURL
				}));

				$('#planner').removeClass('logged-in');
			}
			console.log('User logged in: ' + TravelPlanner.User.loggedIn);
		});
	},

	loadSavedTrips: function(){
		var screen_name = TravelPlanner.User['info'].screen_name;
		var member_id = TravelPlanner.User['info'].member_id;
		var url = '/api/saved_trips/?screen_name=' + screen_name + '&member_id=' + member_id;
		$.getJSON(url, function(data){
			if (data){
				TravelPlanner.User.savedTrips = [];
				$.each(data, function(i, d){
					TravelPlanner.User.savedTrips.push(d);
				});
				$('#saved-trips .qty').text('(' + data.length + ')');
			} else {
				$('#saved-trips .qty').text('(0)');
			}
		});
	},
	
	deleteSavedTrip: function(id){
		var screen_name = TravelPlanner.User['info'].screen_name;
		var member_id = TravelPlanner.User['info'].member_id;
		var url = '/api/delete_saved_trip/?screen_name=' + screen_name + '&member_id=' + member_id + '&trip=' + id;
		$.getJSON(url, function(data){
			if (data && data.length){
				TravelPlanner.User.loadSavedTrips();
			}
		});
	},

	loadTravelPad: function(username){
		var url = 'http://www.southeastasia.org/geo.php/travelpad.json?verbose=1&callback=?';
		TravelPlanner.User.travelPad = [];

		$.getJSON(url, function(data){
			var html = '';
			var travelPadCount = 0;
			if (data && data.length){
				var data_array = {};
				TravelPlanner.User.travelPad = [];
				$.each(data, function(i, d){
					if (d.city && d.city.length){
						if (!data_array[d.city]) {
							travelPadCount++;
							data_array[d.city] = [];
						}
						var ttd_item = {};
						ttd_item['entry_id'] = d.entry_id;
						ttd_item['title'] = d.title;
						data_array[d.city].push(ttd_item);
					}
				});
				TravelPlanner.User.travelPad.push(data_array);
				$('#travel-pad .qty').text('(' + travelPadCount + ')');

				$('#Container .memberNav').append(_.template('<li>'
					+ '<a href="{rootURL}/travel-pad/{username}/" class="travelpaditems travelPadLink">'
					+ data.length
					+ ' Items</a>'
					+ ' in your travel pad'
				+ '</li>', {
					rootURL: TravelPlanner.rootURL,
					username: data.screen_name
				}));

			} else {
				TravelPlanner.User.travelPad = [];
				$('#travel-pad .qty').text('(0)');
			}
		});
	}
};


})(jQuery);
