/// <summary>
		/// This member creates ListViewItems for Timsheets.
		/// </summary>
		/// <param name="timesheet">The Timesheet from which the ListViewItems will be created.</param>
		/// <returns>A ListViewItem object.</returns>
		private ListViewItem CreateTimesheetDetailListViewItem(TimesheetDate timesheetDate) {
			ListViewItem listViewItem = new ListViewItem(Dates.GetMMDDYYYY(timesheetDate.Date));

			Timesheet timesheet = timesheetDate.Timesheet;

			if (timesheet.IsSplitTimesheet) {
				if (timesheetDate.IsWeekday) {
					listViewItem.ForeColor = (timesheetDate.IsValidDate && timesheetDate.BillableHours == 0) ? Color.DarkRed : Color.Red;
				} else {
					listViewItem.ForeColor = Color.Red;
				}
			} else {
				if (timesheetDate.IsValidDate) {
					if (timesheetDate.IsWeekday && timesheetDate.BillableHours == 0) {
						listViewItem.ForeColor = Color.DarkRed;
					}
				}
			}

			listViewItem.Font = (timesheetDate.IsValidDate) ? listViewItem.Font : new Font(listViewItem.Font, FontStyle.Strikeout);			 
			
			listViewItem.StateImageIndex = timesheetDate.Timesheet.TimesheetSent ? DefaultImageList.Instance.GetLockedIconIndex() : -1;
			listViewItem.ImageIndex = DefaultImageList.Instance.GetCalendarIconIndex();

			listViewItem.SubItems.Add(timesheetDate.Date.DayOfWeek.ToString());
			listViewItem.SubItems.Add(timesheetDate.DayType.Name);
			listViewItem.SubItems.Add(timesheetDate.BillableHours.ToString());
			listViewItem.SubItems.Add(timesheetDate.GetFormattedRatePerHour());
			listViewItem.SubItems.Add(timesheetDate.GetFormattedInvoiceAmount());
			listViewItem.SubItems.Add(timesheetDate.Notes);

			listViewItem.Tag = timesheetDate;

			return listViewItem;
		}
        private void AddTimesheetDateTreeNodeDetailNodes(TimesheetDateTreeNode timesheetDateTreeNode, TimesheetDate timesheetDate, Color foreColor)
        {
            TreeNodeEx treeNode = null;
            int imageIndex = DefaultImageList.Instance.GetPropertyIconIndex();

            // DayType Name...
            treeNode = new TimesheetDateDetailTreeNode(timesheetDate.DayType.Name, imageIndex);
            treeNode.ForeColor = foreColor;
            timesheetDateTreeNode.Nodes.Add(treeNode);

            // Billable Hours...
            treeNode = new TimesheetDateDetailTreeNode(string.Format("Billable Hours: {0}", timesheetDate.GetFormattedBillableHours()), imageIndex);
            treeNode.ForeColor = foreColor;
            timesheetDateTreeNode.Nodes.Add(treeNode);

            // Rate Per Hour...
            treeNode = new TimesheetDateDetailTreeNode(string.Format("Rate Per Hour: {0}", timesheetDate.GetFormattedRatePerHour()), imageIndex);
            treeNode.ForeColor = foreColor;
            timesheetDateTreeNode.Nodes.Add(treeNode);
        }
		private void UpdateTimesheetDetailListViewItem(TimesheetDate timesheetDate) {
			const string noExistsError = "UpdateTimesheetDateListViewItem() failed in an attempt " +
				"to update the Timesheet's Detail ListItem in the ListView because it does not exist; " +
				"use InsertDayTypesListViewItem() instead.";

			ListViewItem listViewItem;
			if (!GetTimesheetDetailListViewItem(timesheetDate, out listViewItem)) {
				throw new InvalidOperationException(noExistsError);
			} else {
				listViewItem.StateImageIndex = timesheetDate.Timesheet.TimesheetSent ? DefaultImageList.Instance.GetLockedIconIndex() : -1;
				listViewItem.ImageIndex = DefaultImageList.Instance.GetCalendarIconIndex();

				listViewItem.Text = Dates.GetMMDDYYYY(timesheetDate.Date);
				listViewItem.SubItems[1].Text = timesheetDate.Date.DayOfWeek.ToString();
				listViewItem.SubItems[2].Text = timesheetDate.DayType.Name;
				listViewItem.SubItems[3].Text = timesheetDate.BillableHours.ToString();
				listViewItem.SubItems[4].Text = timesheetDate.GetFormattedRatePerHour();
				listViewItem.SubItems[5].Text = timesheetDate.GetFormattedInvoiceAmount();
				listViewItem.SubItems[6].Text = timesheetDate.Notes;
			}
		}