/// <summary>
		/// Populates the page with content passed during navigation.  Any saved state is also
		/// provided when recreating a page from a prior session.
		/// </summary>
		/// <param name="sender">
		/// The source of the event; typically <see cref="NavigationHelper"/>
		/// </param>
		/// <param name="e">Event data that provides both the navigation parameter passed to
		/// <see cref="Frame.Navigate(Type, object)"/> when this page was initially requested and
		/// a dictionary of state preserved by this page during an earlier
		/// session.  The state will be null the first time a page is visited.</param>
		private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // TODO: Create an appropriate data model for your problem domain to replace the sample data
            //var sampleDataGroup = await SampleDataSource.GetGroupAsync("Group-4");

            //Task<Session> LoginTask = null;
            Task LoadingIndexTask = null;
            Task LoadingRecommandTask = null;
            //Task LoadingFavouriteTask = null;
            //Task LoadingRecentTask = null;
            Task LoginTask = null;

            if (this.RequestedTheme != AppGlobal.Settings.BackgroundTheme)
            {
                this.RequestedTheme = AppGlobal.Settings.BackgroundTheme;
            }

            ViewModel.IsLoading = true;

            await LoadConverAndRecent();

            if (!ViewModel.RecommandSection.IsLoaded && !ViewModel.RecommandSection.IsLoading)
            {
                LoadingRecommandTask = ViewModel.RecommandSection.LoadAsync();
            }

            //if (ViewModel.SeriesIndex == null)
            //{
            //    LoadingIndexTask = ViewModel.LoadSeriesIndexDataAsync().ContinueWith(async task =>
            //    {
            //        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            //        {
            //            if (SeriesIndexViewSource.View == null)
            //            {
            //                SeriesIndexViewSource.IsSourceGrouped = true;
            //                SeriesIndexViewSource.Source = ViewModel.SeriesIndex;
            //            }
            //            if (SeriesIndexViewSource.View != null)
            //                ViewModel.SeriesIndexGroupView = SeriesIndexViewSource.View.CollectionGroups;
            //        });
            //    });
            //}

            if (!AppGlobal.IsSignedIn)
            {
                LoginTask = ViewModel.TryLogInWithStoredCredentialAsync().ContinueWith(async task =>
                {
                    await ViewModel.FavoriteSection.LoadAsync(false, 9);
                });
            }
            else
            {
                ViewModel.IsSignedIn = true;
                ViewModel.UserName = AppGlobal.User.UserName;
                LoginTask = ViewModel.FavoriteSection.LoadAsync(false, 9);
            }

#if WINDOWS_APP
            if (HubScrollViewer != null)
                HubScrollViewer.ViewChanged += HubScrollViewer_ViewChanged;
#else //WINDOWS_PHONE_APP
			var statusBar = StatusBar.GetForCurrentView();
			statusBar.ProgressIndicator.Text = "Synchronizing...";
			statusBar.ProgressIndicator.ProgressValue = null;
			statusBar.ForegroundColor = ((SolidColorBrush)App.Current.Resources["AppBackgroundBrush"]).Color;
			await statusBar.HideAsync();
			await statusBar.ProgressIndicator.ShowAsync();
#endif

            if (LoadingRecommandTask != null)
                await LoadingRecommandTask;
            if (LoginTask != null)
                await LoginTask;
            if (LoadingIndexTask != null)
                await LoadingIndexTask;

            UpdateTile();

            ViewModel.IsLoading = false;

#if WINDOWS_APP

            foreach (var group in ViewModel.RecommandSection)
            {
                foreach (var item in group)
                {
                    try
                    {
                        await item.LoadDescriptionAsync();
                    }
                    catch (Exception exception)
                    {
                        Debug.WriteLine("Exception in loading volume description : ({0},{1}), exception : {3}", item.Title, item.Id, exception.Message);
                    }

                }
            }

            if (AppGlobal.Settings.EnableLiveTile)
                UpdateTile();
#else
			await statusBar.ProgressIndicator.HideAsync();
#endif
        }
		/// <summary>
		/// Populates the page with content passed during navigation.  Any saved state is also
		/// provided when recreating a page from a prior session.
		/// </summary>
		/// <param name="sender">
		/// The source of the event; typically <see cref="NavigationHelper"/>
		/// </param>
		/// <param name="e">Event data that provides both the navigation parameter passed to
		/// <see cref="Frame.Navigate(Type, object)"/> when this page was initially requested and
		/// a dictionary of state preserved by this page during an earlier
		/// session.  The state will be null the first time a page is visited.</param>
		private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
		{
			//var lv = LastReadSection.GetFirstDescendantOfType<ListViewItem>();
			//var position = lv.GetPosition(new Point(0,0) , LastReadSection);
			if (this.RequestedTheme != AppGlobal.Settings.BackgroundTheme)
			{
				this.RequestedTheme = AppGlobal.Settings.BackgroundTheme;
			} 
			ViewModel.IsLoading = true;
			var statusBar = StatusBar.GetForCurrentView();
			await statusBar.HideAsync();

			if (e.PageState != null && e.PageState.Count > 0 && (bool)e.PageState["IsSigninPopupOpen"])
				SigninPopup.IsOpen = true;

			SyncViewWithOrientation();

			//statusBar.ProgressIndicator.Text = "Synchronizing...";
			//statusBar.ProgressIndicator.ProgressValue = null;
			//statusBar.ForegroundColor = ((SolidColorBrush)App.Current.Resources["AppBackgroundBrush"]).Color;
			//await statusBar.ProgressIndicator.ShowAsync();
			if (AppGlobal.RecentList == null)
				await AppGlobal.LoadHistoryDataAsync();
			if (AppGlobal.RecentList.Count > 0)
			{
				ViewModel.LastReadSection = new HistoryItemViewModel(AppGlobal.RecentList[AppGlobal.RecentList.Count - 1]);
				await ViewModel.RecentSection.LoadLocalAsync(true);
			}
			else
			{
				ViewModel.LastReadSection = new HistoryItemViewModel
				{
					Position = new NovelPositionIdentifier
					{
						SeriesId = "337",
						VolumeNo = 0,
						VolumeId = "1138",
						ChapterNo = 0,
						ChapterId = "8683"
					},
					SeriesTitle = "机巧少女不会受伤",
					VolumeTitle = "第一卷 ",
					Description = "机巧魔术──那是由内藏魔术回路的自动人偶与人偶使所使用的魔术。在英国最高学府的华尔普吉斯皇家机巧学院里,正举行着一场选出顶尖人偶使「魔王」的战斗「夜会」。来自日本的留学生雷真和他的搭档──少女型态的人偶夜夜,为了参加「夜会」,打算挑战其他入选者,夺取对方的资格。他们锁定的目标是下届魔王呼声极高的候选人,别名「暴龙」的美少女夏琳!然而就在雷真向她挑战时,突然出现意外的伏兵……? 交响曲式学园战斗动作剧,第一集登场!",
					CoverImageUri = LightKindomHtmlClient.SeverBaseUri + "/illustration/image/20120813/20120813085826_34455.jpg"
				};
			}

			if (!AppGlobal.IsSignedIn)
			{
				await ViewModel.TryLogInWithStoredCredentialAsync();
			}
			else
			{
				ViewModel.IsSignedIn = true;
				ViewModel.UserName = AppGlobal.User.UserName;
			}

			await ViewModel.RecommandSection.LoadAsync(false,20);
			if (AppGlobal.Settings.EnableLiveTile)
				UpdateTile();

			await ViewModel.FavoriteSection.LoadAsync();

			//IsLoadingIndex = true;
			//await ViewModel.LoadSeriesIndexDataAsync();
			//if (SeriesIndexViewSource.View == null)
			//{
			//	SeriesIndexViewSource.IsSourceGrouped = true;
			//	SeriesIndexViewSource.Source = ViewModel.SeriesIndex;
			//}
			//if (SeriesIndexViewSource.View != null)
			//	ViewModel.SeriesIndexGroupView = SeriesIndexViewSource.View.CollectionGroups;
			//IsLoadingIndex = false;

			ViewModel.IsLoading = false;

			//await statusBar.HideAsync();
			//await statusBar.ProgressIndicator.HideAsync();

		}
 /// <summary>
 /// Populates the page with content passed during navigation.  Any saved state is also
 /// provided when recreating a page from a prior session.
 /// </summary>
 /// <param name="navigationParameter">The parameter value passed to
 /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
 /// </param>
 /// <param name="pageState">A dictionary of state preserved by this page during an earlier
 /// session.  This will be null the first time a page is visited.</param>
 private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     //webView.Navigate(new Uri("http://www.linovel.com/main/login.html?from=www.linovel.com/"));
     //WebViewNavigate(new Uri("http://useragentapi.com/"));
     //webView.Visibility = Visibility.Visible;
     progressRing.IsActive = true;
     progressRing.Visibility = Visibility.Visible;
     RetryHintTextBlock.Visibility = Visibility.Collapsed;
     WebViewNavigate(new Uri("http://www.linovel.com/userauth/index.html"));
 }
        /// <summary>
        /// Gets the NavigationHelper used to aid in navigation and process lifetime management.
        /// </summary>


        /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="sender">
        /// The source of the event; typically <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Event data that provides both the navigation parameter passed to
        /// <see cref="Frame.Navigate(Type, object)"/> when this page was initially requested and
        /// a dictionary of state preserved by this page during an earlier
        /// session.  The state will be null the first time a page is visited.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // TODO: Create an appropriate data model for your problem domain to replace the sample data
            Debug.WriteLine("LoadState");
            VisualStateManager.GoToState(this, IndexClosedState, false);

#if WINDOWS_PHONE_APP
			//IndexPanel.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
			//this.BottomAppBar = PageBottomCommandBar;
			//this.BottomAppBar.Visibility = Visibility.Visible;
			TranslationType = 0;
			LayoutRootFadeinStory.Begin();
			await UpdateSizeOrientationDependentResourcesAsync();
#elif WINDOWS_APP || WINDOWS_UWP
            if (this.Frame.CanGoBack)
				OpenInNewViewButton.Visibility = Windows.UI.Xaml.Visibility.Visible;
			else
				OpenInNewViewButton.Visibility = Windows.UI.Xaml.Visibility.Collapsed;

            Window.Current.SetTitleBar(TitlePanelBackground);

#endif
            if (this.RequestedTheme != AppGlobal.Settings.BackgroundTheme)
            {
                this.RequestedTheme = AppGlobal.Settings.BackgroundTheme;
            }
            //Relayout_ContentColumn(ContentRegion.RenderSize);
            if (e.PageState != null && e.PageState.Count > 0)
            {
                IsIndexPanelOpen = false;
                if (e.PageState.ContainsKey("LoadingBreak"))
                {
                    navigationId = NovelPositionIdentifier.Parse((string)e.PageState["LoadingBreak"]);
                    await viewModel.LoadDataAsync(navigationId);
                }
                else
                {
                    var fullScreen = (bool)e.PageState["IsFullScreen"];
                    if (fullScreen)
                    {
                        VisualStateManager.GoToState(this, "HideTitleBarState", false);
                        ViewModel.IsFullScreen = true;
                    }
                    else
                    {
                        VisualStateManager.GoToState(this, "ShowTitleBarState", false);
                        ViewModel.IsFullScreen = false;
                    }

                    var volumeNo = (int)e.PageState["VolumeNo"];
                    var chapterNo = (int)e.PageState["ChapterNo"];
                    var seriesId = (int)e.PageState["SeriesId"];
                    var lineNo = (int)e.PageState["LineNo"];
                    await viewModel.LoadDataAsync(seriesId, volumeNo, chapterNo, lineNo);
                }
#if WINDOWS_APP
				var horizontalOffset = (double)e.PageState["HorizontalOffset"];
				var verticalOffset = (double)e.PageState["VerticalOffset"];
				ContentScrollViewer.ChangeView(horizontalOffset, verticalOffset, null, true);
#endif
                //SyncIndexSelectedItem();
            }
            else
            {
                VisualStateManager.GoToState(this, "ShowTitleBarState", false);
                ViewModel.IsFullScreen = false;

                navigationId = NovelPositionIdentifier.Parse((string)e.NavigationParameter);

                if (navigationId.SeriesId != null && (navigationId.VolumeNo == -1 || navigationId.ChapterNo == -1))
                {
                    IsIndexPanelOpen = true;
                }
                else
                {
                    IsIndexPanelOpen = false;
                }

                await viewModel.LoadDataAsync(navigationId);
            }
            ViewModel.NotifyPropertyChanged("IsPinned");
            SyncPinButtonView();
            ViewModel.NotifyPropertyChanged("IsFavored");
        }
		/// <summary>
		/// Populates the page with content passed during navigation.  Any saved state is also
		/// provided when recreating a page from a prior session.
		/// </summary>
		/// <param name="navigationParameter">The parameter value passed to
		/// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
		/// </param>
		/// <param name="pageState">A dictionary of state preserved by this page during an earlier
		/// session.  This will be null the first time a page is visited.</param>
		private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
		{
			await ViewModel.LoadSeriesIndexDataAsync();
			//if (SeriesIndexViewSource.View == null)
			//{
			//	SeriesIndexViewSource.IsSourceGrouped = true;
			//	SeriesIndexViewSource.Source = ViewModel.SeriesIndex;
			//}
			if (SeriesIndexViewSource.View != null)
				ViewModel.SeriesIndexGroupView = SeriesIndexViewSource.View.CollectionGroups;
			ViewModel.IsLoaded = true;
		}
		/// <summary>
		/// Populates the page with content passed during navigation.  Any saved state is also
		/// provided when recreating a page from a prior session.
		/// </summary>
		/// <param name="navigationParameter">The parameter value passed to
		/// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
		/// </param>
		/// <param name="pageState">A dictionary of state preserved by this page during an earlier
		/// session.  This will be null the first time a page is visited.</param>
		private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
		{
		}