protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

#if !DEBUG
            FlurryWP8SDK.Api.LogPageView();
#endif

            string tripId;

            if (NavigationContext.QueryString.TryGetValue("tripId", out tripId))
            {
                if (!String.IsNullOrEmpty(tripId))
                {
                    IUnitOfWork unitOfWork = SimpleIoc.Default.GetInstance<IUnitOfWork>();

                    Path pinnedPath = unitOfWork.PathRepository.GetPinned(Guid.Parse(tripId), unitOfWork.PublicTransportOperatorRepository.GetAll());
                    User user = unitOfWork.UserRepository.GetUser();

                    List<PathOption> pathOptions = new List<PathOption>();
                    pathOptions.Add(pinnedPath.PathOption);

                    PathResultsModel results = new PathResultsModel(new Address(pinnedPath.LocationText, pinnedPath.LocationText, pinnedPath.Location), new Address(pinnedPath.DestinationText, pinnedPath.DestinationText, pinnedPath.Destination), pathOptions, SimpleIoc.Default.GetInstance<IBumbleApiService>(), user);

                    SimpleIoc.Default.Unregister<PathResultsModel>();

                    SimpleIoc.Default.Register<PathResultsModel>(() =>
                    {
                        return results;
                    });

                    SimpleIoc.Default.Unregister<TripResultsModel>();

                    SimpleIoc.Default.Register<TripResultsModel>(() =>
                    {
                        return new TripResultsModel();
                    });
                }
            }
           
            NavigationContext.QueryString.Clear();
        }
        private void ContinuePreviousTrip()
        {
            if (ContrinuePreviousTripImageOption == "/Images/64/W/TripKarmaWhite.png")
            {
                // Check if we must load last trip from the database first.
                if (!SimpleIoc.Default.ContainsCreated<PathResultsModel>())
                {
                    IEnumerable<Path> paths = UnitOfWork.PathRepository.GetAllCached(UnitOfWork.PublicTransportOperatorRepository.GetAll());

                    List<PathOption> pathOptions = paths.Select(x => x.PathOption).ToList();

                    Path firstPath = paths.First();

                    IEnumerable<TransportMode> modes = UnitOfWork.TransportModeRepository.GetAll();
                    // Attempt to add an uber option.
                    if (modes.Where(x => x.IsEnabled).Select(x => x.ApplicationTransportMode).Contains(ApplicationTransportMode.Taxi)
                        && base.InMemoryApplicationSettingModel.GetSetting(ApplicationSetting.UseUber).Value
                        && !UnitOfWork.UberTripRepository.ExistsCached())
                    {
                        double maxDurationInMinutes = (pathOptions.Where(x => !x.IsUber).SelectMany(x => x.Stages).Max(x => x.EndTime) - DateTime.Now).TotalMinutes;
                        pathOptions.Add(new PathOption(pathOptions.Count(), uberService, firstPath.Location, firstPath.Destination, maxDurationInMinutes, user.UberInfo.AccessToken));
                    }

                    PathResultsModel results = new PathResultsModel(new Address(firstPath.LocationText, firstPath.LocationText, firstPath.Location), new Address(firstPath.DestinationText, firstPath.DestinationText, firstPath.Destination), pathOptions, BumbleApiService, user);

                    if (SimpleIoc.Default.IsRegistered<PathResultsModel>())
                        SimpleIoc.Default.Unregister<PathResultsModel>();

                    SimpleIoc.Default.Register<PathResultsModel>(() =>
                    {
                        return results;
                    });

                    if (SimpleIoc.Default.IsRegistered<TripResultsModel>())
                        SimpleIoc.Default.Unregister<TripResultsModel>();

                    SimpleIoc.Default.Register<TripResultsModel>(() =>
                    {
                        return new TripResultsModel();
                    });
                }

                if (base.InMemoryApplicationSettingModel.GetSetting(ApplicationSetting.SkipTripSelection).Value)
                {
                    this.NavigationService.NavigateTo("/Views/TripDetails.xaml");
                }
                else
                {
                    this.NavigationService.NavigateTo("/Views/TripSelection.xaml");
                }
            }
            else
            {
                // Check if uber trip isn't already in memory
                if (!SimpleIoc.Default.ContainsCreated<UberTrip>())
                {
                    UberTrip uberTrip = UnitOfWork.UberTripRepository.GetAll().FirstOrDefault();

                    if (uberTrip != null)
                    {
                        if (SimpleIoc.Default.IsRegistered<UberTrip>())
                            SimpleIoc.Default.Unregister<UberTrip>();

                        SimpleIoc.Default.Register<UberTrip>(() =>
                        {
                            return uberTrip;
                        });

                        this.NavigationService.NavigateTo("/Views/UberTripDetails.xaml");
                    }
                }
                else
                {
                    this.NavigationService.NavigateTo("/Views/UberTripDetails.xaml");
                }
                
            }
        }
        private void Drumble()
        {
            if (!this.LocationSearchBoxModel.IsValid())
            {
                base.ShowPopup(CustomPopupMessageType.Error, AppResources.WhereToLocationErrorPopupText, AppResources.CustomPopupGenericOkMessage, null);
            }
            else if (!this.DestinationSearchBoxModel.IsValid())
            {
                base.ShowPopup(CustomPopupMessageType.Error, AppResources.WhereToDestinationErrorPopupText, AppResources.CustomPopupGenericOkMessage, null);
            }
            else if (departureTimeCustom != null && departureTimeCustom < DateTime.Now.AddMinutes(-5))
            {
                base.ShowPopup(CustomPopupMessageType.Error, AppResources.WhereToCustomDateErrorPopupText, AppResources.CustomPopupGenericOkMessage, null);
            }
            else
            {
                IEnumerable<TransportMode> modes = UnitOfWork.TransportModeRepository.GetAll();

                if (!modes.Any(x => x.IsEnabled))
                {
                    base.ShowPopup(CustomPopupMessageType.Error, AppResources.WhereToNoModesErrorPopupText, AppResources.CustomPopupGenericOkMessage, null);
                    return;
                }

                IEnumerable<OperatorSetting> operatorSettings = UnitOfWork.OperatorSettingRepository.GetAll();

                if (!operatorSettings.Any(x => x.IsEnabled))
                {
                    base.ShowPopup(CustomPopupMessageType.Error, AppResources.WhereToNoModesErrorPopupText, AppResources.CustomPopupGenericOkMessage, null);
                    return;
                }

                DrumbleButtonIsEnabled = false;
                DrumbleCancelButtonVisibility = Visibility.Visible;
                ShowHeaderLoader();

                Action getPath = async () =>
                {
                    try
                    {
                        DateTime createdDate = DateTime.UtcNow;

                        // Try save a recent trip if user allows it.
                        if (base.InMemoryApplicationSettingModel.GetSetting(ApplicationSetting.StoreRecent).Value)
                        {
                            Recent recentTripLocation = new Recent(this.LocationSearchBoxModel.TripOptions.Location, this.LocationSearchBoxModel.TripOptions.Text, createdDate, createdDate);
                            UnitOfWork.RecentTripRepository.Insert(recentTripLocation);

                            Recent recentTripDestination = new Recent(this.DestinationSearchBoxModel.TripOptions.Location, this.DestinationSearchBoxModel.TripOptions.Text, createdDate, createdDate);
                            UnitOfWork.RecentTripRepository.Insert(recentTripDestination);

                            UnitOfWork.Save();
                        }

                        int? timeOffSetInMinutes = null;
                        DateTime? seletedDepartureDate = null;

                        if (selectedPredefinedDepartureTime != null)
                        {
                            timeOffSetInMinutes = selectedPredefinedDepartureTime.DepartureTimeInMinutes;
                        }
                        else if (departureTimeCustom != null)
                        {
                            seletedDepartureDate = departureTimeCustom.Value.ToUniversalTime();
                        }
                        else
                        {
                            timeOffSetInMinutes = 0;
                        }

                        List<string> excludedModes = modes.Where(x => x.IsEnabled == false).Select(x => x.ApplicationTransportMode.ToString()).ToList();
                        List<string> excludedOperators = operatorSettings.Where(x => x.IsEnabled == false).Select(x => x.OperatorName).ToList();

                        cancellationTokenSource = new CancellationTokenSource();

                        IEnumerable<PathOption> pathOptionResults = await BumbleApiService.Path(cancellationTokenSource.Token, UnitOfWork.UserRepository.GetUser(), this.LocationSearchBoxModel.TripOptions.Location, this.DestinationSearchBoxModel.TripOptions.Location, isDeparting, seletedDepartureDate, timeOffSetInMinutes, excludedModes, excludedOperators);

                        List<PathOption> pathOptions = pathOptionResults.ToList();

                        // Attempt to add an uber option.
                        if (modes.Where(x => x.IsEnabled).Select(x => x.ApplicationTransportMode).Contains(ApplicationTransportMode.Taxi)
                            && base.InMemoryApplicationSettingModel.GetSetting(ApplicationSetting.UseUber).Value
                            && !UnitOfWork.UberTripRepository.ExistsCached())
                        {
                            double maxDurationInMinutes = (!pathOptions.Any()) ? 0 : (pathOptions.Where(x => !x.IsUber).SelectMany(x => x.Stages).Max(x => x.EndTime) - DateTime.Now).TotalMinutes;
                            pathOptions.Add(new PathOption(pathOptions.Count(), uberService, LocationSearchBoxModel.TripOptions.Location, DestinationSearchBoxModel.TripOptions.Location, maxDurationInMinutes, (user.UberInfo == null) ? null : user.UberInfo.AccessToken));
                        }

                        if (!pathOptions.Any())
                        {
                            base.ShowPopup(CustomPopupMessageType.Information, AppResources.WhereToNoResultsFound, AppResources.CustomPopupGenericOkMessage, null);

                            HideHeaderLoader();
                            DrumbleButtonIsEnabled = true;
                            DrumbleCancelButtonVisibility = Visibility.Collapsed;
                            return;
                        }

                        DateTime startDate = DateTime.Now;
                        UnitOfWork.PathRepository.RemoveAll();
                        UnitOfWork.Save();

                        foreach (PathOption pathOption in pathOptions.Where(x => !x.IsUber))
                        {
                            if (pathOption.EndTime != null)
                                UnitOfWork.PathRepository.Insert(new Path(pathOption.TripId, startDate, pathOption.EndTime.Value, LocationSearchBoxModel.TripOptions.Text, DestinationSearchBoxModel.TripOptions.Text, LocationSearchBoxModel.TripOptions.Location, DestinationSearchBoxModel.TripOptions.Location, false, pathOption.JsonSerializedObject, pathOption.Order));
                        }

                        UnitOfWork.Save();

                        PathResultsModel results = new PathResultsModel(this.LocationSearchBoxModel.TripOptions.Address, this.DestinationSearchBoxModel.TripOptions.Address, pathOptions, BumbleApiService, user);

                        SimpleIoc.Default.Unregister<PathResultsModel>();

                        SimpleIoc.Default.Register<PathResultsModel>(() =>
                        {
                            return results;
                        });

                        SimpleIoc.Default.Unregister<TripResultsModel>();

                        SimpleIoc.Default.Register<TripResultsModel>(() =>
                        {
                            return new TripResultsModel();
                        });

                        if (base.InMemoryApplicationSettingModel.GetSetting(ApplicationSetting.SkipTripSelection).Value)
                        {
                            this.NavigationService.NavigateTo("/Views/TripDetails.xaml");
                        }
                        else
                        {
                            this.NavigationService.NavigateTo("/Views/TripSelection.xaml");
                        }
                    }
                    catch (Exception e)
                    {
                        if (e.Message != "Cancelled")
                            base.ShowPopup(CustomPopupMessageType.Error, e.Message, AppResources.CustomPopupGenericOkMessage, null);
                    }

                    HideHeaderLoader();
                    DrumbleButtonIsEnabled = true;
                    DrumbleCancelButtonVisibility = Visibility.Collapsed;
                };

                DispatcherHelper.CheckBeginInvokeOnUI(getPath);
            }
        }