public static ArticlePartialViewModel CreateArticlePartialViewModel(ArticleItem articleItem, ArticleModule articleModule,
            ArrayList categoryNamesList, ArrayList attributeNamesList, PortalType portalType,
            Dictionary<string, string> resources, int clientId, int portalId, string adminURL)
        {
            ArticlePartialViewModel articlePartialViewModel = new ArticlePartialViewModel();
            DataConfigurationRepository dataConfigurationRepository = new
                            DataConfigurationRepository(HttpContext.Current.Application["KBDataPath"].ToString(), HttpContext.Current.Application["KBInstallPath"].ToString());
            articlePartialViewModel.Resources = resources;
            articlePartialViewModel.ArticleItem = articleItem;
            articlePartialViewModel.clientId = clientId;
            articlePartialViewModel.portalId = portalId;
            if (articleModule != null)
            {
                articlePartialViewModel.ArticleConfiguration = articleModule;
            }
            else
            {
                //---- set defaults ------

            }
            List<BreadcrumbViewModel> categories = new List<BreadcrumbViewModel>();
            foreach (List<string> names in categoryNamesList)
            {
                BreadcrumbViewModel itemList = new BreadcrumbViewModel();
                itemList.NavigationList = new List<SelectListItem>();
                foreach (string name in names)
                {
                    itemList.NavigationList.Add(new SelectListItem() { Text = name, Value = string.Empty, Selected = false });
                }
                categories.Add(itemList);
            }
            articlePartialViewModel.Categories = categories;
            articlePartialViewModel.Attributes = new List<BreadcrumbViewModel>();
            List<BreadcrumbViewModel> attr = new List<BreadcrumbViewModel>();
            foreach (List<string> names in attributeNamesList)
            {
                BreadcrumbViewModel itemList = new BreadcrumbViewModel();
                itemList.NavigationList = new List<SelectListItem>();
                foreach (string name in names)
                {
                    itemList.NavigationList.Add(new SelectListItem() { Text = name, Value = string.Empty, Selected = false });
                }
                attr.Add(itemList);
            }
            articlePartialViewModel.Attributes = attr;
            articlePartialViewModel.ImageLinks = new List<ImageLinkViewModel>();
            ImageLinkViewModel imageLinkViewModel;

            //check Favorite is enabled
            if (articlePartialViewModel.ArticleConfiguration.articleControlsProperties.ArticleFavoriteDisplay)
            {
                imageLinkViewModel = new ImageLinkViewModel() { Icon = (articlePartialViewModel.ArticleItem.Favorite == true &&
                    (portalType != PortalType.Open && portalType != PortalType.Registration)) ?
                    @Utilities.GetImageUrl(clientId, portalId, "favoriteactive.png") : @Utilities.GetImageUrl(clientId, portalId, "favorite.png"),
                                                                Link = "/Article/FavoriteArticle/" + clientId + "/" + portalId,
                                                                Title = Utilities.GetResourceText(resources, "CONTROLS_FAVORITELABEL"),
                                                                ToggleIcon = (articlePartialViewModel.ArticleItem.Favorite == true ||
                                                                portalType == PortalType.Open || portalType == PortalType.Registration) ?
                                                                @Utilities.GetImageUrl(clientId, portalId, "favorite.png") :
                                                                @Utilities.GetImageUrl(clientId, portalId, "favoriteactive.png")
                };
                imageLinkViewModel.Id = "favorites";
                articlePartialViewModel.ImageLinks.Add(imageLinkViewModel);
            }

            //check Subscription is enabled
            if (articlePartialViewModel.ArticleConfiguration.articleControlsProperties.ArticleSubscribeDisplay)
            {
                imageLinkViewModel = new ImageLinkViewModel() { Icon = @Utilities.GetImageUrl(clientId, portalId, "subscribe.png"),
                    Link = "", Title = Utilities.GetResourceText(resources, "CONTROLS_SUBSCRIBELABEL"),
                    ToggleIcon = @Utilities.GetImageUrl(clientId, portalId, "subscribe_selected.png") };
                // imageLinkViewModel = new ImageLinkViewModel() { Icon = (articlesViewModel.ArticlePartialViewModel.ArticleItem.SubscriptionStatus == true && (_portal.PortalType != PortalType.Open && _portal.PortalType != PortalType.Registration)) ? @Utilities.GetImageUrl(clientId, portalId, "subscribe_select.png") : @Utilities.GetImageUrl(clientId, portalId, "subscribe.png"), Link = "/Article/ToggleArticleSubscription/" + clientId + "/" + portalId, Title = Utilities.GetResourceText(resources, "CONTROLS_SUBSCRIBELABEL"), ToggleIcon = (articlesViewModel.ArticlePartialViewModel.ArticleItem.SubscriptionStatus == true || _portal.PortalType == PortalType.Open || _portal.PortalType == PortalType.Registration) ? @Utilities.GetImageUrl(clientId, portalId, "subscribe.png") : @Utilities.GetImageUrl(clientId, portalId, "subscribe.png") };
                //imageLinkViewModel = new ImageLinkViewModel() { Icon = @Utilities.GetImageUrl(clientId, portalId, "subscribe.png"), Link = "", Title = Utilities.GetResourceText(resources,"CONTROLS_SUBSCRIBELABEL"), ToggleIcon = @Utilities.GetImageUrl(clientId, portalId, "subscribe.png") };
                imageLinkViewModel.Id = "subscribe";
                articlePartialViewModel.ImageLinks.Add(imageLinkViewModel);
            }
            //Check share is enabled
            if (articlePartialViewModel.ArticleConfiguration.articleControlsProperties.ArticleShareDisplay)
            {
                imageLinkViewModel = new ImageLinkViewModel() { Icon = @Utilities.GetImageUrl(clientId, portalId, "share.png"),
                    Link = "", Title = Utilities.GetResourceText(resources, "CONTROLS_SHARELABEL"),
                    ToggleIcon = @Utilities.GetImageUrl(clientId, portalId, "share_selected.png") };
                imageLinkViewModel.Id = "share";
                articlePartialViewModel.ImageLinks.Add(imageLinkViewModel);
            }
            if (articlePartialViewModel.ArticleConfiguration.articleControlsProperties.ArticleEditDisplay)
            {
                imageLinkViewModel = new ImageLinkViewModel() { Icon = @Utilities.GetImageUrl(clientId, portalId, "edit.png"),
                                                                Link = adminURL + "/index.aspx?aid=",
                                                                Title = Utilities.GetResourceText(resources, "CONTROLS_EDITLABEL"),
                    ToggleIcon = @Utilities.GetImageUrl(clientId, portalId, "edit.png") };
                imageLinkViewModel.Id = "edit";
                articlePartialViewModel.ImageLinks.Add(imageLinkViewModel);
            }
            articlePartialViewModel.Attachments = articleItem.Attachments;
            return articlePartialViewModel;
        }
        //
        // GET: /Articles/
        public ActionResult Index(int? id, int? relparticId, string relpname, int catId = 0, Boolean fromwidget = false, int searchid = 0, Boolean isSearch = false)
        {
            try
            {
                //read portalid and clientid from route data
                ReadDataFromRouteData();

                string searchText = string.Empty;
                ArticleViewModel articlesViewModel = new ArticleViewModel();

                if (HttpContext.Session["SearchText_" + portalId.ToString()] != null && isSearch == true)
                {
                    searchText = (String)Session["SearchText_" + portalId.ToString()];
                }

                var articleId = 0;
                if (string.IsNullOrEmpty(Request.QueryString["id"]) == false)
                {
                    if (Request.QueryString["id"].ToString().Contains("|"))
                    {
                        articleId = Int32.Parse(Request.QueryString["id"].ToString().Replace("|", string.Empty).Trim());
                    }
                    else articleId = int.Parse(Request.QueryString["id"]);
                }
                if (!(id.HasValue) && !(relparticId.HasValue))
                {
                    ViewData.Add("ArticleNotFound", "ArticleID is not passed!");
                    return View();
                }
                if (id.Value.ToString().Contains("|"))
                {
                    articleId = Int32.Parse(id.Value.ToString().Replace("|", string.Empty).Trim());
                }
                else articleId = id.Value;
                var articleItem = _articleManager.GetArticleItemById(articleId, HttpContext.Session.SessionID, searchText, searchid);

                if (articleItem == null)
                {
                    ViewData.Add("ArticleNotFound", "ArticleID not found!");
                    return View();
                }
                if (articleItem.Extension == ".html" || articleItem.Extension == ".htm")
                {
                    if (articleItem.Content.CompleteContent.Contains("articleRedirect.aspx"))
                        articleItem.Content.CompleteContent = Utilities.UpdateArticleURlInArticleContent(articleItem.Content.CompleteContent, "/articleRedirect.aspx?aid=", "/Article/Index/" + clientId + "/" + portalId + "?id=");
                }

                //split artilce content
                Utilities.splitArticleContent(ref articleItem);

                articlesViewModel.clientId = clientId;
                articlesViewModel.portalId = portalId;
                articlesViewModel.showBreadcrumb = this._portal.Configuration.ShowBreadcrumbs;
                articlesViewModel.SessionTimeOutWarning = Utilities.GetResourceText(CommonResources, "SESSIONTIMEOUTWARNING");
                articlesViewModel.SessionTimedOut = Utilities.GetResourceText(CommonResources, "SESSIONTIMEDOUT");
                articlesViewModel.FromWidget = fromwidget;
                //overwrite kb name with XML name
                string kbname = getKnowledgebaseName(articleItem.KnowledgeBase.Id);
                if (!string.IsNullOrEmpty(kbname))
                {
                    articleItem.KnowledgeBase.Name = kbname;
                }

                string adminURL = _articleManager.GetAdminURL(); // get admin URL from DB

                articlesViewModel.ArticlePartialViewModel = ResponsivePortal.Utilities.CreateArticlePartialViewModel(articleItem,
                            (ArticleModule)_portal.Configuration.ArticlesModule,
                             GetListOfNodeName(articleItem.Categories), GetListOfNodeName(articleItem.Attributes),
                             this._portal.PortalType, this.resources, clientId, portalId, adminURL);
                articlesViewModel.ArticleId = articleId;
                //get Module name and create navigation
                string homeText = Utilities.getModuleText(headerVM, "home");

                // Uri xx = Request.UrlReferrer;
                // id - is Article Id
                // Create MOCK: remove for real
                BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                if (this._portal.Configuration.ShowBreadcrumbs)
                {
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                    if (!String.IsNullOrEmpty(searchText))
                    {
                        BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = searchText, Value = "Search", Selected = false });
                    }
                    if (!String.IsNullOrEmpty(relpname)) // Selected related artilce Title
                    {
                        BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = relpname, Value = "article", Selected = false });
                        articlesViewModel.RelativeArtilceParentId = relparticId; // Selected related artilce Id
                    }
                    if (catId != 0)
                    {
                        BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = catId.ToString(), Value = "Browse", Selected = false });
                    }
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = articleItem.Title, Value = "", Selected = true });
                }
                articlesViewModel.BreadcrumbViewModel = BreadcrumbViewModel;
                articlesViewModel.SearchText = searchText;
                //this will contain arrayListof Attribute names. eg. "Apple,Iphone 5...

                articlesViewModel.RelAnsweres = articleItem.RelatedArticles;
                articlesViewModel.RelLinks = articleItem.RelatedLinks;

                articlesViewModel.Resources = resources;
                string shareUrl = Request.Url.Scheme + "://" + Request.Url.Authority;
                shareUrl = shareUrl + "/Article/Index/" + clientId + "/" + portalId + "/?id=" + articleId;
                articlesViewModel.ArticlePartialViewModel.ShareItem = Utilities.GetShareViewModel(articleItem.ArticleId, articleItem.Title,
                    shareUrl, this._articleManager.GetEmailArticleContent().Replace("[[articleurl]]", shareUrl),
                    articlesViewModel.ArticlePartialViewModel.ArticleConfiguration.articleShareProperties,
                    resources, clientId, portalId);
                //GetShareViewModel(articleItem.ArticleId, articleItem.Title,
                // articlesViewModel.ArticlePartialViewModel.ArticleConfiguration.articleShareProperties);

                return View(articlesViewModel);
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.ArticleIndex, KBErrorHandler.GetMethodName(), GeneralResources.ArticleIndexError,
                    new KBExceptionData("id", (id.HasValue ? id.Value : 0)), new KBExceptionData("relparticId", (relparticId.HasValue ? relparticId.Value : 0)),
                    new KBExceptionData("relpname", relpname), new KBExceptionData("catId", catId));
                throw kbCustExp;
            }
        }
        public ActionResult GetSearch(string text, string kbid, string catid, string attributeid, string title, string contentTypeId, 
            string format, string searchFrom, int page = 1, bool filterUpdate = false, 
            bool spellCheck = true, bool fromwidget = false,int widgetsearch=0)
        {
            text = removeExtraQueryString(text);

            if (string.IsNullOrEmpty(text)) text = "*";

            // Read clientid, portalid from route data
            ReadDataFromRouteData();

            if (widgetsearch==1)
                RemoveAllFilter(text, clientId, portalId, fromwidget);

            // Prepare Breadcrumb navigation.
            // Get Module name and create navigation
            string homeText = Utilities.getModuleText(headerVM, "home");

            BreadcrumbViewModel breadcrumbViewModel = new BreadcrumbViewModel();
            breadcrumbViewModel.NavigationList = new List<SelectListItem>();
            breadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });

            // Set searchMainViewModel fields
            searchMainViewModel.BreadcrumbViewModel = breadcrumbViewModel;
            searchMainViewModel.clientId = clientId;
            searchMainViewModel.portalId = portalId;
            searchMainViewModel.Resources = Resources;
            searchMainViewModel.SearchImageUrl = Utilities.GetImageUrl(_portal.ClientId, _portal.PortalId, "SearchButton.png");
            searchMainViewModel.SessionTimeOutWarning = Utilities.GetResourceText(CommonResources, "SESSIONTIMEOUTWARNING");
            searchMainViewModel.SessionTimedOut = Utilities.GetResourceText(CommonResources, "SESSIONTIMEDOUT");
            SearchModule searchModule = (SearchModule)_portal.Configuration.SearchModule;
            searchMainViewModel.SearchResultsPerPage =  searchModule.ResultsPerPage;
            searchMainViewModel.FilterDisplay = InitializeFilterDisplay(searchModule);
            searchMainViewModel.ResultsDisplay = searchModule.ResultsDisplay;
            if (fromwidget)
            {
                searchMainViewModel.FromWidget = true; // for category and attribute widget
            }
            SetSearchManagerValues(spellCheck, searchModule);
            GetFilterValues(ref kbid, ref catid, ref attributeid, title, ref contentTypeId, ref format, searchFrom);

            try
            {
                int searchid = 0;
                SearchResult searchResult = SetLastSearchResult(text, kbid, catid, attributeid, contentTypeId, format, searchFrom, filterUpdate, out searchid);

                searchResult = SortSearchResult(_searchesManager.DefaultSort, searchResult);

                searchMainViewModel.Searchtext = text;
                searchMainViewModel.Page = page;
                searchMainViewModel.SearchResultsViewModel = new List<SearchResultsViewModel>();
                searchMainViewModel.KnowledgeBases = new List<SearchResultRefinement>();
                searchMainViewModel.ContentTypes = new List<SearchResultContentTypeRefinement>();
                searchMainViewModel.Format = new List<SearchResultFormatRefinement>();
                searchMainViewModel.SearchId = searchid;

                Dictionary<int, int> categoryCounts = new Dictionary<int, int>();
                Dictionary<int, int> attributeCounts = new Dictionary<int, int>();
                Dictionary<int, int> kBCounts = new Dictionary<int, int>();
                Dictionary<string, List<string>> contentTypeCounts = new Dictionary<string, List<string>>();
                Dictionary<string, string> fileFormatCounts = new Dictionary<string, string>();
                Dictionary<int, string> dCatName = new Dictionary<int, string>();
                Dictionary<string, string> dContentTypes = new Dictionary<string, string>();

                string contentName = string.Empty;
                string contentSource = string.Empty;
                if (searchResult != null)
                {
                    foreach (var results in searchResult.SearchResults)
                    {
                        string attributeNames = GetArticleNames(results);
                        string fileExtn = Utilities.GetFileType(results.FileExtn);
                        string kbName = GetKBName(results);
                        string autoSummEnabled = GetAutoSummarizationEnabled(searchModule, results, text);

                        AddSearchResultsViewModel(attributeNames, autoSummEnabled, results, fileExtn, kbName);
                        GetArticleCounts(categoryCounts, attributeCounts, kBCounts, results);

                        contentName = results.SourceName.ToString();
                        contentSource = results.SourceType;

                        GetContentTypeCounts(contentTypeCounts, contentName, contentSource);
                        GetFileFormatCounts(fileFormatCounts, results, fileExtn);
                    }

                    SetSearchMainViewModelValues(catid, attributeid, searchResult, categoryCounts, attributeCounts, kBCounts, contentTypeCounts, fileFormatCounts);
                }
                Session.Add("SearchText_" + portalId.ToString(), text);
                return View(searchMainViewModel);
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSearch, KBErrorHandler.GetMethodName(), GeneralResources.GeneralError,
                    new KBExceptionData("text", text), new KBExceptionData("kbid", kbid), new KBExceptionData("catid", catid), new KBExceptionData("attributeid", attributeid),
                    new KBExceptionData("title", title), new KBExceptionData("contentTypeId", contentTypeId));
                throw kbCustExp;
            }
        }
        /// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public ActionResult Edit(string message, string msgType)
        {
            AdminUser user = null;
            try
            {
                ViewBag.Title = "Edit Configuration";
                ViewBag.Message = message;
                ViewBag.Msgtype = msgType;
                user = (PortalAPI.Models.AdminUser)Session["AdminUserSession"];
                if (user != null)
                {
                    var portId = RouteData.Values["portalId"];
                    var portalId = Convert.ToInt32(portId);
                    
                    var configOption = 0;
                    Int32.TryParse((string)RouteData.Values["id"], out configOption);       // 0 default value if conversion fails
                   
                    var cid = Session["ClientId"];
                    int clientid = Convert.ToInt32(cid.ToString());
                    ViewBag.UserName = _adminManager.GetUserName(user.UserId, clientid);
                    string path = Request.RawUrl.ToString();

                    string CONFIG_PATH = Path.Combine(this.DataConfigPath, clientid + "\\" + portalId + "\\Configuration");
                    string LANG_PATH = Path.Combine(this.DataConfigPath, clientid + "\\" + portalId + "\\Languages");
                    string CSS_PATH = Path.Combine(this.DataConfigPath, clientid + "\\" + portalId + "\\Styles");
                    string JS_PATH = Path.Combine(this.DataConfigPath, clientid + "\\" + portalId + "\\Scripts");

                    var portalName = _adminManager.GetPortalName(portalId, clientid);
                    var langId = _adminManager.GetPortalLangId(clientid,portalId);

                    var lang= CreateLangDictionary();
                    var langFile = lang[langId]+".xml";
                    var css = CreateCSSDictionary();
                   
                    ConfigModel cnfgmodel = new Models.ConfigModel();
                    BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                    BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = "Portal Administration", Value = "Admin", Selected = false });
                    if (configOption != 0)
                    { 
                        BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = portalName, Value = "Admin/Edit/" + clientid + "/" + portalId, Selected = false }); 
                    }
                    switch (configOption)
                    {
                        case 1:
                            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = "Configuration", Value = "Admin", Selected = true });
                            cnfgmodel.XmlContent = _adminManager.ReadXMLFile(CONFIG_PATH + "\\portal-config.xml");
                            break;
                        case 2:
                            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = "Language", Value = "Admin", Selected = true });
                            cnfgmodel.XmlContent = _adminManager.ReadXMLFile(LANG_PATH + "\\" + langFile);
                            ViewBag.lang = langFile;
                            break;
                        case 3:
                            int csId = Convert.ToInt32(Request.QueryString["cssId"]);                            
                            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = "CSS", Value = "Admin", Selected = true });
                            if(csId !=0)
                            {
                                var cssFile = css[csId];
                                cnfgmodel.TextContent = _adminManager.ReadTextFile(CSS_PATH + "\\" + cssFile);
                            }
                            break;
                        case 4:
                            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = "Images", Value = "Admin", Selected = true });
                            break;
                        case 5:
                            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = "Script", Value = "Admin", Selected = true });
                            cnfgmodel.TextContent = _adminManager.ReadTextFile(JS_PATH+ "\\portal.js");
                            break;
                        default:
                            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = portalName, Value = "Admin/Edit/" + clientid + "/" + portalId, Selected = true }); 
                            break;
                    }

                    cnfgmodel.PortalId = portalId;
                    cnfgmodel.LangId = langId;
                    cnfgmodel.RequestPath = path;
                    cnfgmodel.ConfigType = configOption;
                    cnfgmodel.BreadcrumbViewModel = BreadcrumbViewModel;
                    cnfgmodel.CssFiles = css;                    
                    cnfgmodel.ModifiedFilesModel = _adminManager.ReadConfigDetail(clientid, portalId, configOption);
                    return View(cnfgmodel);
                }
                return RedirectToAction("Index", "Admin");
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.LoadContent, KBErrorHandler.GetMethodName(), GeneralResources.AdminBreadcrumbEditError,
                    new KBExceptionData("message", message), new KBExceptionData("msgType", msgType), new KBExceptionData("user.UserId", (user != null) ? user.UserId : -1));
                throw kbCustExp;
            }
        }
        //
        // GET: /Articles/
        public ActionResult Index(string title)
        {
            try
            {
                ReadDataFromRouteData();
                CategoryBrowseMainViewModel categoryBrowseMainViewModel = new CategoryBrowseMainViewModel();
                List<CategoryBrowseViewModel> categoryBrowseViewModel = new List<CategoryBrowseViewModel>();
                categoryArticleViewModel categoryArticleViewModel = new categoryArticleViewModel();
                categoryBrowseMainViewModel.CategoryBrowseViewModel = categoryBrowseViewModel;
                categoryBrowseMainViewModel.CategoryBrowseArticleViewModel = categoryArticleViewModel;
                List<CategoryBrowseViewModel> appliedCategories = new List<CategoryBrowseViewModel>();
                categoryBrowseMainViewModel.AppliedCategories = appliedCategories;
                CategoryBrowseHeaderViewModel categoryBrowseHeader = new CategoryBrowseHeaderViewModel();
                categoryBrowseMainViewModel.CategoryBrowseHeaderViewModel = categoryBrowseHeader;
                categoryBrowseMainViewModel.portalId = portalId;
                categoryBrowseMainViewModel.clientId = clientId;
                categoryBrowseMainViewModel.Resources = resources;
                categoryBrowseMainViewModel.showBreadcrumb = _portal.Configuration.ShowBreadcrumbs;

                if (catModule != null)
                {
                    List<ListItem> catItemList = catModule.Children;

                    TempData["MainLayoutViewModel"] = Session["MainLayoutViewModel"];

                    categoryBrowseMainViewModel.CategoryBrowseHeaderViewModel.Categories = new List<CategoryViewModel>();
                    // TODO : change MOCK for real

                    BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                    BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = browseText, Value = "browse", Selected = true });
                    categoryBrowseMainViewModel.CategoryBrowseHeaderViewModel.BreadcrumbViewModel = BreadcrumbViewModel;
                    foreach (var categoryItem in catItemList)
                    {
                        Category category = new Category()
                        {
                            Name = categoryItem.Name,
                            Id = categoryItem.Id,
                            ImageUrl = categoryItem.ImageUrl
                        };

                        CategoryViewModel categoryViewModel = new CategoryViewModel();

                        List<CategoryBrowse> CatList = _categoryManager.GetCategoriesByCategory(Convert.ToInt32(categoryItem.Id));
                        // _categoryManager.GetCategoriesByCategory(item.Id, strGroupids);

                        //Moke Data to be removed.
                        List<Category> children = new List<Category>();
                        categoryViewModel.Category = category;
                        categoryViewModel.Category.Children = children;
                        foreach (CategoryBrowse item in CatList)
                        {
                            categoryViewModel.Category.Children.Add(new Category
                            {
                                Id = item.Id,
                                Name = item.Title
                            });
                        }

                        categoryBrowseMainViewModel.CategoryBrowseHeaderViewModel.Categories.Add(categoryViewModel);
                    }

                    categoryBrowseMainViewModel.CategoryBrowseHeaderViewModel.showBreadcrumb = _portal.Configuration.ShowBreadcrumbs;
                    //todo
                    categoryBrowseMainViewModel.SessionTimeOutWarning = Utilities.GetResourceText(CommonResources, "SESSIONTIMEOUTWARNING");
                    categoryBrowseMainViewModel.SessionTimedOut = Utilities.GetResourceText(CommonResources, "SESSIONTIMEDOUT");
                    return View(categoryBrowseMainViewModel);
                }
                return null;

            }
            catch (Exception ex)
            {
                logger.ErrorException("Error:" + " " + ex.Message, ex);
                throw ex;
            }
        }
        public ActionResult categoryBrowse(int? catId, string title, string searchText, string pTitle, int page = 1, bool paging = false, bool updateFilter = false, int pcatId = 0, bool search = false)
        {
            CategoryBrowseMainViewModel categoryBrowseMainViewModel = new CategoryBrowseMainViewModel();
            ReadDataFromRouteData();
            categoryBrowseMainViewModel.SessionTimeOutWarning = Utilities.GetResourceText(CommonResources, "SESSIONTIMEOUTWARNING");
            categoryBrowseMainViewModel.SessionTimedOut = Utilities.GetResourceText(CommonResources, "SESSIONTIMEDOUT");
            SearchModule SModule = (SearchModule)_portal.Configuration.SearchModule;
            if (!paging)
            {
                if (!updateFilter)
                {
                    if (catId.HasValue && pcatId != 0 && title != null && pTitle !=null)
                    {
                        AddcategoryFiltersToSession (pcatId,pTitle,portalId,true, true);
                        AddcategoryFiltersToSession (catId.Value,title,portalId,false);
                    }
                    else {
                    AddcategoryFiltersToSession(catId.HasValue?catId.Value:pcatId, title, portalId, (pcatId != 0 && catId == null));
                    }
                }
                else
                {
                    ApplyCategoryFilter(catId.HasValue ? catId.Value : 0, title, clientId, portalId);
                }
                if (pcatId != 0 &&  (catId == null  || catId.Value ==0))
                {
                    categoryBrowseMainViewModel.ParentcategorySelected = pcatId;
                    catId = pcatId;
                }
                else
                {
                    categoryBrowseMainViewModel.ParentcategorySelected = pcatId;
                }

             categoryBrowseMainViewModel.portalId = portalId;
             categoryBrowseMainViewModel.clientId = clientId;
             categoryBrowseMainViewModel.showBreadcrumb = _portal.Configuration.ShowBreadcrumbs;
             categoryBrowseMainViewModel.Resources = resources;
             categoryBrowseMainViewModel.Page = page;
             categoryBrowseMainViewModel.ResultsPerPage =  SModule.ResultsPerPage;
             categoryBrowseMainViewModel.ResultsDisplay = SModule.ResultsDisplay;
             AddcategoryBrowseResultToSession(categoryBrowseMainViewModel, portalId);
             categoryBrowseMainViewModel.SearchImageUrl = Utilities.GetImageUrl(_portal.ClientId, _portal.PortalId, "SearchButton.png");
             categoryBrowseMainViewModel.AppliedCategories = Session.GetListOfcategoryApplied().CategoriesApplied[portalId];
             categoryBrowseMainViewModel.LastcategoryIdSelected = Session.GetListOfcategoryApplied().CategoriesApplied[portalId].LastOrDefault().Id;
            List<CategoryBrowseViewModel> categoryBrowseViewModel = new List<CategoryBrowseViewModel>();
            categoryArticleViewModel categoryArticleViewModel = new categoryArticleViewModel();
            categoryBrowseMainViewModel.CategoryBrowseViewModel = categoryBrowseViewModel;
            categoryBrowseMainViewModel.CategoryBrowseArticleViewModel = categoryArticleViewModel;
            List<CategoryBrowseViewModel> appliedCategories = new List<CategoryBrowseViewModel>();

            CategoryBrowseHeaderViewModel categoryBrowseHeader = new CategoryBrowseHeaderViewModel();
            categoryBrowseMainViewModel.CategoryBrowseHeaderViewModel = categoryBrowseHeader;

            BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
            BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
            BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = browseText, Value = "browse", Selected = false });
            var parentCat = Session.GetListOfcategoryApplied().CategoriesApplied[portalId].FirstOrDefault();
            if (!string.IsNullOrEmpty(searchText))
            {
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = parentCat.Title, Value = "category", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = Utilities.GetResourceText(resources, "SEARCHRESULTFOR") + searchText, Value = "searchFor", Selected = true });
            }
                else
            {
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = parentCat.Title, Value = "category", Selected = true });
            }
            categoryBrowseMainViewModel.CategoryBrowseHeaderViewModel.BreadcrumbViewModel = BreadcrumbViewModel;

            try
            {

                //read and update clientid & portalid from routedata

                //for (int i = 0; i < 5; i++)
                //{
                //    categoryBrowseMainViewModel.AppliedCategories.Add(new CategoryBrowseViewModel
                //    {
                //        Id = i,
                //        Title = "Category" + i,
                //        ChildrenCount = i
                //    });
                //}

                categoryBrowseMainViewModel.SearchText = "";
                if (searchText != null && searchText.Length > 0)
                {
                    categoryBrowseMainViewModel.CategoryBrowseArticleViewModel.CatArticleItem = new List<CatArticleItem>();
                    _searchesManager.SolutionFinders = "";

                    if (SModule != null)
                    { //Set numberic Search enabled
                        _searchesManager.EnhancedNumericSearchEnabled = SModule.EnhancedNumericSearchEnabled;
                        //set search type
                        _searchesManager.searchType = SModule.SearchType;
                        //Maximum results
                        _searchesManager.MaxResults = SModule.MaxResults;
                        //Spell check enabled
                        _searchesManager.SpellCheckEnabled = SModule.SpellCheckEnabled;
                        //suggested Search enabled
                        _searchesManager.SuggestedSearchesEnabled = SModule.SuggestedSearchesEnabled;
                        //Synonyms Enabled
                        _searchesManager.SynonymsEnabled = SModule.SynonymsEnabled;
                        //SolutionFinder Ids for search
                        _searchesManager.SolutionFinders = string.IsNullOrEmpty(SModule.SolutionFinders) ? "" : SModule.SolutionFinders;
                        //Auto Summarization
                        _searchesManager.AutoSummarization = SModule.AutoSummarization;
                        //Sort
                        // Sort Key from Search Sort
                        List<KeyValuePair<int, string>> SearchSorted = SModule.DefaultSort.ToList();
                        SearchSorted.Sort((FirstValue, SecondValue) =>
                        {
                            return FirstValue.Key.CompareTo(SecondValue.Key);
                        }
                        );
                        _searchesManager.DefaultSort = SearchSorted.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
                        //
                    }
                    else
                    {
                        _searchesManager.EnhancedNumericSearchEnabled = false;
                        //set search type
                        _searchesManager.searchType = SearchType.AllWords;
                        //Maximum results
                        _searchesManager.MaxResults = 200;
                        //Spell check enabled
                        _searchesManager.SpellCheckEnabled = false;
                        //suggested Search enabled
                        _searchesManager.SuggestedSearchesEnabled = false;
                        //Synonyms Enabled
                        _searchesManager.SynonymsEnabled = false;
                        //SolutionFinder Ids for search
                        _searchesManager.SolutionFinders = "";
                    }
                    _searchesManager.SpellCheckEnabled = false;
                    SearchResult result = new SearchResult();
                    result = _searchesManager.Search(searchText, null, catId.ToString(), null);
                    _searchesManager.SetLastSearchInfo(searchText, 1, null, HttpContext.Session.SessionID, null, 0, false, false, "Browse", "fulltext", result.SearchResults.Count);

                    if(search)
                    {
                        categoryBrowseMainViewModel.SearchText = searchText;
                    }

                    Dictionary<int, int> categoryCounts;
                    categoryCounts = new Dictionary<int, int>();
                    //get content TYpe
                    string kbName = string.Empty;
                    string FileExtn = string.Empty;
                    string summary = string.Empty;
                    foreach (var results in result.SearchResults)
                    {
                        summary = string.Empty;
                         FileExtn = Utilities.GetFileType(results.FileExtn); // file extension
                        //get knowledgebase
                         KnowledgeBase KB = _portal.Knowledgebases.FirstOrDefault(Q => Q.Id == results.KbId);
                         if (KB != null)
                         {
                            kbName = KB.Name;
                         }

                        if(SModule.AutoSummarizationEnabled)
                        {
                            summary = results.Summary;
                        }

                        CatArticleItem CatArticleItem = new CatArticleItem()
                        {
                            Id = results.Id, //Artilce Id
                            Title = results.Title,
                            ModifiedDate = results.ModifiedDate,
                            KBName = kbName,
                            Attributes = _searchesManager.GetAttributes(results.ArtAttributeIds.ToString()),
                            Extension = FileExtn,
                            Summary = summary
                        };
                        categoryBrowseMainViewModel.CategoryBrowseArticleViewModel.CatArticleItem.Add(CatArticleItem);

                        // Get article categories
                        string[] articleCats = null;
                        if (!string.IsNullOrEmpty(results.ArtCategoryIds))
                        {
                            articleCats = results.ArtCategoryIds.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                            if (articleCats.Length == 0)
                            {
                                if (categoryCounts.ContainsKey(0)) categoryCounts[0]++;
                                else categoryCounts[0] = 1;
                            }
                            for (int j = 0; j < articleCats.Length; j++)
                            {
                                if (categoryCounts.ContainsKey(Convert.ToInt32(articleCats[j]))) categoryCounts[Convert.ToInt32(articleCats[j])]++;
                                else categoryCounts[Convert.ToInt32(articleCats[j])] = 1;
                            }
                        }
                    }
                    string scategoryname = string.Join(",", categoryCounts.Select(x => x.Key).ToArray());
                    string sarticlecount = string.Join(",", categoryCounts.Select(x => x.Value).ToArray());

                    if (scategoryname.Length > 0)
                    {
                        List<SearchResultRefinement> searchresultrefinment = new List<SearchResultRefinement>();
                        searchresultrefinment = _searchesManager.GetSearchCategories(scategoryname, sarticlecount, Convert.ToInt32(catId));
                        foreach (var cats in searchresultrefinment)
                        {
                            categoryBrowseMainViewModel.CategoryBrowseViewModel.Add(new CategoryBrowseViewModel
                            {
                                Id = cats.FilterId,
                                Title = cats.Title,
                                ChildrenCount = cats.ArticleCount
                            });
                       }
                    }
                }

                else
                {
                    List<CategoryBrowse> CatList = _categoryManager.GetCategoriesByCategory(Convert.ToInt32(catId));
                    // _categoryManager.GetCategoriesByCategory(item.Id, strGroupids);

                    //Moke Data to be removed.
                    foreach (CategoryBrowse item in CatList)
                    {
                        categoryBrowseMainViewModel.CategoryBrowseViewModel.Add(new CategoryBrowseViewModel
                        {
                            Id = item.Id,
                            Title = item.Title,
                            ChildrenCount = item.ChildrenCount
                        });
                    }

                    List<CatArticleItem> CatArticlesList = _categoryManager.GetArticlesByCategory(Convert.ToInt32(catId));
                    categoryBrowseMainViewModel.CategoryBrowseArticleViewModel.CatArticleItem = CatArticlesList;
                }

                List<CategoryViewModel> categories = new List<CategoryViewModel>();
                categoryBrowseHeader.Categories = categories;
                foreach (var categoryItem in catModule.Children)
                {
                    Category category = new Category()
                    {
                        Name = categoryItem.Name,
                        Id = categoryItem.Id,
                        ImageUrl = categoryItem.ImageUrl,
                        ImageSelectedUrl = categoryItem.ImageSelectedUrl

                    };
                    CategoryViewModel categoryViewModel = new CategoryViewModel();
                    categoryViewModel.Category = category;
                    categoryBrowseHeader.Categories.Add(categoryViewModel);
                }

                }
                catch (Exception ex)
                {
                    logger.ErrorException("Error:" + " " + ex.Message, ex);
                    throw ex;
                }
            }
            else
            {
                try
                {
                    categoryBrowseMainViewModel = Session.GetcategoryBrowseResult().DictioinaryOfcategoryArticleViewModel[portalId];
                    categoryBrowseMainViewModel.Page = page;
            }
            catch (Exception ex)
            {
                logger.ErrorException("Error:" + " " + ex.Message, ex);
                throw ex;
            }
            }

            return View(categoryBrowseMainViewModel);
        }
        public ActionResult GetPreviousSolutionFinderDetailsByIdWithParams(int parentsolutionId, int solutionId, int choiceId, string answer)
        {
            string solFinderName = string.Empty;
            try
            {
                //read and update clientid & portalid from routedata
                ReadDataFromRouteData();

                SolutionFinderDetailsViewModel solutionFinderDetailsViewModel = new SolutionFinderDetailsViewModel();
                solutionFinderDetailsViewModel.portalId = portalId;
                solutionFinderDetailsViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.ChoiceId = parentsolutionId;
                //if (parentsolutionId != choiceId)
                //{
                solutionFinderDetailsViewModel.ImmediatePId = this._solFinderManager.GetSolutionFinderParentByChoice(parentsolutionId); // Solution Finder Id
                //}
                solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(0, parentsolutionId);//0,solutionId);
                if (solutionFinderDetailsViewModel.SolutionFinder != null)
                {
                    TempData["question_" + _portal.PortalId.ToString() + "_" + parentsolutionId.ToString()] = solutionFinderDetailsViewModel.SolutionFinder.Question != null ? solutionFinderDetailsViewModel.SolutionFinder.Question : string.Empty;
                }
                // UpdateSolutionFinderChoices(solutionFinderDetailsViewModel);

                solutionFinderDetailsViewModel.History = (List<HistoryViewModel>)Session["SolutionFinderHistory"];
                if ((solutionFinderDetailsViewModel.History != null)
                    && (solutionFinderDetailsViewModel.History.Count > 0))
                {
                    int count = solutionFinderDetailsViewModel.History.Count;
                    solutionFinderDetailsViewModel.History.RemoveAt(count - 1);
                }
                string icon = string.Empty;
                SolutionFinderTileViewModel solutionFinderTileViewModel = new SolutionFinderTileViewModel();

                solFinderName = GetSolutionFinderName(solutionId);

                if (solutionFinderDetailsViewModel.ImmediatePId == 0)
                {
                    SolutionFinder objSF = GetSolutionFinder(solutionId);
                    if (null != objSF)
                    {

                        solutionFinderTileViewModel.Id = solutionId;
                        solutionFinderTileViewModel.Title = objSF.Name;
                        solutionFinderTileViewModel.Icon = objSF.ImageUrl;
                        solutionFinderTileViewModel.Content = objSF.Description;
                        solutionFinderTileViewModel.Content = Resources.ContainsKey("SOLUTIONFINDER_" + solutionId.ToString() + "_DESCRIPTION") ? Resources["SOLUTIONFINDER_" + solutionId.ToString() + "_DESCRIPTION"] : string.Empty;
                    }
                }
                else
                {
                    solutionFinderTileViewModel.Id = solutionId;
                    solutionFinderTileViewModel.Title = solFinderName;
                }

                solutionFinderTileViewModel.portalId = portalId;
                solutionFinderTileViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.SolutionFinderTileViewModel = solutionFinderTileViewModel;
                //----- Breadcrumbs ------
                BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                solutionFinderDetailsViewModel.showBreadcrumb = this._portal.Configuration.ShowBreadcrumbs;
                BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = SFText, Value = "solutionFinder", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem()
                {
                    Text = solFinderName,
                    Value = string.Empty,
                    Selected = true
                });
                solutionFinderDetailsViewModel.BreadcrumbViewModel = BreadcrumbViewModel;

                solutionFinderDetailsViewModel.Resources = Resources;
                return View("SolutionFinderDetails", solutionFinderDetailsViewModel);
            }
            catch (JsonException ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.JsonError,
                    new KBExceptionData("solutionId", solutionId), new KBExceptionData("solFinderName", solFinderName));
                throw kbCustExp;
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.GetSlnFinderDetailsError,
                    new KBExceptionData("solutionId", solutionId), new KBExceptionData("solFinderName", solFinderName));
                throw kbCustExp;
            }
        }
 public ActionResult ManageFavorites()
 {
     try
     {
         ReadDataFromRouteData();
         string homeText = Utilities.getModuleText(headerVM, "home");
         FavoritesViewModel favVM = new FavoritesViewModel();
         BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
         BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
         BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
         BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = Utilities.GetResourceText(resources, "MANAGEMYFAVORITES"), Value = "", Selected = true });
         favVM.BreadcrumbViewModel = BreadcrumbViewModel;
         favVM.portalId = portalId;
         favVM.clientId = clientId;
         favVM.showBreadcrumb = _portal.Configuration.ShowBreadcrumbs;
         favVM.Resources = resources;
         return View("ManageFavs", favVM);
         //managemyfavorites
     }
     catch (Exception ex)
     {
         logger.ErrorException("Error:" + " " + ex.Message, ex);
         throw ex;
     }
 }
        private ActionResult GetSFViewDetailsWithArticleById(int parentsolutionId, int solutionId, int choiceId, int articleId)
        {
            string solFinderName = string.Empty;
            string description = string.Empty;
            string icon = string.Empty;
            try
            {
                //read and update clientid & portalid from routedata
                ReadDataFromRouteData();
                SolutionFinderDetailsViewModel solutionFinderDetailsViewModel = new SolutionFinderDetailsViewModel();
                SolutionFinderTileViewModel solutionFinderTileViewModel = new SolutionFinderTileViewModel();
                solutionFinderDetailsViewModel.portalId = portalId;
                solutionFinderDetailsViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.ImmediatePId = parentsolutionId; // Solution Finder Id;
                solutionFinderDetailsViewModel.ChoiceId = choiceId;
                solutionFinderTileViewModel.clientId = clientId;
                solutionFinderTileViewModel.portalId = portalId;
                solutionFinderTileViewModel.Id = parentsolutionId;
                solFinderName = GetSolutionFinderName(solutionId);

                //-------Solution FInder Name
                if (parentsolutionId == 0)
                {
                    SolutionFinder objSF = GetSolutionFinder(solutionId);
                    if (null != objSF)
                    {
                        solutionFinderTileViewModel.Id = solutionId;
                        solutionFinderTileViewModel.Icon = objSF.ImageUrl.Replace('^', '\\');
                        solutionFinderTileViewModel.Title = objSF.Name;
                        solutionFinderTileViewModel.Content = Resources.ContainsKey("SOLUTIONFINDER_" + solutionId.ToString() + "_DESCRIPTION") ? Resources["SOLUTIONFINDER_" + solutionId.ToString() + "_DESCRIPTION"] : string.Empty;
                    }
                }
                else
                {
                    solutionFinderTileViewModel.Id = solutionId;
                    solutionFinderTileViewModel.Title = solFinderName;
                }
                solutionFinderDetailsViewModel.SolutionFinderTileViewModel = solutionFinderTileViewModel;
                if (parentsolutionId==0)
                {
                    solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(solutionId, 0);
                }
                else
                {
                    solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(solutionId, choiceId);
                }

                //UpdateSolutionFinderChoices(solutionFinderDetailsViewModel);
                solutionFinderDetailsViewModel.History = (List<HistoryViewModel>)Session["SolutionFinderHistory"];

                //----- Breadcrumbs ------
                BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                solutionFinderDetailsViewModel.showBreadcrumb = this._portal.Configuration.ShowBreadcrumbs;

                BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = SFText, Value = "solutionFinder", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem()
                {
                    Text = solutionFinderTileViewModel.Title,
                    Value = string.Empty,
                    Selected = true
                });
                solutionFinderDetailsViewModel.BreadcrumbViewModel = BreadcrumbViewModel;

                //read and update clientid & portalid from routedata
                if (articleId > 0)
                {
                    var articleItem = (ArticleItem)_articleManager.GetArticleItemById(articleId, HttpContext.Session.SessionID, "", 0);
                    if (articleItem != null)
                    {
                        if (articleItem.Extension == ".html" || articleItem.Extension == ".htm")
                        {
                            articleItem.Content.CompleteContent = Utilities.UpdateArticleURlInArticleContent(articleItem.Content.CompleteContent, "/articleRedirect.aspx?aid=", "/Article/Index/" + clientId + "/" + portalId + "?id=");
                        }
                    }

                    //split artilce content
                    Utilities.splitArticleContent(ref articleItem);

                    //overwrite kb name with XML name
                    string kbname = GetKnowledgebaseName(articleItem.KnowledgeBase.Id);
                    if (!string.IsNullOrEmpty(kbname))
                    {
                        articleItem.KnowledgeBase.Name = kbname;
                    }

                    string adminURL = _articleManager.GetAdminURL(); // get admin URL from DB

                    Dictionary<string, string> resources = Session.Resource(portalId, clientId, "ARTICLE", _portal.Language.Name);
                    ArticlePartialViewModel articlePartialViewModel = ResponsivePortal.Utilities.CreateArticlePartialViewModel(articleItem,
                            (ArticleModule)_portal.Configuration.ArticlesModule,
                             GetListOfNodeName(articleItem.Categories), GetListOfNodeName(articleItem.Attributes),
                             this._portal.PortalType, resources, clientId, portalId, adminURL);
                    solutionFinderDetailsViewModel.ArticlePartialViewModel = articlePartialViewModel;
                    string shareUrl = Request.Url.Scheme + "://" + Request.Url.Authority;
                    shareUrl = shareUrl + "/Article/Index/" + clientId + "/" + portalId + "/?id=" + articleId;
                    solutionFinderDetailsViewModel.ArticlePartialViewModel.ShareItem = Utilities.GetShareViewModel(articleItem.ArticleId, articleItem.Title,
                        shareUrl, this._articleManager.GetEmailArticleContent().Replace("[[articleurl]]", shareUrl),
                        solutionFinderDetailsViewModel.ArticlePartialViewModel.ArticleConfiguration.articleShareProperties,
                        resources, clientId, portalId);

                }
                solutionFinderDetailsViewModel.Resources = Resources;

                if (articleId > 0)
                { solutionFinderDetailsViewModel.ArticlePartialViewModel.Resources = Resources; }
                return View("SolutionFinderDetails", solutionFinderDetailsViewModel);
            }
            catch (JsonException ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.JsonError,
                    new KBExceptionData("info", ""), new KBExceptionData("solutionId", solutionId), new KBExceptionData("articleId", articleId), new KBExceptionData("solFinderName", solFinderName));
                throw kbCustExp;
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.GetSlnFinderDetailsError,
                    new KBExceptionData("info", ""), new KBExceptionData("solutionId", solutionId), new KBExceptionData("articleId", articleId), new KBExceptionData("solFinderName", solFinderName));
                throw kbCustExp;
            }
        }
        //
        // GET: /SolutionFinder/
        public ActionResult Index(string title)
        {
            try
            {
                //read and update clientid & portalid from routedata
                ReadDataFromRouteData();

                SolutionFinderModule SFModule = (SolutionFinderModule)_portal.Configuration.SolutionFinderModule;
                List<SolutionFinder> SFItems = SFModule.Children;

                // var ids = (from sf in SFItems select sf.Id).ToArray();
                //var commaSeparatedSolutionFinderIds = string.Join(",", ids);
                // var defaultSolutionFinders = _solFinderManager.GetListOfSolutionFindersId(commaSeparatedSolutionFinderIds);
                var defaultSolutionFinders = new List<SolutionFinder>();
                foreach (var item in SFItems)
                {
                    defaultSolutionFinders.Add(new SolutionFinder(item.SolutionFinderId, item.Name, item.ImageUrl, item.Description));
                }

                TempData["MainLayoutViewModel"] = Session["MainLayoutViewModel"];
                Session["SolutionFinderHistory"] = new List<HistoryViewModel>();
                SolutionFinderViewModel solutionFinderViewModel = new SolutionFinderViewModel();
                solutionFinderViewModel.portalId = portalId;
                solutionFinderViewModel.clientId = clientId;
                solutionFinderViewModel.showBreadcrumb = _portal.Configuration.ShowBreadcrumbs;
                solutionFinderViewModel.SessionTimeOutWarning = Utilities.GetResourceText(CommonResources, "SESSIONTIMEOUTWARNING");
                solutionFinderViewModel.SessionTimedOut = Utilities.GetResourceText(CommonResources, "SESSIONTIMEDOUT");
                solutionFinderViewModel.SolutionFinderTiles = new List<SolutionFinderTileViewModel>();
                // TODO : change MOCK for real
                BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();

                BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = SFText, Value = "solutionFinder", Selected = true });
                solutionFinderViewModel.BreadcrumbViewModel = BreadcrumbViewModel;

                foreach (var solutionfinder in defaultSolutionFinders)
                {
                    SolutionFinderTileViewModel solutionFinderTileViewModel = new SolutionFinderTileViewModel()
                    {
                        Title = solutionfinder.Name,
                        Content = Resources.ContainsKey("SOLUTIONFINDER_" + solutionfinder.SolutionFinderId + "_DESCRIPTION") ? Resources["SOLUTIONFINDER_" + solutionfinder.SolutionFinderId + "_DESCRIPTION"] : string.Empty,
                        Id = solutionfinder.SolutionFinderId,
                        Icon = solutionfinder.ImageUrl,
                        portalId = portalId,
                        clientId = clientId
                    };
                    solutionFinderViewModel.SolutionFinderTiles.Add(solutionFinderTileViewModel);
                }
                //setting resource objet to view model.
                solutionFinderViewModel.Resources = Resources;
                return View(solutionFinderViewModel);
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.SlnFinderIndex, KBErrorHandler.GetMethodName(), GeneralResources.IndexError,
                    new KBExceptionData("title", title));
                throw kbCustExp;
            }
        }
        public ActionResult GetSolutionFinderDetailsByIdWithParams(int parentsolutionId, int solutionId, int choiceId, bool nav, string answer)
        {
            bool navigation = false;
            int ImmediatePId;
            string solFinderName = string.Empty;
            string question = string.Empty;

            try
            {
                if (nav) navigation = true;
                //read and update clientid & portalid from routedata
                ReadDataFromRouteData();
                SolutionFinderTileViewModel solutionFinderTileViewModel = new SolutionFinderTileViewModel();
                SolutionFinderDetailsViewModel solutionFinderDetailsViewModel = new SolutionFinderDetailsViewModel();
                solutionFinderTileViewModel.portalId = portalId;
                solutionFinderTileViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.portalId = portalId;
                solutionFinderDetailsViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.ChoiceId = choiceId; // Choice Id
                question = TempData["question_" + _portal.PortalId.ToString() + "_" + parentsolutionId.ToString()] != null ? TempData["question_" + _portal.PortalId.ToString() + "_" + parentsolutionId.ToString()].ToString() : string.Empty;
                ImmediatePId = this._solFinderManager.GetSolutionFinderParentByChoice(choiceId); // Solution Finder Id
                solutionFinderDetailsViewModel.ImmediatePId = ImmediatePId;
                if (nav)
                {
                    if (ImmediatePId > 0)
                    {
                        solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(ImmediatePId, choiceId);
                    }
                    else
                    {
                        solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(parentsolutionId, 0);
                    }
                }
                else
                {
                    solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(ImmediatePId, choiceId);
                }

                if (!navigation)
                {
                    solutionFinderDetailsViewModel.History = (List<HistoryViewModel>)Session["SolutionFinderHistory"];
                    bool skipAdd = false;
                    if ((solutionFinderDetailsViewModel.History != null)
                        && (solutionFinderDetailsViewModel.History.Count > 0)
                        && (solutionFinderDetailsViewModel.History[solutionFinderDetailsViewModel.History.Count - 1].SolutionFinderId == choiceId)
                       )
                    {
                        skipAdd = true;
                    }
                    if (!skipAdd)
                    {
                        HistoryViewModel SV = solutionFinderDetailsViewModel.History.FirstOrDefault(Q => Q.ChoiceId == choiceId);
                        if (SV == null)
                        {
                            solutionFinderDetailsViewModel.History.Add(new HistoryViewModel()
                                {
                                    SolutionFinderId = solutionId,
                                    Question = Utilities.GetHistoryTextForSolutionFinder(question),
                                    Answer = answer,
                                    ChoiceId = parentsolutionId
                                });
                        }
                        Session["SolutionFinderHistory"] = solutionFinderDetailsViewModel.History;

                    }
                }
                else
                {
                    solutionFinderDetailsViewModel.History = (List<HistoryViewModel>)Session["SolutionFinderHistory"];
                    int chIndex = solutionFinderDetailsViewModel.History.FindIndex(x => x.ChoiceId == choiceId);
                    //chIndex = chIndex + 1;
                    solutionFinderDetailsViewModel.History.RemoveRange(chIndex, (solutionFinderDetailsViewModel.History.Count) - chIndex);
                    Session["SolutionFinderHistory"] = solutionFinderDetailsViewModel.History;

                }

                //-------store question to tempdata
                TempData["question_" + _portal.PortalId.ToString() + "_" + choiceId.ToString()] = solutionFinderDetailsViewModel.SolutionFinder != null ? solutionFinderDetailsViewModel.SolutionFinder.Question : string.Empty;

                //-------Solution FInder Name
                SolutionFinder objSF = GetSolutionFinder(solutionId);
                if (null != objSF)
                {
                    solFinderName = objSF.Name;
                }
                //----- Breadcrumbs ------
                BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                solutionFinderDetailsViewModel.showBreadcrumb = this._portal.Configuration.ShowBreadcrumbs;
                BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = SFText, Value = "solutionFinder", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem()
                {
                    Text = solFinderName,
                    Value = string.Empty,
                    Selected = true
                });
                solutionFinderDetailsViewModel.BreadcrumbViewModel = BreadcrumbViewModel;
                solutionFinderDetailsViewModel.SolutionFinderTileViewModel = new SolutionFinderTileViewModel()
                {
                    Title = solFinderName,
                    Id = solutionId,
                };
                solutionFinderDetailsViewModel.Resources = Resources;
                return View("SolutionFinderDetails", solutionFinderDetailsViewModel);
            }
            catch (JsonException ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.JsonError,
                    new KBExceptionData("solutionId", solutionId), new KBExceptionData("solFinderName", solFinderName));
                throw kbCustExp;
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.GetSlnFinderDetailsError,
                    new KBExceptionData("solutionId", solutionId), new KBExceptionData("solFinderName", solFinderName));
                throw kbCustExp;
            }
        }
        public ActionResult GetSolutionFinderDetailsById(string title, int sfid, int sfcid, bool fromwidget = false, int SearchId = 0, Boolean isSearch=false)
        {
            string icon = string.Empty;
            string sftitle = string.Empty;
            string content = string.Empty;
            int userid = 0;
            string searchText = string.Empty;
            try
            {
                //read and update clientid & portalid from routedata
                ReadDataFromRouteData();
                // Questions: id - always 0, I use sfcid as SolutionFinderId

                if (HttpContext.Session["SearchText_" + portalId.ToString()] != null && isSearch== true)
                {
                    searchText = (String)Session["SearchText_" + portalId.ToString()];
                }

                SolutionFinderTileViewModel solutionFinderTileViewModel = new SolutionFinderTileViewModel();
                solutionFinderTileViewModel.portalId = portalId;
                solutionFinderTileViewModel.clientId = clientId;
                SolutionFinderDetailsViewModel solutionFinderDetailsViewModel = new SolutionFinderDetailsViewModel();
                solutionFinderDetailsViewModel.portalId = portalId;
                solutionFinderDetailsViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.FromWidget = fromwidget;
                solutionFinderDetailsViewModel.ImmediatePId = this._solFinderManager.GetSolutionFinderParentByChoice(sfcid); // Solution Finder Id
                solutionFinderDetailsViewModel.ChoiceId = sfcid;
                Session["SolutionFinderHistory"] = new List<HistoryViewModel>();
                solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(sfid, sfcid);
                solutionFinderDetailsViewModel.SolutionFinder.SolutionFinderId = sfid;
                // UpdateSolutionFinderChoices(solutionFinderDetailsViewModel);
                bool skipAdd = false;
                if ((solutionFinderDetailsViewModel.History != null)
                    && (solutionFinderDetailsViewModel.History.Count > 0)
                    && (solutionFinderDetailsViewModel.History[solutionFinderDetailsViewModel.History.Count - 1].SolutionFinderId == sfid))
                {
                    skipAdd = true;
                }
                if (!skipAdd)
                {
                    SolutionFinder objSF = GetSolutionFinder(sfid);
                    if (null != objSF)
                    {
                        icon = objSF.ImageUrl.Replace('^', '\\');
                        sftitle = objSF.Name;
                        content = Resources.ContainsKey("SOLUTIONFINDER_" + sfid.ToString() + "_DESCRIPTION") ? Resources["SOLUTIONFINDER_" + sfid.ToString() + "_DESCRIPTION"] : string.Empty;
                    }
                    solutionFinderDetailsViewModel.History = new List<HistoryViewModel>();
                }
                //----- Breadcrumbs ------
                BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                if (this._portal.Configuration.ShowBreadcrumbs)
                {
                    solutionFinderDetailsViewModel.showBreadcrumb = true;
                    BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = searchText, Value = "Search", Selected = false });
                    //searchResultFor
                    BreadcrumbViewModel.NavigationList.Add(new SelectListItem()
                    {
                        Text = sftitle,
                        Value = string.Empty,
                        Selected = true
                    });
                    solutionFinderDetailsViewModel.BreadcrumbViewModel = BreadcrumbViewModel;
                }
                solutionFinderDetailsViewModel.SolutionFinderTileViewModel = new SolutionFinderTileViewModel()
                {
                    Title = sftitle,
                    Id = sfid,
                    Content = content,
                    Icon = icon
                };
                solutionFinderDetailsViewModel.Resources = Resources;
                if (_user != null && _user.UserId > 0)
                {
                    userid = _user.UserId;
                }
                this._solFinderManager.SFVisit(sfid, portalId, clientId, userid, DateTime.Now, HttpContext.Session.SessionID, SearchId);

                return View("SolutionFinderDetails", solutionFinderDetailsViewModel);
            }
            catch (JsonException ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.JsonError,
                    new KBExceptionData("title", title), new KBExceptionData("sfid", sfid), new KBExceptionData("sfcid", sfcid));
                throw kbCustExp;
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.GetSlnFinderDetailsError,
                    new KBExceptionData("title", title), new KBExceptionData("sfid", sfid), new KBExceptionData("sfcid", sfcid));
                throw kbCustExp;
            }
        }
        public ActionResult GetSolutionFinderDetails(int solutionId)
        {
            int userid = 0;
            try
            {
                //read and update clientid & portalid from routedata
                ReadDataFromRouteData();

                if (_user != null && _user.UserId > 0)
                {
                    userid = _user.UserId;
                }
                this._solFinderManager.SFVisit(solutionId, portalId, clientId, userid, DateTime.Now, HttpContext.Session.SessionID, 0);

                SolutionFinderDetailsViewModel solutionFinderDetailsViewModel = new SolutionFinderDetailsViewModel();
                solutionFinderDetailsViewModel.SessionTimeOutWarning = Utilities.GetResourceText(CommonResources, "SESSIONTIMEOUTWARNING");
                solutionFinderDetailsViewModel.SessionTimedOut = Utilities.GetResourceText(CommonResources, "SESSIONTIMEDOUT");
                solutionFinderDetailsViewModel.portalId = portalId;
                solutionFinderDetailsViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.ImmediatePId = 0; // Parent Id, in this case its 0 (no parent)
                solutionFinderDetailsViewModel.ChoiceId = solutionId;
                solutionFinderDetailsViewModel.showBreadcrumb = _portal.Configuration.ShowBreadcrumbs;

                SolutionFinder objSF = GetSolutionFinder(solutionId);
                SolutionFinderTileViewModel solutionFinderTileViewModel = new SolutionFinderTileViewModel();
                if (null != objSF)
                {
                    solutionFinderTileViewModel.Id = solutionId;
                    solutionFinderTileViewModel.Icon = objSF.ImageUrl.Replace('^', '\\');
                    solutionFinderTileViewModel.Title = objSF.Name;
                    solutionFinderTileViewModel.Content = Resources.ContainsKey("SOLUTIONFINDER_" + solutionId.ToString() + "_DESCRIPTION") ? Resources["SOLUTIONFINDER_" + solutionId.ToString() + "_DESCRIPTION"] : string.Empty;
                }
                solutionFinderTileViewModel.portalId = portalId;
                solutionFinderTileViewModel.clientId = clientId;
                solutionFinderDetailsViewModel.SolutionFinderTileViewModel = solutionFinderTileViewModel;

                //----- Breadcrumbs ------
                BreadcrumbViewModel BreadcrumbViewModel = new BreadcrumbViewModel();
                BreadcrumbViewModel.NavigationList = new List<SelectListItem>();
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = homeText, Value = "home", Selected = false });
                BreadcrumbViewModel.NavigationList.Add(new SelectListItem() { Text = SFText, Value = "solutionFinder", Selected = false });

                solutionFinderDetailsViewModel.History = new List<HistoryViewModel>();
                Session["SolutionFinderHistory"] = new List<HistoryViewModel>();
                //setting resource objet to view model.
                solutionFinderDetailsViewModel.Resources = Resources;
                solutionFinderDetailsViewModel.SolutionFinder = (PortalAPI.Models.SolutionFinderChoice)this._solFinderManager.GetSolutionFinderChoiceById(solutionId, 0);

                BreadcrumbViewModel.NavigationList.Add(new SelectListItem()
                {
                    Text = solutionFinderTileViewModel.Title,
                    Value = solutionFinderDetailsViewModel.SolutionFinder == null ? solutionFinderTileViewModel.Id.ToString() : solutionFinderDetailsViewModel.SolutionFinder.SolutionFinderId.ToString(),
                    Selected = true
                });

                //---store question into tempdata
                TempData["question_" + _portal.PortalId.ToString() + "_" + solutionId.ToString()] = solutionFinderDetailsViewModel.SolutionFinder != null ? solutionFinderDetailsViewModel.SolutionFinder.Question : string.Empty;

                solutionFinderDetailsViewModel.BreadcrumbViewModel = BreadcrumbViewModel;
                if (solutionFinderDetailsViewModel.SolutionFinder == null)
                {
                    //set empty model and handle it in UI
                    return View("SolutionFinderDetails", solutionFinderDetailsViewModel);
                }

                //  UpdateSolutionFinderChoices(solutionFinderDetailsViewModel);
                return View("SolutionFinderDetails", solutionFinderDetailsViewModel);
            }
            catch (JsonException ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.JsonError,
                    new KBExceptionData("solutionId", solutionId));
                throw kbCustExp;
            }
            catch (Exception ex)
            {
                KBCustomException kbCustExp = KBCustomException.ProcessException(ex, KBOp.GetSlnFinderDetails, KBErrorHandler.GetMethodName(), GeneralResources.GetSlnFinderDetailsError,
                    new KBExceptionData("solutionId", solutionId));
                throw kbCustExp;
            }
        }