/// <summary>
        /// Gets the store all filters.
        /// </summary>
        /// <param name="store">The store.</param>
        /// <returns>ISearchFilter[][].</returns>
        private ISearchFilter[] GetStoreAllFilters(Store store)
        {
            var filters = new List<ISearchFilter>();

            var catalogClient = ClientContext.Clients.CreateCatalogClient();

            // get category filters
            var children = catalogClient.GetChildCategoriesById(_customerSession.CustomerSession.CategoryId);
            if (children != null)
            {
                var categoryFilter = new CategoryFilter { Key = "__outline" };
                var listOfValues = (from child in children.OfType<Category>() 
                                    let outline = String.Format("{0}*", catalogClient.BuildCategoryOutline(_customerSession.CustomerSession.CatalogId, child)) 
                                    select new CategoryFilterValue {Id = child.CategoryId, Outline = outline, Name = child.DisplayName()}).ToList();

                // add filters only if found any
                if (listOfValues.Count > 0)
                {
                    categoryFilter.Values = listOfValues.ToArray();
                    filters.Add(categoryFilter);
                }

                /*
                var categoryFilter = new AttributeFilter{ IsLocalized = false, Key = "__outline"};

                var listOfValues = new List<AttributeFilterValue>();
                foreach (var child in children.OfType<Category>())
                {
                    var outline = String.Format("{0}*", catalogClient.BuildCategoryOutline(_customerSession.CustomerSession.CatalogId, child));
                    var val = new AttributeFilterValue() { Id = outline, Value = outline };
                    listOfValues.Add(val);
                }

                // add filters only if found any
                if (listOfValues.Count > 0)
                {
                    categoryFilter.Values = listOfValues.ToArray();
                    filters.Add(categoryFilter);
                }
                 * */
            }


            var browsing = GetStoreBrowseFilters(store);
            if (browsing != null)
            {
                if (browsing.Attributes != null)
                {
                    filters.AddRange(browsing.Attributes);
                }
                if (browsing.AttributeRanges != null)
                {
                    filters.AddRange(browsing.AttributeRanges);
                }
                if (browsing.Prices != null)
                {
                    filters.AddRange(browsing.Prices);
                }
            }

            return filters.ToArray();
        }
        public static ISearchFilter Convert(this ISearchFilterService helper, ISearchFilter filter, string[] keys)
        {
            // get values that we have filters set for
            var values = from v in filter.GetValues() where keys.Contains(v.Id) select v;

            var attributeFilter = filter as AttributeFilter;
            if (attributeFilter != null)
            {
                var newFilter = new AttributeFilter();
                newFilter.InjectFrom(filter);
                newFilter.Values = values.OfType<AttributeFilterValue>().ToArray();
                return newFilter;
            }

            var rangeFilter = filter as RangeFilter;
            if (rangeFilter != null)
            {
                var newFilter = new RangeFilter();
                newFilter.InjectFrom(filter);

                newFilter.Values = values.OfType<RangeFilterValue>().ToArray();
                return newFilter;
            }

            var priceRangeFilter = filter as PriceRangeFilter;
            if (priceRangeFilter != null)
            {
                var newFilter = new PriceRangeFilter();
                newFilter.InjectFrom(filter);

                newFilter.Values = values.OfType<RangeFilterValue>().ToArray();
                return newFilter;
            }

            var categoryFilter = filter as CategoryFilter;
            if (categoryFilter != null)
            {
                var newFilter = new CategoryFilter();
                newFilter.InjectFrom(filter);
                newFilter.Values = values.OfType<CategoryFilterValue>().ToArray();
                return newFilter;
            }

            return null;
        }