/*
             * InsertNodes
             */

            /// <summary>
            /// Inserts selected nodes into the specified <paramref name="targetNode"/>.
            /// </summary>
            /// <param name="targetNode"></param>
            /// <param name="selected"></param>
            /// <exception cref="ArgumentNullException">
            /// <paramref name="selected"/> is <see langword="null"/>.
            /// </exception>
            private static void InsertNodes(TreeNode targetNode, IList <TreeNode> selected)
            {
                DragDropService.RemoveNodesFromParents(selected);

                foreach (TreeNode treeNode in selected)
                {
                    targetNode.Nodes.Add(treeNode);
                }

                targetNode.Expand();
            }
            /*
             * MoveNodes
             */

            /// <summary>
            /// Moves selected nodes to the new location specified by the <paramref name="targetNode"/> index.
            /// </summary>
            /// <param name="targetNode"></param>
            /// <param name="selected"></param>
            /// <param name="dropPosition"></param>
            /// <exception cref="T:System.ArgumentNullException">
            /// <paramref name="targetNode"/> is <see langword="null"/>
            /// -or-
            /// <paramref name="selected"/> is <see langword="null"/>
            /// </exception>
            private static void MoveNodes(TreeNode targetNode, IList <TreeNode> selected, NuGenDropPosition dropPosition)
            {
                if (targetNode == null)
                {
                    throw new ArgumentNullException("targetNode");
                }

                if (selected == null)
                {
                    throw new ArgumentNullException("selected");
                }

                int targetIndex = 0;

                if (dropPosition == NuGenDropPosition.After)
                {
                    targetIndex = targetNode.Index + 1;
                    DragDropService.RemoveNodesFromParents(selected);
                }
                else if (dropPosition == NuGenDropPosition.Before)
                {
                    DragDropService.RemoveNodesFromParents(selected);
                    targetIndex = targetNode.Index;
                }
                else
                {
                    return;
                }

                foreach (TreeNode treeNode in selected)
                {
                    if (targetNode.Parent != null)
                    {
                        targetNode.Parent.Nodes.Insert(targetIndex, treeNode);
                    }
                    else if (targetNode.TreeView != null)
                    {
                        targetNode.TreeView.Nodes.Insert(targetIndex, treeNode);
                    }
                    else
                    {
                        return;
                    }
                }
            }