private void ListItem_Click(object sender, RoutedEventArgs e) {

			if (Monitor.SelectedSource != null) { // We're currently viewing the task list, move to the selected task (or open Web Reporting).
				if (WebsiteOpen > 0) {
					Monitor.DoWebLogin = true;
				} else {
					SelectedTask = (WingmanAPI.Task)((Button)sender).DataContext;
				}
			} else { // We're currently viewing the source list, move to the selected source (or open Web Reporting).
				if (WebsiteOpen > 1) {
					Monitor.DoWebLogin = true;
				} else {
					Monitor.SelectedSource = (WingmanAPI.Source)((Button)sender).DataContext;
				}
			}

			ViewRefresh();

		}
		private void ViewRefresh() { // Should probably use bindings but life's too short to be typing out irrelevant boilerplate in an example...

			if (Monitor.ConnectionState != WingmanAPI.Monitor.State.Connected) {
				SelectedTask = null; // In case this was set before disconnection.
				Icon = StatusIcons[(int)WingmanAPI.Status.Dormant];
				Background = StatusBrushes[(int)WingmanAPI.Status.Dormant];
				TextTitle.Text = "Disconnected!";
				ButtonBack.Visibility = Visibility.Collapsed;
				ListItems.ItemsSource = Monitor.SourcesView;
				ImageTaskIcon.Source = null;
				TextTaskDescription.Text = null;
				TextTaskDate.Text = null;
				TextTaskDate.Visibility = ButtonClear.Visibility = Visibility.Collapsed;
				BorderPending.Background = StatusBrushes[(int)WingmanAPI.Status.Dormant];
				TextPending.Visibility = BorderPending.Visibility = Visibility.Collapsed;
				TextTaskDetail.Text = null;
				ViewList.Visibility = Visibility.Collapsed;
				ViewTask.Visibility = Visibility.Collapsed;
				ViewEmpty.Visibility = Visibility.Visible;
			} else if (Monitor.SelectedSource == null) {
				SelectedTask = null; // In case this was set before SelectedSource was removed.
				Icon = StatusIcons[(int)Monitor.Status];
				Background = StatusBrushes[(int)Monitor.Status];
				TextTitle.Text = Monitor.Account;
				ButtonBack.Visibility = Visibility.Collapsed;
				ListItems.ItemsSource = Monitor.SourcesView;
				ImageTaskIcon.Source = null;
				TextTaskDescription.Text = null;
				TextTaskDate.Text = null;
				TextTaskDate.Visibility = ButtonClear.Visibility = Visibility.Collapsed;
				BorderPending.Background = StatusBrushes[(int)WingmanAPI.Status.Dormant];
				TextPending.Visibility = BorderPending.Visibility = Visibility.Collapsed;
				TextTaskDetail.Text = null;
				ViewList.Visibility = Visibility.Visible;
				ViewTask.Visibility = Visibility.Collapsed;
				ViewEmpty.Visibility = (Monitor.SourcesView.IsEmpty ? Visibility.Visible : Visibility.Collapsed);
			} else if (SelectedTask == null || Monitor.Tasks.SingleOrDefault(x => x.Source == Monitor.SelectedSource.ID && x.ID == SelectedTask.ID) == null) { // Check that SelectedTask still exists.
				SelectedTask = null; // In case SelectedTask was removed.
				Icon = StatusIcons[(int)Monitor.Status];
				Background = StatusBrushes[(int)Monitor.SelectedSource.Status];
				TextTitle.Text = Monitor.SelectedSource.Description;
				ButtonBack.Visibility = Visibility.Visible;
				ListItems.ItemsSource = Monitor.TasksView;
				ImageTaskIcon.Source = null;
				TextTaskDescription.Text = null;
				TextTaskDate.Text = null;
				TextTaskDate.Visibility = ButtonClear.Visibility = Visibility.Collapsed;
				BorderPending.Background = StatusBrushes[(int)WingmanAPI.Status.Dormant];
				TextPending.Visibility = BorderPending.Visibility = Visibility.Collapsed;
				TextTaskDetail.Text = null;
				ViewList.Visibility = Visibility.Visible;
				ViewTask.Visibility = Visibility.Collapsed;
				ViewEmpty.Visibility = (Monitor.TasksView.IsEmpty ? Visibility.Visible : Visibility.Collapsed);
			} else {
				// SelectedTask = SelectedTask;
				Icon = StatusIcons[(int)Monitor.Status];
				Background = StatusBrushes[(int)SelectedTask.Status];
				TextTitle.Text = Monitor.SelectedSource.Description;
				ButtonBack.Visibility = Visibility.Visible;
				ListItems.ItemsSource = null;
				ImageTaskIcon.Source = TaskIcons[(int)SelectedTask.Type];
				TextTaskDescription.Text = SelectedTask.Description;
				TextTaskDate.Text = String.Format("Posted {0:g}", SelectedTask.Alerted);
				TextTaskDate.Visibility = ButtonClear.Visibility = (SelectedTask.Status > WingmanAPI.Status.Success ? Visibility.Visible : Visibility.Collapsed);
				BorderPending.Background = StatusBrushes[(int)SelectedTask.Pending];
				TextPending.Visibility = BorderPending.Visibility = (SelectedTask.Pending < SelectedTask.Status ? Visibility.Visible : Visibility.Collapsed);
				TextTaskDetail.Text = SelectedTask.Detail;
				ViewList.Visibility = Visibility.Collapsed;
				ViewTask.Visibility = Visibility.Visible;
				ViewEmpty.Visibility = (Monitor.TasksView.IsEmpty ? Visibility.Visible : Visibility.Collapsed);
			}

		}
		private void ButtonBack_Click(object sender, RoutedEventArgs e) {

			if (SelectedTask != null) { // We're currently viewing a task, go back to the task list.
				SelectedTask = null;
			} else { // We're currently viewing a source, go back to the source list.
				Monitor.SelectedSource = null;
			}

			ViewRefresh();

		}