// ******************************************************************
 /// <summary>
 /// Opens the specified docking window.
 /// </summary>
 /// <param name="dockSite">The dock site that owns the docking window.</param>
 /// <param name="dockingWindow">The docking window to open.</param>
 private static void OpenDockingWindow(DockSite dockSite, DockingWindow dockingWindow)
 {
     if (!dockingWindow.IsOpen)
     {
         if (dockingWindow is DocumentWindow)
         {
             dockingWindow.Open();
         }
         else
         {
             ToolWindow        toolWindow        = dockingWindow as ToolWindow;
             ToolItemViewModel toolItemViewModel = dockingWindow.DataContext as ToolItemViewModel;
             if (toolWindow != null && toolItemViewModel != null)
             {
                 // Look for a ToolWindow within the same group, if found then dock to that group, otherwise either dock or auto-hide the window
                 ToolWindow targetToolWindow = GetToolWindow(dockSite, toolItemViewModel.DockGroup);
                 if (targetToolWindow != null && targetToolWindow != toolWindow)
                 {
                     toolWindow.Dock(targetToolWindow, Direction.Content);
                 }
                 else if (toolItemViewModel.IsInitiallyAutoHidden)
                 {
                     toolWindow.AutoHide(toolItemViewModel.DefaultDock);
                 }
                 else
                 {
                     toolWindow.Dock(dockSite, toolItemViewModel.DefaultDock);
                 }
             }
             else
             {
                 dockingWindow.Open();
             }
         }
     }
 }