protected override void OnPreRender(EventArgs e)
        {
            if (isCatalogSelected)
            {
                if (selectedID != -1)
                {
                    DbContentCatalog selectedCatalog = new DbContentCatalog(selectedID);

                    newButton.Enabled  = Page.User.IsInRole(selectedCatalog.EditorRole.Name);
                    editButton.Enabled = Page.User.IsInRole(selectedCatalog.EditorRole.Name);
                }
                else
                {
                    editButton.Enabled = false;
                    viewButton.Enabled = false;
                }
                //				upButton.Enabled = false;
                //				downButton.Enabled = false;
            }
            else
            {
                if (selectedClipID != -1)
                {
                    DbContentClip    clip            = new DbContentClip(selectedClipID);
                    DbContentCatalog selectedCatalog = clip.ParentCatalog;

                    // set edit button based on roles
                    editButton.Enabled = Page.User.IsInRole(clip.ParentCatalog.EditorRole.Name);
                    //upButton.Enabled = editButton.Enabled;
                    //downButton.Enabled = editButton.Enabled;

                    newButton.Enabled = selectedID != -1 &&
                                        (Page.User.IsInRole(selectedCatalog.AuthorRole.Name) |
                                         Page.User.IsInRole(selectedCatalog.EditorRole.Name));
                }
                else
                {
                    editButton.Enabled = false;
                    viewButton.Enabled = false;
                    newButton.Enabled  = false;
                    //upButton.Enabled = false;
                    //downButton.Enabled = false;
                }
            }

            ControlExtender.RegisterTooltipScript(this.Page, 1, "grey", 2, "white");
        }
        private void renderCatalog(DbContentCatalog catalog, HtmlTextWriter output)
        {
            float calcSize;                                                                             // Calculated size of objects
            bool  openCatalog   = catalogIsOpen(catalog.ID);
            bool  catalogSelect = Page.User.IsInRole("CMS/Administrator") || Page.User.IsInRole(catalog.EditorRole.Name);
            bool  clipSelect;

            output.WriteFullBeginTag("tr");
            output.WriteLine();
            output.Indent++;

            output.WriteBeginTag("td");
            output.WriteAttribute("style", "padding-left:" + (indent * indentMultiplier + CellPadding.Value).ToString() + "px;");
            output.WriteAttribute("valign", "middle");
            output.WriteAttribute("width", "100%");
            output.Write(HtmlTextWriter.TagRightChar);

            //			if(catalogSelect)
            //			{
            output.WriteBeginTag("a");
            output.WriteAttribute("href", "javascript:" + Page.ClientScript.GetPostBackEventReference(this, "tog_" + catalog.ID.ToString()));
            output.Write(HtmlTextWriter.TagRightChar);
            //			}

            if (openCatalog)
            {
                output.WriteBeginTag("img");
                output.WriteAttribute("src", Page.ResolveUrl(minusIcon));
                output.WriteAttribute("align", "absmiddle");
                output.WriteAttribute("border", "0");
                output.Write(HtmlTextWriter.TagRightChar);
            }
            else
            {
                output.WriteBeginTag("img");
                output.WriteAttribute("src", Page.ResolveUrl(plusIcon));
                output.WriteAttribute("align", "absmiddle");
                output.WriteAttribute("border", "0");
                output.Write(HtmlTextWriter.TagRightChar);
            }

            //			if(catalogSelect)
            output.WriteEndTag("a");

            //			if(catalogSelect)
            //			{
            output.WriteBeginTag("a");
            output.WriteAttribute("href", "javascript:" + GetSelectReference(catalog.ID));
            output.Write(HtmlTextWriter.TagRightChar);
            //			}

            output.WriteBeginTag("img");
            output.WriteAttribute("src", Page.ResolveUrl(catalogIcon));
            output.WriteAttribute("align", "absmiddle");
            output.WriteAttribute("border", "0");
            output.Write(HtmlTextWriter.TagRightChar);

            if (catalog.ID == selectedID & isCatalogSelected)
            {
                output.Write("<strong>");
            }
            output.Write(catalog.ToString());
            if (catalog.ID == selectedID & isCatalogSelected)
            {
                output.Write("</strong>");
            }

            //			if(catalogSelect)
            output.WriteEndTag("a");

            output.WriteEndTag("td");
            output.WriteLine();

            output.WriteBeginTag("td");
            output.WriteAttribute("valign", "top");
            output.Write(HtmlTextWriter.TagRightChar);
            output.Write("&nbsp;");
            output.WriteEndTag("td");

            // Menu Tag
            output.WriteBeginTag("td");
            output.WriteAttribute("valign", "top");
            output.Write(HtmlTextWriter.TagRightChar);
            if (catalog.MenuEnabled)
            {
                output.Write("Menu");
            }
            else
            {
                output.Write("&nbsp;");
            }
            output.WriteEndTag("td");

            output.WriteBeginTag("td");
            output.WriteAttribute("valign", "top");
            output.Write(HtmlTextWriter.TagRightChar);
            output.Write("Catalog");
            output.WriteEndTag("td");

            output.WriteBeginTag("td");
            output.WriteAttribute("valign", "top");
            output.Write(HtmlTextWriter.TagRightChar);
            output.Write(catalog.ModifyDate.ToShortDateString());
            output.WriteEndTag("td");

            //			output.WriteFullBeginTag("td");
            //			output.Write("&nbsp;");
            //			output.WriteEndTag("td");
            //
            //			output.WriteFullBeginTag("td");
            //			output.Write("&nbsp;");
            //			output.WriteEndTag("td");

            output.Indent--;
            output.WriteEndTag("tr");
            output.WriteLine();

            indent++;

            if (openCatalog)
            {
                for (int x = 0; x < catalogs.Count; x++)
                {
                    DbContentCatalog childCatalog = catalogs[x];
                    if (childCatalog.ParentCatalog != null && childCatalog.ParentCatalog.ID == catalog.ID)
                    {
                        renderCatalog(childCatalog, output);
                    }
                }

                DbContentClipCollection clips = catalog.GetClips();
                clips.Sort(ContentCompareKey.MenuEnabled, ContentCompareKey.MenuOrder);

                foreach (DbContentClip clip in clips)
                {
                    // Do not display expired clips unless expire checkbox is selected
                    if (!cbExpired.Checked && DateTime.Now > clip.ExpirationDate)
                    {
                        continue;
                    }

                    // All clips to be selected ONLY if editor, author
                    clipSelect = Page.User.IsInRole(catalog.EditorRole.Name);

                    output.WriteFullBeginTag("tr");
                    output.WriteBeginTag("td");
                    output.WriteAttribute("style", "padding-left:" + (indent * indentMultiplier + CellPadding.Value).ToString() + "px;");
                    output.WriteAttribute("valign", "middle");
                    output.WriteAttribute("width", "100%");
                    output.Write(HtmlTextWriter.TagRightChar);

                    #region Prefix Icon Output - Should Be Empty For All Clips

                    output.WriteBeginTag("div");
                    output.WriteAttribute("style", "float:left;");
                    output.Write(HtmlTextWriter.TagRightChar);

                    output.WriteBeginTag("img");
                    output.WriteAttribute("src", Page.ResolveUrl(blankIcon));
                    output.WriteAttribute("align", "absmiddle");
                    output.WriteAttribute("border", "0");
                    output.Write(HtmlTextWriter.TagRightChar);

                    output.WriteEndTag("div");

                    #endregion

                    #region Icon Output

                    output.WriteBeginTag("div");
                    output.WriteAttribute("style", "float:left;");
                    output.Write(HtmlTextWriter.TagRightChar);

                    if (clipSelect)
                    {
                        output.WriteBeginTag("a");
                        output.WriteAttribute("href", "javascript:" + Page.ClientScript.GetPostBackEventReference(this, "csel_" + clip.ID.ToString()));
                        output.Write(HtmlTextWriter.TagRightChar);
                    }

                    // Clip Icon
                    output.WriteBeginTag("img");
                    if (clip.ExpirationDate <= DateTime.Now)
                    {
                        output.WriteAttribute("src", Page.ResolveUrl(expiredIcon));
                    }
                    else if (clip.PublishDate <= DateTime.Now)
                    {
                        output.WriteAttribute("src", Page.ResolveUrl(publishedIcon));
                    }
                    else
                    {
                        output.WriteAttribute("src", Page.ResolveUrl(prePublishedIcon));
                    }
                    output.WriteAttribute("align", "absmiddle");
                    output.WriteAttribute("border", "0");
                    output.Write(HtmlTextWriter.TagRightChar);

                    if (clipSelect)
                    {
                        output.WriteEndTag("a");
                    }

                    output.WriteEndTag("div");

                    #endregion

                    #region Title Output

                    output.WriteBeginTag("div");
                    output.WriteAttribute("style", "padding-top:3px;float:left;");

                    // Tooltip Properties
                    output.WriteAttribute("onmouseover",
                                          ControlExtender.GetTooltipStartReference(constructTooltip(clip), "#ffffe0", 0));
                    output.WriteAttribute("onmouseout", ControlExtender.GetTooltipEndReference());

                    output.Write(HtmlTextWriter.TagRightChar);

                    if (clipSelect)
                    {
                        output.WriteBeginTag("a");
                        output.WriteAttribute("href", "javascript:" + Page.ClientScript.GetPostBackEventReference(this, "csel_" + clip.ID.ToString()));
                        output.Write(HtmlTextWriter.TagRightChar);
                    }

                    if (selectedClipID == clip.ID & !isCatalogSelected)
                    {
                        output.Write("<strong>");
                    }
                    // Be sure to strip html tags!
                    output.Write(Regex.Replace(clip.Title, "<[^>]*>", ""));
                    if (selectedClipID == clip.ID & !isCatalogSelected)
                    {
                        output.Write("</strong>");
                    }

                    if (clipSelect)
                    {
                        output.WriteEndTag("a");
                    }

                    output.WriteEndTag("div");

                    #endregion

                    output.WriteEndTag("td");

                    // Calculate size
                    calcSize = ((float)clip.Body.Length) / 1024;
                    output.WriteBeginTag("td");
                    output.WriteAttribute("nowrap", "true");
                    output.WriteAttribute("valign", "top");
                    output.Write(HtmlTextWriter.TagRightChar);
                    output.Write(calcSize.ToString("n1"));
                    output.Write(" KB");
                    output.WriteEndTag("td");

                    // Menu Tag
                    output.WriteBeginTag("td");
                    output.WriteAttribute("valign", "top");
                    output.Write(HtmlTextWriter.TagRightChar);
                    if (clip.MenuEnabled)
                    {
                        output.Write("Menu");
                    }
                    else
                    {
                        output.Write("&nbsp;");
                    }
                    output.WriteEndTag("td");

                    output.WriteBeginTag("td");
                    output.WriteAttribute("valign", "top");
                    output.Write(HtmlTextWriter.TagRightChar);
                    output.Write("Clip");
                    output.WriteEndTag("td");

                    output.WriteBeginTag("td");
                    output.WriteAttribute("valign", "top");
                    output.Write(HtmlTextWriter.TagRightChar);
                    output.Write(clip.ModifyDate.ToShortDateString());
                    output.WriteEndTag("td");

                    //					output.WriteBeginTag("td");
                    //					output.WriteAttribute("valign", "top");
                    //					output.Write(HtmlTextWriter.TagRightChar);
                    //					output.Write(clip.PublishDate.ToShortDateString());
                    //					output.WriteEndTag("td");
                    //
                    //					output.WriteBeginTag("td");
                    //					output.WriteAttribute("valign", "top");
                    //					output.Write(HtmlTextWriter.TagRightChar);
                    //					output.Write(clip.ExpirationDate.ToShortDateString());
                    //					output.WriteEndTag("td");

                    output.WriteEndTag("tr");
                }
            }

            indent--;
        }