Index: /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocument.cs
===================================================================
--- /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocument.cs	(revision 1142)
+++ /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocument.cs	(revision 1143)
@@ -1016,10 +1016,4 @@
                 if (sErrorID == "-1")
                     pAppt.Note = sNote;
-
-                if (this.m_appointments.AppointmentTable.ContainsKey(nApptID))
-                {
-                    bool bRet = RefreshAvailabilitySchedule();
-                    UpdateAllViews();
-                }
             }
             catch (Exception ex)
Index: /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocumentManager.cs
===================================================================
--- /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocumentManager.cs	(revision 1142)
+++ /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGDocumentManager.cs	(revision 1143)
@@ -400,5 +400,5 @@
                 catch (System.Net.Sockets.SocketException)
                 {
-                    MessageBox.Show("Cannot connect to VistA. Network Error");
+                    m_ds.RemoteMsgBox("Can't connect to server! Network Error");
                     return false;
                 }
@@ -438,9 +438,9 @@
                 catch (System.Net.Sockets.SocketException)
                 {
-                    MessageBox.Show("Cannot connect to VistA. Network Error");
+                    m_ds.RemoteMsgBox("Cannot connect to VistA. Network Error");
                 }
                 catch (BMXNetException ex)
                 {
-                    if (MessageBox.Show("Unable to connect to VistA.  " + ex.Message, "Clinical Scheduling", MessageBoxButtons.RetryCancel) == DialogResult.Retry)
+                    if (m_ds.RemoteMsgBox("Unable to connect to VistA.  " + ex.Message, "Clinical Scheduling", MessageBoxButtons.RetryCancel) == DialogResult.Retry)
                     {
                         bRetry = true;
Index: /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGView.cs
===================================================================
--- /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGView.cs	(revision 1142)
+++ /Scheduling/trunk/cs/bsdx0200GUISourceCode/CGView.cs	(revision 1143)
@@ -428,4 +428,5 @@
             // 
             this.mnuNewAppointment.Index = 0;
+            this.mnuNewAppointment.Shortcut = System.Windows.Forms.Shortcut.Ins;
             this.mnuNewAppointment.Text = "&New Appointment";
             this.mnuNewAppointment.Click += new System.EventHandler(this.mnuNewAppointment_Click);
@@ -434,4 +435,5 @@
             // 
             this.mnuEditAppointment.Index = 1;
+            this.mnuEditAppointment.Shortcut = System.Windows.Forms.Shortcut.F2;
             this.mnuEditAppointment.Text = "&Edit Appointment";
             this.mnuEditAppointment.Click += new System.EventHandler(this.mnuEditAppointment_Click);
@@ -440,4 +442,5 @@
             // 
             this.mnuDeleteAppointment.Index = 2;
+            this.mnuDeleteAppointment.Shortcut = System.Windows.Forms.Shortcut.Del;
             this.mnuDeleteAppointment.Text = "Cance&l Appointment";
             this.mnuDeleteAppointment.Click += new System.EventHandler(this.mnuDeleteAppointment_Click);
@@ -481,5 +484,5 @@
             this.mnuFindAppt.Index = 9;
             this.mnuFindAppt.Shortcut = System.Windows.Forms.Shortcut.CtrlF;
-            this.mnuFindAppt.Text = "&Find Available Appointment";
+            this.mnuFindAppt.Text = "&Find Empty Slots";
             this.mnuFindAppt.Click += new System.EventHandler(this.mnuFindAppt_Click);
             // 
@@ -647,5 +650,5 @@
             this.tvSchedules.Location = new System.Drawing.Point(0, 0);
             this.tvSchedules.Name = "tvSchedules";
-            this.tvSchedules.Size = new System.Drawing.Size(128, 359);
+            this.tvSchedules.Size = new System.Drawing.Size(128, 317);
             this.tvSchedules.Sorted = true;
             this.tvSchedules.TabIndex = 1;
@@ -689,5 +692,5 @@
             // 
             this.ctxFindAppt.Index = 3;
-            this.ctxFindAppt.Text = "&Find Available Appointment";
+            this.ctxFindAppt.Text = "&Find Empty Slots";
             this.ctxFindAppt.Click += new System.EventHandler(this.ctxFindAppt_Click);
             // 
@@ -716,5 +719,5 @@
             this.panelRight.Location = new System.Drawing.Point(996, 0);
             this.panelRight.Name = "panelRight";
-            this.panelRight.Size = new System.Drawing.Size(128, 359);
+            this.panelRight.Size = new System.Drawing.Size(128, 317);
             this.panelRight.TabIndex = 3;
             this.panelRight.Visible = false;
@@ -812,5 +815,5 @@
             this.panelCenter.Location = new System.Drawing.Point(136, 24);
             this.panelCenter.Name = "panelCenter";
-            this.panelCenter.Size = new System.Drawing.Size(857, 311);
+            this.panelCenter.Size = new System.Drawing.Size(857, 269);
             this.panelCenter.TabIndex = 7;
             // 
@@ -905,5 +908,5 @@
             this.panelBottom.Controls.Add(this.statusBar1);
             this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.panelBottom.Location = new System.Drawing.Point(136, 335);
+            this.panelBottom.Location = new System.Drawing.Point(136, 293);
             this.panelBottom.Name = "panelBottom";
             this.panelBottom.Size = new System.Drawing.Size(857, 24);
@@ -923,5 +926,5 @@
             this.splitter1.Location = new System.Drawing.Point(128, 24);
             this.splitter1.Name = "splitter1";
-            this.splitter1.Size = new System.Drawing.Size(8, 335);
+            this.splitter1.Size = new System.Drawing.Size(8, 293);
             this.splitter1.TabIndex = 9;
             this.splitter1.TabStop = false;
@@ -932,5 +935,5 @@
             this.splitter2.Location = new System.Drawing.Point(993, 24);
             this.splitter2.Name = "splitter2";
-            this.splitter2.Size = new System.Drawing.Size(3, 335);
+            this.splitter2.Size = new System.Drawing.Size(3, 293);
             this.splitter2.TabIndex = 10;
             this.splitter2.TabStop = false;
@@ -955,5 +958,5 @@
             this.calendarGrid1.Resources = ((System.Collections.ArrayList)(resources.GetObject("calendarGrid1.Resources")));
             this.calendarGrid1.SelectedAppointment = 0;
-            this.calendarGrid1.Size = new System.Drawing.Size(857, 311);
+            this.calendarGrid1.Size = new System.Drawing.Size(857, 269);
             this.calendarGrid1.StartDate = new System.DateTime(2003, 1, 27, 0, 0, 0, 0);
             this.calendarGrid1.TabIndex = 0;
@@ -968,5 +971,5 @@
             // 
             this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
-            this.ClientSize = new System.Drawing.Size(1124, 359);
+            this.ClientSize = new System.Drawing.Size(1124, 317);
             this.Controls.Add(this.panelCenter);
             this.Controls.Add(this.panelBottom);
@@ -1817,4 +1820,14 @@
 				this.Document.EditAppointment(a, sNote);
 
+                if (dAppt.PrintAppointmentSlip)
+                {
+                    PrintAppointmentSlip(a);
+                }
+
+                //Redraw appointments
+                this.UpdateArrays();
+
+                //Then tell RPMS that we are updated
+                RaiseRPMSEvent("BSDX SCHEDULE", a.Resource);
 			}
 			catch (Exception ex)
@@ -2684,6 +2697,4 @@
 			this.calendarGrid1.Columns = 5;
             this.Document.m_nColumnCount = 5; // MJL 1/17/2007
-            //this.Document.UpdateAllViews();
-            //TODO: Is there a way to just reuse the existing arrays? How far in the future do they go?
             RequestRefreshGrid();
 		}
@@ -2693,5 +2704,4 @@
 			this.calendarGrid1.Columns = 7;
             this.Document.m_nColumnCount = 7; // MJL 1/17/2007
-            //TODO: Is there a way to just reuse the existing arrays? How far in the future do they go?
             RequestRefreshGrid();
         }
@@ -2953,4 +2963,6 @@
                 appt.HealthRecordNumber = e.Appointment.HealthRecordNumber;
                 appt.AccessTypeID = e.AccessTypeID;
+                appt.Patient = e.Appointment.Patient;
+
                 this.Document.CreateAppointment(appt);
 
@@ -3508,23 +3520,32 @@
         }
 
-        LoadingSplash _loadingSplash; // Splash object a data point in class
+        //private delegate DialogResult dLoadingSplash(IWin32Window owner);
+        string _tempStatusBartext;
 
         /// <summary>
-        /// Loads a splash that says "Loading"
+        /// Loads a splash that says "Loading" -- removed it april 13 2010
         /// </summary>
         private void LoadSplash()
         {
-            _loadingSplash = new LoadingSplash();
-            _loadingSplash.StartPosition = FormStartPosition.CenterScreen;  //XXX: Don't like this, but will do for now.
-            _loadingSplash.UseWaitCursor = true;    // tell user we are working
-            Thread threadSplash = new Thread(new ThreadStart(() => _loadingSplash.ShowDialog())); // lambda
-            threadSplash.IsBackground = true; //expendable thread -- exit even if still running.
-            threadSplash.Name = "Loading Thread";
-            threadSplash.Start();
+            _tempStatusBartext = this.statusBar1.Text;
+            this.statusBar1.Text = "Refreshing Schedule...";
+            //_loadingSplash = new LoadingSplash();
+            //_loadingSplash.StartPosition = FormStartPosition.CenterScreen;  //XXX: Don't like this, but will do for now.
+            //_loadingSplash.UseWaitCursor = true;    // tell user we are working
+            //_loadingSplash.Show(this);
+            //Thread threadSplash = new Thread(tstart);
+            //threadSplash.IsBackground = true;
+            //threadSplash.Name = "Loading Thread";
+            //threadSplash.Start(this);
+
+            //Thread threadSplash = new Thread(new ThreadStart(() => _loadingSplash.ShowDialog())); // lambda
+            //threadSplash.IsBackground = true; //expendable thread -- exit even if still running.
+            //threadSplash.Name = "Loading Thread";
+            //threadSplash.Start();
         }
 
         private void StopSplash()
         {
-            _loadingSplash.RemoteClose();
+            this.statusBar1.Text = _tempStatusBartext;
         }
 
Index: /Scheduling/trunk/cs/bsdx0200GUISourceCode/CalendarGrid.cs
===================================================================
--- /Scheduling/trunk/cs/bsdx0200GUISourceCode/CalendarGrid.cs	(revision 1142)
+++ /Scheduling/trunk/cs/bsdx0200GUISourceCode/CalendarGrid.cs	(revision 1143)
@@ -9,4 +9,5 @@
     using System.Runtime.InteropServices;
     using System.Windows.Forms;
+    using System.Linq;
 
     /// <summary>
@@ -125,22 +126,31 @@
             try
             {
+                //calculate each cell's height
                 SizeF ef = g.MeasureString("Test", this.m_fCell);
                 this.m_cellHeight = ((int) ef.Height) + 4;
-                int nColumns = this.m_nColumns;
-                int num2 = 60 / this.m_nTimeScale;
-                int num3 = 24 * num2;
-                nColumns++;
-                num3++;
-                this.m_cellWidth = 600 / nColumns;
+
+                int nColumns = this.m_nColumns; // columns set via property
+                int slotsPerHour = 60 / this.m_nTimeScale; //time scale set via property
+                int slotsPerDay = 24 * slotsPerHour;
+                nColumns++; // add extra column for time display
+                slotsPerDay++; // not sure here why that's don't
+
+                //calculate each cell's height
+                this.m_cellWidth = 600 / nColumns; // base size is 600 pixels
+                // if larger:
                 if (base.ClientRectangle.Width > 600)
                 {
                     this.m_cellWidth = (base.ClientRectangle.Width - this.m_col0Width) / (nColumns - 1);
                 }
+                // if only one column
                 if (this.m_nColumns == 1)
                 {
                     this.m_cellWidth = base.ClientRectangle.Width - this.m_col0Width;
                 }
+                //next line seems to be useless (we don't use X and Y below)
                 g.TranslateTransform((float) base.AutoScrollPosition.X, (float) base.AutoScrollPosition.Y);
-                for (int i = num3; i > -1; i--)
+                
+                //now, build the grid cells
+                for (int i = slotsPerDay; i > -1; i--)
                 {
                     for (int j = 1; j < nColumns; j++)
@@ -233,4 +243,52 @@
         }
 
+        void CalendarGrid_DragOver(object sender, DragEventArgs e)
+        {
+            //Translate point to client point
+            Point pt = this.PointToClient(new Point(e.X, e.Y));
+            
+            //clear selections
+            foreach (DictionaryEntry entry in this.m_gridCells.CellHashTable)
+            {
+                CGCell cell = (CGCell)entry.Value;
+                cell.IsSelected = false;
+            }
+            this.m_selectedRange.Cells.ClearAllCells();
+
+            //select a cell based on current drag position to visually assist the user
+            int nRow = -1;
+            int nCol = -1;
+            if (this.HitTest(pt.X, pt.Y, ref nRow, ref nCol))
+            {
+                CGCell cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
+                if (cellFromRowCol != null)
+                {
+                    this.m_currentCell = cellFromRowCol;
+                    this.m_selectedRange.StartCell = null;
+                    this.m_selectedRange.EndCell = null;
+                    this.m_selectedRange.CreateRange(this.m_gridCells, cellFromRowCol, cellFromRowCol);
+
+                    cellFromRowCol.IsSelected = true;
+                }
+
+                base.Invalidate();
+            }
+
+            //if Y axis is outside the top or bottom
+
+            if ((pt.Y + 40 >= this.ClientRectangle.Bottom) || (pt.Y - 40 <= this.ClientRectangle.Top))
+            {
+                //start auto scrolling. m_bScrollDown decides whether we scroll up or down.
+                this.m_bScrollDown = (pt.Y + 40) >= this.ClientRectangle.Bottom;
+                AutoDragStart();
+            }
+
+            //if Y axis within client rectagle, stop dragging (whether you started or not)
+            if ((pt.Y + 40 < this.ClientRectangle.Bottom) && (pt.Y - 40 > this.ClientRectangle.Top))
+            {
+                AutoDragStop();
+            }
+        }
+
         private void CalendarGrid_MouseDown(object sender, MouseEventArgs e)
         {
@@ -247,11 +305,46 @@
                 this.OnLButtonDown(e.X, e.Y, true);
             }
+            //new code!!! smh 4/13/2011 -- refactor later
+            
+            else if (e.Button == MouseButtons.Right)
+            {
+                // clear all selected cells, but ONLY if the the pointer is NOT over one of the cells in
+                // the selected range
+
+                int nRow = -1;
+                int nCol = -1;
+                CGCell cellFromRowCol = null;
+                bool _isCellInRange = false;
+                if (this.HitTest(e.X, e.Y, ref nRow, ref nCol))
+                {
+                    cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
+                }
+
+                if (cellFromRowCol != null)
+                    _isCellInRange = this.m_selectedRange.CellIsInRange(cellFromRowCol);
+
+                if (!_isCellInRange)
+                {
+                    foreach (DictionaryEntry entry in this.m_gridCells.CellHashTable)
+                    {
+                        CGCell cell = (CGCell)entry.Value;
+                        cell.IsSelected = false;
+                    }
+                    this.m_selectedRange.Cells.ClearAllCells();
+                }
+
+                // clear all selected appointments
+                this.m_SelectedAppointments.ClearAllAppointments();
+                foreach (CGAppointment a in this.m_Appointments.AppointmentTable.Values) a.Selected = false;
+                this.m_nSelectID = 0;
+
+                OnRButtonDown(e.X, e.Y, _isCellInRange);
+            }
+             
+            //end new code!!! /smh 4/13/2011
         }
 
         private void CalendarGrid_MouseMove(object Sender, MouseEventArgs e)
         {
-            //test
-            //System.Diagnostics.Debug.Write(watch.ElapsedMilliseconds + "\n");
-            //test
 
             //if the left mouse button is down and we are moving the mouse...
@@ -288,11 +381,12 @@
                         this.m_bDragDropStart = true;
                     }
-                }
+               }
             }
             else
             {
-                //test
-                AutoDragStop(); //is this needed?
-                //test
+            
+                AutoDragStop(); //is this needed?  //just in case maybe
+
+                //this code below displays the tooltip if we are moving the mouse over an appointment
                 int y = e.Y - base.AutoScrollPosition.Y;
                 int x = e.X - base.AutoScrollPosition.X;
@@ -307,27 +401,4 @@
                 }
                 this.m_toolTip.RemoveAll();
-
-                ////smh new code -- select cell
-                //int nRow = -1;
-                //int nCol = -1;
-
-                ////Is the mouse over a known cell? If so, highlight cell
-                //if (this.HitTest(x, y, ref nRow, ref nCol))
-                //{
-                //    CGCell cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
-                //    if (cellFromRowCol != null)
-                //    {
-                //        this.m_currentCell = cellFromRowCol;
-                //        this.m_selectedRange.StartCell = null;
-                //        this.m_selectedRange.EndCell = null;
-                //        this.m_selectedRange.CreateRange(this.m_gridCells, cellFromRowCol, cellFromRowCol);
-                //        this.m_bSelectingRange = true;
-                //        cellFromRowCol.IsSelected = true;
-                //        base.Invalidate(this.m_currentCell.CellRectangle);
-                //        //base.Invalidate();
-                //    }
-                //}
-
-
             }
         }
@@ -515,5 +586,5 @@
             // flag is true only if there are no cells what so ever in the screen
             // Only true when no resource is selected.
-            bool flag = this.m_gridCells.CellCount == 0;
+            bool noCellsFlag = this.m_gridCells.CellCount == 0;
 
             // Move the base point from the client screen to the scrolling region top-left corner.
@@ -600,28 +671,30 @@
                         num12 = this.m_col0Width;
                     }
-                    if (k > 1)      // 
+                    if (k > 1)      // if we are subsequent columns, adjust accordingly
                     {
                         num12 = this.m_col0Width + (this.m_cellWidth * (k - 1));
                     }
+                    //make a rectangle for the cell
                     Point point4 = new Point(num12, j * this.m_cellHeight);
                     Rectangle r = new Rectangle(point4.X, point4.Y, this.m_cellWidth, this.m_cellHeight);
-                    if (j != 0)
-                    {
-                        CGCell cellFromRowCol = null;
-                        if (flag)
+                    if (j != 0) // if we are not at the top (we are starting from the bottom)
+                    {
+                        CGCell cellFromRowCol = null; 
+                        if (noCellsFlag)  //if there are no cells, create the cell
                         {
                             cellFromRowCol = new CGCell(r, j, k);
                             this.m_gridCells.AddCell(cellFromRowCol);
                         }
-                        else
+                        else // otherwise, get the cell from the m_gridCells array
                         {
                             cellFromRowCol = this.m_gridCells.GetCellFromRowCol(j, k);
                             cellFromRowCol.CellRectangle = r;
                         }
-                        if (this.m_sResourcesArray.Count > 0)
+                        if (this.m_sResourcesArray.Count > 0) // if we have any resources open
                         {
                             //IMP
                             //this is the place where we the selected cells are drawn in Light Light Blue.
                             //IMP
+                            // if cell is selected, draw it in Aquamarine (light light blue)
                             if (this.m_selectedRange.CellIsInRange(cellFromRowCol))
                             {
@@ -629,9 +702,12 @@
                                 //g.FillRectangle(Brushes.AntiqueWhite, r);
                             }
+                            // otherwise, draw it from Appointment Type Color set by BuildGridCellsArray()
                             else
                             {
                                 g.FillRectangle(cellFromRowCol.AppointmentTypeColor, r);
                             }
+                            // finally the drawing
                             g.DrawRectangle(pen, r.X, r.Y, r.Width, r.Height);
+                            // once done with availabilities, draw the appointments
                             if (j == 1)
                             {
@@ -641,4 +717,6 @@
                         continue;
                     }
+                    
+                    //Below draws the top column either containing the dates or resources
                     if (!this.m_bScroll)
                     {
@@ -922,8 +1000,10 @@
             this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.CalendarGrid_MouseUp);
             this.DragEnter += new System.Windows.Forms.DragEventHandler(this.CalendarGrid_DragEnter);
+            this.DragOver += new DragEventHandler(CalendarGrid_DragOver);
             this.ResumeLayout(false);
 
         }
 
+ 
         private static int MinSince80(DateTime d)
         {
@@ -931,4 +1011,57 @@
             TimeSpan span = (TimeSpan) (d - time);
             return (int) span.TotalMinutes;
+        }
+
+        //new code1!! smh 4/14/2011
+        private void OnRButtonDown(int X, int Y, bool RangeAlreadySelected)
+        {
+            //if right mouse button is clicked, select an appointment if mouse hovers over one
+            foreach (CGAppointment appointment3 in this.m_Appointments.AppointmentTable.Values)
+            {
+                int y = Y - base.AutoScrollPosition.Y;
+                int x = X - base.AutoScrollPosition.X;
+                Point pt = new Point(x, y);
+
+                if (!appointment3.GridRectangle.Contains(pt))
+                {
+                    continue;
+                }
+                this.m_bMouseDown = false;
+
+                this.m_SelectedAppointments.AddAppointment(appointment3);
+                appointment3.Selected = true;
+                this.m_nSelectID = appointment3.AppointmentKey;
+                //this.m_bGridEnter = true;
+            }
+
+            // if we find an appointment, redraw the grid
+            if (this.m_SelectedAppointments.AppointmentCount > 0)
+            {
+                base.Invalidate();
+                return;
+            }
+
+            // Otherwise, select a cell, but only if we don't don't have an existing range
+            if (RangeAlreadySelected) return;
+
+            // Ok, select cell here
+            int nRow = -1;
+            int nCol = -1;
+            if (this.HitTest(X, Y, ref nRow, ref nCol))
+            {
+                CGCell cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
+                if (cellFromRowCol != null)
+                {
+                    this.m_currentCell = cellFromRowCol;
+                    this.m_selectedRange.StartCell = null;
+                    this.m_selectedRange.EndCell = null;
+                    this.m_selectedRange.CreateRange(this.m_gridCells, cellFromRowCol, cellFromRowCol);
+
+                    cellFromRowCol.IsSelected = true;
+                }
+
+                base.Invalidate();
+                return;
+            }
         }
 
@@ -1067,4 +1200,5 @@
             if (this.m_gridCells.CellCount != 0)
             {
+                // this happens for the CGAVView Grid
                 foreach (DictionaryEntry entry in this.m_gridCells.CellHashTable)
                 {
@@ -1072,4 +1206,6 @@
                     cell.AppointmentTypeColor = (this.m_GridBackColor == "blue") ? Brushes.CornflowerBlue : Brushes.Khaki;
                 }
+                // won't happen for CGAVView Grid b/c it has no availabilites
+                // BUT, will happen for normal CGView Grid if there any availabilies
                 if ((this.m_pAvArray != null) && (this.m_pAvArray.Count != 0))
                 {
@@ -1080,7 +1216,10 @@
                         int num3 = 0;
                         int num4 = 0;
+                        // pick the color from the availability
                         Brush brush = new SolidBrush(Color.FromArgb(availability.Red, availability.Green, availability.Blue));
+                        // get starting and ending cell
                         this.GetCellFromTime(availability.StartTime, ref nRow, ref nCol, true, availability.ResourceList);
                         this.GetCellFromTime(availability.EndTime, ref num3, ref num4, false, availability.ResourceList);
+                        // for each of the range cells between starting and ending, change their color
                         for (int i = nCol; i <= num4; i++)
                         {
@@ -1328,10 +1467,13 @@
                 {
                     this.m_nColumns = value;
-                    this.m_gridCells.ClearAllCells();
-                    this.m_selectedRange.Cells.ClearAllCells();
+                    //new line
+                    this.SetColumnInfo();  // redoes the columns if we have multiple resources
+                    //end new line
+                    this.m_gridCells.ClearAllCells();               //remove all cells
+                    this.m_selectedRange.Cells.ClearAllCells();     //remove selected range
                     Graphics g = base.CreateGraphics();
-                    this.BuildGridCellsArray(g);
-                    this.SetAppointmentTypes();
-                    base.Invalidate();
+                    this.BuildGridCellsArray(g);                    //rebuild the cells
+                    this.SetAppointmentTypes();                     //set the colors on the cells for availabilities
+                    base.Invalidate();                              //Fire paint to call DrawGrid
                 }
             }
Index: /Scheduling/trunk/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj.user
===================================================================
--- /Scheduling/trunk/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj.user	(revision 1142)
+++ /Scheduling/trunk/cs/bsdx0200GUISourceCode/ClinicalScheduling.csproj.user	(revision 1143)
@@ -37,5 +37,5 @@
     </RemoteDebugMachine>
     <StartAction>Project</StartAction>
-    <StartArguments>/s=172.16.16.108 /p=9250 /a=BASMA.ALDWAIRI /v=SELEN.123</StartArguments>
+    <StartArguments>/s=172.16.16.108 /p=9250 /a=s.habiel /v=catdog.66</StartArguments>
     <StartPage>
     </StartPage>
Index: /Scheduling/trunk/cs/bsdx0200GUISourceCode/DApptSearch.cs
===================================================================
--- /Scheduling/trunk/cs/bsdx0200GUISourceCode/DApptSearch.cs	(revision 1142)
+++ /Scheduling/trunk/cs/bsdx0200GUISourceCode/DApptSearch.cs	(revision 1143)
@@ -5,5 +5,4 @@
 using System.Data;
 using System.Linq;
-//using System.Data.OleDb;
 
 namespace IndianHealthService.ClinicalScheduling
@@ -114,5 +113,5 @@
 		{
 
-            this.Text = "Searching for Appointments in: " + string.Join(" | ", alResources.Cast<string>());
+            this.Text = "Searching for available slots in: " + string.Join(" | ", alResources.Cast<string>());
             
             this.m_DocManager = docManager;
@@ -275,4 +274,5 @@
 		{
             this.panel1 = new System.Windows.Forms.Panel();
+            this.lblMessage = new System.Windows.Forms.Label();
             this.cmdSearch = new System.Windows.Forms.Button();
             this.cmdCancel = new System.Windows.Forms.Button();
@@ -313,5 +313,4 @@
             this.colSlots = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
             this.colAccessType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
-            this.lblMessage = new System.Windows.Forms.Label();
             this.panel1.SuspendLayout();
             this.pnlDescription.SuspendLayout();
@@ -335,4 +334,14 @@
             this.panel1.TabIndex = 4;
             // 
+            // lblMessage
+            // 
+            this.lblMessage.AutoSize = true;
+            this.lblMessage.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.lblMessage.ForeColor = System.Drawing.Color.Red;
+            this.lblMessage.Location = new System.Drawing.Point(337, 16);
+            this.lblMessage.Name = "lblMessage";
+            this.lblMessage.Size = new System.Drawing.Size(0, 16);
+            this.lblMessage.TabIndex = 3;
+            // 
             // cmdSearch
             // 
@@ -390,7 +399,7 @@
             this.lblDescription.Size = new System.Drawing.Size(917, 45);
             this.lblDescription.TabIndex = 1;
-            this.lblDescription.Text = "Search for available appointment times using this panel.  You may narrow your sea" +
-                "rch by selecting an access type or by selecting specific days of the week or tim" +
-                "es of day.";
+            this.lblDescription.Text = "Search for available slots times using this panel.  You may narrow your search by" +
+                " selecting an access type or by selecting specific days of the week or times of " +
+                "day.";
             // 
             // groupBox1
@@ -676,14 +685,4 @@
             this.colAccessType.Text = "Access Type";
             this.colAccessType.Width = 101;
-            // 
-            // lblMessage
-            // 
-            this.lblMessage.AutoSize = true;
-            this.lblMessage.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblMessage.ForeColor = System.Drawing.Color.Red;
-            this.lblMessage.Location = new System.Drawing.Point(337, 16);
-            this.lblMessage.Name = "lblMessage";
-            this.lblMessage.Size = new System.Drawing.Size(0, 16);
-            this.lblMessage.TabIndex = 3;
             // 
             // DApptSearch
@@ -899,5 +898,5 @@
 
             if (items.Length > 0) lstResults.Items.AddRange(items); // add new data
-            else this.lblMessage.Text = "No available Appointment Slots Found!";
+            else this.lblMessage.Text = "No available slots found!";
 
             lstResults.EndUpdate(); // ok done adding items, draw now.
@@ -944,9 +943,9 @@
             {
                 this.DialogResult = DialogResult.None;
-                lblMessage.Text = "No Appointment Slot selected!";
+                lblMessage.Text = "No slot selected!";
                 return;
             }
 
-            long availabilityKey = long.Parse(lstResults.SelectedItems[0].SubItems[0].Text);
+            int availabilityKey = Int32.Parse(lstResults.SelectedItems[0].SubItems[0].Text);
             _selectedAvailability = (from av in lstResultantAvailabilities
                                      where av.AvailabilityType == availabilityKey
Index: /Scheduling/trunk/cs/bsdx0200GUISourceCode/DSplash.cs
===================================================================
--- /Scheduling/trunk/cs/bsdx0200GUISourceCode/DSplash.cs	(revision 1142)
+++ /Scheduling/trunk/cs/bsdx0200GUISourceCode/DSplash.cs	(revision 1143)
@@ -8,5 +8,8 @@
 {
 	/// <summary>
-	/// Summary description for DSplash.
+	/// Program loading splash screen. Notice the numerous remote methods intended
+    /// to mickey mouse the form from another thread.
+    /// 
+    /// I don't know of a better way of doing this right now.
 	/// </summary>
 	public class DSplash : System.Windows.Forms.Form
@@ -147,4 +150,6 @@
         public delegate void dAny();
         public delegate void dProgressBarSet(int number);
+        public delegate DialogResult dMessageBox(IWin32Window owner, string message);
+        public delegate DialogResult dMessageBox2(IWin32Window owner, string message, string caption, MessageBoxButtons btns);
 		
         public void SetStatus(string sStatus)
@@ -165,7 +170,31 @@
 		}
 
+        public DialogResult RemoteMsgBox(string msg)
+        {
+            dMessageBox d = new dMessageBox(MessageBox.Show);
+            return (DialogResult)this.Invoke(d, this, msg);
+        }
+
+        public DialogResult RemoteMsgBox(string msg, string caption, MessageBoxButtons btns)
+        {
+            dMessageBox2 d = new dMessageBox2(MessageBox.Show);
+            return (DialogResult)this.Invoke(d, this, msg, caption, btns);
+        }
+
         public void RemoteClose()
         {
             dAny d = new dAny(this.Close);
+            this.Invoke(d);
+        }
+
+        public void RemoteActivate()
+        {
+            dAny d = new dAny(this.Activate);
+            this.Invoke(d);
+        }
+
+        public void RemoteHide()
+        {
+            dAny d = new dAny(this.Hide);
             this.Invoke(d);
         }
