protected internal virtual void RenderItem(HtmlTextWriter writer, MenuItem item, int position)
        {
            bool               flag4;
            string             str6;
            Menu               control       = this.Control;
            MenuItemStyle      menuItemStyle = control.GetMenuItemStyle(item);
            string             imageUrl      = item.ImageUrl;
            int                depth         = item.Depth;
            int                num2          = depth + 1;
            string             toolTip       = item.ToolTip;
            string             navigateUrl   = item.NavigateUrl;
            string             text          = item.Text;
            bool               isEnabled     = item.IsEnabled;
            bool               selectable    = item.Selectable;
            MenuItemCollection childItems    = item.ChildItems;
            string             staticTopSeparatorImageUrl = null;

            if ((depth < control.StaticDisplayLevels) && (control.StaticTopSeparatorImageUrl.Length != 0))
            {
                staticTopSeparatorImageUrl = control.StaticTopSeparatorImageUrl;
            }
            else if ((depth >= control.StaticDisplayLevels) && (control.DynamicTopSeparatorImageUrl.Length != 0))
            {
                staticTopSeparatorImageUrl = control.DynamicTopSeparatorImageUrl;
            }
            if (staticTopSeparatorImageUrl != null)
            {
                new Image {
                    ImageUrl = staticTopSeparatorImageUrl, GenerateEmptyAlternateText = true, Page = base.Page
                }.RenderControl(writer);
                this.RenderBreak(writer);
            }
            if (((menuItemStyle != null) && !menuItemStyle.ItemSpacing.IsEmpty) && ((this._titleItem != null) || (position != 0)))
            {
                this.RenderSpace(writer, menuItemStyle.ItemSpacing, control.Orientation);
            }
            Panel panel = new SpanPanel {
                Enabled = isEnabled,
                Page    = base.Page
            };

            if ((base.Page != null) && base.Page.SupportsStyleSheets)
            {
                string cssClassName = control.GetCssClassName(item, false);
                if (cssClassName.Trim().Length > 0)
                {
                    panel.CssClass = cssClassName;
                }
            }
            else if (menuItemStyle != null)
            {
                panel.ApplyStyle(menuItemStyle);
            }
            if (item.ToolTip.Length != 0)
            {
                panel.ToolTip = item.ToolTip;
            }
            panel.RenderBeginTag(writer);
            bool flag3 = (((position != 0) && (childItems.Count != 0)) && (num2 >= control.StaticDisplayLevels)) && (num2 < control.MaximumDepth);

            if (((position != 0) && (depth > 0)) && ((control.StaticSubMenuIndent != Unit.Pixel(0)) && (depth < control.StaticDisplayLevels)))
            {
                Image image2 = new Image {
                    ImageUrl = control.SpacerImageUrl,
                    GenerateEmptyAlternateText = true
                };
                double num3 = control.StaticSubMenuIndent.Value * depth;
                if (num3 < 32767.0)
                {
                    image2.Width = new Unit(num3, control.StaticSubMenuIndent.Type);
                }
                else
                {
                    image2.Width = new Unit(32767.0, control.StaticSubMenuIndent.Type);
                }
                image2.Height = Unit.Pixel(1);
                image2.Page   = base.Page;
                image2.RenderControl(writer);
            }
            if ((imageUrl.Length > 0) && item.NotTemplated())
            {
                Image image3 = new Image {
                    ImageUrl = imageUrl
                };
                if (toolTip.Length != 0)
                {
                    image3.AlternateText = toolTip;
                }
                else
                {
                    image3.GenerateEmptyAlternateText = true;
                }
                image3.Page = base.Page;
                image3.RenderControl(writer);
                writer.Write(' ');
            }
            if ((base.Page != null) && base.Page.SupportsStyleSheets)
            {
                str6 = control.GetCssClassName(item, true, out flag4);
            }
            else
            {
                str6  = string.Empty;
                flag4 = false;
            }
            if (isEnabled && (flag3 || selectable))
            {
                string accessKey = control.AccessKey;
                string str8      = (((position == 0) || ((position == 1) && (depth == 0))) && (accessKey.Length != 0)) ? accessKey : null;
                if ((navigateUrl.Length > 0) && !flag3)
                {
                    if (base.PageAdapter != null)
                    {
                        base.PageAdapter.RenderBeginHyperlink(writer, control.ResolveClientUrl(navigateUrl), true, System.Web.SR.GetString("Adapter_GoLabel"), (str8 != null) ? str8 : ((this._currentAccessKey < 10) ? this._currentAccessKey++.ToString(CultureInfo.InvariantCulture) : null));
                        writer.Write(HttpUtility.HtmlEncode(item.FormattedText));
                        base.PageAdapter.RenderEndHyperlink(writer);
                    }
                    else
                    {
                        HyperLink link = new HyperLink {
                            NavigateUrl = control.ResolveClientUrl(navigateUrl)
                        };
                        string target = item.Target;
                        if (string.IsNullOrEmpty(target))
                        {
                            target = control.Target;
                        }
                        if (!string.IsNullOrEmpty(target))
                        {
                            link.Target = target;
                        }
                        link.AccessKey = str8;
                        link.Page      = base.Page;
                        if (writer is Html32TextWriter)
                        {
                            link.RenderBeginTag(writer);
                            SpanPanel panel2 = new SpanPanel {
                                Page = base.Page
                            };
                            this.RenderStyle(writer, panel2, str6, menuItemStyle, flag4);
                            panel2.RenderBeginTag(writer);
                            item.RenderText(writer);
                            panel2.RenderEndTag(writer);
                            link.RenderEndTag(writer);
                        }
                        else
                        {
                            this.RenderStyle(writer, link, str6, menuItemStyle, flag4);
                            link.RenderBeginTag(writer);
                            item.RenderText(writer);
                            link.RenderEndTag(writer);
                        }
                    }
                }
                else if (base.PageAdapter != null)
                {
                    base.PageAdapter.RenderPostBackEvent(writer, control.UniqueID, (flag3 ? 'o' : 'b') + this.Escape(item.InternalValuePath), System.Web.SR.GetString("Adapter_OKLabel"), item.FormattedText, null, (str8 != null) ? str8 : ((this._currentAccessKey < 10) ? this._currentAccessKey++.ToString(CultureInfo.InvariantCulture) : null));
                    if (flag3)
                    {
                        this.RenderExpand(writer, item, control);
                    }
                }
                else
                {
                    HyperLink link2 = new HyperLink {
                        NavigateUrl = base.Page.ClientScript.GetPostBackClientHyperlink(control, (flag3 ? 'o' : 'b') + this.Escape(item.InternalValuePath), true),
                        AccessKey   = str8,
                        Page        = base.Page
                    };
                    if (writer is Html32TextWriter)
                    {
                        link2.RenderBeginTag(writer);
                        SpanPanel panel3 = new SpanPanel {
                            Page = base.Page
                        };
                        this.RenderStyle(writer, panel3, str6, menuItemStyle, flag4);
                        panel3.RenderBeginTag(writer);
                        item.RenderText(writer);
                        if (flag3)
                        {
                            this.RenderExpand(writer, item, control);
                        }
                        panel3.RenderEndTag(writer);
                        link2.RenderEndTag(writer);
                    }
                    else
                    {
                        this.RenderStyle(writer, link2, str6, menuItemStyle, flag4);
                        link2.RenderBeginTag(writer);
                        item.RenderText(writer);
                        if (flag3)
                        {
                            this.RenderExpand(writer, item, control);
                        }
                        link2.RenderEndTag(writer);
                    }
                }
            }
            else
            {
                item.RenderText(writer);
            }
            panel.RenderEndTag(writer);
            this.RenderBreak(writer);
            if ((menuItemStyle != null) && !menuItemStyle.ItemSpacing.IsEmpty)
            {
                this.RenderSpace(writer, menuItemStyle.ItemSpacing, control.Orientation);
            }
            string separatorImageUrl = null;

            if (item.SeparatorImageUrl.Length != 0)
            {
                separatorImageUrl = item.SeparatorImageUrl;
            }
            else if ((depth < control.StaticDisplayLevels) && (control.StaticBottomSeparatorImageUrl.Length != 0))
            {
                separatorImageUrl = control.StaticBottomSeparatorImageUrl;
            }
            else if ((depth >= control.StaticDisplayLevels) && (control.DynamicBottomSeparatorImageUrl.Length != 0))
            {
                separatorImageUrl = control.DynamicBottomSeparatorImageUrl;
            }
            if (separatorImageUrl != null)
            {
                new Image {
                    ImageUrl = separatorImageUrl, GenerateEmptyAlternateText = true, Page = base.Page
                }.RenderControl(writer);
                this.RenderBreak(writer);
            }
        }
 protected internal virtual void RenderItem(HtmlTextWriter writer, MenuItem item, int position)
 {
     bool flag4;
     string str6;
     Menu control = this.Control;
     MenuItemStyle menuItemStyle = control.GetMenuItemStyle(item);
     string imageUrl = item.ImageUrl;
     int depth = item.Depth;
     int num2 = depth + 1;
     string toolTip = item.ToolTip;
     string navigateUrl = item.NavigateUrl;
     string text = item.Text;
     bool isEnabled = item.IsEnabled;
     bool selectable = item.Selectable;
     MenuItemCollection childItems = item.ChildItems;
     string staticTopSeparatorImageUrl = null;
     if ((depth < control.StaticDisplayLevels) && (control.StaticTopSeparatorImageUrl.Length != 0))
     {
         staticTopSeparatorImageUrl = control.StaticTopSeparatorImageUrl;
     }
     else if ((depth >= control.StaticDisplayLevels) && (control.DynamicTopSeparatorImageUrl.Length != 0))
     {
         staticTopSeparatorImageUrl = control.DynamicTopSeparatorImageUrl;
     }
     if (staticTopSeparatorImageUrl != null)
     {
         new Image { ImageUrl = staticTopSeparatorImageUrl, GenerateEmptyAlternateText = true, Page = base.Page }.RenderControl(writer);
         this.RenderBreak(writer);
     }
     if (((menuItemStyle != null) && !menuItemStyle.ItemSpacing.IsEmpty) && ((this._titleItem != null) || (position != 0)))
     {
         this.RenderSpace(writer, menuItemStyle.ItemSpacing, control.Orientation);
     }
     Panel panel = new SpanPanel {
         Enabled = isEnabled,
         Page = base.Page
     };
     if ((base.Page != null) && base.Page.SupportsStyleSheets)
     {
         string cssClassName = control.GetCssClassName(item, false);
         if (cssClassName.Trim().Length > 0)
         {
             panel.CssClass = cssClassName;
         }
     }
     else if (menuItemStyle != null)
     {
         panel.ApplyStyle(menuItemStyle);
     }
     if (item.ToolTip.Length != 0)
     {
         panel.ToolTip = item.ToolTip;
     }
     panel.RenderBeginTag(writer);
     bool flag3 = (((position != 0) && (childItems.Count != 0)) && (num2 >= control.StaticDisplayLevels)) && (num2 < control.MaximumDepth);
     if (((position != 0) && (depth > 0)) && ((control.StaticSubMenuIndent != Unit.Pixel(0)) && (depth < control.StaticDisplayLevels)))
     {
         Image image2 = new Image {
             ImageUrl = control.SpacerImageUrl,
             GenerateEmptyAlternateText = true
         };
         double num3 = control.StaticSubMenuIndent.Value * depth;
         if (num3 < 32767.0)
         {
             image2.Width = new Unit(num3, control.StaticSubMenuIndent.Type);
         }
         else
         {
             image2.Width = new Unit(32767.0, control.StaticSubMenuIndent.Type);
         }
         image2.Height = Unit.Pixel(1);
         image2.Page = base.Page;
         image2.RenderControl(writer);
     }
     if ((imageUrl.Length > 0) && item.NotTemplated())
     {
         Image image3 = new Image {
             ImageUrl = imageUrl
         };
         if (toolTip.Length != 0)
         {
             image3.AlternateText = toolTip;
         }
         else
         {
             image3.GenerateEmptyAlternateText = true;
         }
         image3.Page = base.Page;
         image3.RenderControl(writer);
         writer.Write(' ');
     }
     if ((base.Page != null) && base.Page.SupportsStyleSheets)
     {
         str6 = control.GetCssClassName(item, true, out flag4);
     }
     else
     {
         str6 = string.Empty;
         flag4 = false;
     }
     if (isEnabled && (flag3 || selectable))
     {
         string accessKey = control.AccessKey;
         string str8 = (((position == 0) || ((position == 1) && (depth == 0))) && (accessKey.Length != 0)) ? accessKey : null;
         if ((navigateUrl.Length > 0) && !flag3)
         {
             if (base.PageAdapter != null)
             {
                 base.PageAdapter.RenderBeginHyperlink(writer, control.ResolveClientUrl(navigateUrl), true, System.Web.SR.GetString("Adapter_GoLabel"), (str8 != null) ? str8 : ((this._currentAccessKey < 10) ? this._currentAccessKey++.ToString(CultureInfo.InvariantCulture) : null));
                 writer.Write(HttpUtility.HtmlEncode(item.FormattedText));
                 base.PageAdapter.RenderEndHyperlink(writer);
             }
             else
             {
                 HyperLink link = new HyperLink {
                     NavigateUrl = control.ResolveClientUrl(navigateUrl)
                 };
                 string target = item.Target;
                 if (string.IsNullOrEmpty(target))
                 {
                     target = control.Target;
                 }
                 if (!string.IsNullOrEmpty(target))
                 {
                     link.Target = target;
                 }
                 link.AccessKey = str8;
                 link.Page = base.Page;
                 if (writer is Html32TextWriter)
                 {
                     link.RenderBeginTag(writer);
                     SpanPanel panel2 = new SpanPanel {
                         Page = base.Page
                     };
                     this.RenderStyle(writer, panel2, str6, menuItemStyle, flag4);
                     panel2.RenderBeginTag(writer);
                     item.RenderText(writer);
                     panel2.RenderEndTag(writer);
                     link.RenderEndTag(writer);
                 }
                 else
                 {
                     this.RenderStyle(writer, link, str6, menuItemStyle, flag4);
                     link.RenderBeginTag(writer);
                     item.RenderText(writer);
                     link.RenderEndTag(writer);
                 }
             }
         }
         else if (base.PageAdapter != null)
         {
             base.PageAdapter.RenderPostBackEvent(writer, control.UniqueID, (flag3 ? 'o' : 'b') + this.Escape(item.InternalValuePath), System.Web.SR.GetString("Adapter_OKLabel"), item.FormattedText, null, (str8 != null) ? str8 : ((this._currentAccessKey < 10) ? this._currentAccessKey++.ToString(CultureInfo.InvariantCulture) : null));
             if (flag3)
             {
                 this.RenderExpand(writer, item, control);
             }
         }
         else
         {
             HyperLink link2 = new HyperLink {
                 NavigateUrl = base.Page.ClientScript.GetPostBackClientHyperlink(control, (flag3 ? 'o' : 'b') + this.Escape(item.InternalValuePath), true),
                 AccessKey = str8,
                 Page = base.Page
             };
             if (writer is Html32TextWriter)
             {
                 link2.RenderBeginTag(writer);
                 SpanPanel panel3 = new SpanPanel {
                     Page = base.Page
                 };
                 this.RenderStyle(writer, panel3, str6, menuItemStyle, flag4);
                 panel3.RenderBeginTag(writer);
                 item.RenderText(writer);
                 if (flag3)
                 {
                     this.RenderExpand(writer, item, control);
                 }
                 panel3.RenderEndTag(writer);
                 link2.RenderEndTag(writer);
             }
             else
             {
                 this.RenderStyle(writer, link2, str6, menuItemStyle, flag4);
                 link2.RenderBeginTag(writer);
                 item.RenderText(writer);
                 if (flag3)
                 {
                     this.RenderExpand(writer, item, control);
                 }
                 link2.RenderEndTag(writer);
             }
         }
     }
     else
     {
         item.RenderText(writer);
     }
     panel.RenderEndTag(writer);
     this.RenderBreak(writer);
     if ((menuItemStyle != null) && !menuItemStyle.ItemSpacing.IsEmpty)
     {
         this.RenderSpace(writer, menuItemStyle.ItemSpacing, control.Orientation);
     }
     string separatorImageUrl = null;
     if (item.SeparatorImageUrl.Length != 0)
     {
         separatorImageUrl = item.SeparatorImageUrl;
     }
     else if ((depth < control.StaticDisplayLevels) && (control.StaticBottomSeparatorImageUrl.Length != 0))
     {
         separatorImageUrl = control.StaticBottomSeparatorImageUrl;
     }
     else if ((depth >= control.StaticDisplayLevels) && (control.DynamicBottomSeparatorImageUrl.Length != 0))
     {
         separatorImageUrl = control.DynamicBottomSeparatorImageUrl;
     }
     if (separatorImageUrl != null)
     {
         new Image { ImageUrl = separatorImageUrl, GenerateEmptyAlternateText = true, Page = base.Page }.RenderControl(writer);
         this.RenderBreak(writer);
     }
 }
        protected virtual internal void RenderItem(HtmlTextWriter writer, MenuItem item, int position)
        {
            Menu          owner       = Control;
            MenuItemStyle mergedStyle = owner.GetMenuItemStyle(item);

            string             imageUrl     = item.ImageUrl;
            int                depth        = item.Depth;
            int                depthPlusOne = depth + 1;
            string             toolTip      = item.ToolTip;
            string             navigateUrl  = item.NavigateUrl;
            string             text         = item.Text;
            bool               enabled      = item.IsEnabled;
            bool               selectable   = item.Selectable;
            MenuItemCollection childItems   = item.ChildItems;

            // Top separator
            string topSeparatorUrl = null;

            if (depth < owner.StaticDisplayLevels && owner.StaticTopSeparatorImageUrl.Length != 0)
            {
                topSeparatorUrl = owner.StaticTopSeparatorImageUrl;
            }
            else if (depth >= owner.StaticDisplayLevels && owner.DynamicTopSeparatorImageUrl.Length != 0)
            {
                topSeparatorUrl = owner.DynamicTopSeparatorImageUrl;
            }
            if (topSeparatorUrl != null)
            {
                Image separatorImage = new Image();
                separatorImage.ImageUrl = topSeparatorUrl;
                separatorImage.GenerateEmptyAlternateText = true; // XHtml compliance
                separatorImage.Page = Page;
                separatorImage.RenderControl(writer);
                RenderBreak(writer);
            }

            // Don't render the top spacing if this is the first root item
            if ((mergedStyle != null) && !mergedStyle.ItemSpacing.IsEmpty &&
                ((_titleItem != null) || (position != 0)))
            {
                RenderSpace(writer, mergedStyle.ItemSpacing, owner.Orientation);
            }

            // Item span
            Panel itemPanel = new SpanPanel();

            itemPanel.Enabled = enabled;
            itemPanel.Page    = Page;

            // Apply styles
            if (Page != null && Page.SupportsStyleSheets)
            {
                string styleClass = owner.GetCssClassName(item, false);
                if (styleClass.Trim().Length > 0)
                {
                    itemPanel.CssClass = styleClass;
                }
            }
            else if (mergedStyle != null)
            {
                itemPanel.ApplyStyle(mergedStyle);
            }

            // Tooltip
            if (item.ToolTip.Length != 0)
            {
                itemPanel.ToolTip = item.ToolTip;
            }

            // Render item begin tag
            itemPanel.RenderBeginTag(writer);

            // If there is a navigation url on this item, set up the navigation stuff if:
            // - the item is the current title item for this level
            // - the item has no children
            // - the item is a static item of depth + 1 < StaticDisplayLevels
            bool clickOpensThisNode = !((position == 0) ||
                                        (childItems.Count == 0) ||
                                        (depthPlusOne < owner.StaticDisplayLevels) ||
                                        (depthPlusOne >= owner.MaximumDepth));

            // Indent
            if (position != 0 &&
                depth > 0 &&
                owner.StaticSubMenuIndent != Unit.Pixel(0) &&
                depth < owner.StaticDisplayLevels)
            {
                Image spacerImage = new Image();
                spacerImage.ImageUrl = owner.SpacerImageUrl;
                spacerImage.GenerateEmptyAlternateText = true; // XHtml compliance
                double indent = owner.StaticSubMenuIndent.Value * depth;
                if (indent < Unit.MaxValue)
                {
                    spacerImage.Width = new Unit(indent, owner.StaticSubMenuIndent.Type);
                }
                else
                {
                    spacerImage.Width = new Unit(Unit.MaxValue, owner.StaticSubMenuIndent.Type);;
                }
                spacerImage.Height = Unit.Pixel(1);
                spacerImage.Page   = Page;
                spacerImage.RenderControl(writer);
            }

            // Render out the item icon, if it is set and if the item is not templated (VSWhidbey 501618)
            if (imageUrl.Length > 0 && item.NotTemplated())
            {
                Image newImage = new Image();
                newImage.ImageUrl = imageUrl;
                if (toolTip.Length != 0)
                {
                    newImage.AlternateText = toolTip;
                }
                else
                {
                    newImage.GenerateEmptyAlternateText = true; // XHtml compliance
                }
                newImage.Page = Page;
                newImage.RenderControl(writer);
                writer.Write(' ');
            }

            bool   applyInlineBorder;
            string linkClass;

            if (Page != null && Page.SupportsStyleSheets)
            {
                linkClass = owner.GetCssClassName(item, true, out applyInlineBorder);
            }
            else
            {
                linkClass         = String.Empty;
                applyInlineBorder = false;
            }
            if (enabled && (clickOpensThisNode || selectable))
            {
                string accessKey     = owner.AccessKey;
                string itemAccessKey = ((position == 0 || (position == 1 && depth == 0)) && accessKey.Length != 0) ?
                                       accessKey :
                                       null;
                if (navigateUrl.Length > 0 && !clickOpensThisNode)
                {
                    if (PageAdapter != null)
                    {
                        PageAdapter.RenderBeginHyperlink(writer,
                                                         owner.ResolveClientUrl(navigateUrl),
                                                         true,
                                                         SR.GetString(SR.Adapter_GoLabel),
                                                         itemAccessKey != null ?
                                                         itemAccessKey :
                                                         (_currentAccessKey < 10 ?
                                                          (_currentAccessKey++).ToString(CultureInfo.InvariantCulture) :
                                                          null));
                        writer.Write(HttpUtility.HtmlEncode(item.FormattedText));
                        PageAdapter.RenderEndHyperlink(writer);
                    }
                    else
                    {
                        HyperLink link = new HyperLink();
                        link.NavigateUrl = owner.ResolveClientUrl(navigateUrl);
                        string target = item.Target;
                        if (String.IsNullOrEmpty(target))
                        {
                            target = owner.Target;
                        }
                        if (!String.IsNullOrEmpty(target))
                        {
                            link.Target = target;
                        }
                        link.AccessKey = itemAccessKey;
                        link.Page      = Page;
                        if (writer is Html32TextWriter)
                        {
                            link.RenderBeginTag(writer);
                            SpanPanel lbl = new SpanPanel();
                            lbl.Page = Page;
                            RenderStyle(writer, lbl, linkClass, mergedStyle, applyInlineBorder);
                            lbl.RenderBeginTag(writer);
                            item.RenderText(writer);
                            lbl.RenderEndTag(writer);
                            link.RenderEndTag(writer);
                        }
                        else
                        {
                            RenderStyle(writer, link, linkClass, mergedStyle, applyInlineBorder);
                            link.RenderBeginTag(writer);
                            item.RenderText(writer);
                            link.RenderEndTag(writer);
                        }
                    }
                }
                // Otherwise, write out a postback that will open or select the item
                else
                {
                    if (PageAdapter != null)
                    {
                        PageAdapter.RenderPostBackEvent(writer,
                                                        owner.UniqueID,
                                                        (clickOpensThisNode ? 'o' : 'b') +
                                                        Escape(item.InternalValuePath),
                                                        SR.GetString(SR.Adapter_OKLabel),
                                                        item.FormattedText,
                                                        null,
                                                        itemAccessKey != null ?
                                                        itemAccessKey :
                                                        (_currentAccessKey < 10 ?
                                                         (_currentAccessKey++).ToString(CultureInfo.InvariantCulture) :
                                                         null));

                        // Expand image
                        if (clickOpensThisNode)
                        {
                            RenderExpand(writer, item, owner);
                        }
                    }
                    else
                    {
                        HyperLink link = new HyperLink();
                        link.NavigateUrl = Page.ClientScript.GetPostBackClientHyperlink(owner,
                                                                                        (clickOpensThisNode ? 'o' : 'b') + Escape(item.InternalValuePath), true);
                        link.AccessKey = itemAccessKey;
                        link.Page      = Page;
                        if (writer is Html32TextWriter)
                        {
                            link.RenderBeginTag(writer);
                            SpanPanel lbl = new SpanPanel();
                            lbl.Page = Page;
                            RenderStyle(writer, lbl, linkClass, mergedStyle, applyInlineBorder);
                            lbl.RenderBeginTag(writer);
                            item.RenderText(writer);
                            if (clickOpensThisNode)
                            {
                                RenderExpand(writer, item, owner);
                            }
                            lbl.RenderEndTag(writer);
                            link.RenderEndTag(writer);
                        }
                        else
                        {
                            RenderStyle(writer, link, linkClass, mergedStyle, applyInlineBorder);
                            link.RenderBeginTag(writer);
                            item.RenderText(writer);
                            if (clickOpensThisNode)
                            {
                                RenderExpand(writer, item, owner);
                            }
                            link.RenderEndTag(writer);
                        }
                    }
                }
            }
            else
            {
                item.RenderText(writer);
            }
            itemPanel.RenderEndTag(writer);

            // Bottom (or right) item spacing
            RenderBreak(writer);
            if ((mergedStyle != null) && !mergedStyle.ItemSpacing.IsEmpty)
            {
                RenderSpace(writer, mergedStyle.ItemSpacing, owner.Orientation);
            }

            // Bottom separator
            string bottomSeparatorUrl = null;

            if (item.SeparatorImageUrl.Length != 0)
            {
                bottomSeparatorUrl = item.SeparatorImageUrl;
            }
            else if ((depth < owner.StaticDisplayLevels) && (owner.StaticBottomSeparatorImageUrl.Length != 0))
            {
                bottomSeparatorUrl = owner.StaticBottomSeparatorImageUrl;
            }
            else if ((depth >= owner.StaticDisplayLevels) && (owner.DynamicBottomSeparatorImageUrl.Length != 0))
            {
                bottomSeparatorUrl = owner.DynamicBottomSeparatorImageUrl;
            }
            if (bottomSeparatorUrl != null)
            {
                Image separatorImage = new Image();
                separatorImage.ImageUrl = bottomSeparatorUrl;
                separatorImage.GenerateEmptyAlternateText = true; // XHtml compliance
                separatorImage.Page = Page;
                separatorImage.RenderControl(writer);
                RenderBreak(writer);
            }
        }
        protected virtual internal void RenderItem(HtmlTextWriter writer, MenuItem item, int position) {
            Menu owner = Control;
            MenuItemStyle mergedStyle = owner.GetMenuItemStyle(item);

            string imageUrl = item.ImageUrl;
            int depth = item.Depth;
            int depthPlusOne = depth + 1;
            string toolTip = item.ToolTip;
            string navigateUrl = item.NavigateUrl;
            string text = item.Text;
            bool enabled = item.IsEnabled;
            bool selectable = item.Selectable;
            MenuItemCollection childItems = item.ChildItems;

            // Top separator
            string topSeparatorUrl = null;
            if (depth < owner.StaticDisplayLevels && owner.StaticTopSeparatorImageUrl.Length != 0) {
                topSeparatorUrl = owner.StaticTopSeparatorImageUrl;
            }
            else if (depth >= owner.StaticDisplayLevels && owner.DynamicTopSeparatorImageUrl.Length != 0) {
                topSeparatorUrl = owner.DynamicTopSeparatorImageUrl;
            }
            if (topSeparatorUrl != null) {
                Image separatorImage = new Image();
                separatorImage.ImageUrl = topSeparatorUrl;
                separatorImage.GenerateEmptyAlternateText = true; // XHtml compliance
                separatorImage.Page = Page;
                separatorImage.RenderControl(writer);
                RenderBreak(writer);
            }

            // Don't render the top spacing if this is the first root item
            if ((mergedStyle != null) && !mergedStyle.ItemSpacing.IsEmpty &&
                ((_titleItem != null) || (position != 0))) {
                RenderSpace(writer, mergedStyle.ItemSpacing, owner.Orientation);
            }

            // Item span
            Panel itemPanel = new SpanPanel();
            itemPanel.Enabled = enabled;
            itemPanel.Page = Page;

            // Apply styles
            if (Page != null && Page.SupportsStyleSheets) {
                string styleClass = owner.GetCssClassName(item, false);
                if (styleClass.Trim().Length > 0) {
                    itemPanel.CssClass = styleClass;
                }
            }
            else if (mergedStyle != null) {
                itemPanel.ApplyStyle(mergedStyle);
            }

            // Tooltip
            if (item.ToolTip.Length != 0) {
                itemPanel.ToolTip = item.ToolTip;
            }

            // Render item begin tag
            itemPanel.RenderBeginTag(writer);

            // If there is a navigation url on this item, set up the navigation stuff if:
            // - the item is the current title item for this level
            // - the item has no children
            // - the item is a static item of depth + 1 < StaticDisplayLevels
            bool clickOpensThisNode = !((position == 0) || 
                                        (childItems.Count == 0) ||
                                        (depthPlusOne < owner.StaticDisplayLevels) || 
                                        (depthPlusOne >= owner.MaximumDepth));
           
            // Indent
            if (position != 0 &&
                depth > 0 &&
                owner.StaticSubMenuIndent != Unit.Pixel(0) &&
                depth < owner.StaticDisplayLevels) {
                Image spacerImage = new Image();
                spacerImage.ImageUrl = owner.SpacerImageUrl;
                spacerImage.GenerateEmptyAlternateText = true; // XHtml compliance
                double indent = owner.StaticSubMenuIndent.Value * depth;
                if (indent < Unit.MaxValue) {
                    spacerImage.Width = new Unit(indent, owner.StaticSubMenuIndent.Type);
                }
                else {
                    spacerImage.Width = new Unit(Unit.MaxValue, owner.StaticSubMenuIndent.Type);;
                }
                spacerImage.Height = Unit.Pixel(1);
                spacerImage.Page = Page;
                spacerImage.RenderControl(writer);
            }

            // Render out the item icon, if it is set and if the item is not templated (VSWhidbey 501618)
            if (imageUrl.Length > 0 && item.NotTemplated()) {
                Image newImage = new Image();
                newImage.ImageUrl = imageUrl;
                if (toolTip.Length != 0) {
                    newImage.AlternateText = toolTip;
                }
                else {
                    newImage.GenerateEmptyAlternateText = true; // XHtml compliance
                }
                newImage.Page = Page;
                newImage.RenderControl(writer);
                writer.Write(' ');
            }

            bool applyInlineBorder;
            string linkClass;
            if (Page != null && Page.SupportsStyleSheets) {
                linkClass = owner.GetCssClassName(item, true, out applyInlineBorder);
            }
            else {
                linkClass = String.Empty;
                applyInlineBorder = false;
            }
            if (enabled && (clickOpensThisNode || selectable)) {
                string accessKey = owner.AccessKey;
                string itemAccessKey = ((position == 0 || (position == 1 && depth == 0)) && accessKey.Length != 0) ?
                    accessKey :
                    null;
                if (navigateUrl.Length > 0 && !clickOpensThisNode) {
                    if (PageAdapter != null) {
                        PageAdapter.RenderBeginHyperlink(writer,
                                                         owner.ResolveClientUrl(navigateUrl),
                                                         true,
                                                         SR.GetString(SR.Adapter_GoLabel),
                                                         itemAccessKey != null ?
                                                          itemAccessKey :
                                                          (_currentAccessKey < 10 ?
                                                            (_currentAccessKey++).ToString(CultureInfo.InvariantCulture) :
                                                            null));
                        writer.Write(HttpUtility.HtmlEncode(item.FormattedText));
                        PageAdapter.RenderEndHyperlink(writer);
                    }
                    else {
                        HyperLink link = new HyperLink();
                        link.NavigateUrl = owner.ResolveClientUrl(navigateUrl);
                        string target = item.Target;
                        if (String.IsNullOrEmpty(target)) {
                            target = owner.Target;
                        }
                        if (!String.IsNullOrEmpty(target)) {
                            link.Target = target;
                        }
                        link.AccessKey = itemAccessKey;
                        link.Page = Page;
                        if (writer is Html32TextWriter) {
                            link.RenderBeginTag(writer);
                            SpanPanel lbl = new SpanPanel();
                            lbl.Page = Page;
                            RenderStyle(writer, lbl, linkClass, mergedStyle, applyInlineBorder);
                            lbl.RenderBeginTag(writer);
                            item.RenderText(writer);
                            lbl.RenderEndTag(writer);
                            link.RenderEndTag(writer);
                        }
                        else {
                            RenderStyle(writer, link, linkClass, mergedStyle, applyInlineBorder);
                            link.RenderBeginTag(writer);
                            item.RenderText(writer);
                            link.RenderEndTag(writer);
                        }
                    }
                }
                // Otherwise, write out a postback that will open or select the item
                else {
                    if (PageAdapter != null) {
                        PageAdapter.RenderPostBackEvent(writer,
                                                        owner.UniqueID,
                                                        (clickOpensThisNode ? 'o' : 'b') +
                                                            Escape(item.InternalValuePath),
                                                        SR.GetString(SR.Adapter_OKLabel),
                                                        item.FormattedText,
                                                        null,
                                                        itemAccessKey != null ?
                                                          itemAccessKey :
                                                          (_currentAccessKey < 10 ?
                                                         (_currentAccessKey++).ToString(CultureInfo.InvariantCulture) :
                                                         null));

                        // Expand image
                        if (clickOpensThisNode) {
                            RenderExpand(writer, item, owner);
                        }
                    }
                    else {
                        HyperLink link = new HyperLink();
                        link.NavigateUrl = Page.ClientScript.GetPostBackClientHyperlink(owner,
                            (clickOpensThisNode ? 'o' : 'b') + Escape(item.InternalValuePath), true);
                        link.AccessKey = itemAccessKey;
                        link.Page = Page;
                        if (writer is Html32TextWriter) {
                            link.RenderBeginTag(writer);
                            SpanPanel lbl = new SpanPanel();
                            lbl.Page = Page;
                            RenderStyle(writer, lbl, linkClass, mergedStyle, applyInlineBorder);
                            lbl.RenderBeginTag(writer);
                            item.RenderText(writer);
                            if (clickOpensThisNode) {
                                RenderExpand(writer, item, owner);
                            }
                            lbl.RenderEndTag(writer);
                            link.RenderEndTag(writer);
                        }
                        else {
                            RenderStyle(writer, link, linkClass, mergedStyle, applyInlineBorder);
                            link.RenderBeginTag(writer);
                            item.RenderText(writer);
                            if (clickOpensThisNode) {
                                RenderExpand(writer, item, owner);
                            }
                            link.RenderEndTag(writer);
                        }
                    }
                }
            }
            else {
                item.RenderText(writer);
            }
            itemPanel.RenderEndTag(writer);

            // Bottom (or right) item spacing
            RenderBreak(writer);
            if ((mergedStyle != null) && !mergedStyle.ItemSpacing.IsEmpty) {
                RenderSpace(writer, mergedStyle.ItemSpacing, owner.Orientation);
            }

            // Bottom separator
            string bottomSeparatorUrl = null;
            if (item.SeparatorImageUrl.Length != 0) {
                bottomSeparatorUrl = item.SeparatorImageUrl;
            }
            else if ((depth < owner.StaticDisplayLevels) && (owner.StaticBottomSeparatorImageUrl.Length != 0)) {
                bottomSeparatorUrl = owner.StaticBottomSeparatorImageUrl;
            }
            else if ((depth >= owner.StaticDisplayLevels) && (owner.DynamicBottomSeparatorImageUrl.Length != 0)) {
                bottomSeparatorUrl = owner.DynamicBottomSeparatorImageUrl;
            }
            if (bottomSeparatorUrl != null) {
                Image separatorImage = new Image();
                separatorImage.ImageUrl = bottomSeparatorUrl;
                separatorImage.GenerateEmptyAlternateText = true; // XHtml compliance
                separatorImage.Page = Page;
                separatorImage.RenderControl(writer);
                RenderBreak(writer);
            }
        }