public static MvcHtmlString PageName(this HtmlHelper helper, Page page)
        {
            var url = new UrlHelper(helper.ViewContext.RequestContext);

            switch (page.TypeId)
            {
                case 1:
                    return MvcHtmlString.Create(
                        string.Format("<a href='{0}'>{1}</a>",
                            url.Action("Index", "Pages", new
                            {
                                page.SectionId,
                                parentId = page.Id
                            }),
                            page.Name)
                    );
            }

            return MvcHtmlString.Create(page.Name);
        }
        private void AddCategoryPage(Page page)
        {
            int maxOrder = GetSession.Query<Page>()
                .Where(x => x.Parent.Id == page.Parent.Id && x.SectionId == page.SectionId)
                .Max(x => (int?)x.PageOrder) ?? 0;

            page.PageOrder = maxOrder + 1;
            page.IsInternal = true;
            page.UpdatedDate = DateTime.Now;

            GetSession.Save(page);

            //return RedirectToAction("Index", new { model.ParentId, model.SectionId });

        }
        private void AddCategory(string relativePath, int sectionId, Int64 parentId,
            string categoryTemplate, string categoryItemTemplate, bool root = false)
        {
            string filePath = this.Server.MapPath("~" + relativePath);
            string[] subFolders = Directory.GetDirectories(filePath);

            DirectoryInfo directoryInfo = new DirectoryInfo(filePath);
            Int64 pageId = parentId;

            // Ignore Root
            if (!root)
            {
                // Generate page
                //Page page = this.GetSession.QueryOver<Page>()
                //                    .Where(p => p.Id == parentId && p.Name == directoryInfo.Name)
                //                    .SingleOrDefault();

                //// Get page
                //if (page == null)
                //{
                Page page = new Page()
                {
                    SectionId = sectionId,
                    Name = directoryInfo.Name
                };
                //}

                page.Parent = GetSession.Get<Page>(parentId);

                FileInfo[] files = directoryInfo.GetFiles();
                if (files.Length > 0)
                {
                    // Generate Content
                    string content = (string)categoryTemplate.Clone();
                    StringBuilder sb = new StringBuilder();

                    foreach (FileInfo file in files)
                    {
                        sb.Append(categoryItemTemplate.Replace("%%FileUrl%%", (relativePath + "/" + file.Name).Replace("//", "/"))
                        .Replace("%%FileName%%", file.Name)
                        .Replace("%%FileDescription%%", String.Empty)
                        .Replace("%%FileDateTime%%", String.Empty));
                    }

                    content = categoryTemplate.Replace("%%Items%%", sb.ToString());
                    page.Content = content;

                    sb.Clear();
                }

                if (subFolders.Length > 1)
                {
                    page.TypeId = 1;
                }
                else
                {
                    page.TypeId = 2;
                }


                // Save Page
                AddCategoryPage(page);

                pageId = page.Id;
            }


            // Recursive sub folders
            foreach (string subFolder in subFolders)
            {
                directoryInfo = new DirectoryInfo(subFolder);

                AddCategory(relativePath + "/" + directoryInfo.Name, sectionId, pageId, categoryTemplate, categoryItemTemplate);
            }
        }
 public Page GetFirstPage(Page oPage)
 {
     if (oPage.Parent == null)
         return oPage;
     else
         return GetFirstPage(oPage.Parent);
 }
        public ActionResult RightMenu(Page currentPage)
        {
            Page pageToShow = GetFirstPage(currentPage);

            var items = GetSession.QueryOver<Page>()
                .Where(x => x.Parent.Id == pageToShow.Id)
                .OrderBy(x => x.PageOrder).Asc
                .List()
                .ByPermissions(HttpContext);
            return View(items);
        }
        public static MvcHtmlString BreadCrumbs(this HtmlHelper helper, Page page)
        {
            var theParent = page.Parent;
            
            if (page.Parent == null)
                return MvcHtmlString.Create(page.Name);

            if (page.Parent.IsActive == false)
            {
                if (page.Parent.Parent != null)
                {
                    theParent = page.Parent.Parent;
                }
                else
                {
                    return MvcHtmlString.Create(page.Name);
                }

            }
            return MvcHtmlString.Create(string.Format("<table cellspacing='0' cellpadding='0'><tr><td> <a href='/pages/show/{2}'>{0}</a></td><td> > </td><td>{1}</td></tr></table>",
                    helper.BreadCrumbs(theParent),
                    page.Name,
                    page.Parent.Id
                ));
   


           
        }
        public static MvcHtmlString PageLink(this HtmlHelper helper, Page page, string type = "nav")
        {
            var url = new UrlHelper(helper.ViewContext.RequestContext);



            if (type == "main-sub")
            {
                switch (page.TypeId)
                {
                    case 1:
                    case 2:
                        return MvcHtmlString.Create(
                                string.Format("<a id='{3}-menu-{2}' href='{0}'>{1}</a>",
                                    url.Action("Show", "Pages", new
                                    {
                                        page.Id
                                    }),
                                    page.Name,
                                    page.Id,
                                    type)
                            );
                    default:
                        return MvcHtmlString.Create(
                                string.Format("<a {4} id='{3}-menu-{2}' href='{0}'>{1}</a>",
                                    page.IsIFrame ? url.Action("Show", "Pages", new { page.Id }) : page.Url,
                                    page.Name,
                                    page.Id,
                                    type,
                                    page.IsBlank ? " target='_blank'" : "")
                            );
                }
            }


            switch (page.TypeId)
            {
                case 1:
                case 2:
                    return MvcHtmlString.Create(
                        string.Format("<a id='{3}-menu-{2}' href='{0}'>{1}</a>",
                            url.Action("Show", "Pages", new
                            {
                                page.Id
                            }),
                            page.Name,
                            page.Id,
                            type)
                    );

                default:
                    return MvcHtmlString.Create(
                        string.Format("<a{2} id='right-menu-{3}' href='{0}'>{1}</a>",
                        page.IsIFrame ? url.Action("Show", "Pages", new { page.Id }) : page.Url,
                            page.Name,
                            page.IsBlank ? " target='_blank'" : "",
                            page.Id
                        )
                    );
            }
        }