{
  "version": 3,
  "sources": ["/cdn/shop/t/96/assets/fastr-collection-fetch.js?page=%24%7BtotalPages%7D"],
  "sourcesContent": ["\r\nwindow.FASTR_FRONTEND = window.FASTR_FRONTEND || {};\r\nwindow.FASTR_FRONTEND.searchSpringQueue = [];\r\n\r\ndocument.addEventListener('DOMContentLoaded', async function() {\r\n    const collectionContainer = document.querySelector('.collection-container');\r\n    const productGridContainer = document.querySelector('.collection-container #ProductGridContainer');\r\n    const urlParams = new URLSearchParams(window.location.search);\r\n    const pageNumber = urlParams.get('page') ? parseInt(urlParams.get('page')) : 1;\r\n    const shopUrl = Shopify.shop;\r\n    let abortController;\r\n    const prodGrid = productGridContainer.querySelector('#product-grid');\r\n    const color_settings = window[`settings`];\r\n    const customColorsArray = color_settings.color_swatches.split(',').map(color => {\r\n        const [key, value] = color.split(':').map(part => part.trim());\r\n        return { key: key.toLowerCase(), value: value };\r\n    });\r\n    const keyArray = customColorsArray.map((color) => color.key);\r\n    const valArray = customColorsArray.map((color) => color.value);\r\n    if(prodGrid){\r\n        const baseUrl = 'https://cr8s7s.a.searchspring.io/api/search/search.json';\r\n        const queryParams = {\r\n            ajaxCatalog: 'v3',\r\n            resultsFormat: 'native',\r\n            siteId: 'cr8s7s',\r\n            domain: window.location.origin + window.location.pathname,\r\n            bgfilter: {\r\n                collection_handle: collectionHandle,\r\n                ss_available: '1'\r\n            },\r\n            filter: {},\r\n            type: 'filter',\r\n            q: '',\r\n            page: pageNumber,\r\n            userId: 'db8c2ca1-e581-4f07-9c2f-f8ce16fd9b66',\r\n            sessionId: '164b6ef2-b723-43bb-ab2e-d0ba28622e46',\r\n            pageLoadId: '79ac628a-ef44-4959-9d1c-e70702a24739'\r\n        };\r\n    \r\n        function debounce(func, delay) {\r\n            let timeoutId;\r\n            return function (...args) {\r\n                if (timeoutId) clearTimeout(timeoutId);\r\n                timeoutId = setTimeout(() => func.apply(this, args), delay);\r\n            };\r\n        }\r\n    \r\n        async function FacetsToggle() {\r\n            const container = document.getElementById(\"Facet-Drawer\");\r\n            const button = document.getElementById(\"Facets-Toggle\");\r\n          \r\n            if (button) {\r\n              button.addEventListener(\"click\", function(e) {\r\n                e.preventDefault();\r\n                document.getElementsByTagName(\"body\")[0].classList.toggle(\"open-cc\");\r\n                container.classList.toggle(\"active\");\r\n              });\r\n            }\r\n        }\r\n    \r\n        const checkAndValidateFilters = async(collectionHandle) => {\r\n            let storedFilters = JSON.parse(sessionStorage.getItem('natoriFilters') || '{}');\r\n            if (storedFilters.hasOwnProperty('search_query')) {\r\n                delete storedFilters.search_query;\r\n                sessionStorage.setItem('natoriFilters', JSON.stringify(storedFilters));\r\n                sessionStorage.removeItem('natoriSortData');\r\n            }\r\n            // Use a dedicated key so the collection-change check works even when\r\n            // collection_handle was never written into natoriFilters (the normal case).\r\n            const lastCollectionHandle =\r\n                sessionStorage.getItem('natoriLastCollectionHandle') ||\r\n                storedFilters.collection_handle; // backward-compat with old search flow\r\n            if (lastCollectionHandle && lastCollectionHandle !== collectionHandle) {\r\n                sessionStorage.removeItem('natoriFilters');\r\n                sessionStorage.removeItem('natoriSortData');\r\n            }\r\n            sessionStorage.setItem('natoriLastCollectionHandle', collectionHandle);\r\n        };\r\n        \r\n    \r\n        const fetchColorValue = async (key) => {\r\n            let colorValue = key.toLowerCase().trim();\r\n            const customColorIndex = keyArray.indexOf(colorValue);\r\n            if (customColorIndex > -1) {\r\n                colorValue = valArray[customColorIndex];\r\n            }\r\n        \r\n            let bgValue = false;\r\n            if (colorValue.includes(\".\")) {\r\n                bgValue = colorValue;\r\n                colorValue = \"var(--bg-body)\";\r\n            }\r\n        \r\n            const shopDomain = window.location.hostname;\r\n            const bgImageUrl = bgValue? `--option-color-image: url('//${shopDomain}/cdn/shop/files/${bgValue}');`: \"--option-color-image: false\";\r\n            const style = `--bg-color: ${colorValue}; ${bgImageUrl}`;\r\n            return style;\r\n        };\r\n    \r\n        const updateColorValue = async () => {\r\n            const colorLabels = document.querySelectorAll('.thb-filter ul.list-color label.facet-checkbox');\r\n            for (const label of colorLabels) {\r\n                try {\r\n                    const colorKey = label.dataset.key;\r\n                    const colorValue = await fetchColorValue(colorKey);\r\n        \r\n                    if (colorValue) {\r\n                        const styles = colorValue.split(';').filter(Boolean);\r\n        \r\n                        styles.forEach(style => {\r\n                            const [property, value] = style.split(':').map(s => s.trim());\r\n                            if (property && value) {\r\n                                label.style.setProperty(property, value);\r\n                            }\r\n                        });\r\n                    } else {\r\n                        console.warn(`No color value returned for key: ${colorKey}`);\r\n                    }\r\n                } catch (error) {\r\n                    console.error(`Failed to fetch or apply color value for key: ${label.dataset.key}`, error);\r\n                }\r\n            }\r\n        };  \r\n    \r\n        // const formatPrice = (price) => {\r\n        //     const number = parseFloat(price);\r\n        //     return number % 1 === 0 ? number.toFixed(0) : number.toFixed(2);\r\n        // };\r\n    \r\n        const formatPrice = (price) => {\r\n            const number = parseFloat(price);\r\n            const currency = window.theme.settings.money_with_currency_format.replace(/{{.*?}}/g, '');\r\n            \r\n            let locale;\r\n             switch (currency) {\r\n                case '\u20AC': \r\n                    locale = 'de-DE';\r\n                    break;\r\n                case 'CHF':\r\n                    locale = 'de-CH';\r\n                    break;\r\n                case 'R$':\r\n                    locale = 'pt-BR';\r\n                    break;\r\n                case '\u00A5':\r\n                    locale = 'ja-JP';\r\n                    break;\r\n                case '$':\r\n                default:\r\n                    locale = 'en-US';\r\n                    break;\r\n            }\r\n        \r\n            return number.toLocaleString(locale, { \r\n                minimumFractionDigits: 0, \r\n                maximumFractionDigits: 2 \r\n            });\r\n        };\r\n    \r\n    \r\n    \r\n        const getStep = (minPrice, maxPrice) => {\r\n            const divisors = [10, 7, 5, 3, 2, 1];\r\n            let step = 1;\r\n        \r\n            for (const divisor of divisors) {\r\n                if (minPrice % divisor === 0 && maxPrice % divisor === 0) {\r\n                    return divisor;\r\n                }\r\n            }\r\n        \r\n            for (const divisor of divisors) {\r\n                if (maxPrice % divisor === 0) {\r\n                    return divisor;\r\n                }\r\n            }\r\n        \r\n            return step;\r\n        };\r\n    \r\n        await checkAndValidateFilters(collectionHandle);\r\n    \r\n        const buildQueryString = (params) => {\r\n            const parts = [];\r\n        \r\n            const processKey = (key, value) => {\r\n                if (Array.isArray(value)) {\r\n                    return value.map(item => `${encodeURIComponent(key)}=${encodeURIComponent(item)}`).join('&');\r\n                } else if (typeof value === 'object' && value !== null) {\r\n                    return Object.keys(value)\r\n                        .map(subKey => processKey(`${key}.${subKey}`, value[subKey]))\r\n                        .join('&');\r\n                } else {\r\n                    return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\r\n                }\r\n            };\r\n        \r\n            Object.keys(params).forEach(key => {\r\n                if (typeof params[key] === 'object' && params[key] !== null) {\r\n                    parts.push(processKey(key, params[key]));\r\n                } else {\r\n                    parts.push(processKey(key, params[key]));\r\n                }\r\n            });\r\n        \r\n            return parts.join('&');\r\n        };\r\n    \r\n        async function createProductGrid(products, inlineContent, paginationData) {\r\n            const productGrid = document.getElementById('product-grid');\r\n            productGrid.innerHTML = ''; // Clear existing products\r\n    \r\n            const productsPerPage = paginationData.perPage;\r\n            const currentPage = paginationData.currentPage;\r\n            let totalResults;\r\n            if (inlineContent && inlineContent.length > 0) {\r\n                totalResults = Math.max(0, parseInt(paginationData.totalResults) - 1);\r\n            } else {\r\n                totalResults = Math.max(0, parseInt(paginationData.totalResults));\r\n            }\r\n\r\n            const totalProds = totalResults > 1 ? `${totalResults} products` : `${totalResults} product`;\r\n            \r\n            const countLabels = document.querySelectorAll('.facets-mobile-container .thb-filter-count span.facets__label, facetfiltersformmobile .side-panel-inner .thb-filter-count span.facets__label');\r\n            if (countLabels) {\r\n              countLabels.forEach(label => {\r\n                label.textContent = totalProds;\r\n              });\r\n            }\r\n    \r\n            let inlineIndex = -1;\r\n            let inlineInserted = false;\r\n            let customLabel = false;\r\n            let customSwatch;\r\n            const defaultImageUrl = `https://${shopUrl}/cdn/shop/t/1/assets/natoriplaceholder.png`;\r\n    \r\n            if (inlineContent && inlineContent.length > 0) {\r\n                inlineIndex = inlineContent[0].config.position.index;\r\n            }\r\n    \r\n            products.forEach((product, index) => {\r\n                const prodVariant = parseVariant(product.variants);\r\n                const firstVariant = prodVariant[0];\r\n                let priceContainer = `<ins><span class=\"amount\">$${formatPrice(product.price)}</span></ins>`;\r\n                let comparePriceContainer = '';\r\n                if(firstVariant){\r\n                    const comparePrice = parseFloat(firstVariant.compare_at_price);\r\n                    const sellPrice = parseFloat(firstVariant.price);\r\n                    if(comparePrice>sellPrice){\r\n                        priceContainer =`<ins><span class=\"amount\">$${formatPrice(sellPrice)}</span></ins>`;\r\n                        comparePriceContainer =`<del><span class=\"amount\">$${formatPrice(comparePrice)}</span></del>`;\r\n                    }\r\n                }\r\n                let prodImage = product.thumbnailImageUrl ? product.thumbnailImageUrl: defaultImageUrl;\r\n                const collPrimaryImage = collectionImage(product);\r\n                const collectionProdImage = collPrimaryImage?`<img class=\"product-primary-image coll-image lazyautosizes\" src=\"${collPrimaryImage}\" alt=\"${product.name}\" style=\"width:100%;height:100%;\"/>`: `<img class=\"product-primary-image lazyautosizes\" src=\"${prodImage}\" alt=\"${product.name}\" style=\"width:100%;height:100%;\"/>`;\r\n                let variantPrimaryImage = '';\r\n                if(collPrimaryImage){\r\n                    variantPrimaryImage = `<span class=\"product-coll-images\" data-primary=\"${collPrimaryImage}\" data-secondary=\"${prodImage}\" style=\"display:none;\" />`;    \r\n                }\r\n                const productElement = document.createElement('li');\r\n                productElement.className = 'column';\r\n                const productHTML = `\r\n                    <product-card class=\"product-card text-center hide-price\">\r\n                        <figure class=\"product-featured-image spin_overlay\">\r\n                            <a href=\"${product.url}\" title=\"${product.name}\" class=\"product-featured-image-link aspect-ratio aspect-ratio--adapt\" style=\"--padding-bottom: 150%;\">\r\n                                ${collectionProdImage}\r\n                                ${variantPrimaryImage}\r\n                            </a>\r\n                        </figure>\r\n                        <div class=\"product-card-info\">\r\n                            <div class=\"productInfosection\">\r\n                                <div class=\"productInfoleft\">\r\n                                    <div class=\"product-card-vendor\"><a href=\"/collections/vendors?q=${product.vendor}\" title=\"${product.vendor}\">${product.vendor}</a></div>\r\n                                    <a href=\"${product.url}\" title=\"${product.name}\" class=\"product-card-title\">${product.name}</a>\r\n                                </div>\r\n                                <div class=\"productInfoRight\">\r\n                                    <div class=\"plpRatings\">\r\n                                      <div class=\"yotpo-widget-instance yotpo bottomLine\" data-product-id=\"${product.uid}\"></div>\r\n                                    </div>\r\n                                    <span class=\"price\">${comparePriceContainer}${priceContainer}</span>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"product-card-swatch\" data-product-id=\"${product.uid}\">\r\n                                <div class=\"product-card-swatches no-js-hidden\" id=\"swatch_section_${product.uid}\"></div>\r\n                            </div>\r\n                        </div>\r\n                    </product-card>\r\n                `;\r\n    \r\n                productElement.innerHTML = productHTML;\r\n                if(product.mfield_custom_product_custom_swatch){\r\n                    customSwatch = parseVariant(product.mfield_custom_product_custom_swatch);\r\n                }\r\n                if(Array.isArray(customSwatch) && customSwatch.length > 0){\r\n                    if (prodVariant && prodVariant.length > 0) {\r\n                      const customProdSwatchData = {\r\n                          featured_image_id: prodVariant[0].id,\r\n                          custom_handle: product.url,\r\n                          product_gids: customSwatch\r\n                      };\r\n                  \r\n                      const customProdSwatch = `window.settings_${product.uid} = ${JSON.stringify(customProdSwatchData)}`;\r\n                  \r\n                      const customProdSwatchScript = document.createElement('script');\r\n                      customProdSwatchScript.textContent = customProdSwatch;\r\n                  \r\n                      const productSwatch = productElement.querySelector('.product-card .product-card-swatch');\r\n                      const productSwatchDirectory = productElement.querySelector('.product-card .product-card-info');\r\n                  \r\n                      if (productSwatch && productSwatchDirectory) {\r\n                          productSwatch.insertAdjacentElement('afterend', customProdSwatchScript);\r\n                      } else {\r\n                          console.error('productSwatch or productSwatchDirectory not found');\r\n                      }\r\n                    } else {\r\n                        console.error('No variants found for product');\r\n                    }\r\n                }else {\r\n                    const productSwatch = productElement.querySelector('.product-card .product-card-swatch');\r\n                    if (productSwatch) {\r\n                        productSwatch.remove();\r\n                    } else {\r\n                        console.error('productSwatch not found');\r\n                    }\r\n                }\r\n                const saleLabel = saleBadge(prodVariant);\r\n              \r\n                if(saleLabel != null && saleLabel != 'Sale'){\r\n                  customLabel = true;\r\n                  const featureImage = productElement.querySelector('figure.product-featured-image');\r\n                  const featureTag = featureImage.querySelector('a.product-featured-image-link.aspect-ratio');\r\n    \r\n                   const saleLabelElement = document.createElement('span');\r\n                   saleLabelElement.classList = \"badge top left\";\r\n                   if (saleLabel == 'Sale'){\r\n                      saleLabelElement.classList.add(\"onsale\");  \r\n                   }else{\r\n                      saleLabelElement.classList.add(\"out-of-stock\"); \r\n                   }\r\n                   saleLabelElement.innerHTML = saleLabel;\r\n                  featureImage.insertBefore(saleLabelElement, featureTag);\r\n                }\r\n    \r\n                if(product.mfield_custom_product_label){\r\n                  const customMetaLabel = String(product.mfield_custom_product_label);\r\n                  const featureImage = productElement.querySelector('figure.product-featured-image');\r\n                  const featureTag = featureImage.querySelector('a.product-featured-image-link.aspect-ratio');\r\n    \r\n                   const customLabelElement = document.createElement('span');\r\n                   if (customLabel){\r\n                      customLabelElement.classList = \"badge top right\";\r\n                   }else{\r\n                      customLabelElement.classList = \"badge top left\";\r\n                   }\r\n                   customLabelElement.innerHTML = customMetaLabel;\r\n                    featureImage.insertBefore(customLabelElement, featureTag);\r\n                }\r\n    \r\n                if (!inlineInserted && inlineIndex >= 0 && inlineIndex < productsPerPage * currentPage) {\r\n                    const inlinePage = Math.ceil(inlineIndex / productsPerPage);\r\n                    const positionOnPage = inlineIndex % productsPerPage;\r\n    \r\n                    if (currentPage === inlinePage && index === positionOnPage) {\r\n                        const inlineElement = createInlineContentElement(inlineContent[0]);\r\n                        if(inlineElement){\r\n                          productGrid.appendChild(inlineElement);\r\n                          inlineInserted = true;\r\n                        }\r\n                    }\r\n                }\r\n                productGrid.appendChild(productElement);\r\n            });\r\n    \r\n            if (!inlineInserted && inlineIndex >= productsPerPage * currentPage - productsPerPage && inlineIndex < productsPerPage * currentPage) {\r\n                const inlineElement = createInlineContentElement(inlineContent[0]);\r\n              if(inlineElement){\r\n                productGrid.appendChild(inlineElement);\r\n              }\r\n            }\r\n            createPagination(paginationData);\r\n        }\r\n    \r\n        const parseVariant = (rowVariant) => {\r\n            const stringifiedArray = rowVariant;\r\n            const correctedString = stringifiedArray.replace(/&quot;/g, '\"');\r\n            const jsonObjectArray = JSON.parse(correctedString);\r\n            return jsonObjectArray;\r\n        };\r\n    \r\n        const collectionImage = (product) => {\r\n            let primaryImage = null;\r\n            const metafieldArray = ['mfield_custom_category_image_map', 'mfield_custom_category_image_map_2nd', 'mfield_custom_category_image_map_3rd', 'mfield_custom_category_image_map_4th', 'mfield_custom_category_image_map_5th', 'mfield_custom_category_image_map_6th', 'mfield_custom_category_image_map_7th'];\r\n            for (const metafieldKey of metafieldArray) {\r\n                const metafieldValue = product[metafieldKey];\r\n                if (Array.isArray(metafieldValue) && metafieldValue.length === 2) {\r\n                    const [id, imageUrl] = metafieldValue;\r\n                    \r\n                    if (collectionId == id) {\r\n                        primaryImage = imageUrl;\r\n                        return primaryImage;\r\n                    }\r\n                }\r\n            }\r\n            return primaryImage;\r\n        };\r\n    \r\n        const collectionSwatchImages = async () => {\r\n            const productCards = document.querySelectorAll('#product-grid product-card.product-card');\r\n            productCards.forEach((productCard) => {\r\n                const collImage = productCard.querySelector('.product-featured-image span.product-coll-images');\r\n                if(collImage){\r\n                    const primaryImage = collImage.getAttribute('data-primary');\r\n                    const secondaryImage = collImage.getAttribute('data-secondary');\r\n                    const prodActiveSwatch = productCard.querySelector('.product-card-info .product-card-swatch .product-card-swatches .product-card-swatch.active');\r\n                    if(prodActiveSwatch){\r\n                        prodActiveSwatch.setAttribute('data-srcset', primaryImage);\r\n                        prodActiveSwatch.setAttribute('data-srcset-2', secondaryImage);\r\n                        const prodSecondary = productCard.querySelector('.product-secondary-image');\r\n                        if(prodSecondary){\r\n                            prodSecondary.setAttribute('data-srcset', secondaryImage);\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n        };\r\n    \r\n        const saleBadge = (prodVariant) => {\r\n            if (!Array.isArray(prodVariant) || prodVariant.length === 0) {\r\n                return null;\r\n            }\r\n            const totalInventory = prodVariant.reduce((total, variant) => {\r\n                return total + (variant.inventory_quantity || 0);\r\n            }, 0);\r\n    \r\n            if (totalInventory < 1) {\r\n                return `Out of Stock`;\r\n            }\r\n        \r\n            const firstVariant = prodVariant[0];\r\n            const firstVariantComparePrice = parseFloat(firstVariant.compare_at_price) || null;\r\n            const firstVariantPrice = parseFloat(firstVariant.price) || null;\r\n        \r\n            if (firstVariantComparePrice && firstVariantPrice && firstVariantComparePrice > firstVariantPrice) {\r\n                return `Sale`;\r\n            }\r\n        \r\n            return null;\r\n        };\r\n\r\n    \r\n        function createInlineContentElement(inlineContent) {\r\n            try {\r\n                const inlineElement = document.createElement('li');\r\n                inlineElement.className = 'column';\r\n                const inlineUrl = inlineContent.value.match(/data-target-url=\"([^\"]+)\"/)?.[1] ?? 'javascript:void';\r\n                const inlineBanner = inlineContent.value.match(/data-image-url=\"([^\"]+)\"/)?.[1] ?? `https://${shopUrl}/cdn/shop/t/1/assets/natoriplaceholder.png`;\r\n                const inlineAlt = inlineContent.value.match(/data-target-title=\"([^\"]+)\"/)?.[1] ?? 'Natori';\r\n        \r\n                const inlineHTML = `\r\n                    <product-card class=\"product-card text-center\">\r\n                        <figure class=\"product-featured-image spin_overlay\">\r\n                            <a href=\"${inlineUrl}\" title=\"${inlineAlt}\" class=\"product-featured-image-link aspect-ratio aspect-ratio--adapt\" style=\"--padding-bottom: 150%;\">\r\n                                <img class=\"product-primary-image lazyautosizes\" src=\"${inlineBanner}\" alt=\"${inlineAlt}\" style=\"width: 100%;\" />\r\n                            </a>\r\n                        </figure>\r\n                    </product-card>\r\n                `;\r\n                inlineElement.innerHTML = inlineHTML;\r\n                return inlineElement;\r\n            } catch (error) {\r\n                console.error('Error creating inline content element:', error);\r\n                return null;\r\n            }\r\n         }\r\n\r\n    \r\n        const updateFacetValues = async (facets) => {\r\n            facets.forEach((facet) => {\r\n                if (facet.type === 'list' && facet.label != 'Price') {\r\n                    const facetName = facet.field.replace(\"variant_\", \"\");\r\n                    if (facetName !== 'collection_handle' && facetName !== 'ss_available' && facetName !== 'tags' && facetName !== 'ss_has_tags') {\r\n                        const facetContainers = document.querySelectorAll(`.thb-filter:has(ul.list-${facetName})`);\r\n                        facetContainers.forEach((facetContainer) => {\r\n                            facet.values.forEach((value) => {\r\n                                if (value.active == true) {\r\n                                    const activeInput = facetContainer.querySelector(`ul.list-${facetName} input[value=\"${value.label}\"]`);\r\n                                    if (activeInput) {\r\n                                        activeInput.checked = true;\r\n                                    }\r\n                                }\r\n                            });\r\n                            let selectedFacets = 0;\r\n                            const facetUl = facetContainer.querySelector(`ul.list-${facetName}`);\r\n                            const checkedfacet = facetUl.querySelectorAll('input[type=\"checkbox\"]');\r\n                            checkedfacet.forEach((checkbox) => {\r\n                                if (checkbox.checked) {\r\n                                    selectedFacets++;\r\n                                }\r\n                            });\r\n                            const facetCounter = facetContainer.querySelector(\".thb-filter-dropdown__footer span.facets__selected\");\r\n                            if (facetCounter) {\r\n                                facetCounter.textContent = `${selectedFacets} selected`;\r\n                            }\r\n                        });\r\n                    }\r\n                }\r\n            });\r\n        };\r\n\r\n    \r\n        function createPagination(paginationData) {\r\n            const { currentPage, totalPages, nextPage, previousPage } = paginationData;\r\n            const paginationContainer = document.querySelector('.pagination');\r\n            paginationContainer.innerHTML = '';\r\n        \r\n            const paginationHtml = document.createElement('div');\r\n            paginationHtml.className = 'page-numbers nav-links';\r\n        \r\n            if (previousPage > 0) {\r\n                const prevButton = document.createElement('span');\r\n                prevButton.className = 'prev';\r\n                prevButton.innerHTML = `<a href=\"${previousPage === 1 ? window.location.pathname : '?page=' + previousPage}\" title=\"Previous\">\u2190</a>`;\r\n                paginationHtml.appendChild(prevButton);\r\n            }\r\n        \r\n            let startPage, endPage;\r\n            if (totalPages <= 10) {\r\n                startPage = 1;\r\n                endPage = totalPages;\r\n            } else {\r\n                if (currentPage <= 4) {\r\n                    startPage = 1;\r\n                    endPage = 5;\r\n                } else if (currentPage > totalPages - 4) {\r\n                    startPage = totalPages - 4;\r\n                    endPage = totalPages;\r\n                } else {\r\n                    startPage = currentPage - 2;\r\n                    endPage = currentPage + 2;\r\n                }\r\n            }\r\n        \r\n            if (startPage > 1) {\r\n                paginationHtml.innerHTML += `<span class=\"page\"><a href=\"${window.location.pathname}\" title=\"Page 1\">1</a></span>`;\r\n                if (startPage > 2) {\r\n                    paginationHtml.innerHTML += `<span class=\"deco\">...</span>`;\r\n                }\r\n            }\r\n        \r\n            for (let i = startPage; i <= endPage; i++) {\r\n                const pageSpan = document.createElement('span');\r\n                pageSpan.className = 'page';\r\n                if (i === currentPage) {\r\n                    pageSpan.classList.add('current');\r\n                    pageSpan.textContent = i;\r\n                } else {\r\n                    pageSpan.innerHTML = `<a href=\"${i === 1 ? window.location.pathname : '?page=' + i}\" title=\"Page ${i}\">${i}</a>`;\r\n                }\r\n                paginationHtml.appendChild(pageSpan);\r\n            }\r\n        \r\n            if (endPage < totalPages) {\r\n                if (endPage < totalPages - 1) {\r\n                    paginationHtml.innerHTML += `<span class=\"deco\">...</span>`;\r\n                }\r\n                paginationHtml.innerHTML += `<span class=\"page\"><a href=\"?page=${totalPages}\" title=\"Page ${totalPages}\">${totalPages}</a></span>`;\r\n            }\r\n        \r\n            if (nextPage <= totalPages && nextPage > 0) {\r\n                const nextButton = document.createElement('span');\r\n                nextButton.className = 'next';\r\n                nextButton.innerHTML = `<a href=\"?page=${nextPage}\" title=\"Next\">\u2192</a>`;\r\n                paginationHtml.appendChild(nextButton);\r\n            }\r\n        \r\n            paginationContainer.appendChild(paginationHtml);\r\n        }\r\n    \r\n    \r\n        async function createMobFilters(facets) {\r\n            pageLoad = false;\r\n            const filterMobContainer = document.getElementById('FacetFiltersFormMobile');\r\n            filterMobContainer.querySelectorAll('.thb-filter').forEach(el => el.remove());\r\n        \r\n            if (!facets || facets.length === 0) {\r\n                return;\r\n            }\r\n        \r\n            const flattenedArray = await flattenCategories(categoryCollection);\r\n            const createMobFacetElement = (facet, index, facetOptionsHTML) => {\r\n                const facetMobElement = document.createElement('div');\r\n                facetMobElement.className = 'thb-filter js-filter';\r\n                facetMobElement.setAttribute('data-index', index + 1);\r\n        \r\n                const facetMobTitle = document.createElement('div');\r\n                facetMobTitle.className = 'thb-filter-title';\r\n                facetMobTitle.textContent = facet.label.replace(\"variant_\", \"\");\r\n        \r\n                const facetDropdown = document.createElement('div');\r\n                facetDropdown.className = 'thb-filter-dropdown';\r\n        \r\n                const facetInner = document.createElement('div');\r\n                facetInner.className = 'thb-filter-dropdown__inner';\r\n                facetInner.innerHTML = facetOptionsHTML;\r\n                facetDropdown.appendChild(facetInner);\r\n        \r\n                facetMobElement.appendChild(facetMobTitle);\r\n                facetMobElement.appendChild(facetDropdown);\r\n                filterMobContainer.appendChild(facetMobElement);\r\n            };\r\n        \r\n            facets.forEach((facet, index) => {\r\n                if (facet.label === 'collection_handle' || facet.label === 'ss_available' || facet.label === 'tags' || facet.label === 'ss_has_tags') {\r\n                    return;\r\n                }\r\n        \r\n                let facetOptionsHTML = '';\r\n        \r\n                if (facet.label === 'Category' && facet.type === 'list') {\r\n                    const matchingValues = facet.values.filter(value => flattenedArray.includes(value.label));\r\n                    if (matchingValues.length > 0) {\r\n                        facetOptionsHTML = createOptionsHTML(matchingValues, facet.field);\r\n                        createMobFacetElement(facet, index, facetOptionsHTML);\r\n                    }\r\n                } else if (facet.type === 'range' || facet.type === 'slider') {\r\n                    const minPrice = facet.range[0];\r\n                    const maxPrice = facet.range[1];\r\n                    const step = getStep(minPrice, maxPrice);\r\n                    facetOptionsHTML = `\r\n                        <div class=\"price_range price_range-${facet.field}\">\r\n                            <span class=\"price-highest\">The highest price is $${maxPrice}</span>\r\n                            <price-slider class=\"price_slider_wrapper\">\r\n                                <div class=\"slider\">\r\n                                    <div class=\"progress\"></div>\r\n                                </div>\r\n                                <div class=\"natori-range-input\">\r\n                                    <input type=\"range\" class=\"range-min\" min=\"${minPrice}\" max=\"${maxPrice}\" value=\"${minPrice}\" step=\"${step}\">\r\n                                    <input type=\"range\" class=\"range-max\" min=\"${minPrice}\" max=\"${maxPrice}\" value=\"${maxPrice}\" step=\"${step}\">\r\n                                </div>\r\n                                <div class=\"price_slider_amount natori-price-input\">\r\n                                      <div class=\"field\">\r\n                                          <span class=\"field-currency\">$</span>\r\n                                          <input type=\"number\" class=\"input-min\" value=\"${minPrice}\">\r\n                                      </div>\r\n                                      <div class=\"field\">\r\n                                          <span class=\"field-currency\">$</span>\r\n                                          <input type=\"number\" class=\"input-max\" value=\"${maxPrice}\">\r\n                                      </div>\r\n                                </div>\r\n                            </price-slider>\r\n                        </div>\r\n                    `;\r\n                    createMobFacetElement(facet, index, facetOptionsHTML);\r\n                } else if (facet.type === 'list' && facet.label !== 'Price') {\r\n                    facetOptionsHTML = createOptionsHTML(facet.values, facet.field);\r\n                    createMobFacetElement(facet, index, facetOptionsHTML);\r\n                }\r\n            });\r\n        \r\n            await attachFilterListeners();\r\n        }\r\n    \r\n        \r\n        async function createFilters(facets) {\r\n            pageLoad = false;\r\n            const filterContainer = document.querySelector('.facets__wrapper');\r\n            filterContainer.querySelectorAll('.thb-filter').forEach(el => el.remove());\r\n            const flattenedArray = await flattenCategories(categoryCollection);\r\n        \r\n            if (!facets || facets.length === 0) {\r\n                return;\r\n            }\r\n        \r\n            const createFacetElement = (facet, index, facetOptionsHTML) => {\r\n                const facetElement = document.createElement('details');\r\n                facetElement.className = 'thb-filter';\r\n                facetElement.setAttribute('data-index', index + 1);\r\n                facetElement.setAttribute('data-type', facet.field.replace(\"variant_\", \"\"));\r\n        \r\n                const facetSummary = document.createElement('summary');\r\n                facetSummary.className = 'thb-filter-title';\r\n                if (facet.type === 'range' || facet.type === 'slider') {\r\n                  facetSummary.textContent = facet.label.replace(\"variant_\", \"\");\r\n                  facetSummary.style.textTransform = 'capitalize';\r\n                }else{\r\n                  facetSummary.textContent = facet.label;\r\n                }\r\n        \r\n                const facetDropdown = document.createElement('div');\r\n                facetDropdown.className = 'thb-filter-dropdown';\r\n                const facetInner = document.createElement('div');\r\n                facetInner.className = 'thb-filter-dropdown__inner';\r\n                facetInner.innerHTML = facetOptionsHTML;\r\n                facetDropdown.appendChild(facetInner);\r\n        \r\n                if (facet.type !== 'range' && facet.type !== 'slider') {\r\n                    const facetFooter = document.createElement('div');\r\n                    facetFooter.className = 'thb-filter-dropdown__footer';\r\n                    facetFooter.innerHTML = `\r\n                        <span class=\"facets__selected no-js-hidden\">0 selected</span>\r\n                        <!--<a href=\"/collections/${collectionHandle}\" class=\"facets__reset\">Reset</a>-->\r\n                        <a href=\"#\" class=\"facets__reset\">Reset</a>\r\n                    `;\r\n                    facetDropdown.appendChild(facetFooter);\r\n                }\r\n        \r\n                facetElement.appendChild(facetSummary);\r\n                facetElement.appendChild(facetDropdown);\r\n                filterContainer.appendChild(facetElement);\r\n            };\r\n        \r\n            facets.forEach((facet, index) => {\r\n                if (facet.label === 'collection_handle' || facet.label === 'ss_available' || facet.label === 'tags' || facet.label === 'ss_has_tags') {\r\n                    return;\r\n                }\r\n        \r\n                let facetOptionsHTML = '';\r\n        \r\n                if (facet.label === 'Category' && facet.type === 'list') {\r\n                    const matchingValues = facet.values.filter(value => flattenedArray.includes(value.label));\r\n                    if (matchingValues.length > 0) {\r\n                        facetOptionsHTML = createOptionsHTML(matchingValues, facet.field);\r\n                        createFacetElement(facet, index, facetOptionsHTML);\r\n                    }\r\n                } else if (facet.type === 'range' || facet.type === 'slider') {\r\n                    const minPrice = facet.range[0];\r\n                    const maxPrice = facet.range[1];\r\n                    const step = getStep(minPrice, maxPrice);\r\n                    facetOptionsHTML = `\r\n                        <div class=\"price_range price_range-${facet.field}\">\r\n                            <span class=\"price-highest\">The highest price is $${maxPrice}</span>\r\n                            <price-slider class=\"price_slider_wrapper\">\r\n                                <div class=\"slider\">\r\n                                    <div class=\"progress\"></div>\r\n                                </div>\r\n                                <div class=\"natori-range-input\">\r\n                                    <input type=\"range\" class=\"range-min\" min=\"${minPrice}\" max=\"${maxPrice}\" value=\"${minPrice}\" step=\"${step}\">\r\n                                    <input type=\"range\" class=\"range-max\" min=\"${minPrice}\" max=\"${maxPrice}\" value=\"${maxPrice}\" step=\"${step}\">\r\n                                </div>\r\n                                <div class=\"price_slider_amount natori-price-input\">\r\n                                      <div class=\"field\">\r\n                                          <span class=\"field-currency\">$</span>\r\n                                          <input type=\"number\" class=\"input-min\" value=\"${minPrice}\">\r\n                                      </div>\r\n                                      <div class=\"field\">\r\n                                          <span class=\"field-currency\">$</span>\r\n                                          <input type=\"number\" class=\"input-max\" value=\"${maxPrice}\">\r\n                                      </div>\r\n                                </div>\r\n                            </price-slider>\r\n                        </div>\r\n                    `;\r\n                    createFacetElement(facet, index, facetOptionsHTML);\r\n                } else if (facet.type === 'list' && facet.label !== 'Price') {\r\n                    facetOptionsHTML = createOptionsHTML(facet.values, facet.field);\r\n                    createFacetElement(facet, index, facetOptionsHTML);\r\n                }\r\n            });\r\n        \r\n            await attachFilterListeners();\r\n        }\r\n    \r\n        \r\n        function createOptionsHTML(values, field) {\r\n            return `\r\n                <ul class=\"list-${field.replace(\"variant_\", \"\")}\">\r\n                    ${values.map((value, index) => `\r\n                        <li>\r\n                            <input type=\"checkbox\" name=\"${field}\" value=\"${value.label}\" id=\"Filter-${field}-${index}\">\r\n                            <label for=\"Filter-${field}-${index}\" class=\"facet-checkbox\" data-key=\"${value.value}\">\r\n                                ${value.label}\r\n                            </label>\r\n                            <span class=\"count\">(${value.count})</span>\r\n                        </li>\r\n                    `).join('')}\r\n                </ul>\r\n            `;\r\n        }\r\n    \r\n    \r\n        const attachFilterListeners = async () => {\r\n            const filterInputs = document.querySelectorAll('.facets__wrapper input[type=\"checkbox\"], .facets__wrapper input[type=\"text\"], #FacetFiltersFormMobile input[type=\"checkbox\"], #FacetFiltersFormMobile input[type=\"text\"]');\r\n            filterInputs.forEach(input => {\r\n                input.addEventListener('change', (event) => {\r\n                    event.preventDefault();\r\n                    applyFilters();\r\n                });\r\n            });\r\n        };    \r\n        const waitForYotpo = async () => {\r\n            return new Promise(resolve => {\r\n                if (yotpo?.userSettings) {\r\n                    resolve();\r\n                }\r\n            });\r\n        };\r\n        const sendYotpoRequest = async (prodId,prodUrl) => {\r\n            if (!yotpo?.userSettings) {\r\n                await waitForYotpo();\r\n            }\r\n            const yotpoKey = yotpo.appKey;\r\n            const yotpoVersion = yotpo.userSettings.version;\r\n            const data = {\r\n                methods: [\r\n                    {\r\n                        method: \"bottomline\",\r\n                        params: {\r\n                            pid: prodId,\r\n                            link: prodUrl,\r\n                            skip_average_score: true,\r\n                            widget_product_id: prodId \r\n                        }\r\n                    }\r\n                ],\r\n                app_key: yotpoKey,\r\n                is_mobile: false,\r\n                widget_version: yotpoVersion\r\n            };\r\n        \r\n            return fetch(`https://staticw2.yotpo.com/batch/app_key/${yotpoKey}/domain_key/${prodId}/widget/bottomline`, {\r\n                method: 'POST',\r\n                headers: {\r\n                    'Content-Type': 'application/json',\r\n                },\r\n                body: JSON.stringify(data),\r\n            })\r\n            .then(response => response.json())\r\n            .then(data => {\r\n                return data;\r\n            })\r\n            .catch(error => {\r\n                console.error('Error:', error);\r\n                throw error;\r\n            });\r\n        };\r\n      \r\n        const productReviews = async () => {\r\n            const productCards = document.querySelectorAll('product-card.product-card');\r\n            for (const productCard of productCards) {\r\n                const productBottomLine = productCard.querySelector('.product-card-info .productInfoRight .plpRatings .yotpo.bottomLine');\r\n                const prodUrl = productCard.querySelector('.product-featured-image-link')?.href;\r\n                if (productBottomLine && prodUrl) {\r\n                    const prodId = productBottomLine.getAttribute('data-product-id');\r\n                    try {\r\n                        const yotpoWidget = await sendYotpoRequest(prodId,prodUrl);\r\n                        if (yotpoWidget && yotpoWidget[0] && yotpoWidget[0].result) {\r\n                            const yotpoReviews = yotpoWidget[0].result;\r\n                            productBottomLine.innerHTML = yotpoReviews;\r\n                        }\r\n                    } catch (error) {\r\n                        console.error('Failed to load Yotpo reviews for product ID:', prodId, error);\r\n                    }\r\n                }\r\n            }\r\n            await updateReviewStars();\r\n        };\r\n    \r\n    \r\n        const fetchProductsAndFiltersInner = async (queryParams) => {\r\n            try {\r\n                const queryString = buildQueryString(queryParams);\r\n                const url = `${baseUrl}?${queryString}`;\r\n                const filterString = queryParams.filter;\r\n        \r\n                const response = await fetch(url);\r\n                if (!response.ok) {\r\n                    throw new Error('Network response was not ok ' + response.statusText);\r\n                }\r\n                \r\n                const data = await response.json();\r\n\r\n                window.FASTR_FRONTEND.searchSpringQueue.push(data);\r\n\r\n                console.log('SearchSpring results:', data);\r\n\r\n                // console.log('Success:', data);\r\n                if (data.results && data.results.length > 0 && data.pagination.totalResults > 0) {\r\n                    await createProductGrid(data.results, data.merchandising.content.inline, data.pagination);\r\n                    collectionContainer.classList.remove('ss-hide');\r\n                    productGridContainer.removeAttribute('style');\r\n                    await createFilters(data.facets);\r\n                    await createMobFilters(data.facets);\r\n                    await updateFacetValues(data.facets);\r\n                    await createSortingOptions(data.sorting);\r\n                    await createMobSortingOptions(data.sorting);\r\n                    await updateColorValue();\r\n                    await createAppliedFilters(filterString);\r\n                    await bindFilterListeners();\r\n                    productReviews();\r\n                    await priceRangeSlider();\r\n                    await removeAllFilters();\r\n                    await facetReset();\r\n                } else {\r\n                  productGridContainer.innerHTML = noResults;\r\n                  // If the empty results are caused by active filters, keep the filter bar\r\n                  // visible so the user can see what is applied and clear it.\r\n                  const storedFiltersForEmpty = JSON.parse(sessionStorage.getItem('natoriFilters') || '{}');\r\n                  const ignoredKeys = new Set(['collection_handle', 'ss_available', 'tags', 'ss_has_tags']);\r\n                  const hasActiveFilters = Object.keys(storedFiltersForEmpty).some(key => {\r\n                    if (ignoredKeys.has(key)) return false;\r\n                    const val = storedFiltersForEmpty[key];\r\n                    return Array.isArray(val) ? val.length > 0 : Boolean(val);\r\n                  });\r\n                  if (hasActiveFilters) {\r\n                    await createAppliedFilters(queryParams.filter);\r\n                    await bindFilterListeners();\r\n                    await removeAllFilters();\r\n                  } else {\r\n                    const filtersData = document.querySelectorAll('.facets-desktop-container');\r\n                    filtersData.forEach(function(filterditems) {\r\n                      filterditems.style.display = 'none';\r\n                    });\r\n                    const filtersMobile = document.querySelectorAll('.facets-mobile-container');\r\n                    filtersMobile.forEach(function(filtermitems) {\r\n                      filtermitems.style.display = 'none';\r\n                    });\r\n                  }\r\n                }\r\n              \r\n            } catch (error) {\r\n                console.error('There was a problem with the fetch operation:', error);\r\n                await hideSpinner();\r\n            }\r\n        };\r\n\r\n        const fetchProductsAndFilters = debounce(fetchProductsAndFiltersInner, 100);\r\n    \r\n        const createMobSortingOptions = async (sortingData) => {\r\n        \r\n            const oldSort = document.querySelector('.thb-filter-sort-count.thb-filter');\r\n            if (oldSort) {\r\n                oldSort.remove();\r\n            }\r\n    \r\n            const sortContainer = document.createElement('div');\r\n            sortContainer.classList = \"thb-filter-sort-count thb-filter\";\r\n        \r\n            const sortFilter = document.createElement('div');\r\n            sortFilter.classList = \"thb-filter-sort\";\r\n        \r\n            const sortTitle = document.createElement('div');\r\n            sortTitle.classList = \"thb-filter-title\";\r\n            sortTitle.textContent = \"Sort by\";\r\n        \r\n            const sortSelect = document.createElement('div');\r\n            sortSelect.classList = \"select\";\r\n        \r\n            const sortingSelect = document.createElement('select');\r\n            sortingSelect.id = 'SortBy';\r\n            sortingSelect.style.minWidth = \"160px\";\r\n        \r\n            sortingData.options.forEach(option => {\r\n                const sortOption = document.createElement('option');\r\n                sortOption.value = `${option.field}-${option.direction}`;\r\n                sortOption.textContent = option.label;\r\n                if (option.active) {\r\n                    sortOption.selected = true;\r\n                }\r\n                sortingSelect.appendChild(sortOption);\r\n            });\r\n        \r\n            const sortLabel = document.createElement('label');\r\n            sortLabel.setAttribute('for', 'SortByMobile');\r\n            sortLabel.classList.add('visually-hidden');\r\n            sortLabel.textContent = 'Sort by';\r\n        \r\n            sortSelect.appendChild(sortLabel);\r\n            sortSelect.appendChild(sortingSelect);\r\n        \r\n            sortFilter.appendChild(sortTitle);\r\n            sortFilter.appendChild(sortSelect);\r\n        \r\n            sortContainer.appendChild(sortFilter);\r\n        \r\n            const filterMobContainer = document.getElementById('FacetFiltersFormMobile');\r\n            filterMobContainer.appendChild(sortContainer);\r\n            await bindMobSortingfunction();\r\n        };\r\n    \r\n    \r\n        const createSortingOptions = async (sortingData) => {\r\n            const sortingSelect = document.getElementById('SortBy');\r\n            sortingSelect.style.minWidth = \"160px\";\r\n            sortingSelect.innerHTML = '';\r\n        \r\n            sortingData.options.forEach(option => {\r\n                const sortOption = document.createElement('option');\r\n                sortOption.value = `${option.field}-${option.direction}`;\r\n                sortOption.textContent = option.label;\r\n                if (option.active) {\r\n                    sortOption.selected = true;\r\n                }\r\n                sortingSelect.appendChild(sortOption);\r\n            });\r\n        };\r\n    \r\n    \r\n        const createAppliedFilters = async (filterString) => {\r\n            if (!filterString || typeof filterString !== 'object') return;\r\n        \r\n            const filterSelectElements = document.querySelectorAll('facet-remove.active-facets');\r\n            if (!filterSelectElements.length) return;\r\n            let storedFilters = JSON.parse(sessionStorage.getItem('natoriFilters') || '{}');\r\n            const updatedFilters = { ...storedFilters, ...filterString };\r\n            sessionStorage.setItem('natoriFilters', JSON.stringify(updatedFilters));\r\n        \r\n            filterSelectElements.forEach(filterSelect => {\r\n                filterSelect.querySelectorAll('.active-facets__button').forEach(el => el.remove());\r\n                Object.keys(updatedFilters).forEach(key => {\r\n                    const filterValue = updatedFilters[key];\r\n        \r\n                    if (!filterValue || filterValue.length === 0 || key === \"collection_handle\" || key === \"ss_available\" || key === \"tags\" || key === 'ss_has_tags') return;\r\n                    if(key == 'variant_price'){\r\n                        const lowPrices = {};\r\n                        const highPrices = {};\r\n                        if (typeof filterValue === 'object' && filterValue !== null && 'low' in filterValue && 'high' in filterValue) {\r\n                            lowPrices[key] = filterValue.low;\r\n                            highPrices[key] = filterValue.high;\r\n                        }\r\n                        const currentUrl = new URL(window.location.href);\r\n                        const filterLink = document.createElement('a');\r\n                        filterLink.href = currentUrl.toString();\r\n                        filterLink.classList.add('active-facets__button');\r\n                        filterLink.innerHTML = `\r\n                            Price range : ${lowPrices[key] || 'N/A'} - ${highPrices[key] || 'N/A'}\r\n                            <span>\r\n                                <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                                    <path d=\"M6.4731 6.875C6.60027 6.875 6.72968 6.82592 6.82561 6.72775C7.01972 6.53364 7.01972 6.21682 6.82561 6.02049L4.67929 3.87416L6.82561 1.72784C7.01972 1.53373 7.01972 1.21692 6.82561 1.02058C6.63151 0.826473 6.31469 0.826473 6.11835 1.02058L3.97203 3.1669L1.82794 1.02504C1.63383 0.830936 1.31701 0.830936 1.12068 1.02504C0.926571 1.21915 0.926571 1.53596 1.12068 1.7323L3.267 3.87863L1.12291 6.02049C0.928802 6.21459 0.928802 6.53141 1.12291 6.72775C1.22108 6.82592 1.34825 6.875 1.47542 6.875C1.6026 6.875 1.732 6.82592 1.82794 6.72775L3.97426 4.58142L6.12058 6.72775C6.21652 6.82592 6.34593 6.875 6.4731 6.875Z\" fill=\"var(--color-accent)\"></path>\r\n                                </svg>\r\n                            </span>\r\n                        `;\r\n    \r\n                        const removeButton = filterSelect.querySelector('a.active-facets__button-remove');\r\n                        if (removeButton) {\r\n                            filterSelect.insertBefore(filterLink, removeButton);\r\n                        } else {\r\n                            filterSelect.appendChild(filterLink);\r\n                        }\r\n                    } else {\r\n                        if (Array.isArray(filterValue)) {\r\n                            filterValue.forEach(value => {\r\n                                appendFilterElement(key, value, filterSelect, updatedFilters);\r\n                            });\r\n                        } else {\r\n                            appendFilterElement(key, filterValue, filterSelect, updatedFilters);\r\n                        }\r\n                    }\r\n                });\r\n            });\r\n        };\r\n    \r\n        const appendFilterElement = async(key, value, filterSelect, updatedFilters) => {\r\n            const filterLink = document.createElement('a');\r\n            filterLink.href = generateFilterUrl(key, updatedFilters);\r\n            filterLink.classList.add('active-facets__button');\r\n            \r\n            if (key === 'variant_color') {\r\n                filterLink.classList.add('active-facets__button--color');\r\n                const colorKey = value.trim();\r\n                \r\n                if (colorKey) {\r\n                    const styleValue = await fetchColorValue(colorKey);\r\n                    const styles = styleValue.split(';').filter(Boolean);\r\n    \r\n                    styles.forEach(style => {\r\n                        const [property, value] = style.split(':').map(s => s.trim());\r\n                        if (property && value) {\r\n                            filterLink.style.setProperty(property, value);\r\n                        }\r\n                    });\r\n                } else {\r\n                    filterLink.style.setProperty('--bg-color', `var(--bg-body)`);\r\n                    filterLink.style.setProperty('--option-color-image', 'url(false)');\r\n                }\r\n            }\r\n    \r\n        \r\n            filterLink.innerHTML = `\r\n                ${value}\r\n                <span>\r\n                  <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n                    <path d=\"M6.4731 6.875C6.60027 6.875 6.72968 6.82592 6.82561 6.72775C7.01972 6.53364 7.01972 6.21682 6.82561 6.02049L4.67929 3.87416L6.82561 1.72784C7.01972 1.53373 7.01972 1.21692 6.82561 1.02058C6.63151 0.826473 6.31469 0.826473 6.11835 1.02058L3.97203 3.1669L1.82794 1.02504C1.63383 0.830936 1.31701 0.830936 1.12068 1.02504C0.926571 1.21915 0.926571 1.53596 1.12068 1.7323L3.267 3.87863L1.12291 6.02049C0.928802 6.21459 0.928802 6.53141 1.12291 6.72775C1.22108 6.82592 1.34825 6.875 1.47542 6.875C1.6026 6.875 1.732 6.82592 1.82794 6.72775L3.97426 4.58142L6.12058 6.72775C6.21652 6.82592 6.34593 6.875 6.4731 6.875Z\" fill=\"var(--color-accent)\"></path>\r\n                  </svg>\r\n                </span>\r\n            `;\r\n        \r\n            const removeButton = filterSelect.querySelector('a.active-facets__button-remove');\r\n            filterSelect.insertBefore(filterLink, removeButton);\r\n        };\r\n        \r\n        const generateFilterUrl = async (currentKey, updatedFilters) => {\r\n            const currentUrl = new URL(window.location.href);\r\n            currentUrl.searchParams.delete(currentKey);\r\n            Object.keys(updatedFilters).forEach(key => {\r\n                if (updatedFilters[key]) {\r\n                  if(key !== \"collection_handle\" && key !== \"ss_available\" && key !== \"tags\" && key !== \"ss_has_tags\" ){\r\n                    if (Array.isArray(updatedFilters[key])) {\r\n                        updatedFilters[key].forEach(value => {\r\n                            currentUrl.searchParams.append(key, value);\r\n                        });\r\n                    } else {\r\n                        currentUrl.searchParams.set(key, updatedFilters[key]);\r\n                    }\r\n                  }\r\n                }\r\n            });\r\n            return currentUrl.toString();\r\n        };\r\n    \r\n        const  handleProductCardHover = async () => {\r\n            const productCards = document.querySelectorAll('product-card.product-card');\r\n        \r\n            productCards.forEach((productCard) => {\r\n                const swatches = productCard.querySelector('.product-card-swatches');\r\n                const image = productCard.querySelector('.product-featured-image-link .product-primary-image');\r\n                const href = productCard.querySelector('.product-featured-image-link');\r\n                const secondary = productCard.querySelector('.product-featured-image-link .product-secondary-image');\r\n                const swatchList = swatches ? swatches.querySelectorAll('.product-card-swatch') : [];\r\n        \r\n                swatchList.forEach((swatch) => {  \r\n                    swatch.addEventListener('mouseover', () => {   \r\n                      swatchList.forEach((el) => {\r\n                          el.classList.remove('active');\r\n                      });\r\n                      swatch.classList.add('active');\r\n                      const primaryDataset = swatch.getAttribute('data-srcset');\r\n                      const secondaryDataset = swatch.getAttribute('data-srcset-2');\r\n                      const urlDataset = swatch.getAttribute('data-href');\r\n                        if(urlDataset){\r\n                          href.setAttribute('href', urlDataset);\r\n                        }\r\n                        if (image) {   \r\n                            if (primaryDataset) {\r\n                                image.setAttribute('srcset', primaryDataset);\r\n                            }\r\n                            if (secondary) {\r\n                                if (secondaryDataset) {\r\n                                    secondary.setAttribute('srcset', secondaryDataset);\r\n                                }\r\n                            }\r\n                        }\r\n                    });\r\n                });\r\n            });\r\n        };\r\n    \r\n        const updateFeatureImages = async () => {\r\n            const featuredImages = document.querySelectorAll('figure.product-featured-image');\r\n            featuredImages.forEach((figure) => {\r\n                const secondaryImage = figure.querySelector('img.product-secondary-image');\r\n                if (!secondaryImage) {\r\n                    figure.classList.remove('thb-hover');\r\n                } else {\r\n                    figure.classList.add('thb-hover');\r\n                }\r\n            });\r\n        };\r\n    \r\n        const applyFilters = async () => {\r\n            document.querySelectorAll('.facets__form details.thb-filter').forEach((detailElement) => {\r\n                detailElement.removeAttribute('open');\r\n            });\r\n            const filterSidebar = document.querySelector('facetfiltersformmobile .facet-drawer.side-panel');\r\n            if (filterSidebar) {\r\n                filterSidebar.classList.remove('active');\r\n            }\r\n            const body = document.querySelector('body');\r\n            if (body) {\r\n                body.classList.remove('open-cc');\r\n            }\r\n            const filterInputs = document.querySelectorAll('.facets__wrapper input[type=\"checkbox\"]:checked, .facets__wrapper input[type=\"text\"], #FacetFiltersFormMobile input[type=\"checkbox\"]:checked, #FacetFiltersFormMobile input[type=\"text\"]');\r\n            const filterParams = { ...queryParams.filter };\r\n            filterInputs.forEach(input => {\r\n                const name = input.name;\r\n                const value = input.value;\r\n            \r\n                if (!filterParams[name]) {\r\n                    filterParams[name] = input.type === 'checkbox' ? [] : '';\r\n                }\r\n            \r\n                if (input.type === 'checkbox') {\r\n                    if (Array.isArray(filterParams[name])) {\r\n                        if (!filterParams[name].includes(value)) {\r\n                            filterParams[name].push(value);\r\n                        }\r\n                    } else {\r\n                        filterParams[name] = [value];\r\n                    }\r\n                } else if (input.type === 'text') {\r\n                    filterParams[name] = value;\r\n                }\r\n            });\r\n            \r\n            queryParams.filter = filterParams;\r\n            queryParams.page = 1;\r\n        \r\n            // Update session storage with the new filters\r\n            sessionStorage.setItem('natoriFilters', JSON.stringify(filterParams));\r\n        \r\n            fetchProductsAndFilters(queryParams);\r\n        };\r\n        \r\n    \r\n        const remClass = async () => {\r\n            const filterSidebar = document.querySelector('facetfiltersformmobile .facet-drawer.side-panel');\r\n            if (filterSidebar) {\r\n                filterSidebar.classList.remove('active');\r\n            }\r\n            const body = document.querySelector('body');\r\n            if (body) {\r\n                body.classList.remove('open-cc');\r\n            }\r\n            const remLoadingGird = document.getElementById('product-grid');\r\n            if(remLoadingGird){\r\n                remLoadingGird.classList.remove('loading');\r\n            }\r\n            const removeLoading = document.querySelectorAll('span.thb-filter-count.mobile-filter-count.body-font, .facets-mobile-container .thb-filter-count');\r\n            removeLoading.forEach(remEle => {\r\n                remEle.classList.remove('loading');\r\n            });\r\n        };        \r\n    \r\n    \r\n        document.getElementById('SortBy').addEventListener('change', async function(event) {\r\n            const [field, direction] = event.target.value.split('-');\r\n            queryParams.sort = { [field]: direction };\r\n            const updatedSortString = { [field]: direction };\r\n            sessionStorage.setItem('natoriSortData', JSON.stringify(updatedSortString));\r\n            queryParams.page = 1;\r\n            fetchProductsAndFilters(queryParams);\r\n        });\r\n        \r\n        async function updateQueryParams(queryParams) {\r\n            let storedFilters = JSON.parse(sessionStorage.getItem('natoriFilters') || '{}');\r\n            let storedSort = JSON.parse(sessionStorage.getItem('natoriSortData') || '{}');\r\n        \r\n            if (Object.keys(storedFilters).length > 0) {\r\n                queryParams.filter = {\r\n                    ...queryParams.filter,\r\n                    ...storedFilters\r\n                };\r\n            }\r\n        \r\n            if (Object.keys(storedSort).length > 0) {\r\n                queryParams.sort = storedSort;\r\n            }\r\n        \r\n            return queryParams;\r\n        }        \r\n    \r\n        const bindMobSortingfunction = async () => {\r\n            const sortByElement = document.querySelector('#FacetFiltersFormMobile .thb-filter-sort #SortBy');\r\n            if (sortByElement) {\r\n                sortByElement.addEventListener('change', function(event) {\r\n                    const filterSidebar = document.querySelector('facetfiltersformmobile .facet-drawer.side-panel');\r\n                    if (filterSidebar) {\r\n                        filterSidebar.classList.remove('active');\r\n                    }\r\n                    const body = document.querySelector('body');\r\n                    if (body) {\r\n                        body.classList.remove('open-cc');\r\n                    }\r\n                    const [field, direction] = event.target.value.split('-');\r\n                    queryParams.sort = { [field]: direction };\r\n                    const updatedSortString = { [field]: direction };\r\n                    sessionStorage.setItem('natoriSortData', JSON.stringify(updatedSortString));\r\n                    queryParams.page = 1;\r\n                    fetchProductsAndFilters(queryParams);\r\n                });\r\n            } else {\r\n                console.error('Sorting element not found. Unable to bind event listener.');\r\n            }\r\n        };\r\n        \r\n    \r\n    \r\n        const bindFilterListeners = async () => {\r\n            const removeFilterButtons = document.querySelectorAll('facet-remove.active-facets .active-facets__button');\r\n            removeFilterButtons.forEach(remBtn => {\r\n                remBtn.addEventListener('click', async (event) => {\r\n                    event.preventDefault();\r\n        \r\n                    const valueText = Array.from(remBtn.childNodes).filter(node => node.nodeType === Node.TEXT_NODE).map(textNode => textNode.textContent.trim()).join(' ');\r\n                    const normalizedValueText = valueText.trim();  \r\n        \r\n                    const updatedFilterString = Object.entries(queryParams.filter).reduce((acc, [key, values]) => {\r\n                        if (Array.isArray(values)) {\r\n                            const filteredValues = values.map(value => value.trim()).filter(value => value !== normalizedValueText);\r\n                            if (filteredValues.length > 0) {\r\n                                acc[key] = filteredValues;\r\n                            }\r\n                        } else {\r\n                            acc[key] = values;\r\n                        }\r\n                        return acc;\r\n                    }, {});\r\n        \r\n                    if (normalizedValueText.includes('Price range :')) {\r\n                        delete updatedFilterString['variant_price'];\r\n                    }\r\n        \r\n                    queryParams.filter = updatedFilterString;\r\n        \r\n                    // Update session storage with the new filters\r\n                    sessionStorage.setItem('natoriFilters', JSON.stringify(updatedFilterString));\r\n                    fetchProductsAndFilters(queryParams);\r\n                });\r\n            });\r\n        };\r\n        \r\n    \r\n        const removeAllFilters = async () => {\r\n            const removeAllFilterButtons = document.querySelectorAll('.active-facets__button-remove');\r\n        \r\n            if (removeAllFilterButtons.length > 0) {\r\n                removeAllFilterButtons.forEach(button => {\r\n                    button.addEventListener('click', async (event) => {\r\n                        event.preventDefault();\r\n        \r\n                        const updatedFilterString = {};\r\n                        queryParams.filter = updatedFilterString;\r\n                        pageLoad = true;\r\n        \r\n                        // Clear filters from session storage\r\n                        sessionStorage.setItem('natoriFilters', JSON.stringify(updatedFilterString));\r\n        \r\n                        await fetchProductsAndFilters(queryParams);\r\n                    });\r\n                });\r\n            } else {\r\n                console.warn('Remove all filter buttons not found.');\r\n            }\r\n        };\r\n        \r\n    \r\n        const updateReviewStars = async () => {\r\n            const productInfoRights = document.querySelectorAll('.collection-page #ProductGridContainer #product-grid li.column .productInfosection .productInfoRight');\r\n        \r\n            productInfoRights.forEach(productInfoRight => {\r\n                const plpRatings = productInfoRight.querySelector('.plpRatings');\r\n                if (plpRatings) {\r\n                    const yotpoStar = plpRatings.querySelector('.yotpo .yotpo-bottomline .yotpo-icon-star');\r\n                    if (!yotpoStar) {\r\n                        plpRatings.remove();\r\n                    }\r\n                }\r\n            });\r\n        };\r\n    \r\n          \r\n        const initializeCustomSwatches = async () => {\r\n            if (abortController) {\r\n                abortController.abort();\r\n            }\r\n            abortController = new AbortController();\r\n        \r\n            const fetchProductDetails = async (multipleIds) => {\r\n                const storefrontAccessToken = '4ab0ea4a4961a53e2dcd92763fbb7674';\r\n                const url = `https://${shopUrl}/api/2024-10/graphql.json`;\r\n            \r\n                const productQuery = `\r\n                    query Products($ids: [ID!]!, $country: CountryCode) @inContext(country: $country) {\r\n                        nodes(ids: $ids) {\r\n                            ... on Product {\r\n                                id\r\n                                title\r\n                                handle\r\n                                discontinued: metafield(namespace: \"custom\", key: \"discontinued\") {\r\n                                    value\r\n                                    type\r\n                                }\r\n                                totalInventory\r\n                                priceRange {\r\n                                    maxVariantPrice {\r\n                                        amount\r\n                                        currencyCode\r\n                                    }\r\n                                    minVariantPrice {\r\n                                        amount\r\n                                        currencyCode\r\n                                    }\r\n                                }\r\n                                variantSwatchColor: metafield(namespace: \"custom\" key: \"variant_swatch_color\") {\r\n                                    value\r\n                                    type\r\n                                }\r\n                                images(first: 2) {\r\n                                    edges {\r\n                                        node {\r\n                                            src\r\n                                            altText\r\n                                        }\r\n                                    }\r\n                                }\r\n                                variants(first: 100) {\r\n                                    edges {\r\n                                        node {\r\n                                            id\r\n                                            title\r\n                                            quantityAvailable\r\n                                            compareAtPrice {\r\n                                                amount\r\n                                                currencyCode\r\n                                            }\r\n                                            selectedOptions {\r\n                                                name\r\n                                                value\r\n                                            }\r\n                                            image {\r\n                                                src\r\n                                                altText\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                `;\r\n              \r\n                try {\r\n                    const response = await fetch(url, {\r\n                        method: \"POST\",\r\n                        headers: {\r\n                            'X-Shopify-Storefront-Access-Token': storefrontAccessToken,\r\n                            'Content-Type': 'application/json'\r\n                        },\r\n                        body: JSON.stringify({\r\n                            query: productQuery,\r\n                            variables: {\r\n                                ids: multipleIds,\r\n                                country: Shopify.country\r\n                            }\r\n                        }),\r\n                        signal: abortController.signal\r\n                    });\r\n            \r\n                    const { data, errors } = await response.json();\r\n            \r\n                    if (errors) {\r\n                        console.error('GraphQL Errors:', errors);\r\n                        return null;\r\n                    }\r\n\r\n                    if (data && data.nodes) {\r\n                        const productDetails = data.nodes.map(product => {\r\n                            if (product) {\r\n                                const isAvailable = product.totalInventory > 0;\r\n                        \r\n                                return {\r\n                                    ...product,\r\n                                    available: isAvailable\r\n                                };\r\n                            } else {\r\n                                console.warn(\"Encountered a null product.\");\r\n                                return null;\r\n                            }\r\n                        }).filter(Boolean);\r\n            \r\n                        return productDetails;\r\n                    } else {\r\n                        console.warn(\"No product data found.\");\r\n                        return null;\r\n                    }\r\n                } catch (error) {\r\n                    if (error.name === 'AbortError') {\r\n                        console.warn(\"Request aborted without a reason.\");\r\n                        return null;\r\n                    } else {\r\n                        console.error(\"Error fetching product:\", error);\r\n                        throw error;\r\n                    }\r\n                }\r\n            };\r\n\r\n        \r\n            const processProductDetails = async ( product, keyArray, valArray, featuredImageId, productDataElements, productId, primaryImagesrc, secondaryImagesrc, mainHandle, uniqueColors, counter, productAvailable ) => {\r\n                if (product && product.variants && product.variants.edges) {\r\n                    let storedVariants = JSON.parse(sessionStorage.getItem('natoriCustomVariants') || '{}');\r\n                    let customVarList = storedVariants[productId]?.variants || [];\r\n                    for (const edge of product.variants.edges) {\r\n                        const variant = edge.node;\r\n                        const productQuan = productAvailable;\r\n                        if (variant) {\r\n                            let variantCustomId = parseInt(variant.id.split(\"/\").pop());\r\n                            if (!customVarList.includes(variantCustomId)) {\r\n                                for (const option of variant.selectedOptions) {\r\n                                    if (option.name.toLowerCase() === \"color\" || option.name.toLowerCase() === \"colour\" || option.name.toLowerCase() === \"couleur\") {\r\n                                        const key = option.value;\r\n                                        if (!uniqueColors.has(key) && counter.count < 6) {\r\n                                            uniqueColors.set(key, option);\r\n                                            if (option.value.length > 0) {\r\n                                                let swatchHtml = \"\";\r\n                                                let active = \"\";\r\n                                                let variantImage = \"\";\r\n                                                let variantUrl = \"\";\r\n                                                let srcset = \"\";\r\n                                                let variantId = parseInt(variant.id.split(\"/\").pop());\r\n        \r\n                                                if (variant) {\r\n                                                    if (variantId === featuredImageId) {\r\n                                                        active = \"active\";\r\n                                                    }\r\n                                                    if (primaryImagesrc) {\r\n                                                        variantImage = primaryImagesrc;\r\n                                                    }\r\n                                                    // variantUrl = `/products/${product.handle}?variant=${variantId}`;\r\n                                                    variantUrl = `/products/${product.handle}`;\r\n                                                }\r\n                                                const imageSizes = \"{{ sizes }}\".split(\",\");\r\n        \r\n                                                if (variantImage) {\r\n                                                    imageSizes.forEach((size) => {\r\n                                                        const sizeArray = size.split(\"x\");\r\n                                                        const sizeX = sizeArray[0] + \"x\" + (sizeArray[1] !== \"0\" ? sizeArray[1] : \"\");\r\n                                                        srcset += `${variantImage.replace(\".jpg\", `_${sizeX}.jpg`)} ${sizeArray[0]}w, `;\r\n                                                    });\r\n                                                }\r\n                                                let colorValue = key.toLowerCase().trim();\r\n                                                const customColorIndex = keyArray.indexOf(colorValue);\r\n                                                if (customColorIndex > -1) {\r\n                                                    colorValue = valArray[customColorIndex];\r\n                                                }\r\n                                                let bgValue = false;\r\n                                                const swatchColor = product.variantSwatchColor?.value;\r\n                                                if (swatchColor) {\r\n                                                    const swatchParts = swatchColor.split('-');\r\n                                                    const lastPart = swatchParts[swatchParts.length - 1].trim();\r\n                                                    if (lastPart.includes('#')) {\r\n                                                        colorValue = lastPart;\r\n                                                    } else {\r\n                                                        bgValue = lastPart;\r\n                                                        colorValue = \"var(--bg-body)\";\r\n                                                    }\r\n                                                } else {\r\n                                                    if (colorValue.includes(\".\")) {\r\n                                                        bgValue = colorValue;\r\n                                                        colorValue = \"var(--bg-body)\";\r\n                                                    }\r\n                                                }\r\n                                                const shopDomain = window.location.hostname;\r\n                                                const bgImageUrl = bgValue ? `--option-color-image: url('//${shopDomain}/cdn/shop/files/${bgValue}');` : \"\";\r\n                                                swatchHtml += `\r\n                                                    <div class=\"product-card-swatch ${active}\"\r\n                                                        style=\"--option-color: ${colorValue}; ${bgImageUrl}\" \r\n                                                        data-srcset-2=\"${secondaryImagesrc}\" \r\n                                                        data-srcset=\"${variantImage}\"\r\n                                                        data-href=\"${variantUrl}\"\r\n                                                        data-quan=\"${productQuan}\">\r\n                                                        <span class=\"visually-hidden\">${key}</span>\r\n                                                    </div>\r\n                                                `;\r\n                                                if (productDataElements) {\r\n                                                    const existingSwatches = productDataElements.querySelectorAll('.product-card-swatch');\r\n                                                    const isSwatchExists = existingSwatches.length > 0 && productDataElements.querySelector(`.product-card-swatch[data-href=\"${variantUrl}\"]`);\r\n                                                    if (!isSwatchExists && existingSwatches.length < 6) {\r\n                                                        productDataElements.insertAdjacentHTML(\"beforeend\", swatchHtml);\r\n                                                        counter.count++;\r\n                                                    }\r\n                                                }\r\n\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                }\r\n                                if (counter.count >= 6) break;\r\n                                customVarList.push(variantCustomId);\r\n                            }\r\n                        }\r\n                    }\r\n        \r\n                    storedVariants[productId] = { variants: customVarList };\r\n                    sessionStorage.setItem('natoriCustomVariants', JSON.stringify(storedVariants));\r\n        \r\n                    if (uniqueColors.size > 5 && counter.count >= 5) {\r\n                        const moreButtonHtml = `<div class=\"morebtn\"><a href=\"${mainHandle}\" intellisuggest=\"\" ss-ps=\"\">+ More</a></div>`;\r\n                        productDataElements.insertAdjacentHTML(\"beforeend\", moreButtonHtml);\r\n                    }\r\n                }\r\n            };\r\n        \r\n            const handleCustomSwatches = async () => {\r\n                sessionStorage.removeItem('natoriCustomVariants');\r\n                const productCards = document.querySelectorAll(\".product-card-swatch\");\r\n                productCards.forEach(card => {\r\n                    const prodOldSwatches = card.querySelector('.product-card-swatches');\r\n                    if (prodOldSwatches) {\r\n                        prodOldSwatches.innerHTML = '';\r\n                    }\r\n                });\r\n                const productIds = Array.from(productCards).map(\r\n                    (card) => card.dataset.productId\r\n                );\r\n                for (const productId of productIds) {\r\n                    const settings = window[`settings_${productId}`];\r\n                    const color_settings = window[`settings`];\r\n        \r\n                    const customColorsArray = color_settings.color_swatches.split(',').map(color => {\r\n                        const [key, value] = color.split(':').map(part => part.trim());\r\n                        return { key: key.toLowerCase(), value: value };\r\n                    });\r\n        \r\n                    const keyArray = customColorsArray.map((color) => color.key);\r\n                    const valArray = customColorsArray.map((color) => color.value);\r\n                    const multipleIds = settings.product_gids;\r\n                    const productDetails = await fetchProductDetails(multipleIds);\r\n                    let uniqueColors = new Map();\r\n                    let counter = { count: 0 };\r\n\r\n                    const secondaryImageSrc = productDetails .filter(pd => pd.id === `gid://shopify/Product/${productId}`) .flatMap(pd => pd.images.edges) .map(edge => edge.node.src)[1];\r\n                    const prodCard = document.querySelector(`product-card.product-card:has(.product-card-swatch[data-product-id='${productId}'])`);\r\n                    if(secondaryImageSrc){\r\n                        const prodImage = prodCard.querySelector('figure.product-featured-image img.product-primary-image');\r\n                        const featuredImage = prodCard.querySelector('figure.product-featured-image');\r\n                        const prodImageContainer = prodCard.querySelector('figure.product-featured-image .product-featured-image-link');\r\n                        const prodSecondaryImage = document.createElement('img');\r\n                        prodSecondaryImage.src = secondaryImageSrc;\r\n                        prodSecondaryImage.alt = prodImage.alt;\r\n                        prodSecondaryImage.style.width = '100%';\r\n                        prodSecondaryImage.style.height = '100%';\r\n                        prodSecondaryImage.classList.add('product-secondary-image');\r\n                        prodImageContainer.insertBefore(prodSecondaryImage, prodImage);\r\n                        featuredImage.classList.add('thb-hover');\r\n                    }\r\n\r\n\r\n                    const minPrice = Math.min(...productDetails.filter(pd => pd.totalInventory > 0).map(pd => pd.priceRange.minVariantPrice.amount));\r\n                    const maxPrice = Math.max(...productDetails.filter(pd => pd.totalInventory > 0).map(pd => pd.priceRange.maxVariantPrice.amount));\r\n                    const compareAtPrices = productDetails .filter(pd => pd.totalInventory > 0) .flatMap(pd => pd.variants.edges.map(edge => edge.node?.compareAtPrice?.amount).filter(amount => amount != null));\r\n                    const CompareAtPrice = compareAtPrices.length > 0 ? Math.min(...compareAtPrices) : '';\r\n                    \r\n                    const prodPrices = prodCard.querySelector('.product-card-info .productInfoRight span.price');\r\n                    let priceContainer = '';\r\n                    let comparePriceContainer = '';\r\n                    \r\n                    if (minPrice !== maxPrice) {\r\n                        priceContainer = `<ins><span class=\"amount\">${moneyFormat}${formatPrice(minPrice)} - ${moneyFormat}${formatPrice(maxPrice)}</span></ins>`;\r\n                    } else {\r\n                         priceContainer = `<ins><span class=\"amount\">${moneyFormat}${formatPrice(maxPrice)}</span></ins>`;\r\n                    }\r\n                    \r\n                    if (CompareAtPrice > minPrice) {\r\n                        comparePriceContainer = `<del><span class=\"amount\">${moneyFormat}${formatPrice(CompareAtPrice)}</span></del>`;\r\n                    }\r\n                    \r\n                    prodPrices.innerHTML = comparePriceContainer + priceContainer;\r\n                    prodCard.classList.remove('hide-price');\r\n        \r\n                    for (const productDetail of productDetails) {\r\n                        if (abortController.signal.aborted) {\r\n                            return;\r\n                        }\r\n                        let productAvailable;\r\n                        if (productDetail && productDetail.available !== undefined) {\r\n                            productAvailable = productDetail.available;\r\n                        }\r\n                        let discontinued;\r\n                        if (productDetail && productDetail.discontinued !== undefined) {\r\n                            discontinued = productDetail.discontinued?.value === \"true\";\r\n                        }\r\n                        if (productDetail && !discontinued && productAvailable) {\r\n                            let primaryImagesrc = \"\";\r\n                            let secondaryImagesrc = \"\";\r\n                            if (productDetail && productDetail.images && productDetail.images.edges) {\r\n                                const images = productDetail.images.edges.map((edge) => edge.node);\r\n                                images.forEach((image, index) => {\r\n                                    if (index === 0) {\r\n                                        primaryImagesrc = image.src;\r\n                                    }\r\n                                    if (index === 1) {\r\n                                        secondaryImagesrc = image.src;\r\n                                    }\r\n                                });\r\n                            }\r\n                            await processProductDetails(\r\n                                productDetail,\r\n                                keyArray,\r\n                                valArray,\r\n                                settings.featured_image_id,\r\n                                document.getElementById(\"swatch_section_\" + productId),\r\n                                productId,\r\n                                primaryImagesrc,\r\n                                secondaryImagesrc,\r\n                                settings.custom_handle,\r\n                                uniqueColors,\r\n                                counter,\r\n                                productAvailable\r\n                            );\r\n                            if (counter.count >= 6) break;\r\n                        }\r\n                    }\r\n                    var swatchSection = document.getElementById(\"swatch_section_\" + productId);\r\n                    if (swatchSection) {\r\n                        swatchSection.parentNode.parentNode.parentNode.enableSwatches();\r\n                    }\r\n                }\r\n                await handleProductCardHover();\r\n                await collectionSwatchImages();\r\n            };\r\n        \r\n            setTimeout(async () => {\r\n                try {\r\n                    await handleCustomSwatches();\r\n                } catch (error) {\r\n                    if (error.name === 'AbortError') {\r\n                        console.warn('Handle custom swatches was aborted');\r\n                    } else {\r\n                        console.error('Error handling custom swatches:', error);\r\n                    }\r\n                }\r\n            }, 500);\r\n        };\r\n    \r\n        const hideSpinner = async() => {\r\n            const spinners = document.querySelectorAll('figure.product-featured-image');\r\n            spinners.forEach(spinner => {\r\n                setTimeout(() => {\r\n                    spinner.classList.remove('spin_overlay');\r\n                }, 500);\r\n            });\r\n        };\r\n    \r\n        const facetReset = async () => {\r\n            const resetButtons = document.querySelectorAll('.facets .thb-filter-dropdown__footer .facets__reset');\r\n            const filterParams = { ...queryParams.filter };\r\n            resetButtons.forEach(button => {\r\n                button.addEventListener('click', (event)=>{\r\n                    event.preventDefault();\r\n                    const facet = button.parentNode.parentNode.parentNode;\r\n                    facet.removeAttribute('open');\r\n                    let facetType = facet.dataset.type;\r\n                    if( facetType != 'ss_color_group' && facetType != 'collection_name' ){\r\n                      facetType = `variant_${facetType}`;  \r\n                    }\r\n                    const checkboxes = facet.querySelectorAll('.thb-filter-dropdown__inner input[type=checkbox]');\r\n                    checkboxes.forEach(checkbox => {\r\n                        checkbox.checked = false;\r\n                    });\r\n                    const facetCounter = facet.querySelector(\".thb-filter-dropdown__footer span.facets__selected\");\r\n                    if (facetCounter) {\r\n                        facetCounter.textContent = `0 selected`;\r\n                    }\r\n                    delete filterParams[facetType];\r\n                    sessionStorage.setItem('natoriFilters', JSON.stringify(filterParams));\r\n                    queryParams.filter = filterParams;\r\n                    queryParams.page = 1;\r\n                    fetchProductsAndFilters(queryParams);\r\n                });\r\n            });\r\n        };\r\n    \r\n        const priceRangeSlider = async () => {\r\n            const rangeFilterContainers = document.querySelectorAll('.thb-filter:has(.price_range)');\r\n\r\n            function calculateDynamicPriceGap(minRange, maxRange) {\r\n                const totalRange = maxRange - minRange;\r\n                let dynamicGap = Math.max(5, Math.min(100, totalRange * 0.1)); \r\n                return Math.round(dynamicGap / 5) * 5;\r\n            }\r\n            \r\n            rangeFilterContainers.forEach((container) => {\r\n                const rangeInputs = container.querySelectorAll(\".price_range .natori-range-input input\"),\r\n                    priceInputs = container.querySelectorAll(\".price_range .natori-price-input input\"),\r\n                    range = container.querySelector(\".price_range .slider .progress\");\r\n    \r\n                function updateSliderProgress() {\r\n                    let minPrice = parseInt(priceInputs[0].value);\r\n                    let maxPrice = parseInt(priceInputs[1].value);\r\n                    let minRange = parseInt(rangeInputs[0].min);\r\n                    let maxRange = parseInt(rangeInputs[0].max);\r\n                    let priceGap = calculateDynamicPriceGap(minRange, maxRange);\r\n        \r\n                    if (maxPrice - minPrice >= priceGap && maxPrice <= maxRange) {\r\n                        const effectiveRange = maxRange - minRange;\r\n                        range.style.left = ((minPrice - minRange) / effectiveRange) * 100 + \"%\";\r\n                        range.style.right = 100 - ((maxPrice - minRange) / effectiveRange) * 100 + \"%\";\r\n                    }\r\n                }\r\n        \r\n                updateSliderProgress();\r\n        \r\n                const debouncedUpdateFilter = debounce(() => applyRangeFilter(container), 1500);\r\n        \r\n                priceInputs.forEach((input) => {\r\n                    input.addEventListener(\"input\", (e) => {\r\n                        let minPrice = parseInt(priceInputs[0].value),\r\n                            maxPrice = parseInt(priceInputs[1].value);\r\n                        let minRange = parseInt(rangeInputs[0].min);\r\n                        let maxRange = parseInt(rangeInputs[0].max);\r\n                        let priceGap = calculateDynamicPriceGap(minRange, maxRange);\r\n            \r\n                        if (maxPrice - minPrice >= priceGap && maxPrice <= maxRange) {\r\n                            if (e.target.classList.contains(\"input-min\")) {\r\n                                rangeInputs[0].value = minPrice;\r\n                            } else {\r\n                                rangeInputs[1].value = maxPrice;\r\n                            }\r\n                            const effectiveRange = maxRange - minRange;\r\n                            range.style.left = ((minPrice - minRange) / effectiveRange) * 100 + \"%\";\r\n                            range.style.right = 100 - ((maxPrice - minRange) / effectiveRange) * 100 + \"%\";\r\n                        }\r\n                        debouncedUpdateFilter();\r\n                    });\r\n                });\r\n        \r\n                rangeInputs.forEach((input) => {\r\n                    input.addEventListener(\"input\", (e) => {\r\n                        let minVal = parseInt(rangeInputs[0].value),\r\n                            maxVal = parseInt(rangeInputs[1].value);\r\n                        let minRange = parseInt(rangeInputs[0].min);\r\n                        let maxRange = parseInt(rangeInputs[0].max);\r\n                        let priceGap = calculateDynamicPriceGap(minRange, maxRange);\r\n        \r\n                        if (maxVal - minVal < priceGap) {\r\n                            if (e.target.classList.contains(\"range-min\")) {\r\n                                rangeInputs[0].value = maxVal - priceGap;\r\n                            } else {\r\n                                rangeInputs[1].value = minVal + priceGap;\r\n                            }\r\n                        } else {\r\n                            priceInputs[0].value = minVal;\r\n                            priceInputs[1].value = maxVal;\r\n                            const effectiveRange = maxRange - minRange;\r\n                            range.style.left = ((minVal - minRange) / effectiveRange) * 100 + \"%\";\r\n                            range.style.right = 100 - ((maxVal - minRange) / effectiveRange) * 100 + \"%\";\r\n                        }\r\n                        debouncedUpdateFilter();\r\n                    });\r\n                });\r\n            });\r\n        };\r\n        \r\n        const applyRangeFilter = async (container) => {\r\n            document.querySelectorAll('.facets__form details.thb-filter').forEach((detailElement) => {\r\n                detailElement.removeAttribute('open');\r\n            });\r\n            const filterSidebar = document.querySelector('facetfiltersformmobile .facet-drawer.side-panel');\r\n            if (filterSidebar) {\r\n                filterSidebar.classList.remove('active');\r\n            }\r\n            const body = document.querySelector('body');\r\n            if (body) {\r\n                body.classList.remove('open-cc');\r\n            }\r\n            const priceMin = container.querySelector('.range-min').value;\r\n            const priceMax = container.querySelector('.range-max').value;\r\n    \r\n            const variantPrice = {\r\n                low: priceMin, \r\n                high: priceMax\r\n            };\r\n        \r\n            const variantPriceKey = 'variant_price';\r\n            const filterParams = { ...queryParams.filter };\r\n            filterParams[variantPriceKey] = variantPrice;\r\n            let storedFilters = JSON.parse(sessionStorage.getItem('natoriFilters') || '{}');\r\n            const updatedFilters = { ...storedFilters, ...filterParams };\r\n            sessionStorage.setItem('natoriFilters', JSON.stringify(updatedFilters));\r\n            queryParams.filter = filterParams;\r\n            queryParams.page = 1;\r\n        \r\n            fetchProductsAndFilters(queryParams);\r\n        };\r\n    \r\n        const flattenCategories = async (categories) => {\r\n            let result = [];\r\n        \r\n            for (const category of categories) {\r\n                if (category.filter === \"true\") {\r\n                    result.push(category.title);\r\n                }\r\n        \r\n                if (category.children) {\r\n                    const childTitles = await flattenCategories(category.children);\r\n                    result = result.concat(childTitles);\r\n                }\r\n            }\r\n            return result;\r\n        };\r\n\r\n        await checkAndValidateFilters(collectionHandle);\r\n        await updateQueryParams(queryParams);\r\n        await removeAllFilters();\r\n        await FacetsToggle();\r\n        fetchProductsAndFilters(queryParams);\r\n    }\r\n});\r\n"],
  "mappings": "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",
  "names": ["debounce", "createInlineContentElement", "createPagination", "createOptionsHTML", "collectionHandle", "data", "queryParams", "value", "keyArray", "valArray", "customColorsArray"]
}
