internal async void FinishPhaseLoad(CommentViewModel viewModel)
        {
            try
            {
                var body = viewModel.Body;
                var loadToken = LoadCancelSource.Token;
                var markdown = await SnooStreamViewModel.SystemServices.RunAsyncIdle(() =>
                {
                    try
                    {
                        var markdownInner = SnooStreamViewModel.MarkdownProcessor.Process(body);
						return markdownInner;
                    }
                    catch (Exception)
                    {
                        //TODO log this failure
						return null;
                    }
                }, loadToken);


                if (loadToken.IsCancellationRequested)
                    return;

                contentControl.ContentTemplate = Resources["markdownTemplate"] as DataTemplate;
				contentControl.Content = markdown.MarkdownDom;
                
                LoadPhase = 3;
            }
            catch (TaskCanceledException)
            {
                return;
            }
        }
        public void GotoReplyToComment(ViewModelBase currentContext, CommentViewModel source)
        {
            var commentsViewModel = currentContext as CommentsViewModel;
            if (commentsViewModel != null)
            {
				commentsViewModel.CurrentlyFocused = commentsViewModel.AddReplyComment(source.Thing.Name);
				Messenger.Default.Send<FocusChangedMessage>(new FocusChangedMessage(commentsViewModel));
            }
        }
			public CommentLinkViewModel(CommentViewModel context, string url, string title)
			{
                Context = context;
				AuthorFlairText = context.Thing.AuthorFlairText;
				Author = context.Thing.Author;
				Subreddit = context.Thing.Subreddit;
				Title = title;
				Url = url;
				CreatedUTC = context.Thing.CreatedUTC;
				Id = context.Thing.Id;
				Votable = context.Votable;
				GotoWeb = new RelayCommand(() =>
					{
						SnooStreamViewModel.NavigationService.NavigateToWeb(Url);
					});
				GotoComments = new RelayCommand(() => 
					{
						var localTemp = Url;
						SnooStreamViewModel.NavigationService.GoBack();
					});
				GotoUserDetails = context.GotoUserDetails;
				LazyContent = new Lazy<ContentViewModel>(() => SnooStream.ViewModel.Content.ContentViewModel.MakeContentViewModel(url, title, this, null));
			}
		public void ShowDecendents(CommentViewModel parent)
		{
			var insertionPoint = FlatComments.IndexOf(parent) + 1;
			foreach (var vmb in Decendents(parent.Id).Reverse())
			{
				FlatComments.Insert(insertionPoint, vmb);
			}
		}
        public void RemoveComment(CommentViewModel commentViewModel)
        {
            var commentShell = _comments[commentViewModel.Id];
            var parentShell = commentViewModel.Parent != null ? _comments[commentViewModel.Parent.Id] : null;
            
            if (parentShell == null)
            {   
                if(commentShell.PriorSibling == null)
                    _firstChild = commentShell.NextSibling;
            }
            else
            {
                if(commentShell.PriorSibling == null)
                    parentShell.FirstChild = commentShell.NextSibling;   
            }

            if (commentShell.PriorSibling != null)
                _comments[commentShell.PriorSibling].NextSibling = commentShell.NextSibling;

            if (commentShell.NextSibling != null)
                _comments[commentShell.NextSibling].PriorSibling = commentShell.PriorSibling;

            _comments.Remove(commentViewModel.Id);
            FlatComments.Remove(commentViewModel);
        }
 public void GotoEditComment(ViewModelBase currentContext, CommentViewModel source)
 {
     source.IsEditing = true;
 }
        public void GotoFullComments(ViewModelBase currentContext, CommentViewModel source)
        {

        }