{
  "version": 3,
  "sources": ["/cdn/shop/t/196/assets/jsc-script-watch-finder-drawer.js?cb=1783702931318"],
  "sourcesContent": ["var jsonDataUrl = $('.jsc-watch-finder').attr('sheety-api'); \n\n// Delugs: fire-and-forget logging of finder selections to sf.delugs.com.\n// Never blocks or breaks the finder. v2: persistent device id (localStorage,\n// so anonymous history can be stitched to a customer when they log in) +\n// anonymous watch selections mirrored to Klaviyo onsite (merges into the\n// profile retroactively if the visitor ever identifies).\nfunction sfLogSelection(eventType, brand, collection, reference, extra){\n  try {\n    if (brand == null) brand = localStorage.getItem('brand') || '';\n    if (collection == null) collection = localStorage.getItem('model') || '';\n    if (eventType === 'reference_selected') {\n      if (sfLogSelection._last === reference) return; // skip consecutive dupes\n      sfLogSelection._last = reference;\n    }\n    var sid = '';\n    try { sid = localStorage.getItem('sf_sid') || sessionStorage.getItem('sf_sid') || ''; } catch (e0) {}\n    if (!sid) { sid = 's' + Math.random().toString(36).slice(2) + Date.now().toString(36); }\n    try { localStorage.setItem('sf_sid', sid); } catch (e1) {}\n    var cid = $('jsc-watch-finder').attr('customer-id') || '';\n    var payloadObj = {\n      eventType: eventType, brand: brand || '', collection: collection || '', reference: reference || '',\n      customerId: cid,\n      sessionId: sid,\n      pageType: $('jsc-watch-finder--drop-down').attr('sfPageType') || '',\n      referrer: window.location.pathname\n    };\n    if (extra) { for (var xk in extra) { payloadObj[xk] = extra[xk]; } }\n    var payload = JSON.stringify(payloadObj);\n    var sfSelUrl = 'https://sf.delugs.com/api/selections';\n    if (navigator.sendBeacon) { navigator.sendBeacon(sfSelUrl, new Blob([payload], { type: 'text/plain;charset=UTF-8' })); }\n    else if (window.fetch) { fetch(sfSelUrl, { method: 'POST', headers: { 'Content-Type': 'text/plain;charset=UTF-8' }, body: payload, keepalive: true }).catch(function(){}); }\n    // Logged-in events are mirrored to Klaviyo server-side; anonymous ones go\n    // via the onsite object so Klaviyo can merge them on later identify.\n    if (eventType === 'reference_selected' && !cid && window.klaviyo) {\n      try { window.klaviyo.push(['track', 'Strap Finder Watch Selected', { Brand: brand || '', Collection: collection || '', Reference: reference || '', Source: 'strap-finder-anonymous' }]); } catch (e2) {}\n    }\n  } catch (err) {}\n}\n\nvar blankLi = `<li class=\"custom-select--item custom-select__option js-option\" id=\"jsc-brand-blank\" role=\"option\" data-value=\"blank\"></li>`;\nlet cachedWatchDb = null;\n\n// Helper function to safely parse JSON from HTML attribute, handling special characters\nconst safeParseJSON = (jsonString, defaultValue = []) => {\n    if (!jsonString) {\n        return defaultValue;\n    }\n    try {\n        // Decode HTML entities (like &quot; back to \")\n        let decodedData = $('<div>').html(jsonString).text();\n        \n        // Trim whitespace\n        decodedData = decodedData.trim();\n        \n        // Parse the JSON\n        const parsed = JSON.parse(decodedData);\n        return Array.isArray(parsed) ? parsed : (parsed ? [parsed] : defaultValue);\n    } catch (e) {\n        console.error('\u274C Error parsing JSON:', e.message);\n        console.error('Raw data length:', jsonString ? jsonString.length : 0);\n        // Return empty array on error to prevent breaking the page\n        return defaultValue;\n    }\n};\n\n// \u2500\u2500 Delugs split-API data layer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// The drawer no longer downloads the full catalog. On load it fetches a tiny\n// index (brands + per-brand version stamps); a brand's watches load on demand\n// and merge into cachedWatchDb, so every existing filter-by-brand function\n// keeps working unchanged. Brand payload URLs carry ?v= so the CDN can cache\n// them hard while edits still propagate within the index's 60s window.\nlet sfIndex = null;\nlet sfBrandCache = {};\nvar sfApiBase = (function(){\n  try { var m = String(jsonDataUrl||'').match(/^(https?:\\/\\/[^\\/]+)/); if (m) return m[1]; } catch(e) {}\n  return 'https://sf.delugs.com';\n})();\nfunction sfRebuildDb(){\n  var all = [];\n  for (var k in sfBrandCache) { if (sfBrandCache.hasOwnProperty(k)) all = all.concat(sfBrandCache[k]); }\n  cachedWatchDb = all;\n}\nfunction sfBrandMeta(name){\n  if (!sfIndex || !sfIndex.brands) return null;\n  var n = String(name||'').toLowerCase();\n  var ns = n.replace(/\\s+/g,'');\n  for (var i = 0; i < sfIndex.brands.length; i++) {\n    var b = sfIndex.brands[i];\n    var bn = b.name.toLowerCase();\n    if (bn === n || bn.replace(/\\s+/g,'') === ns) return b;\n  }\n  return null;\n}\nfunction sfBrandLoaded(name){\n  var meta = sfBrandMeta(name);\n  return !!(meta && sfBrandCache[meta.name]);\n}\nfunction sfLoadBrand(brand){\n  var meta = sfBrandMeta(brand);\n  var name = meta ? meta.name : String(brand||'');\n  if (!name) return $.Deferred().resolve([]).promise();\n  if (sfBrandCache[name]) return $.Deferred().resolve(sfBrandCache[name]).promise();\n  if (sfLoadBrand._inflight && sfLoadBrand._inflight[name]) return sfLoadBrand._inflight[name];\n  var v = meta ? meta.v : 'x';\n  var p = $.getJSON(sfApiBase + '/api/strap-finder/brand/' + encodeURIComponent(name) + '?v=' + encodeURIComponent(v))\n    .then(function(d){\n      sfBrandCache[name] = (d && d.sheet1) || [];\n      sfRebuildDb();\n      return sfBrandCache[name];\n    });\n  sfLoadBrand._inflight = sfLoadBrand._inflight || {};\n  sfLoadBrand._inflight[name] = p;\n  p.always(function(){ delete sfLoadBrand._inflight[name]; });\n  return p;\n}\nconst fetchWatchDb = () => {\n    return $.getJSON(sfApiBase + '/api/strap-finder/index').then((idx) => {\n        sfIndex = idx;\n        cachedWatchDb = [];\n        return cachedWatchDb;\n    });\n};\n\n\n// ====== Recently Viewed Watches ======\nfunction saveRecentWatch(brand, collection, reference, watchImage, url) {\n  if (!reference) return;\n  try {\n    var recent = JSON.parse(localStorage.getItem('sf_recent_watches') || '[]');\n    // Remove if already exists\n    recent = recent.filter(function(w) { return w.reference !== reference; });\n    // Add to front\n    recent.unshift({ brand: brand, collection: collection, reference: reference, image: watchImage, url: url || '', ts: Date.now() });\n    // Keep max 5\n    recent = recent.slice(0, 5);\n    localStorage.setItem('sf_recent_watches', JSON.stringify(recent));\n  } catch(e) {}\n}\n\nfunction renderRecentWatches() {\n  try {\n    var recent = JSON.parse(localStorage.getItem('sf_recent_watches') || '[]');\n    if (!recent.length || !cachedWatchDb) return;\n    var $container = $('jsc-watch-finder-content');\n    var existing = $('#sf-recent-watches');\n    if (existing.length) existing.remove();\n\n    var html = '<div id=\"sf-recent-watches\" style=\"padding:8px 12px 0;\"><div style=\"display:flex;justify-content:space-between;align-items:center;margin:0 0 6px;\"><p style=\"font-size:11px;font-weight:600;color:#999;text-transform:uppercase;letter-spacing:0.5px;margin:0;\">Recently Viewed</p><button onclick=\"clearRecentWatches()\" style=\"font-size:10px;color:#999;background:none;border:none;cursor:pointer;padding:0;text-decoration:underline;\">Clear</button></div>';\n    recent.slice(0, 3).forEach(function(w, i) {\n      html += '<div onclick=\"quickSelectWatch(' + i + ')\" style=\"display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;margin-bottom:4px;border:1px solid #eee;\" onmouseover=\"this.style.background=\\'#f5f5f5\\'\" onmouseout=\"this.style.background=\\'\\'\">';\n      if (w.image) html += '<img src=\"' + w.image + '?width=60&height=60&crop=center\" style=\"width:32px;height:32px;object-fit:contain;border-radius:3px;background:#f9f9f9;\" />';\n      html += '<div style=\"flex:1;min-width:0;\"><div style=\"font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\">' + w.brand + ' ' + w.collection + '</div><div style=\"font-size:10px;color:#999;\">' + w.reference + '</div></div></div>';\n    });\n    html += '</div>';\n    $container.prepend(html);\n  } catch(e) {}\n}\n\nfunction quickSelectWatch(index) {\n  try {\n    var recent = JSON.parse(localStorage.getItem('sf_recent_watches') || '[]');\n    var w = recent[index];\n    if (!w) return;\n    setLocalStorage('brand', w.brand);\n    setLocalStorage('model', w.collection);\n    setLocalStorage('reference', w.reference);\n    var dest = w.url || resolveRecentWatchUrl(w);\n    if (dest) { window.location.href = dest; } else { location.reload(); }\n  } catch(e) { location.reload(); }\n}\n\n// Fallback for legacy recent-watch entries saved before the destination URL\n// was stored: look up the watch's dedicated landing page from the loaded DB.\nfunction resolveRecentWatchUrl(w) {\n  try {\n    if (!w || !cachedWatchDb || !Array.isArray(cachedWatchDb)) return '';\n    var wref = String(w.reference || '').replace(/\\s+/g, '');\n    var matches = cachedWatchDb.filter(function(item) {\n      return item.status === 1 &&\n        String(item.brand).trim() === String(w.brand).trim() &&\n        String(item.collection).trim() === String(w.collection).trim();\n    });\n    var chosen = matches.filter(function(item) {\n      return String(item.reference || '').replace(/\\s+/g, '') === wref;\n    })[0] || matches[0];\n    if (chosen && chosen.modelLandingPage && (chosen.modelLandingPage.indexOf('/pages') !== -1 || chosen.modelLandingPage.indexOf('/products') !== -1)) {\n      return chosen.modelLandingPage;\n    }\n  } catch(e) {}\n  return '';\n}\n\nfunction clearRecentWatches() {\n  localStorage.removeItem('sf_recent_watches');\n  $('#sf-recent-watches').remove();\n}\n\n$(function () {\n    fetchWatchDb().then(() => {\n    onLoadFunctionInit();\n    initSmartSearch();\n    renderRecentWatches();\n    }); \n    // onLoadOpenDrawer();\n    \n    // Check if user just logged in and migrate session storage\n    const customerId = $('jsc-watch-finder').attr('customer-id');\n\n    if (customerId) {\n        // Check if this is a fresh login (session storage exists but metafields might not be ready)\n        const hasSessionWatches = sessionStorage.getItem('sf_session_watches');\n        console.log('\uD83D\uDD0D Session watches check:', hasSessionWatches);\n        if (hasSessionWatches) {\n            // Add a delay before migration to allow Shopify to update metafields\n            console.log('\uD83D\uDD0D Fresh login detected, delaying migration by 3 seconds...');\n            setTimeout(() => {\n                console.log('\uD83D\uDD0D Starting migration after delay...');\n                migrateSessionStorageToMetafields();\n            }, 3000); // 3 second delay\n        } else {\n            console.log('\uD83D\uDD0D No session watches, running migration immediately...');\n            migrateSessionStorageToMetafields();\n            \n            // Also update watch collection for normal login\n            updateLoggedInWatchCollection();\n        }\n    } else {\n        console.log('\uD83D\uDD0D No customer ID, initializing session storage display...');\n        // For non-logged-in users, initialize session storage display\n        updateSessionStorageWatchCollection();\n        \n        // Update icons in Strap Finder tab\n        updateStrapFinderTabIcons();\n    }\n});\n\nsfDrawerChangeTab= (type) => {\n  $('#Watch-Finder--Drawer').find('.sf-drawer-tab').removeClass('active');\n  $('#Watch-Finder--Drawer').find('.side-panel-content').removeClass('active');\n\n  if (type === 'sf') {\n    $('#Watch-Finder--Drawer').find('.sf-drawer-tab[data-type=\"' + type + '\"]').addClass('active'); \n    $('#Watch-Finder--Drawer').find('.side-panel-content.sf-panel-content-strap-finder').addClass('active');\n  }else{\n    $('#Watch-Finder--Drawer').find('.sf-drawer-tab[data-type=\"' + type + '\"]').addClass('active'); \n    $('#Watch-Finder--Drawer').find('.side-panel-content.sf-panel-content-saved-watch').addClass('active');\n  }\n}\n// onLoadOpenDrawer = () => {\n//   const hash = window.location.hash;\n//   if (hash.startsWith('#product-card-')) {\n\n//     // Scroll to the element with that ID after drawer opens\n//     setTimeout(function () {\n//         openWfDrawer();\n//         const targetId = hash.substring(1); // remove '#'\n//         const $targetElement = $('#' + targetId); // jQuery selector\n \n//         if ($targetElement.length) {\n//           // Scroll to product card\n//           const drawerContent = document.querySelector('#Watch-Finder--Drawer'); // Update selector if needed\n//           const targetOffsetTop = $targetElement.offset().top;\n        \n//           // Scroll the drawer content manually with offset (e.g., -23px)\n//           $(drawerContent).animate({\n//             scrollTop: targetOffsetTop - 55 // adjust for padding/header\n//           }, 500); // duration in ms\n//           // save watch if not already saved\n//           const $saveBtn = $targetElement.find('.jsc-sf-product-card-save-watch');\n//           if (!$saveBtn.hasClass('sf-filled')) {\n//             $saveBtn.find('.sf-save-watch-button').click();\n//           }\n//         }\n//       }, 1500);\n      \n   \n//   }\n// }\n\nopenWfDrawer = (sfPageType) =>{\n    $('#Watch-Finder--Drawer').addClass('active');\n    $('body').addClass('open-cc');\n\n    onLoadSetLocalStorage();\n    var getBrandLocalStorage = localStorage.getItem('brand'); \n    var getModelLocalStorage = localStorage.getItem('model');\n\n    if (sfPageType == 'brand' || sfPageType == 'model'){\n        $('jsc-watch-finder--drop-down').attr('sfPageType',sfPageType);\n        $('#jsc-brand button input').attr('disabled',true);\n        $('#jsc-brand button span').removeAttr('onclick');\n        $('.jsc-watch-finder--clear').hide();\n    }else{\n        $('jsc-watch-finder--drop-down').attr('sfPageType',sfPageType);\n        $('#jsc-brand button input').attr('disabled',false);\n        $('#jsc-brand button span').attr('onclick','toggleBrandDropdown()');\n        $('.jsc-watch-finder--clear').show();\n    }\n\n            setTimeout(function () {\n              loadBrandOption(getBrandLocalStorage);\n            }, 1000);\n            var brandValue = getBrandLocalStorage ? \"Brand: \" + getBrandLocalStorage : \"-- Select Brand --\";\n            $('#jsc-brand .custom-select--button .jsc-brand-search').attr('placeholder',brandValue);\n            $('#jsc-brand .custom-select--button .jsc-brand-search').val(brandValue);\n            $('#jsc-brand .custom-select--button .jsc-brand-search').addClass('jsc-placeholder-black-color');\n   \n            loadModelOption (getBrandLocalStorage, sfPageType) ;\n            var modelValue = getModelLocalStorage ? \"Collection: \" + getModelLocalStorage : \"-- Select Collection --\";\n            $('#jsc-model .custom-select--button .jsc-model-search').attr('placeholder',modelValue);\n            $('#jsc-model .custom-select--button .jsc-model-search').val(modelValue);\n            $('#jsc-model .custom-select--button .jsc-model-search').addClass('jsc-placeholder-black-color');\n            loadEngineOption(getModelLocalStorage,sfPageType,getBrandLocalStorage);\n\n             // pre open model dropdown for brand and model page  \n            if (sfPageType === 'brand' || sfPageType === 'model') {\n                setTimeout(function () {\n                  const modelContainer = $('#jsc-model');\n                  const modelItems = modelContainer.find('ul li');\n              \n                  if (modelItems.length > 1) {\n                    modelContainer.addClass('custom-select--active');\n                  } else {\n                    // Disable the input inside #jsc-model\n                    modelContainer.find('input').prop('disabled', true);\n                    modelContainer.find('button span').removeAttr('onclick');\n\n                  }\n                }, 100);\n              }\n}\n\nif ($('jsc-watch-finder--drop-down').length > 0) { // only for watch finder template\n    $(document).on('click', function(event) {\n        var $dropdown = $('jsc-custom-select button');\n        var getBrandLocalStorage = localStorage.getItem('brand');\n        var getModelLocalStorage = localStorage.getItem('model');\n    \n        if (!$dropdown.is(event.target) && $('.jsc-custom-select').has(event.target).length === 0) {\n            // Close the dropdown if it is open\n            if ($('.jsc-custom-select').hasClass('custom-select--active')) {\n                $('.jsc-custom-select').removeClass('custom-select--active');\n                if (getBrandLocalStorage) {\n                    $('#jsc-brand .custom-select--button .jsc-brand-search').addClass('jsc-placeholder-black-color');\n                }else{\n                    $('#jsc-brand .custom-select--button .jsc-brand-search').removeClass('jsc-placeholder-black-color');\n                }\n                if (getModelLocalStorage) {\n                    $('#jsc-model .custom-select--button .jsc-model-search').addClass('jsc-placeholder-black-color');\n                }else{\n                    $('#jsc-model .custom-select--button .jsc-model-search').removeClass('jsc-placeholder-black-color');\n                }\n            }\n        }\n    });\n}\n\nonLoadSetLocalStorage = () => {\n  // Check if the URL has brand in query string (both standalone and collection URLs)\n  const hasBrandParam = window.location.search.includes('?brand=') || window.location.search.includes('&brand=');\n  \n  if (hasBrandParam) {\n        // Parse and clean URL parameters\n        const queryString = window.location.search.substring(1);\n        // console.log('\uD83D\uDD0D Original Query String:', queryString);\n        \n        // Handle malformed URLs by fixing common issues\n        let fixedQueryString = queryString;\n        \n        // Fix the specific case where brand value is concatenated with collection\n        // brand=Cartiercollection=Tortue -> brand=Cartier&collection=Tortue\n        if (fixedQueryString.includes('brand=') && fixedQueryString.includes('collection=') && !fixedQueryString.includes('&collection=')) {\n            fixedQueryString = fixedQueryString.replace(/brand=([^&]+)collection=/, 'brand=$1&collection=');\n            // console.log('\uD83D\uDD27 Fixed brand-collection separator');\n        }\n        \n        // Fix the specific case where collection value is concatenated with reference\n        // collection=Tortuereference=2396B -> collection=Tortue&reference=2396B\n        if (fixedQueryString.includes('collection=') && fixedQueryString.includes('reference=') && !fixedQueryString.includes('&reference=')) {\n            fixedQueryString = fixedQueryString.replace(/collection=([^&]+)reference=/, 'collection=$1&reference=');\n            // console.log('\uD83D\uDD27 Fixed collection-reference separator');\n        }\n        \n        // Remove extra ? characters that might appear before filters\n        fixedQueryString = fixedQueryString.replace(/\\?filter\\./g, '&filter.');\n        \n        // Fix the case where there's a ? in the middle of the URL (like filter.v.availability=1?brand)\n        fixedQueryString = fixedQueryString.replace(/=([^&]+)\\?([^=]+)=/g, '=$1&$2=');\n        \n        // console.log('\uD83D\uDD27 Fixed Query String:', fixedQueryString);\n        \n        // Split by & to handle parameters properly\n        const params = fixedQueryString.split('&');\n        let rawBrand = '';\n        let rawModel = '';\n        let rawYear = '';\n        \n        // Parse each parameter manually to avoid issues with filter parameters\n        params.forEach(param => {\n            if (param && param.includes('=')) {\n                const [key, value] = param.split('=');\n                // console.log('\uD83D\uDD0D Parsing param:', key, '=', value);\n                if (key === 'brand') {\n                    rawBrand = decodeURIComponent(value || '');\n                } else if (key === 'collection') {\n                    rawModel = decodeURIComponent(value || '');\n                } else if (key === 'reference') {\n                    rawYear = decodeURIComponent(value || '');\n                }\n            }\n        });\n        \n        // Fallback: If we still don't have proper values, try a more aggressive approach\n        if (!rawBrand || !rawModel || !rawYear) {\n            // console.log('\u26A0\uFE0F Fallback parsing needed');\n            \n            // Try to extract from the original query string using regex\n            const brandMatch = queryString.match(/brand=([^&?]+)/);\n            const collectionMatch = queryString.match(/collection=([^&?]+)/);\n            const referenceMatch = queryString.match(/reference=([^&?]+)/);\n            \n            if (brandMatch) rawBrand = decodeURIComponent(brandMatch[1]);\n            if (collectionMatch) rawModel = decodeURIComponent(collectionMatch[1]);\n            if (referenceMatch) rawYear = decodeURIComponent(referenceMatch[1]);\n            \n            // console.log('\uD83D\uDD0D Fallback extracted:', rawBrand, rawModel, rawYear);\n        }\n\n        const cleanBrand = encodeURIComponent(rawBrand.replace(/\\s+/g, ''));\n        const cleanModel = encodeURIComponent(rawModel.replace(/\\s+/g, ''));\n        const cleanYear = encodeURIComponent(rawYear.replace(/\\s+/g, ''));\n\n        // console.log('\uD83D\uDD0D Raw URL Parameters:', rawBrand, rawModel, rawYear);\n        // console.log('\uD83D\uDD0D Encoded URL Parameters:', cleanBrand, cleanModel, cleanYear);\n\n        // Search in cached DB\n        var watchDb = cachedWatchDb;\n\n        var match = watchDb.find(item => {\n         \n            const encodedBrand = encodeURIComponent(String(item.brand || '').replace(/\\s+/g, ''));\n            const encodedModel = encodeURIComponent(String(item.collection || '').replace(/\\s+/g, ''));\n           const encodedReference = encodeURIComponent(String(item.reference || '').replace(/\\s+/g, ''));\n\n            // Log comparison for debugging\n            // console.log(`\uD83E\uDDEA Checking: ${encodedBrand}, ${encodedModel}, ${encodedReference}`);\n\n            return (\n                encodedBrand === cleanBrand &&\n                encodedModel === cleanModel  &&\n                encodedReference === cleanYear\n            );\n        });\n\n        if (match) {\n            localStorage.setItem('brand', match.brand);\n            localStorage.setItem('model', match.collection);\n            localStorage.setItem('reference', match.reference);\n            // console.log('\u2705 Match found & saved to localStorage:', match);\n        } else {\n            // console.log('\u274C No match found for brand/collection/year in watchDb.');\n        }\n    }\n}\n\nonLoadFunctionInit = () =>{\n    // Preload whichever brand this page needs (URL param or saved selection)\n    // BEFORE the restore logic runs \u2014 the URL matcher and the populate\n    // functions read that brand's rows from cachedWatchDb.\n    var sfRun = function(){\n        onLoadSetLocalStorage();\n        var getBrandLocalStorage = localStorage.getItem('brand');\n        var getModelLocalStorage = localStorage.getItem('model');\n        var getReferenceLocalStorage = localStorage.getItem('reference');\n        loadBrandOption(getBrandLocalStorage);\n        onloadPopulateWatchFilterFromLocalStorage(getBrandLocalStorage,getModelLocalStorage);\n        if ($('jsc-watch-finder--drop-down').length > 0) { // only for watch finder template\n            onloadWatchButton(getBrandLocalStorage,getModelLocalStorage);\n        }else{\n            onloadPopulateReferenceFilterFromLocalStorage(getBrandLocalStorage,getModelLocalStorage,getReferenceLocalStorage);\n        }\n    };\n    var sfUrlBrand = '';\n    try {\n        var m = window.location.search.match(/brand=([^&?]+)/);\n        if (m) sfUrlBrand = decodeURIComponent(m[1]);\n    } catch (e) {}\n    var sfNeed = sfUrlBrand || localStorage.getItem('brand');\n    if (sfNeed) { sfLoadBrand(sfNeed).always(sfRun); } else { sfRun(); }\n}\n\nhandleizedString = (input) => {\n    let string = String(input);\n    return string.replace(/\\s+/g, '-').replace(/\\//g, '-').trim().toLowerCase().replace('(', '-').replace(')', '-').replace(/--/g, '-').replace('.', '-').replace(/\u221A\u2202/g, '-');\n}\n\npopulateModelHtml = (brand, localStorageModel, sfPageType) => {\n\n    // Check if cachedWatchDb is available\n    if (!cachedWatchDb || !Array.isArray(cachedWatchDb)) {\n        console.warn('\u26A0\uFE0F cachedWatchDb is not available yet, skipping populateModelHtml');\n        return;\n    }\n    if (brand && !sfBrandLoaded(brand)) { sfLoadBrand(brand).then(function(){ populateModelHtml(brand, localStorageModel, sfPageType); }); return; }\n\n    // Filter the JSON data for the selected \"Brand\"\n    var filteredData = cachedWatchDb.filter(function(item) {\n        if (sfPageType === 'brand') {\n            // For brand-specific pages, only show models that match the brand\n            // and have a brand-specific collection\n            return item.status === 1 &&\n                   item.brand === brand && \n                   item.brandSpecificCollection && \n                   item.brandSpecificCollection.includes('/collections');\n        } \n        else if  (sfPageType === 'model'){\n             // For model landing pages, only show models that match the brand\n            // and have a model-landing page\n            return item.status === 1 &&\n                   item.brand === brand && \n                   item.modelLandingPage && \n                   item.modelLandingPage.includes('/pages');\n        }else {\n            // For non-brand-specific pages, show all models for the brand\n            return item.status === 1 && item.brand === brand;\n        }\n    });\n\n    var modelUlElement = $('#jsc-model .custom-select__listbox');\n    // Count watches per collection for popularity sort\n    var collectionCounts = {};\n    filteredData.forEach(function(item) {\n      if (item.collection) collectionCounts[item.collection] = (collectionCounts[item.collection] || 0) + 1;\n    });\n    var modelOptions = [...new Set(filteredData.map(item => item.collection))].map(model => { // Delugs: Set preserves first-seen order = API demand order\n        var handleizedModel = handleizedString(model);\n        return `<li class=\"custom-select--item custom-select__option js-option\" id=\"jsc-model-${handleizedModel}\" role=\"option\" data-value=\"${model}\" onclick=\"selectOption(this,'model')\" ${model == localStorageModel ? 'aria-selected=\"true\"': 'aria-selected=\"false\"' }>\n                <span class=\"${model == localStorageModel ? 'custom-select--active' : ''}\">${model} <span style=\"color:#999;font-weight:400;\">(${collectionCounts[model] || 0})</span></span>\n                </li>`;\n    });\n\n    modelUlElement.html(modelOptions.join(''));\n}\n\npopulateReferenceHtml = (brand, model, localStorageReference) => {\n    // Check if cachedWatchDb is available\n    if (!cachedWatchDb || !Array.isArray(cachedWatchDb)) {\n        console.warn('\u26A0\uFE0F cachedWatchDb is not available yet, skipping populateReferenceHtml');\n        return;\n    }\n    if (brand && !sfBrandLoaded(brand)) { sfLoadBrand(brand).then(function(){ populateReferenceHtml(brand, model, localStorageReference); }); return; }\n\n    // Filter the JSON data for the selected \"Brand\" and \"Model\"\n    var filteredData = cachedWatchDb.filter(function(item) {\n        return item.status === 1 && item.brand === brand && item.collection === model;\n    });\n\n    var modelUlElement = $('#jsc-reference .custom-select__listbox');\n    // Build reference \u2192 image map for thumbnails\n    var refImageMap = {};\n    filteredData.forEach(function(item) {\n      if (item.reference && item.watchImage && !refImageMap[item.reference]) {\n        refImageMap[item.reference] = item.watchImage;\n      }\n    });\n    var modelOptions = [...new Set(filteredData.map(item => item.reference))].sort().map(reference => {\n        var handleizedReference = handleizedString(reference);\n        var refThumb = refImageMap[reference] || ''; \n        return `<li class=\"custom-select--item custom-select__option js-option\" id=\"jsc-reference-${handleizedReference}\" role=\"option\" data-value=\"${reference}\" onclick=\"selectOption(this,'reference')\" ${reference == localStorageReference ? 'aria-selected=\"true\"': 'aria-selected=\"false\"' }>\n                <span class=\"${reference == localStorageReference ? 'custom-select--active' : ''}\" style=\"display:flex;align-items:center;gap:8px;\">${refThumb ? '<img src=\"' + refThumb + '?width=40&height=40&crop=center\" style=\"width:28px;height:28px;object-fit:contain;border-radius:3px;background:#f5f5f5;\" loading=\"lazy\" />' : ''}${reference}</span>\n                </li>`;\n    });\n\n    modelUlElement.html(modelOptions.join(''));\n};\n\npopulateReferenceImageHtmlByBrand = (brand,isPageType) => {\n    // Check if cachedWatchDb is available\n    if (!cachedWatchDb || !Array.isArray(cachedWatchDb)) {\n        console.warn('\u26A0\uFE0F cachedWatchDb is not available yet, skipping populateReferenceImageHtmlByBrand');\n        return;\n    }\n    if (brand && !sfBrandLoaded(brand)) { sfLoadBrand(brand).then(function(){ populateReferenceImageHtmlByBrand(brand, isPageType); }); return; }\n\n    let brandString = String(brand);\n      // Filter the JSON data for the selected \"Brand\"\n      var filteredData = cachedWatchDb.filter(function(item) {\n        return item.status === 1 &&  \n               String(item.brand).trim() === brandString;\n    });\n    \n    var engineUlElement = $('jsc-year-reference-img');\n    engineUlElement.empty();\n            \n    var tableHTMLArray = filteredData.map(item => {\n    // Get unique yearnum values for the current engineImg\n    var uniqueYearNums = [...new Set(filteredData.filter(data => data.watchImage === item.watchImage).map(data => data.reference))];\n    // Join unique yearnum values into a comma-separated string\n    var yearNumString = uniqueYearNums.join(', ');\n    // Collect article handles (only if they exist)\n    var articleHandles = [item.article1, item.article2, item.article3].filter(Boolean).join('>');\n    // console.log(articleHandles, 'articleHandles'); \n    // Store the data in the array\n    return `${yearNumString}|~|${item.watchImage}|~|${item.caseDiameter}|~|${item.lugToLugDistance}|~|${item.lugWidth}|~|${item.watchHeadImage}|~|${articleHandles}|~|${item.recommendedCollection}|~|${item.brand}|~|${item.collection}|~|${item.brandSpecificPage}|~|${item.model}|~|${item.modelLandingPage}|~|${item.identifier}`;\n     });\n//   console.log('tableHTMLArray', tableHTMLArray, 'isPageType', isPageType);\n    loadTableRow(tableHTMLArray,isPageType);\n}\n\npopulateReferenceImageHtml = (model,isPageType,brand) => {\n    // Check if cachedWatchDb is available\n    if (!cachedWatchDb || !Array.isArray(cachedWatchDb)) {\n        console.warn('\u26A0\uFE0F cachedWatchDb is not available yet, skipping populateReferenceImageHtml');\n        return;\n    }\n    if (brand && !sfBrandLoaded(brand)) { sfLoadBrand(brand).then(function(){ populateReferenceImageHtml(model, isPageType, brand); }); return; }\n\n    let modelString = String(model); \n    let brandString = String(brand);\n      // Filter the JSON data for the selected \"Model\" and \"Brand\"\n      var filteredData = cachedWatchDb.filter(function(item) {\n        return item.status === 1 && \n                String(item.collection).trim() === modelString &&\n               String(item.brand).trim() === brandString;\n    });\n\n    \n    var engineUlElement = $('jsc-year-reference-img');\n    engineUlElement.empty(); // Remove existing children\n            \n    var tableHTMLArray = filteredData.map(item => {\n    // Get unique yearnum values for the current engineImg\n    var uniqueYearNums = [...new Set(filteredData.filter(data => data.watchImage === item.watchImage).map(data => data.reference))];\n    // Join unique yearnum values into a comma-separated string\n    var yearNumString = uniqueYearNums.join(', ');\n    // Collect article handles (only if they exist)\n    var articleHandles = [item.article1, item.article2, item.article3].filter(Boolean).join('>');\n    // console.log(articleHandles, 'articleHandles'); \n    // Store the data in the array\n    return `${yearNumString}|~|${item.watchImage}|~|${item.caseDiameter}|~|${item.lugToLugDistance}|~|${item.lugWidth}|~|${item.watchHeadImage}|~|${articleHandles}|~|${item.recommendedCollection}|~|${item.brand}|~|${item.collection}|~|${item.brandSpecificPage}|~|${item.model}|~|${item.modelLandingPage}|~|${item.identifier}`;\n     });\n\n    loadTableRow(tableHTMLArray,isPageType);\n}\n\nloadTableRow = (htmlArray, isPageType) => {\n    var engineUlElement = $('jsc-year-reference-img');\n    engineUlElement.children().remove();\n    const row = $('<div>').addClass('jsc-year-img-items-wrapper');\n    var getReferenceLocalStorage = localStorage.getItem('reference');\n  \n    let appendedCount = 0; // Track how many items get appended\n    const cardList = [];   // Store product cards temporarily\n\n    let customerId = $('jsc-watch-finder').attr('customer-id');\n    let customerMetafieldData = $('jsc-watch-finder').attr('customer-save-watch-list');\n    let watchList = safeParseJSON(customerMetafieldData, []);\n\n    // Update counters based on user login status\n    if (customerId) {\n        // Logged-in user - use metafield data\n        if (watchList && watchList.length >= 50) {\n            $('.sf-saved-watch-error-limit-message').show();\n            $('.sf-saved-watch-count-message').hide();\n        } else if (watchList && watchList.length > 0) {\n            $('.sf-saved-watch-error-limit-message').hide();\n            $('.sf-saved-watch-count-message').show();\n            $('.sf-saved-watch-count-message .sf-saved-watch-count').text(watchList.length);\n        } else {\n            $('.sf-saved-watch-error-limit-message').hide();\n            $('.sf-saved-watch-count-message').hide();\n        }\n    } else {\n        // Non-logged-in user - use session storage\n        updateSessionStorageCounters();\n    }\n    for (let index = 0; index < htmlArray.length; index++) {\n      const parts = htmlArray[index].split('|~|');\n\n      let heartFill = 'none'; // default\n\n      if (customerId && Array.isArray(watchList)) {\n        // Logged-in user - check metafield data\n        const isWatchListed = watchList.some(item => {\n            return item.brand === parts[8] && item.collection === parts[9] && item.reference === parts[0];\n        });\n        heartFill = isWatchListed ? '#000000' : 'none';\n      } else {\n        // Non-logged-in user - check session storage\n        let sessionWatches = [];\n        try {\n          const stored = sessionStorage.getItem('sf_session_watches');\n          if (stored) {\n            sessionWatches = JSON.parse(stored);\n          }\n        } catch (e) {\n          sessionWatches = [];\n        }\n        \n        const isWatchListed = sessionWatches.some(item => {\n          return item.brand === parts[8] && item.collection === parts[9] && item.reference === parts[0];\n        });\n        heartFill = isWatchListed ? '#000000' : 'none';\n      }\n     \n      let isLimitReached = Array.isArray(watchList) && watchList.length >= 50;\n \n      // Check if the current card should be shown\n      const passesFilter = (() => {\n        if (isPageType === 'brand') {\n          return parts[10];\n        } else if (isPageType === 'model') {\n          return parts[12];\n        } else {\n          return true;\n        } \n      })();\n  \n      if (!passesFilter) continue;\n  \n      // Build product card\n      const productInput = $('<input>')\n        .addClass('jsc-year-img-data')\n        .addClass(isLimitReached === true ? 'sf-save-watch-reached' : '')\n        .attr('type', 'hidden')\n        .attr('year-ref', parts[0])\n        .attr('year-src', parts[1])\n        .attr('case-diameter', parts[2])\n        .attr('lug-to-lug-distance', parts[3])\n        .attr('lug-width', parts[4])\n        .attr('watch-face', parts[5])\n        .attr('article-urls', parts[6])\n        .attr('recommend-collection', parts[7])\n        .attr('brand', parts[8])\n        .attr('watch', parts[9])\n        .attr('brand-specific-page', parts[10])\n        .attr('model', parts[11])\n        .attr('model-landing-page', parts[12])\n        .attr('identifier', parts[13]);\n  \n      const productCard = $('<div>')\n        .addClass(`jsc-year-img-item cursor columns carousel__slide`) // size class added later\n        .attr('data-identifier',`${parts[13]}`)\n        .attr(\n          'onclick',\n          `setLocalStorage('reference','${parts[0].trim()}');sfLogSelection('reference_selected',null,null,'${parts[0].trim()}');constructParamUrl('${index}',this,'${isPageType}');showWatchInfo();`\n        );\n  \n      const productCardContent = $('<div>')\n      .attr('id', `product-card-${index}`)  \n        .addClass(`product-card-${index} product-card text-left product-card--content-spacing-true product-card--border-false`);\n\n        const saveWatch = $('<div>')\n            .addClass('jsc-sf-product-card-save-watch') \n            .addClass(heartFill === '#000000' ? 'sf-filled' : '')\n            .addClass(isLimitReached && heartFill === 'none' ? 'sf-disabled' : '')\n            .append(\n                $('<div>')\n                .addClass('sf-save-watch-button')\n                .append(\n                    $('<span>')\n                    .addClass('sf-save-watch-icon')\n                    .html(heartFill === '#000000' ? \n                        '<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">' :\n                        '<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/add-circle.svg?v=1760405891\" width=\"40\" height=\"40\" alt=\"Add\">'\n                    )\n                )\n                .on('click', function (e) {\n                    e.stopPropagation(); // Prevent card click\n                    e.preventDefault(); // \uFFFD\uFFFD\uFFFD Prevent anchor href navigation if inside <a>\n\n                    // if ($(this).hasClass('disabled')) return; // \u26D4 Block if disabled\n\n                    const currentImgSrc = $(this).find('img').attr('src');\n                    const isTickIcon = currentImgSrc && currentImgSrc.includes('tick-circle.svg');\n                    const saveWatchParent = $(this).closest('.jsc-sf-product-card-save-watch');\n\n                    // \u26D4 If limit reached and not already saved, don't allow adding\n                    customerMetafieldData = $('jsc-watch-finder').attr('customer-save-watch-list');\n                    watchList = safeParseJSON(customerMetafieldData, []);\n                    isLimitReached = Array.isArray(watchList) && watchList.length >= 50;\n                    if (isLimitReached && !isTickIcon) {\n                      \n                        return;\n                    }\n                    \n                     // construct url params\n                    var $cu_brand =  parts[8].replace(/\\s+/g, '');\n                    var $cu_collection = parts[9].replace(/\\s+/g, '');\n                    var $cu_reference = parts[0].replace(/\\s+/g, '');\n                    // Construct URL properly\n                    var sf_page_handle = $('.jsc-watch-finder').attr('sf-page');\n                    var $cu_modelLandingPage = parts[12] ? parts[12].trim() : '';\n                    var $cu_urlWithParams = $cu_modelLandingPage ? $cu_modelLandingPage : `/pages/${sf_page_handle}?brand=${$cu_brand}&collection=${$cu_collection}&reference=${$cu_reference}`;\n\n                    const watchData = {\n                      brand: parts[8],\n                      collection: parts[9],\n                      model: parts[11],\n                      reference: parts[0],\n                      watchImage: parts[1],\n                      identifier: parts[13],\n                      url: $cu_urlWithParams \n\n                    };\n                    \n\n                    if (customerId){\n                        if (isTickIcon) {\n                            // If tick icon clicked, remove from list\n                            removeFromWatchList(watchData);\n                            saveWatchParent.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/add-circle.svg?v=1760405891\" width=\"40\" height=\"40\" alt=\"Add\">');\n                            saveWatchParent.removeClass('sf-filled');\n                        } else {\n                            // If plus icon clicked, add to list\n                            addToWatchList(watchData);\n                            saveWatchParent.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">');\n                            saveWatchParent.addClass('sf-filled');\n                        }\n                            customerMetafieldData = $('jsc-watch-finder').attr('customer-save-watch-list');\n                            watchList = safeParseJSON(customerMetafieldData, []);\n                            isLimitReached = Array.isArray(watchList) && watchList.length >= 50;\n                   \n                            if (watchList && watchList.length >= 50) {\n                                $('.jsc-sf-product-card-save-watch:not(.sf-filled)').addClass('sf-disabled');\n                                $('.sf-saved-watch-error-limit-message').show();\n                                $('.sf-saved-watch-count-message').hide();\n                            } else if (watchList && watchList.length > 0) {\n                                $('.sf-saved-watch-error-limit-message').hide();\n                                $('.sf-saved-watch-count-message').show();\n                                $('.sf-saved-watch-count-message .sf-saved-watch-count').text(watchList.length);\n                            } else {\n                                $('.sf-saved-watch-error-limit-message').hide();\n                                $('.sf-saved-watch-count-message').hide();\n                            }\n                    } else {\n                        // For non-logged-in users, use session storage\n                        if (isTickIcon) {\n                            // If tick icon clicked, remove from session storage\n                            removeFromSessionStorage(watchData);\n                            saveWatchParent.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/add-circle.svg?v=1760405891\" width=\"40\" height=\"40\" alt=\"Add\">');\n                            saveWatchParent.removeClass('sf-filled');\n                            updateSessionStorageCounters();\n                        } else {\n                            // If plus icon clicked, add to session storage\n                            addToSessionStorage(watchData);\n                            saveWatchParent.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">');\n                            saveWatchParent.addClass('sf-filled');\n                            updateSessionStorageCounters();\n                        }\n                    }\n\n\n                  })\n        );\n\n        \n      const productImage = $('<div>')\n        .addClass('jsc-year-img')\n        .append(\n          $('<img>')\n            .addClass('no-blur product-secondary-image lazyautosizes ls-is-cached lazyloaded')\n            .attr('src', parts[1])\n        );\n  \n      const productInfo = $('<div>').addClass('product-card-info');\n      const productReferenceLabel = $('<div>')\n        .addClass('jsc-year-reference-label')\n        .text('Reference ')\n        .append($('<span>').addClass('jsc-year-reference').text(parts[0]));\n      const productModelLabel = $('<div>').addClass('jsc-model-label').append($('<span>').text(parts[11]));\n  \n      if (parts[0] == getReferenceLocalStorage) {\n        productCardContent.addClass('border-active');\n      }\n  \n      productCard.prepend(productInput);\n      productCardContent.append(productImage);\n      if (isPageType !== 'brand' && isPageType !== 'model') {\n        productCardContent.append(saveWatch);\n      }\n      productCardContent.append(productInfo);\n      productInfo.append(productModelLabel);\n      productInfo.append(productReferenceLabel);\n      productCard.append(productCardContent);\n  \n      cardList.push(productCard);\n      appendedCount++;\n    }\n  \n    \n    // After loop: determine size class\n    const sizeClass = appendedCount === 1 ? 'small-6 medium-12 large-12' : 'small-6 medium-6 large-6';\n  \n    cardList.forEach(card => {\n      card.addClass(sizeClass);\n      row.append(card);\n    });\n  \n    engineUlElement.append(row);\n    removeLoader();\n}\n  \n\nsfPopupClose = () =>{\n\n    // Check if current URL has #recover\n    if (window.location.hash === '#recover') {\n    var returnUrl = window.location.pathname + window.location.search;\n    window.location.href = returnUrl; \n    }else{\n    $('#sf_download_login_modal').hide();\n    $('body').removeClass('open-cc');\n    }\n}\n\nsfPopupRecoverPassword  = () =>{\n    var returnUrl = window.location.pathname + window.location.search + '#recover';\n    window.location.href = returnUrl;\n}\n\nopenSfLoginPopup= (evt) =>{\n  $('#Watch-Finder--Drawer').removeClass('active');\n  $('#sf_download_login_modal').css('display','flex');\n  $('body').addClass('open-cc');\n\n  var $productCard = $(evt).closest('.product-card');\n\n  if (window.location.pathname.includes('/account')) {\n    $('body').removeClass('open-cc');\n  }else{\n    var returnUrl = window.location.href;\n    if ($productCard.length) {\n      var productCardId = $productCard.attr('id');\n      // append return URL to login form\n      returnUrl = returnUrl + '#' + productCardId;\n    }else{\n      returnUrl = returnUrl;\n    }\n     // Find all forms inside the modal container\n     $('#sf_download_login_modal #customer_login').append(\n      '<input type=\"hidden\" name=\"return_to\" value=\"' + returnUrl + '\">'\n      );\n      $('#sf_download_login_modal #create_customer').append(\n          '<input type=\"hidden\" name=\"return_to\" value=\"' + returnUrl + '\">'\n      );\n\n      $('#sf_download_login_modal #recover').append(\n          '<input type=\"hidden\" name=\"return_to\" value=\"' + returnUrl + '\">'\n      );\n  }\n}\n\nshowPopupRegisterForm = () =>{\n    $('#sf_download_login_modal .jsc-modal-content .shopify-section:first').show();\n    $('#sf_download_login_modal .jsc-modal-content .shopify-section:first .row').show();\n    $('#sf_download_login_modal .jsc-modal-content .shopify-section:last').hide();\n\n}\n\nshowPopupLoginForm = () =>{\n    $('#sf_download_login_modal .jsc-modal-content .shopify-section:first').hide();\n    $('#sf_download_login_modal .jsc-modal-content .shopify-section:last').show();\n    // Check if current URL has #recover\n  if (window.location.hash === '#recover') {\n    var returnUrl = window.location.pathname + window.location.search;\n    window.location.href = returnUrl; \n  }\n}\n\ngetSingaporeTimestamp = () => {\n  try {\n    const timestamp = new Date().toLocaleString('sv-SE', {\n      timeZone: 'Asia/Singapore',\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit'\n    });\n    if (!timestamp || timestamp === 'Invalid Date') {\n      return new Date().toISOString();\n    }\n    return `${timestamp.replace(' ', 'T')}+08:00`;\n  } catch (error) {\n    return new Date().toISOString();\n  }\n};\n\nremoveFromWatchList = (watchData, e) => {\n    const $watchFinder = $('jsc-watch-finder');\n    const customerID = $watchFinder.attr('customer-id');\n    const rawWatchList = $watchFinder.attr('customer-save-watch-list');\n    const rawTags = $watchFinder.attr('customer-current-tags') || '';\n    let existingTags = rawTags.split(',').map(tag => tag.trim()).filter(Boolean);\n  \n    let current = safeParseJSON(rawWatchList, []);\n  \n    // Remove matching watch\n    const updated = current.filter(item =>\n      !(item.brand === watchData.brand &&\n        item.model === watchData.model &&\n        item.collection === watchData.collection &&\n        item.identifier === watchData.identifier &&\n        item.reference === watchData.reference)\n    );\n  \n    // Update saved watch list attribute\n    $watchFinder.attr('customer-save-watch-list', JSON.stringify(updated));\n  \n    // Build a tag set from updated list\n    const currentTagSet = new Set();\n    const activeBrands = new Set();\n    const activeModels = new Set();\n    const activeCollections = new Set();\n    const activeIdentifiers = new Set();\n    const activeRefs = new Set();\n  \n    updated.forEach(watch => {\n      if (watch.brand) {\n        const brandTag = `sf_brand_${watch.brand.toLowerCase()}`;\n        currentTagSet.add(brandTag);\n        activeBrands.add(brandTag);\n      }\n      if (watch.model) {\n        const modelTag = `sf_model_${watch.model.toLowerCase()}`;\n        currentTagSet.add(modelTag);\n        activeModels.add(modelTag);\n      }\n      if (watch.collection) {\n        const collectionTag = `sf_collection_${watch.collection.toLowerCase()}`;\n        currentTagSet.add(collectionTag);\n        activeCollections.add(collectionTag);\n      }\n      if (watch.identifier) {\n        const identifierTag = `sf_id_${watch.identifier.toLowerCase()}`;\n        currentTagSet.add(identifierTag);\n        activeIdentifiers.add(identifierTag);\n      }\n      if (watch.reference) {\n        const refTag = `sf_ref_${watch.reference.toLowerCase()}`;\n        currentTagSet.add(refTag);\n        activeRefs.add(refTag);\n      }\n    });\n  \n    // Calculate number of ref tags\n    const refCount = updated.length;\n  \n    // Clean up old _watches tags\n    for (let i = 1; i <= 50; i += 5) {\n      const upper = Math.min(i + 4, 50);\n      currentTagSet.delete(`sf_${i}-${upper}_watches`);\n    }\n  \n    // Add correct _watches tag\n    if (refCount > 0) {\n      const lowerBound = Math.floor((refCount - 1) / 5) * 5 + 1;\n      const upperBound = Math.min(lowerBound + 4, 50);\n      currentTagSet.add(`sf_${lowerBound}-${upperBound}_watches`);\n    }\n  \n    // Determine new and removable tags\n    const newTags = Array.from(currentTagSet).filter(tag => !existingTags.includes(tag));\n    const isRemovableTag = tag =>\n        tag !== 'sf_saved_watch_strap_pairing' && // Protect this tag from removal\n        (tag.startsWith('sf_brand_') ||\n        tag.startsWith('sf_model_') ||\n        tag.startsWith('sf_collection_') ||\n        tag.startsWith('sf_id_') ||\n        tag.startsWith('sf_ref_') ||\n        (tag.startsWith('sf_') && tag.endsWith('_watches')));\n  \n    const removeTags = existingTags.filter(tag => {\n      if (!isRemovableTag(tag)) return false;\n      if (tag.startsWith('sf_brand_')) return !activeBrands.has(tag);\n      if (tag.startsWith('sf_model_')) return !activeModels.has(tag);\n      if (tag.startsWith('sf_collection_')) return !activeCollections.has(tag);\n      if (tag.startsWith('sf_id_')) return !activeIdentifiers.has(tag);\n      if (tag.startsWith('sf_ref_')) return !activeRefs.has(tag);\n      return !currentTagSet.has(tag); // e.g., _watches tags\n    });\n  \n    // Final updated tag set\n    const updatedTagSet = new Set([...existingTags, ...newTags]);\n    removeTags.forEach(tag => updatedTagSet.delete(tag));\n  \n    // Update DOM attribute\n    $watchFinder.attr('customer-current-tags', Array.from(updatedTagSet).join(','));\n  \n    // Debug logs\n    // console.log(\"\uD83E\uDDF9 Removed Watch:\", watchData);\n    // console.log(\"\uD83E\uDDE9 New Tags to Add:\", newTags);\n    // console.log(\"\u274C Tags to Remove:\", removeTags);\n    // console.log(\"\uD83E\uDDE9 Final Tags:\", Array.from(updatedTagSet));\n  \n    const triggeredAt = getSingaporeTimestamp();\n    // POST updated info\n    $.ajax({\n      url: \"https://webhooks.mechanic.dev/411d70c6-afc5-463b-9db8-583a633f213a\",\n      method: \"POST\",\n      contentType: \"application/json\",\n      data: JSON.stringify({\n        customer_id: customerID,\n        triggered_at: triggeredAt,\n        watches: updated,\n        tags: Array.from(updatedTagSet)\n      }),\n    }).fail(error => {\n      // console.error(\"\u274C Error updating Mechanic:\", error);\n    });\n  \n    // UI cleanup on account page\n    if ($('#_jscSavedWatchesList_display').length > 0) {\n      $(e).closest('.columns').remove();\n  \n      let columns = $('#_jscSavedWatchesList_display').find('.columns');\n      columns.each(function () {\n        const $col = $(this);\n        const brand = $col.attr('data-brand') || '';\n        const model = $col.attr('data-model') || '';\n        const collection = $col.attr('data-collection') || '';\n        const ref = $col.attr('data-reference') || '';\n  \n        const isMatch = (\n          brand.toLowerCase().includes(watchData.brand?.toLowerCase() || '') ||\n          model.toLowerCase().includes(watchData.model?.toLowerCase() || '') ||\n          collection.toLowerCase().includes(watchData.collection?.toLowerCase() || '')\n        ) && ref === watchData.reference;\n  \n        if (isMatch) {\n          $col.remove();\n        }\n      });\n  \n      columns = $('#_jscSavedWatchesList_display').find('.columns');\n      if (columns.length === 0) {\n        $('#_jscSavedWatchesList_display').hide();\n        $('#_jscSavedWatchesList_na').show();\n      }\n    }\n\n    const customerMetafieldData = $('jsc-watch-finder').attr('customer-save-watch-list');\n    const watchList = safeParseJSON(customerMetafieldData, []);\n\n    if (watchList && watchList.length >= 50) {\n        $('.sf-saved-watch-error-limit-message').show();\n        $('.sf-saved-watch-count-message').hide();\n    } else if (watchList && watchList.length > 0) {\n        $('.sf-saved-watch-error-limit-message').hide();\n        $('.sf-saved-watch-count-message').show();\n        $('.sf-saved-watch-count-message .sf-saved-watch-count').text(watchList.length);\n    } else {\n        $('.sf-saved-watch-error-limit-message').hide();\n        $('.sf-saved-watch-count-message').hide();\n    }\n    // Update icons in Strap Finder tab for logged-in users\n    updateStrapFinderTabIcons();\n  };\n  \n  \n  addToWatchList = (watchData) => {\n    const $watchFinder = $('jsc-watch-finder');\n    const customerID = $watchFinder.attr('customer-id');\n    const rawWatchList = $watchFinder.attr('customer-save-watch-list');\n    const rawTags = $watchFinder.attr('customer-current-tags') || '';\n    let existingTags = rawTags.split(',').map(tag => tag.trim()).filter(Boolean);\n    // console.log(\"\uD83E\uDDE9 Existing Tags:\", existingTags);\n  \n    let current = safeParseJSON(rawWatchList, []);\n    // \u2705 Filter out any invalid data like strings (e.g., \"[]\")\n    current = current.filter(item => typeof item === 'object' && item !== null && !Array.isArray(item));\n  \n    const alreadyExists = current.some(watch =>\n      watch.brand === watchData.brand &&\n      watch.model === watchData.model &&\n      watch.collection === watchData.collection &&\n      watch.identifier === watchData.identifier &&\n      watch.reference === watchData.reference\n    );\n  \n    if (alreadyExists) return;\n  \n    current.unshift(watchData);\n    if (current.length > 50) {\n      const removed = current.slice(50);\n    //   console.log(\"\uD83D\uDDD1\uFE0F Removing old watches:\", removed);\n      current = current.slice(0, 50);\n    }\n  \n    // \u2705 Ensure only valid objects saved\n    current = current.filter(item => typeof item === 'object' && item !== null && !Array.isArray(item));\n    $watchFinder.attr('customer-save-watch-list', JSON.stringify(current));\n  \n    const currentTagSet = new Set();\n    current.forEach(watch => {\n      if (watch.brand) currentTagSet.add(`sf_brand_${watch.brand.toLowerCase()}`);\n      if (watch.model) currentTagSet.add(`sf_model_${watch.model.toLowerCase()}`);\n      if (watch.collection) currentTagSet.add(`sf_collection_${watch.collection.toLowerCase()}`);\n      if (watch.identifier) currentTagSet.add(`sf_id_${watch.identifier.toLowerCase()}`);\n      if (watch.reference) currentTagSet.add(`sf_ref_${watch.reference.toLowerCase()}`);\n    });\n  \n    // Handle watch count range tags\n    for (let i = 1; i <= 50; i += 5) {\n      const upper = Math.min(i + 4, 50);\n      currentTagSet.delete(`sf_${i}-${upper}_watches`);\n    }\n  \n    if (current.length > 0) {\n      const lowerBound = Math.floor((current.length - 1) / 5) * 5 + 1;\n      const upperBound = Math.min(lowerBound + 4, 50);\n      currentTagSet.add(`sf_${lowerBound}-${upperBound}_watches`);\n    }\n  \n    const newTags = Array.from(currentTagSet).filter(tag => !existingTags.includes(tag));\n  \n    const isRemovableTag = tag =>\n      tag !== 'sf_saved_watch_strap_pairing' && // Protect this tag from removal\n      (tag.startsWith('sf_brand_') ||\n      tag.startsWith('sf_model_') ||\n      tag.startsWith('sf_collection_') ||\n      tag.startsWith('sf_id_') ||\n      tag.startsWith('sf_ref_') ||\n      (tag.startsWith('sf_') && tag.endsWith('_watches')));\n  \n    const removeTags = existingTags.filter(\n      tag => isRemovableTag(tag) && !currentTagSet.has(tag)\n    );\n  \n    const updatedTagSet = new Set([...existingTags, ...newTags]);\n    removeTags.forEach(tag => updatedTagSet.delete(tag));\n  \n    $watchFinder.attr('customer-current-tags', Array.from(updatedTagSet).join(','));\n  \n    // \u2705 Debug logs\n    // console.log(\"\uD83E\uDDE9 New Tags to Add:\", newTags);\n    // console.log(\"\u274C Tags to Remove:\", removeTags);\n    // console.log(\"\uD83E\uDDD1\u200D\uD83D\uDCBC Customer ID:\", customerID);\n    // console.log(\"\u231A Updated Watch List:\", current);\n    // console.log(\"\uD83E\uDDE9 Final Tags:\", Array.from(updatedTagSet));\n  \n    const triggeredAt = getSingaporeTimestamp();\n    // \u2705 Send to webhook\n    $.ajax({\n      url: \"https://webhooks.mechanic.dev/411d70c6-afc5-463b-9db8-583a633f213a\",\n      method: \"POST\",\n      contentType: \"application/json\",\n      data: JSON.stringify({\n        customer_id: customerID,\n        triggered_at: triggeredAt,\n        watches: current,\n        tags: Array.from(updatedTagSet)\n      }),\n    }).fail((error) => {\n      console.error(\"\u274C Error submitting watch data:\", error);\n    });\n  \n    // \u2705 UI Card Update\n    if ($('#_jscSavedWatchesList_display').length > 0) {\n\n      const html = `\n      <div class=\"jsc-year-img-item cursor columns carousel__slide small-6 medium-6 large-6\" data-brand=\"${watchData.brand}\" data-model=\"${watchData.model}\" data-identifier=\"${watchData.identifier}\" data-collection=\"${watchData.collection}\" data-reference=\"${watchData.reference}\">\n        <div class=\"product-card text-left product-card--content-spacing-true product-card--border-false\">  \n          <a href=\"${watchData.url}\"> \n              <div class=\"jsc-year-img\">\n                <img class=\"no-blur product-secondary-image lazyautosizes ls-is-cached lazyloaded\" src=\"${watchData.watchImage}\" alt=\"${watchData.brand} ${watchData.collection} ${watchData.reference}\" />\n              </div>\n          </a>\n\n          <div class=\"jsc-sf-product-card-save-watch\" onclick='removeFromWatchList(${JSON.stringify(watchData)}, this)'>  \n            <div class=\"sf-save-watch-button\">\n              <span class=\"sf-save-watch-icon\">\n                <img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">\n              </span>\n            </div>\n          </div>\n\n            <div class=\"product-card-info \" style=\"background-color: #fff;\">\n              <a href=\"${watchData.url}\">\n                <div class=\"fontWeight-6\" style=\"font-size: 15px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;\">${watchData.model}</div>\n                  <div style=\"margin-top: 10px;font-size: 13px; color: #7E7E7E;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;\">Reference: ${watchData.reference}}</div>\n              </a>\n                                            \n            </div>\n        </div>\n      </div>                            \n    `;\n\n      $('#_jscSavedWatchesList_display').find('jsc-sf-year-reference-img').find('.jsc-year-img-items-wrapper').prepend(html);\n      $('#_jscSavedWatchesList_display').show();\n      $('#_jscSavedWatchesList_na').hide();\n    }\n\n    // apped notification popup\n    const $snackbar = $('#jsc-snackbar');\n    $snackbar.addClass('show');\n\n    setTimeout(function () {\n      $snackbar.removeClass('show');\n    }, 3000);\n    \n    // Update icons in Strap Finder tab for logged-in users\n    updateStrapFinderTabIcons();\n  };\n  \n  \n  \n  \n  \n  \n  \n\n// Function to update pagination index\nupdatePaginationIndex = (totalPage, activePage, htmlArray) => {\n    const paginationContainer = $('#jsc-pagination-container');\n    const paginationPages = paginationContainer.find('.jsc-pagination-pages');\n    paginationPages.children().remove();\n    paginationPages.removeClass('add-border');\n    // Check if htmlArray has more than 8 elements\n    if (htmlArray.length > 8){\n      // Loop through the total number of pages\n      for (let index = 1; index <= totalPage; index++) {\n          // If it's the active page, add a current page class\n          if (index === activePage) {\n              paginationPages.addClass('add-border');\n              paginationPages.append(`<span class=\"jsc-currentPage jsc-pagination-index m-l-10 m-r-10\">${index}</span>`);\n          } else {\n              // Add pagination index with onclick function to paginate\n              paginationPages.addClass('add-border');\n              paginationPages.append(`<span class=\"jsc-pagination-index cursor m-l-10 m-r-10 \" onclick=\"paginate('${htmlArray.join('---')}',${index})\">${index}</span>`);\n          }\n      }\n    }\n  };\n\n\n  // Function to paginate and load new li elements\npaginate = (htmlString, pageIndex) => {\n    $('.jsc-reinit-year-list').children().remove();\n    $('jsc-year-list').show();\n    const galleryContainer = $('jsc-year-reference-img');\n    const htmlArray = htmlString.split('---');\n    const isFromPaginate = true;\n  \n    // Remove existing li elements and pagination\n    galleryContainer.children().remove();\n    $('.jsc-pagination-pages').children().remove();\n  \n    // Load new li elements with pagination\n    loadTableRow(htmlArray, pageIndex, isFromPaginate);\n  };\n\npopulateInfoHtml = (reference) => {\n    // Check if cachedWatchDb is available\n    if (!cachedWatchDb || !Array.isArray(cachedWatchDb)) {\n        console.warn('\u26A0\uFE0F cachedWatchDb is not available yet, skipping populateInfoHtml');\n        return;\n    }\n    var sfInfoBrand = localStorage.getItem('brand');\n    if (sfInfoBrand && !sfBrandLoaded(sfInfoBrand)) { sfLoadBrand(sfInfoBrand).then(function(){ populateInfoHtml(reference); }); return; }\n\n    // Convert the model to a number if it's a string\n    var referenceToMatch = isNaN(reference) ? reference : parseFloat(reference);\n\n    // Filter data based on the 'brand'\n    var filteredData = cachedWatchDb.filter(function(item) {\n        return item.status === 1 && item.reference === referenceToMatch;\n    });\n            \n    var infoUlElement1 = $('.placeholder-details .case-diameter');\n    var infoUlElement2 = $('.placeholder-details .case-lug-distance');\n    var infoUlElement4 = $('.placeholder-details .case-lug-width');\n    var infoUlElement5 = $('jsc-year-placeholder').find('.year-img');\n\n    var caseDiameter = filteredData.map(item => item.caseDiameter);\n    var caseLugDistance = filteredData.map(item => item.lugToLugDistance);\n    var caseLugWidth = filteredData.map(item => item.lugWidth);\n    var caseImage = filteredData.map(item => item.image);\n\n    $('.placeholder-info').css('visibility','visible');\n            \n    infoUlElement5.attr('src',caseImage);\n    infoUlElement5.show();\n\n    infoUlElement1.text(caseDiameter ? caseDiameter : 'NA');\n    infoUlElement2.text(caseLugDistance ? caseLugDistance : 'NA');\n    infoUlElement4.text(caseLugWidth ? caseLugWidth : 'NA');\n } \n \n loadBrandOption = (getBrandLocalStorage) => {\n    // Brands come from the lightweight index, not the catalog\n    if (!sfIndex || !sfIndex.brands) {\n        console.warn('\u26A0\uFE0F index is not available yet, skipping loadBrandOption');\n        return;\n    }\n\n    const brandPopulateMap = {};\n    sfIndex.brands.forEach(function (b) {\n        if (b.populate && b.populate > 0) brandPopulateMap[b.name] = b.populate;\n    });\n\n    const popularBrands = Object.keys(brandPopulateMap)\n        .sort((a, b) => brandPopulateMap[a] - brandPopulateMap[b])\n        .slice(0, 10);\n\n    const allBrands = sfIndex.brands.map(function (b) { return b.name; });\n\n    // Step 5: Build list with sections\n    const brandUlElement = $('#jsc-brand .custom-select__listbox');\n\n    const createOptionLi = (brand) => {\n        const handleizedBrand = handleizedString(brand);\n        const isSelected = brand === getBrandLocalStorage;\n        return `<li class=\"custom-select--item custom-select__option js-option\" id=\"jsc-brand-${handleizedBrand}\" data-value=\"${brand}\" onclick=\"selectOption(this,'brand')\" ${isSelected ? 'aria-selected=\"true\"' : 'aria-selected=\"false\"'}>\n            <span class=\"${isSelected ? 'custom-select--active' : ''}\">${brand}</span>\n        </li>`;\n    };\n\n    const top10Header = `<li class=\"custom-select--item-top-brand custom-select--item custom-select__option js-option fontWeight-6\">Top Brands</li>`;\n    const top10Options = popularBrands.map(createOptionLi);\n\n    const allBrandsHeader = `<li class=\"custom-select--item-top-brand custom-select--item custom-select__option js-option fontWeight-6\">All Brands</li>`;\n    const allOptions = allBrands.map(createOptionLi); \n\n    const finalList = [top10Header, ...top10Options, allBrandsHeader, ...allOptions];\n\n    brandUlElement.html(finalList.join(''));\n}\n\n\nloadModelOption = (brand, isPageType) => {\n      // Call the function to populate the model HTML\n      var getModelLocalStorage = localStorage.getItem('model');\n      populateModelHtml(brand, getModelLocalStorage, isPageType);\n  \n      // Reset model and engine options\n      resetModelOption();\n  \n      // Reset local storage\n      setLocalStorage('model', '');\n      setLocalStorage('reference', '');\n  \n}\n\nloadReferenceOption= (brand,model) => {\n    // Call the function to populate the model HTML\n    populateReferenceHtml(brand,model);\n  \n    // Reset reference and engine options\n    resetReferenceOption();\n\n    setLocalStorage('reference', '');\n}\n\nloadEngineOption = (model,isPageType,brand) => {\n    // Fetch JSON data from the URL\n    if(brand && !model){\n        populateReferenceImageHtmlByBrand(brand,isPageType);\n    }else{\n        populateReferenceImageHtml(model,isPageType,brand);\n    }\n \n    // reset local storage\n    setLocalStorage('reference', '');\n}\n\nselectOption = (e, key) => {\n    var _this = $(e);\n    var value = _this.attr('data-value');\n    // $('#Watch-Finder--Drawer').removeClass('active');\n    $('.box.jsc-watch-finder--clear').show();\n    $('.box.jsc-watch-finder--smart-search').show();\n    $('jsc-reinit-year-list').hide();\n    $('jsc-year-list').show();\n    \n    // Set Local storage\n    setLocalStorage(key, value);\n\n    // Delugs: selection logging\n    if (value) {\n        if (key == 'brand') sfLogSelection('brand_selected', value, '', '');\n        else if (key == 'model') sfLogSelection('collection_selected', null, value, '');\n        else if (key == 'reference') sfLogSelection('reference_selected', null, null, value);\n    }\n\n    var isPageType =  $('jsc-watch-finder--drop-down').attr('sfPageType');\n\n    // Enable model option\n    if (key == 'brand') {\n        setLocalStorage('model', '');\n    // Replace selected value\n    var brandValue = value ? \"Brand: \" + value : \"-- Select Brand --\";\n    _this.closest('.jsc-custom-select').find('.custom-select--button input').attr('placeholder',brandValue);\n    _this.closest('.jsc-custom-select').find('.custom-select--button input').val(brandValue);\n\n       var getModelLocalStorage = localStorage.getItem('model');\n       loadModelOption(value);\n       loadReferenceOption(value);\n       loadEngineOption(getModelLocalStorage,isPageType,value);\n       $('jsc-year-right-wrapper').hide(); \n       $('jsc-year-wrapper').hide();\n       $('finder-paginate-facet').text();\n       $('#jsc-brand').removeClass('custom-select--active');\n\n       $('jsc-watch-finder-content').addClass('show-year');\n       $('jsc-year-wrapper').show();\n       $('jsc-year-right-wrapper').show();\n       $('jsc-year-reference-img').show();\n       \n       // Clear smart search text and results\n       clearSmartSearch();\n    } \n    \n    // Display Result\n    if (key == 'model') {\n        // Replace selected value\n        var brandValue = value ? \"Collection: \" + value : \"-- Select Collection --\";\n        _this.closest('.jsc-custom-select').find('.custom-select--button input').attr('placeholder',brandValue);\n        _this.closest('.jsc-custom-select').find('.custom-select--button input').val(brandValue);\n\n        $('#jsc-model ul li').removeClass('active-model');\n        _this.addClass('active-model');\n        var getBrandLocalStorage = localStorage.getItem('brand');\n\n        if ($('jsc-watch-finder--drop-down').length > 0) { // only for watch finder template\n            initLoader();\n            loadEngineOption(value,isPageType,getBrandLocalStorage);\n        }else{\n            loadReferenceOption(getBrandLocalStorage,value);\n        }\n        setPlaceholder();\n    \n        $('jsc-watch-finder-content').addClass('show-year');\n        $('jsc-year-wrapper').show();\n        $('jsc-year-right-wrapper').show();\n        $('jsc-year-reference-img').show();\n        $('#jsc-model').removeClass('custom-select--active');\n        \n        // Clear smart search text and results\n        clearSmartSearch();\n    }\n}\n\n\nsetPlaceholder = () => {\n    var getBrandLocalStorage = localStorage.getItem('brand');    \n    $('.placeholder-brand-name').text(getBrandLocalStorage);\n    $('.placeholder-info').css('visibility','hidden');    \n}\n\n\nresetBrandOption = () => {\n    $('#jsc-brand .custom-select--button .jsc-brand-search').attr('placeholder','-- Select Brand --');\n    $('#jsc-brand .custom-select--button .jsc-brand-search').text('');\n    $('#jsc-brand .custom-select--button .jsc-brand-search').val('');\n    $('#jsc-brand input').removeClass('jsc-placeholder-black-color');\n}\n\nresetModelOption = () => {\n    $('#jsc-model .custom-select--button .jsc-model-search').attr('placeholder','-- Select Model --');\n    $('#jsc-model .custom-select--button .jsc-model-search').text('');\n    $('#jsc-model .custom-select--button .jsc-model-search').val('');\n    $('#jsc-model input').removeClass('jsc-placeholder-black-color');\n}\n\nresetReferenceOption = () => {\n    $('#jsc-reference .custom-select--button .jsc-reference-search').attr('placeholder','-- Select Reference --');\n    $('#jsc-reference .custom-select--button .jsc-reference-search').text('');\n    $('#jsc-reference .custom-select--button .jsc-reference-search').val('');\n}\n\nsetLocalStorage = (key, value) => {\n    localStorage.setItem(key, value);\n}\n\nonloadPopulateWatchFilterFromLocalStorage = (getBrandLocalStorage,getModelLocalStorage) => { \n       if (getBrandLocalStorage) {\n          // Load Model option if Brand is in local storage\n          populateModelHtml(getBrandLocalStorage, getModelLocalStorage);\n          var brandValue = getBrandLocalStorage ? \"Brand: \" + getBrandLocalStorage : \"-- Select Brand --\";\n          $('#jsc-brand .custom-select--button .jsc-brand-search').attr('placeholder',brandValue);\n          $('.box.jsc-watch-finder--clear').show();\n          $('.box.jsc-watch-finder--smart-search').show();\n          \n       }\n \n       if (getModelLocalStorage) {\n        var brandValue = getModelLocalStorage ? \"Collection: \" + getModelLocalStorage : \"-- Select Collection --\";\n          $('#jsc-model .custom-select--button .jsc-model-search').attr('placeholder',brandValue);\n          $('.box.jsc-watch-finder--clear').show();\n          $('.box.jsc-watch-finder--smart-search').show();\n       }\n}\n\nonloadPopulateReferenceFilterFromLocalStorage = (getBrandLocalStorage,getModelLocalStorage,getReferenceLocalStorage) => { \n    if (getBrandLocalStorage && getModelLocalStorage) {\n        // Load reference option if Brand and Model is in local storage\n        populateReferenceHtml(getBrandLocalStorage,getModelLocalStorage,getReferenceLocalStorage);\n        var referenceValue = \"Reference: \" + getReferenceLocalStorage;\n        if (getReferenceLocalStorage) {\n            $('#jsc-reference .custom-select--button .jsc-reference-search').attr('placeholder',referenceValue);\n         }\n     }\n\n}\nonclickBrandDropdown = () => {\n    $(\"#jsc-model\").removeClass('custom-select--active');\n}\n\nonclickModelDropdown = () => {  \n    $(\"#jsc-brand\").removeClass('custom-select--active');\n}\n\n\nonclickReferenceDropdown = () => {  \n    $(\"#jsc-brand\").removeClass('custom-select--active');\n    $(\"#jsc-model\").removeClass('custom-select--active');\n}\n\nonclickBrandInput = () => {\n    $(\"#jsc-model\").removeClass('custom-select--active');\n    $(\"#jsc-reference\").removeClass('custom-select--active');\n\n    var getModelLocalStorage = localStorage.getItem('model');\n    if (getModelLocalStorage){\n     $('#jsc-model input').addClass('jsc-placeholder-black-color');\n    }\n\n    $('#jsc-brand .custom-select--list ul li').each(function() {\n        $(this).show();\n    });\n    $('#jsc-brand').addClass('custom-select--active');\n    $('#jsc-brand input').removeClass('jsc-placeholder-black-color');\n    $('#jsc-brand input').val('');\n}\n\nonclickModelInput = () => {\n    // Hide brand dropdown\n    $(\"#jsc-brand\").removeClass('custom-select--active');\n    $(\"#jsc-reference\").removeClass('custom-select--active');\n    $('#jsc-model .custom-select--list ul li').each(function() {\n        $(this).show();\n    });\n    $('#jsc-model').addClass('custom-select--active');\n    $('#jsc-model input').removeClass('jsc-placeholder-black-color');\n    $('#jsc-model input').val('');\n}\n\nonclickReferenceInput = () => {\n    // Hide reference dropdown\n    $(\"#jsc-brand\").removeClass('custom-select--active');\n    $(\"#jsc-model\").removeClass('custom-select--active');\n\n    $('#jsc-reference .custom-select--list ul li').each(function() {\n        $(this).show();\n    });\n\n    $('#jsc-reference').addClass('custom-select--active');\n    $('#jsc-reference input').val('');\n}\n\nbrandFilterFunction = (e) => {\n    // console.log('brandFilterFunction');\n    var filter = $(e).val().toUpperCase();\n    $('#jsc-brand').addClass('custom-select--active');\n\n    var ulElement = $('#jsc-brand .custom-select--list ul');\n    ulElement.show();\n\n    $('#jsc-brand .custom-select--list ul li').each(function() {\n        var txtValue = $(this).text().toUpperCase();\n        if (txtValue.indexOf(filter) > -1) {\n            $(this).show();\n        } else {\n            $(this).hide();\n        }\n    });\n\n       // Check if there are any visible list items\n       var checkLiEle = ulElement.find('li:visible');\n       if (checkLiEle.length === 0) {\n           ulElement.hide(); // Hide the <ul> element if no visible list items\n       } else {\n           ulElement.show(); // Show the <ul> element if there are visible list items\n       }\n}\n\nmodelFilterFunction = (e) => {\n    // console.log('modelFilterFunction');\n    var filter = $(e).val().toUpperCase();\n    $('#jsc-model').addClass('custom-select--active');\n\n    var ulElement = $('#jsc-model .custom-select--list ul');\n    ulElement.show();\n\n    $('#jsc-model .custom-select--list ul li').each(function() {\n        var txtValue = $(this).text().toUpperCase();\n        if (txtValue.indexOf(filter) > -1) {\n            $(this).show();\n        } else {\n            $(this).hide();\n        }\n    });\n\n       // Check if there are any visible list items\n       var checkLiEle = ulElement.find('li:visible');\n       if (checkLiEle.length === 0) {\n           ulElement.hide(); // Hide the <ul> element if no visible list items\n       } else {\n           ulElement.show(); // Show the <ul> element if there are visible list items\n       }\n}\n\nreferenceFilterFunction = (e) => {\n    // console.log('referenceFilterFunction');\n    var filter = $(e).val().toUpperCase();\n    $('#jsc-reference').addClass('custom-select--active');\n    // $('#jsc-reference input').removeClass('jsc-placeholder-black-color');\n\n    var ulElement = $('#jsc-reference .custom-select--list ul');\n    ulElement.show();\n\n    $('#jsc-reference .custom-select--list ul li').each(function() {\n        var txtValue = $(this).text().toUpperCase();\n        if (txtValue.indexOf(filter) > -1) {\n            $(this).show();\n        } else {\n            $(this).hide();\n        }\n    });\n\n       // Check if there are any visible list items\n       var checkLiEle = ulElement.find('li:visible');\n       if (checkLiEle.length === 0) {\n           ulElement.hide(); // Hide the <ul> element if no visible list items\n       } else {\n           ulElement.show(); // Show the <ul> element if there are visible list items\n       }\n}\n\ntoggleBrandDropdown = () => {\n    $(\"#jsc-brand\").toggleClass('custom-select--active');\n}\n\ntoggleModelDropdown = () => {\n    $(\"#jsc-model\").toggleClass('custom-select--active');\n}\n\ntoggleReferenceDropdown = () => {\n    $(\"#jsc-reference\").toggleClass('custom-select--active');\n}\n\nbackToYearImg = () => {\n   var list =  $('#jsc-model .custom-select--list ul li');\n   var model = localStorage.getItem('model');\n   list.each(function(){\n        if ($(this).attr('data-value') == model){\n            $(this).click();\n        }\n    });  \n}\n\ndisabledAllSelection = () => {\n    // Model\n    $('#jsc-model .custom-select__listbox').html(blankLi);;\n \n    // reset local storage\n    setLocalStorage('brand', '');\n    setLocalStorage('model', '');\n    setLocalStorage('reference', '');\n    \n}\n\nclearSelection = () => {\n    resetBrandOption();\n    resetModelOption();\n\n    $('finder-paginate-facet').text();\n    $('jsc-year-right-wrapper').hide();\n    // $('.box.jsc-watch-finder--clear').hide();\n    // $('.box.jsc-watch-finder--smart-search').hide();\n    $('jsc-watch-finder-content').removeClass('show-year');\n    \n    var paginationContainer = $('#jsc-pagination-container');\n    var paginationPages = paginationContainer.find('.jsc-pagination-pages');\n    paginationPages.children().remove();\n    paginationPages.removeClass('add-border');\n\n    $('jsc-year-reference-img').children().remove();\n    disabledAllSelection();\n    // disabledeWatchBtn();\n    \n    // Clear smart search text and results\n    const searchInput = document.getElementById('jsc-smart-search-input');\n    if (searchInput) {\n        // Clear the input value completely\n        searchInput.value = '';\n        searchInput.textContent = '';\n        searchInput.innerText = '';\n        \n        // Reset placeholder using multiple methods\n        searchInput.setAttribute('placeholder', 'Search');\n        $('#jsc-smart-search-input').attr('placeholder', 'Search');\n        $('#jsc-smart-search-input').val('');\n        \n        // Force a complete reset\n        // searchInput.blur();\n        searchInput.focus();\n        \n        // Trigger input event to ensure any listeners are notified\n        searchInput.dispatchEvent(new Event('input', { bubbles: true }));\n        searchInput.dispatchEvent(new Event('change', { bubbles: true }));\n        \n        console.log('\uD83D\uDD0D Search input cleared, value:', searchInput.value, 'placeholder:', searchInput.placeholder);\n    }\n    hideSearchResults();\n    clearSearchResults();\n}\n\nonloadWatchButton = (getBrandLocalStorage,getModelLocalStorage) => {\n   $('.placeholder-info').css('visibility','hidden');\n\n   if (getBrandLocalStorage && getModelLocalStorage){ \n        populateReferenceImageHtml(getModelLocalStorage);\n        $('jsc-watch-finder-content').addClass('show-year');\n        $('jsc-year-right-wrapper').show();\n    }else if (getBrandLocalStorage && !getModelLocalStorage) {\n        populateReferenceImageHtmlByBrand(getBrandLocalStorage);\n        $('jsc-watch-finder-content').addClass('show-year');\n        $('jsc-year-right-wrapper').show();\n    }else{\n        $('jsc-watch-finder-content').removeClass('show-year');\n        $('jsc-year-right-wrapper').hide();\n    }\n}\n\nshowWatchInfo = () => {\n    var brandName = localStorage.getItem('brand');\n    $('.placeholder-details .placeholder-brand-name').text(brandName);\n    $('jsc-watch-finder--description').hide();\n}\n\n\nenableWatchBtn = () => { \n    $('.jsc-search-watch-button').attr('disabled',false);\n}\n\ndestroyYearArticleSlider = () =>{\n    $('.jsc-reinit-year-article').flickity();\n    $('.jsc-reinit-year-article').flickity('destroy');\n  }\n\n\ntriggerMobilePopup = () =>{\n    if($(window).width() < 1100){\n        $('#PopupModal-watchfinder').attr('open',true)\n    }\n}\nconstructParamUrl = (index, e,isPageType) => {\n    var $this = $(e);\n    var $input = $this.find('input');\n    \n    clearTabSessionStorage();\n\n    // Get brand, model and year, remove spaces\n    var $brand = $input.attr('brand').replace(/\\s+/g, '');\n    var $model = $input.attr('watch').replace(/\\s+/g, '');\n    var $year = $input.attr('year-ref').replace(/\\s+/g, '');\n    var $brandSpecificPage = $input.attr('brand-specific-page');\n    var $modelLandingPage = $input.attr('model-landing-page');\n\n    if (isPageType == 'brand'){\n        if ($brandSpecificPage) {\n            var findastrapLink = $brandSpecificPage;\n        }else{\n            var findastrapLink = window.location.pathname;\n        }\n    }else if (isPageType == 'model'){\n        var findastrapLink = $modelLandingPage;\n    }else {\n        /* Prefer model landing page if available (links to dedicated SF Lite page) */\n        if ($modelLandingPage && ($modelLandingPage.includes('/pages') || $modelLandingPage.includes('/products'))) {\n            var findastrapLink = $modelLandingPage;\n        } else {\n            /* Try constructing strap-model page URL: /pages/straps-{brand}-{model}-{reference} */\n            var hBrand = ($input.attr('brand') || '').toLowerCase().trim().replace(/[^a-z0-9\\s-]/g,'').replace(/\\s+/g,'-').replace(/-+/g,'-');\n            var hModel = ($input.attr('model') || '').toLowerCase().trim().replace(/[^a-z0-9\\s-]/g,'').replace(/\\s+/g,'-').replace(/-+/g,'-');\n            var hRef = ($input.attr('year-ref') || '').toLowerCase().trim().replace(/[^a-z0-9\\s-]/g,'').replace(/\\s+/g,'-').replace(/-+/g,'-');\n            var candidatePage = '/pages/straps-' + hBrand + '-' + hModel + '-' + hRef;\n            /* Check if the strap-model page exists via a quick HEAD request */\n            var xhr = new XMLHttpRequest();\n            xhr.open('HEAD', candidatePage, false);\n            try {\n                xhr.send();\n                if (xhr.status === 200) {\n                    var findastrapLink = candidatePage;\n                } else {\n                    var findastrapLink = '/pages/' + $('.jsc-watch-finder').attr('sf-page');\n                }\n            } catch(e) {\n                var findastrapLink = '/pages/' + $('.jsc-watch-finder').attr('sf-page');\n            }\n        }\n    }\n\n    // Construct URL \u2014 skip params for dedicated landing pages\n    var finalUrl;\n    if (findastrapLink.includes(\"/pages/straps-\") || findastrapLink.includes(\"/products/\")) {\n      finalUrl = findastrapLink;\n    } else {\n      finalUrl = `${findastrapLink}?brand=${$brand}&collection=${$model}&reference=${$year}`;\n    }\n    // Save to recently viewed (store the resolved destination so the card can navigate there later)\n    try { var _rb = $input ? ($input.attr(\"brand\") || $brand) : $brand; var _rc = $input ? ($input.attr(\"watch\") || $model) : $model; saveRecentWatch(_rb || \"\", _rc || \"\", $year || \"\", $input ? $input.attr(\"year-src\") || \"\" : \"\", finalUrl); } catch(e) {}\n    window.location.href = finalUrl;\n\n}\n\nclearTabSessionStorage = () => {\n  sessionStorage.removeItem('selectedStrapTab');\n  sessionStorage.removeItem('selectedFilterType');\n  sessionStorage.removeItem('selectedFilterCollection');\n  sessionStorage.removeItem('selectedStrapMaterial');\n}\n\nconstructYearWrapper = (index,e) => {\n    var $this = $(e);\n  if (!$this.find('.product-card').hasClass('border-active')) {\n\n    $('jsc-watch-finder .product-card').removeClass('border-active');\n    $this.find('.product-card').addClass('border-active');\n\n    var wrapper = $('.jsc-reinit-year-list');\n    wrapper.children().remove();\n    $('.article-slider-wrapper').remove();\n    $('jsc-year-list').hide();\n\n    $('jsc-reinit-year-list').show();\n    $('jsc-year-list').hide();\n\n\n        var $this_input = $this.find('input');\n        destroyYearArticleSlider();\n        // Get the image source from the attribute\n        var img_src = $this_input.attr('year-src');\n        var case_diameter = $this_input.attr('case-diameter');\n        var lug_distance = $this_input.attr('lug-to-lug-distance');\n        var lug_width = $this_input.attr('lug-width');\n        var article_urls = $this_input.attr('article-urls');\n\n        // Create a new div for each element\n        const newDiv = $('<div>').addClass('jsc_carousel__slide').attr('data-index',index);\n\n        // Append an image to the new div\n        newDiv.append($('<img>').attr('src', img_src));\n\n        // Create the placeholder-details div\n        var placeholderDetailsDiv = $('<div>').addClass('placeholder-details');\n\n        // Create the brand-name and brand-info divs\n        var brandName = localStorage.getItem('brand');\n        var referenceName  = localStorage.getItem('reference');\n        var brandNameDiv = $('<div>').addClass('brand-name fontWeight-6 m-b-5 text-left').text(brandName);\n        var referenceDiv = $('<div>').addClass('reference-name text-left').text(\"Reference: \" + referenceName);\n        \n         var brandInfoDiv = $('<span>').addClass('brand-info text-left m-r-5').text('');\n        brandInfoDiv.append(\"Case diameter: \" + (case_diameter ? case_diameter + \"mm,\" : \"-\"));\n\n        var lugWidthBrandInfoDiv = $('<span>').addClass('brand-info text-left').text('');\n        lugWidthBrandInfoDiv.append(\"Lug width: \" + (lug_width ? lug_width + \"mm\" : \"-\"));\n\n        var lugBrandInfoDiv = $('<div>').addClass('brand-info text-left').text('');\n        lugBrandInfoDiv.append(\"Lug-to-lug: \" + (lug_distance ? lug_distance + \"mm\" : \"-\"));\n\n        var infoBtnWrapperDiv = $('<div>').addClass('info-btn-wrapper');\n\n        // var findStrapButton = $('<div>').attr('onclick', 'findStrap()').addClass('button accent').text('Find A Strap');\n        var recommendStrapButton = $('<div>').attr('onclick', 'findStrap(\"recommended\")').addClass('button accent').text('Shop Recommended Straps');\n        var viewAllStrapButton = $('<div>').attr('onclick', 'findStrap(\"all\")').addClass('button').text('View All Compatible Straps');\n \n        infoBtnWrapperDiv.append(recommendStrapButton);\n        infoBtnWrapperDiv.append(viewAllStrapButton);\n        placeholderDetailsDiv.append(brandNameDiv, referenceDiv, brandInfoDiv, lugWidthBrandInfoDiv, lugBrandInfoDiv);\n\n        newDiv.append(placeholderDetailsDiv);\n        newDiv.append(infoBtnWrapperDiv);\n\n        wrapper.append(newDiv);\n\n        constructBlogSlider(article_urls);\n  }\n}\n\nconstructBlogSlider = (urls) => {\n    let urlArray = urls.split('>').map(url => url.trim()).filter(url => url !== \"\");\n    var sliderWrapper = $('<div>').addClass('article-slider-wrapper');\n    var ajaxCalls = []; \n\n    urlArray.forEach(url => {\n        let cleanUrl;\n        try {\n            cleanUrl = new URL(url).pathname;\n        } catch (e) {\n            cleanUrl = url;\n        }\n\n        let ajaxCall = $.ajax({\n            url: cleanUrl,\n            cache: false,\n            success: function(response) {\n                var title = $(response).find('h1').text().trim();\n                var pageTitle = $(response).find('title').text().trim();\n                pageTitle = pageTitle.replace(/\\s*[-\u2013]\\s*Delugs$/, ''); \n                var postDate = $(response).find('#main-content .post-meta-wrapper time').text().trim(); \n                var thirdParagraph = $(response).find('#main-content .rte p').eq(2).text().trim();\n                var preview = thirdParagraph.substring(0, 110) + '...';\n                var featuredImage = $(response).find('.blog-post-detail--wrapper .featured-image img').attr('src');\n\n                var articleDiv = $('<div>').addClass('article-slide');\n\n                if (title) {\n                    var titleElement = $('<h6 class=\"fontWeight-6 text-center\">').text(title);\n                    articleDiv.append(titleElement);\n                }\n\n                var contentWrapper = $('<div>').addClass('content-wrapper').css('padding', '15px');\n\n                if (featuredImage) {\n                    var imgWrapper = $('<div>').addClass('featured-image m-b-10');\n                    var img = $('<img>').attr('src', featuredImage).attr('alt', title).attr('width', '440').attr('height', '300');\n                    imgWrapper.append(img);\n                    contentWrapper.append(imgWrapper);\n                }\n\n                var datelement = $('<div class=\"article-date m-b-10\" style=\"color:#8888\">').text(postDate);\n                contentWrapper.append(datelement);\n\n                var pageTitleElement = $('<div class=\"page-title m-b-10 fontWeight-6\" style=\"color:var(--color-accent)\">').text(pageTitle);\n                contentWrapper.append(pageTitleElement);\n\n                var previewText = $('<div class=\"rte m-b-10\">').text(preview);\n                contentWrapper.append(previewText);\n\n                var readMoreLink = $('<a class=\"m-b-10\">').attr('href', url).attr('target', '_blank').text('Read more >').css('color', 'var(--color-accent)');\n                contentWrapper.append(readMoreLink);\n\n                articleDiv.append(contentWrapper);\n\n                // Append articleDiv to sliderWrapper\n                sliderWrapper.append(articleDiv);\n            },\n            error: function() {\n                console.log(\"Failed to fetch blog article:\", cleanUrl);\n            }\n        });\n\n        ajaxCalls.push(ajaxCall);\n    });\n\n    $.when.apply($, ajaxCalls).done(function() {\n  \n        $('jsc-year-right-wrapper').append(sliderWrapper);\n\n        $('.article-slider-wrapper').flickity({\n            cellAlign: 'left',\n            contain: true,\n            wrapAround: true,\n            autoPlay: 3000\n        });\n    });\n};\n\ninitLoader = () => {\n    var $html = `<div class=\"jsc-page-loading\">\n        <div class=\"jsc-spinner-container\">\n        <div class=\"jsc-spinner\"></div>\n        </div>\n        </div>`;\n    $('body').prepend($html);\n}\n\nremoveLoader = () => {\n    setTimeout(function(){\n        $('.jsc-page-loading').remove();\n    },2500);\n}\n\nfindStrap = (type) => {\n\n    localStorage.setItem('strapOnlyFilter', type);\n    var findastrapLink = $('jsc-watch-finder').attr('sf-page');\n    findastrapLink = '/pages/'+findastrapLink;\n    var recommendCol = $('.jsc-year-img-items .border-active').parent().find('.jsc-year-img-data').attr('recommend-collection');;\n    localStorage.setItem('recommendCol', recommendCol);\n\n    var watchFace = $('.jsc-year-img-items .border-active').parent().find('.jsc-year-img-data').attr('watch-face');;\n    localStorage.setItem('watchFace', watchFace);\n    \n    $('.brand-info').each(function() {\n        var text = $(this).text(); \n        if (text.includes('Case diameter:')) {\n          var caseDiameter = text.match(/[\\d.]+/)[0];\n          localStorage.setItem('caseDiameter', caseDiameter);\n        }\n      \n        if (text.includes('Lug width:')) {\n            var match = text.match(/[\\d.]+/);\n            if (match) { \n                var lugWidth = match[0]; \n                localStorage.setItem('lugWidth', lugWidth);\n            } else {\n\n                localStorage.setItem('lugWidth', '');\n            }\n        }\n      \n      });  \n\n    window.location.href = findastrapLink;\n}\n\n// Simple function to preserve watch finder parameters\npreserveWatchFinderParams = (url) => {\n  const currentUrl = window.location.href;\n  const hasBrandParam = currentUrl.includes('?brand=') || currentUrl.includes('&brand=');\n\n  if (hasBrandParam) {\n      // ---- Manual parse current window URL to preserve broken brand ----\n      const originalQS = window.location.search.slice(1);\n      const parts = originalQS.split('&');\n\n      let brand = '';\n      let collection = '';\n      let reference = '';\n      let i = 0;\n\n      while (i < parts.length) {\n          let part = parts[i];\n          if (!part) { i++; continue; }\n\n          const [key, ...rest] = part.split('=');\n          let value = rest.join('=');\n\n          if (key === 'brand') {\n              brand = value || '';\n              // Stitch consecutive parts without '=' (like '&S%C3%B6hne')\n              let j = i + 1;\n              while (j < parts.length && !parts[j].includes('=')) {\n                  brand += '&' + parts[j];\n                  j++;\n              }\n              i = j - 1; // skip stitched parts\n          } else if (key === 'collection') {\n              collection = value || '';\n          } else if (key === 'reference') {\n              reference = value || '';\n          }\n          i++;\n      }\n\n      const decodePlus = (s) => (s || '').replace(/\\+/g, ' ');\n      const safeDecode = (s) => {\n          try { return decodeURIComponent(decodePlus(s)); }\n          catch { return decodePlus(s); }\n      };\n\n      brand = safeDecode(brand).trim();\n      collection = safeDecode(collection).trim();\n      reference = safeDecode(reference).trim();\n\n      // Build the new URL\n      const params = [];\n      if (brand) params.push(`brand=${encodeURIComponent(brand)}`);\n      if (collection) params.push(`collection=${encodeURIComponent(collection)}`);\n      if (reference) params.push(`reference=${encodeURIComponent(reference)}`);\n\n      if (params.length) {\n          const separator = url.includes('?') ? '&' : '?';\n          const preservedUrl = `${url}${separator}${params.join('&')}`;\n          return preservedUrl;\n      } else {\n          return url;\n      }\n  }\n\n  // If no ?brand parameter, just navigate normally\n  return url;\n}\n\n// Override the default link behavior for filters and pagination\ndocument.addEventListener('DOMContentLoaded', function() {\n  // Override filter links - only within collection section\n  document.addEventListener('click', function(e) {\n      // Check if clicked element is within the ProductGridContainer (collection section)\n      const isWithinCollection = e.target.closest('#ProductGridContainer');\n      \n      // Check if we're on a watch finder page or collection page\n      const isWatchFinderPage = window.location.pathname.includes('/collections/') &&\n                               window.location.search.includes('brand=');\n      \n      // Check if clicked element is a filter link or pagination link\n      const filterLink = e.target.closest('a[href*=\"filter.\"]');\n      const paginationLink = e.target.closest('a[href*=\"page=\"]');\n      const sortLink = e.target.closest('a[href*=\"sort_by=\"]');\n      const paginationSpan = e.target.closest('.jsc-pagination-span');\n      \n      const isFilterLink = filterLink || paginationLink || sortLink || paginationSpan;\n      \n      // If it's a pagination span on a non-watch finder page, override the onclick to work normally\n      if (paginationSpan && !isWatchFinderPage && !isWithinCollection) {\n          // Get the URL from href or onclick\n          const href = paginationSpan.getAttribute('href');\n          let targetUrl = href;\n          \n          if (!targetUrl) {\n              const onclick = paginationSpan.getAttribute('onclick');\n              if (onclick) {\n                  const match = onclick.match(/preserveWatchFinderParams\\('([^']+)'/);\n                  if (match) {\n                      targetUrl = match[1];\n                  }\n              }\n          }\n          \n          if (targetUrl) {\n              window.location.href = targetUrl;\n          }\n          \n          return;\n      }\n      \n      // Only handle special cases for watch finder pages or collection sections\n      if (isFilterLink && (isWithinCollection || isWatchFinderPage)) {\n          let originalUrl;\n          \n          if (paginationSpan) {\n              // For pagination spans, extract URL from href or onclick attribute\n              const href = paginationSpan.getAttribute('href');\n              if (href) {\n                  originalUrl = href;\n              } else {\n                  // If no href, try to extract from onclick\n                  const onclick = paginationSpan.getAttribute('onclick');\n                  if (onclick) {\n                      const match = onclick.match(/preserveWatchFinderParams\\('([^']+)'/);\n                      if (match) {\n                          originalUrl = match[1];\n                      }\n                  }\n              }\n          } else {\n              // For regular links\n              const linkElement = e.target.closest('a');\n              originalUrl = linkElement.href;\n          }\n          \n          if (!originalUrl) {\n              return;\n          }\n          \n          e.preventDefault();\n          const preservedUrl = preserveWatchFinderParams(originalUrl);\n          window.location.href = preservedUrl;\n      }\n  });\n  \n  // Override form submissions for filters - only within collection section\n  document.addEventListener('submit', function(e) {\n      // Check if form is within the ProductGridContainer (collection section)\n      const isWithinCollection = e.target.closest('#ProductGridContainer');\n      \n      if (!isWithinCollection) {\n          return; // Exit early if not within collection section\n      } \n      \n      const isFilterForm = e.target.closest('form[action*=\"filter\"]') || e.target.closest('form[action*=\"collection\"]');\n      \n      if (isFilterForm) {\n          e.preventDefault();\n          const form = e.target;\n          const formData = new FormData(form);\n          const url = new URL(form.action || window.location.href);\n          \n          // Add form data to URL\n          for (let [key, value] of formData.entries()) {\n              url.searchParams.set(key, value);\n          }\n          \n          const preservedUrl = preserveWatchFinderParams(url.toString());\n          window.location.href = preservedUrl;\n      }\n  });\n});\n\n// Smart Search Functionality\ninitSmartSearch = () => {\n    const searchInput = document.getElementById('jsc-smart-search-input');\n    const resultsContainer = document.getElementById('smart-search-results');\n    \n    if (!searchInput || !resultsContainer) return;\n    \n    let searchTimeout;\n    \n    // Prevent zoom on mobile devices\n    searchInput.addEventListener('focus', () => {\n        // Force font size to prevent iOS Safari zoom\n        searchInput.style.fontSize = '16px';\n        searchInput.style.webkitTextSizeAdjust = '100%';\n    });\n    \n    // Debounced search function\n    searchInput.addEventListener('input', (e) => {\n        console.log('\uD83D\uDD0D Smart Search Input Event Triggered:', e.target.value);\n        clearTimeout(searchTimeout);\n        const query = e.target.value.trim();\n        \n        if (query.length < 2) {\n            console.log('\uD83D\uDD0D Query too short, clearing search results and year list');\n            hideSearchResults();\n            clearSearchResults();\n            return;\n        }\n        \n        console.log('\uD83D\uDD0D Starting search for:', query);\n        searchTimeout = setTimeout(() => {\n            performSmartSearch(query);\n        }, 300);\n    });\n    \n    // Hide results when clicking outside\n    document.addEventListener('click', (e) => {\n        if (!e.target.closest('.smart-search-container')) {\n            // Only hide if results are actually visible\n            const resultsContainer = document.getElementById('smart-search-results');\n            if (resultsContainer && resultsContainer.style.display === 'block') {\n                hideSearchResults();\n            }\n        }\n    });\n    \n    // Handle keyboard navigation\n    searchInput.addEventListener('keydown', (e) => {\n        const results = resultsContainer.querySelectorAll('.smart-search-result-item');\n        const activeResult = resultsContainer.querySelector('.smart-search-result-item.active');\n        \n        if (e.key === 'ArrowDown') {\n            e.preventDefault();\n            if (activeResult) {\n                activeResult.classList.remove('active');\n                const next = activeResult.nextElementSibling;\n                if (next) {\n                    next.classList.add('active');\n                } else {\n                    results[0]?.classList.add('active');\n                }\n            } else {\n                results[0]?.classList.add('active');\n            }\n        } else if (e.key === 'ArrowUp') {\n            e.preventDefault();\n            if (activeResult) {\n                activeResult.classList.remove('active');\n                const prev = activeResult.previousElementSibling;\n                if (prev) {\n                    prev.classList.add('active');\n                } else {\n                    results[results.length - 1]?.classList.add('active');\n                }\n            } else {\n                results[results.length - 1]?.classList.add('active');\n            }\n        } else if (e.key === 'Enter') {\n            e.preventDefault();\n            if (activeResult) {\n                activeResult.click();\n            }\n        } else if (e.key === 'Escape') {\n            hideSearchResults();\n            searchInput.blur();\n        }\n    });\n};\n\n// Fuzzy search algorithm\ncalculateFuzzyScore = (query, text) => {\n    if (!query || !text) return 0;\n    \n    // Ensure both are strings\n    const queryStr = String(query);\n    const textStr = String(text);\n    \n    const queryLower = queryStr.toLowerCase();\n    const textLower = textStr.toLowerCase();\n    \n    // Exact match gets highest score\n    if (textLower === queryLower) return 100;\n    \n    // Starts with query gets high score\n    if (textLower.startsWith(queryLower)) return 90;\n    \n    // Contains query gets medium score\n    if (textLower.includes(queryLower)) return 70;\n    \n    // Fuzzy matching using Levenshtein distance - more strict\n    const distance = levenshteinDistance(queryLower, textLower);\n    const maxLength = Math.max(queryLower.length, textLower.length);\n    const similarity = (maxLength - distance) / maxLength;\n    \n    // Only allow fuzzy matches if similarity is very high (80%+) and distance is small\n    if (similarity >= 0.8 && distance <= 3) {\n        return Math.max(0, similarity * 40); // Lower score for fuzzy matches\n    }\n    \n    return 0; // No fuzzy match if not similar enough\n};\n\n// Levenshtein distance calculation\nlevenshteinDistance = (str1, str2) => {\n    const matrix = [];\n    \n    for (let i = 0; i <= str2.length; i++) {\n        matrix[i] = [i];\n    }\n    \n    for (let j = 0; j <= str1.length; j++) {\n        matrix[0][j] = j;\n    }\n    \n    for (let i = 1; i <= str2.length; i++) {\n        for (let j = 1; j <= str1.length; j++) {\n            if (str2.charAt(i - 1) === str1.charAt(j - 1)) {\n                matrix[i][j] = matrix[i - 1][j - 1];\n            } else {\n                matrix[i][j] = Math.min(\n                    matrix[i - 1][j - 1] + 1,\n                    matrix[i][j - 1] + 1,\n                    matrix[i - 1][j] + 1\n                );\n            }\n        }\n    }\n    \n    return matrix[str2.length][str1.length];\n};\n\n// Normalize text for better matching\nnormalizeText = (text) => {\n    // Convert to string and handle null/undefined values\n    if (text === null || text === undefined) {\n        return '';\n    }\n    \n    const textStr = String(text);\n    return textStr\n        .toLowerCase()\n        // Handle German umlauts and special characters\n        .replace(/[\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]/g, 'a')\n        .replace(/[\u00E8\u00E9\u00EA\u00EB]/g, 'e')\n        .replace(/[\u00EC\u00ED\u00EE\u00EF]/g, 'i')\n        .replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6]/g, 'o')\n        .replace(/[\u00F9\u00FA\u00FB\u00FC]/g, 'u')\n        .replace(/[\u00E7]/g, 'c')\n        .replace(/[\u00F1]/g, 'n')\n        .replace(/[\u00DF]/g, 'ss')\n        .replace(/[\u00F6]/g, 'oe')\n        .replace(/[\u00FC]/g, 'ue')\n        .replace(/[\u00E4]/g, 'ae')\n        // Handle common brand name variations\n        .replace(/[&]/g, 'and')\n        .replace(/[.]/g, '')  // Remove periods (A. Lange -> A Lange)\n        .replace(/[''`]/g, '') // Remove apostrophes/quotes\n        .replace(/[-]/g, ' ') // Convert hyphens to spaces\n        .replace(/[^a-z0-9\\s]/g, '') // Remove other special characters\n        .replace(/\\s+/g, ' ') // Normalize multiple spaces to single space\n        .trim();\n};\n\n// Perform the smart search\n// Delugs search v2: token-based cross-field matching (\"rolex submariner\" works),\n// nickname dictionary, punctuation-insensitive references, demand-ranked ties.\nvar SF_NICKNAMES = {\n  'moonwatch': ['speedmaster'], 'speedy': ['speedmaster'],\n  'sub': ['submariner'], 'subs': ['submariner'],\n  'pepsi': ['blro', '16710', '1675'], 'batman': ['blnr'], 'batgirl': ['blnr'],\n  'hulk': ['116610lv'], 'kermit': ['16610lv', '126610lv'], 'starbucks': ['126610lv'],\n  'smurf': ['116619'], 'sprite': ['126720'], 'rootbeer': ['126711', '126715', '16753'],\n  'snowflake': ['sbga211', 'sbga413'], 'gs': ['grand seiko'],\n  'pp': ['patek'], 'ap': ['audemars'], 'vc': ['vacheron'], 'fpj': ['journe'],\n  'dj': ['datejust'], 'op': ['oyster perpetual'], 'exp': ['explorer'],\n  'bb': ['black bay'], 'bb58': ['black bay', '79030'], 'bb54': ['black bay', '79000'],\n  'turtle': ['srp77', 'srpe93', 'turtle'], 'samurai': ['srpb', 'samurai'],\n  'alpinist': ['alpinist', 'spb121'], 'cocktail': ['cocktail', 'presage'],\n  'aquanaut': ['aquanaut', '5167'], 'nautilus': ['nautilus', '5711'],\n  'royaloak': ['royal oak'], 'at': ['aqua terra'], 'po': ['planet ocean'], 'smp': ['seamaster'],\n  'navi': ['navitimer'], 'ff': ['fifty fathoms'], 'pam': ['panerai', 'pam'],\n  'lum': ['luminor'], 'speedtimer': ['speedtimer'], 'monaco': ['monaco'], 'carrera': ['carrera']\n};\n\nperformSmartSearch = (query) => {\n    // Delugs: search runs server-side (/api/strap-finder/search) so the\n    // browser never needs the full catalog. Token guard drops stale responses.\n    var q = String(query || '').trim();\n    if (q.length < 2) { displaySearchResults([]); return; }\n    var myToken = (performSmartSearch._t = (performSmartSearch._t || 0) + 1);\n    $.getJSON(sfApiBase + '/api/strap-finder/search', { q: q }).then(function (d) {\n        if (myToken !== performSmartSearch._t) return;\n        var sortedResults = (d && d.results) || [];\n        try {\n          clearTimeout(window.sfSearchLogTimer);\n          window.sfSearchLogTimer = setTimeout(function(){\n            sfLogSelection('search_query', '', '', '', { searchQuery: q, resultCount: (d && d.resultCount) || 0 });\n          }, 1500);\n        } catch (eSL) {}\n        displaySearchResults(sortedResults);\n    });\n};\n\n// Display search results\ndisplaySearchResults = (results) => {\n    console.log('\uD83D\uDD0D displaySearchResults called with', results.length, 'results');\n    \n    if (results.length === 0) {\n        console.log('\uD83D\uDD0D No results, clearing year image list');\n        // Clear the year image list when no results\n        $('jsc-year-reference-img').children().remove();\n        return;\n    }\n    \n    // Skip dropdown, go directly to constructing year image list\n    console.log('\uD83D\uDD0D Constructing year image list from search results');\n    constructSmartSearchYearImg(results);\n};\n\n// Hide search results\nhideSearchResults = () => {\n    console.log('\uD83D\uDD0D hideSearchResults called');\n    const resultsContainer = document.getElementById('smart-search-results');\n    if (resultsContainer) {\n        resultsContainer.style.display = 'none';\n    }\n};\n\n// Clear smart search input and results\nclearSmartSearch = () => {\n    console.log('\uD83D\uDD0D clearSmartSearch called');\n    const searchInput = document.getElementById('jsc-smart-search-input');\n    if (searchInput) {\n        // Clear the input value completely\n        searchInput.value = '';\n        searchInput.textContent = '';\n        searchInput.innerText = '';\n        \n        // Reset placeholder using multiple methods\n        searchInput.setAttribute('placeholder', 'Search');\n        $('#jsc-smart-search-input').attr('placeholder', 'Search');\n        $('#jsc-smart-search-input').val('');\n        \n        // Force a complete reset\n        // searchInput.blur(); // Removed to test mobile behavior\n        \n        console.log('\uD83D\uDD0D Search input cleared, value:', searchInput.value, 'placeholder:', searchInput.placeholder);\n    }\n    hideSearchResults();\n    \n};\n\n// Clear search results and reset UI to original state\nclearSearchResults = () => {\n    console.log('\uD83D\uDD0D clearSearchResults called - resetting UI to original state');\n    \n    // Clear the year image list\n    $('jsc-year-reference-img').children().remove();\n    \n    // Hide year wrapper sections\n    $('jsc-watch-finder-content').removeClass('show-year');\n    $('jsc-year-wrapper').hide();\n    $('jsc-year-right-wrapper').hide();\n    $('jsc-year-reference-img').hide();\n    \n    // Clear pagination\n    var paginationContainer = $('#jsc-pagination-container');\n    var paginationPages = paginationContainer.find('.jsc-pagination-pages');\n    paginationPages.children().remove();\n    paginationPages.removeClass('add-border');\n};\n\n// Handle smart search result selection\nselectSmartSearchResult = (brand, collection, reference, identifier) => {\n    console.log('\uD83D\uDD0D selectSmartSearchResult called with:', { brand, collection, reference, identifier });\n    // Set local storage\n    setLocalStorage('brand', brand);\n    setLocalStorage('model', collection);\n    setLocalStorage('reference', reference);\n    \n    // Update UI\n    const brandValue = brand ? \"Brand: \" + brand : \"-- Select Brand --\";\n    $('#jsc-brand .custom-select--button .jsc-brand-search').attr('placeholder', brandValue);\n    $('#jsc-brand .custom-select--button .jsc-brand-search').val(brandValue);\n    $('#jsc-brand .custom-select--button .jsc-brand-search').addClass('jsc-placeholder-black-color');\n    \n    const modelValue = collection ? \"Collection: \" + collection : \"-- Select Collection --\";\n    $('#jsc-model .custom-select--button .jsc-model-search').attr('placeholder', modelValue);\n    $('#jsc-model .custom-select--button .jsc-model-search').val(modelValue);\n    $('#jsc-model .custom-select--button .jsc-model-search').addClass('jsc-placeholder-black-color');\n\n    \n    // Load the watch data\n    var isPageType = $('jsc-watch-finder--drop-down').attr('sfPageType');\n    populateReferenceImageHtml(collection, isPageType, brand);\n    \n    // Show the year wrapper\n    $('jsc-watch-finder-content').addClass('show-year');\n    $('jsc-year-wrapper').show();\n    $('jsc-year-right-wrapper').show();\n    $('jsc-year-reference-img').show();\n    \n    // Hide search results\n    hideSearchResults();\n    \n    // Clear search input\n    document.getElementById('jsc-smart-search-input').value = '';\n};\n\n// Construct year image list from search results\nconstructYearImgFromSearchResults = (searchResults) => {\n    console.log('\uD83D\uDD0D constructYearImgFromSearchResults called with', searchResults.length, 'results');\n    \n    // Reset brand and model dropdowns since we're showing search results\n    console.log('\uD83D\uDD0D Resetting brand and model dropdowns for search results');\n    resetBrandOption();\n    resetModelOption();\n    \n    // Clear session storage\n    setLocalStorage('brand', '');\n    setLocalStorage('model', '');\n    setLocalStorage('reference', '');\n\n    \n    // Convert search results to the format expected by loadTableRow\n    // Each search result should be treated as a separate watch card\n    const htmlArray = searchResults.map(item => {\n        // Each reference gets its own card - don't group by watchImage\n        const yearNumString = item.reference; // Single reference per card\n        \n        // Collect article handles (only if they exist)\n        const articleHandles = [item.article1, item.article2, item.article3].filter(Boolean).join('>');\n        \n        // Return in the same format as the original loadTableRow function expects\n        return `${yearNumString}|~|${item.watchImage}|~|${item.caseDiameter}|~|${item.lugToLugDistance}|~|${item.lugWidth}|~|${item.watchHeadImage}|~|${articleHandles}|~|${item.recommendedCollection}|~|${item.brand}|~|${item.collection}|~|${item.brandSpecificPage}|~|${item.model}|~|${item.modelLandingPage}|~|${item.identifier}`;\n    });\n    \n    console.log('\uD83D\uDD0D Constructed htmlArray for search results:', htmlArray);\n    \n    // Use the existing loadTableRow function to display the results\n    var isPageType = $('jsc-watch-finder--drop-down').attr('sfPageType');\n    loadTableRow(htmlArray, isPageType);\n    \n    // Show the year wrapper\n    $('jsc-watch-finder-content').addClass('show-year');\n    $('jsc-year-wrapper').show();\n    $('jsc-year-right-wrapper').show();\n    $('jsc-year-reference-img').show();\n};\n\n// Construct year image list specifically for smart search results\nconstructSmartSearchYearImg = (searchResults) => {\n    console.log('\uD83D\uDD0D constructSmartSearchYearImg called with', searchResults.length, 'results');\n    \n    // Reset brand and model dropdowns since we're showing search results\n    console.log('\uD83D\uDD0D Resetting brand and model dropdowns for search results');\n    resetBrandOption();\n    resetModelOption();\n    \n    // Clear session storage\n    setLocalStorage('brand', '');\n    setLocalStorage('model', '');\n    setLocalStorage('reference', '');\n    \n    // Convert search results to the format expected by loadTableRow\n    // Each search result should be treated as a separate watch card\n    const htmlArray = searchResults.map(item => {\n        // Each reference gets its own card - don't group by watchImage\n        const yearNumString = item.reference; // Single reference per card\n        \n        // Collect article handles (only if they exist)\n        const articleHandles = [item.article1, item.article2, item.article3].filter(Boolean).join('>');\n        \n        // Return in the same format as the original loadTableRow function expects\n        return `${yearNumString}|~|${item.watchImage}|~|${item.caseDiameter}|~|${item.lugToLugDistance}|~|${item.lugWidth}|~|${item.watchHeadImage}|~|${articleHandles}|~|${item.recommendedCollection}|~|${item.brand}|~|${item.collection}|~|${item.brandSpecificPage}|~|${item.model}|~|${item.modelLandingPage}|~|${item.identifier}`;\n    });\n    \n    console.log('\uD83D\uDD0D Constructed htmlArray for smart search results:', htmlArray);\n    \n    // Use the existing loadTableRow function to display the results\n    var isPageType = $('jsc-watch-finder--drop-down').attr('sfPageType');\n    loadTableRow(htmlArray, isPageType);\n    \n    // Show the year wrapper\n    $('jsc-watch-finder-content').addClass('show-year');\n    $('jsc-year-wrapper').show();\n    $('jsc-year-right-wrapper').show();\n    $('jsc-year-reference-img').show();\n};\n\n// Function to add watch to session storage for non-logged-in users\naddToSessionStorage = (watchData) => {\n    let sessionWatches = [];\n    \n    try {\n        const stored = sessionStorage.getItem('sf_session_watches');\n        if (stored) {\n            sessionWatches = JSON.parse(stored);\n        }\n    } catch (e) {\n        console.warn('Error parsing session storage:', e);\n        sessionWatches = [];\n    }\n    \n    // Check if watch already exists using brand + collection + reference matching\n    const exists = sessionWatches.some(watch => \n        watch.brand === watchData.brand && \n        watch.collection === watchData.collection && \n        watch.reference === watchData.reference\n    );\n    \n    if (!exists) {\n        // Enforce 50 watch limit\n        if (sessionWatches.length < 50) {\n            sessionWatches.push(watchData);\n            sessionStorage.setItem('sf_session_watches', JSON.stringify(sessionWatches));\n        }\n    } \n    \n    // Update UI\n    updateSessionStorageWatchCollection();\n    updateSessionStorageCounters();\n    updateStrapFinderTabIcons();\n};\n\n// Function to remove watch from session storage for non-logged-in users\nremoveFromSessionStorage = (watchData, element) => {\n    let sessionWatches = [];\n    \n    try {\n        const stored = sessionStorage.getItem('sf_session_watches');\n        if (stored) {\n            sessionWatches = JSON.parse(stored);\n        }\n    } catch (e) {\n        console.warn('Error parsing session storage:', e);\n        return;\n    }\n    \n    // Remove the watch using brand + collection + reference matching\n    sessionWatches = sessionWatches.filter(watch => \n        !(watch.brand === watchData.brand && \n          watch.collection === watchData.collection && \n          watch.reference === watchData.reference)\n    );\n    sessionStorage.setItem('sf_session_watches', JSON.stringify(sessionWatches));\n    \n    // Remove the watch card from DOM if element is provided\n    if (element) {\n        $(element).closest('.jsc-year-img-item').remove();\n    }\n    \n    // Update UI\n    updateSessionStorageWatchCollection();\n    updateSessionStorageCounters();\n    updateStrapFinderTabIcons();\n};\n\n// Function to update session storage counters\nupdateSessionStorageCounters = () => {\n    let sessionWatches = [];\n    \n    try {\n        const stored = sessionStorage.getItem('sf_session_watches');\n        if (stored) {\n            sessionWatches = JSON.parse(stored);\n        }\n    } catch (e) {\n        sessionWatches = [];\n    }\n    \n    if (sessionWatches.length >= 50) {\n        $('.sf-saved-watch-error-limit-message').show();\n        $('.sf-saved-watch-count-message').hide();\n    } else if (sessionWatches.length > 0) {\n        $('.sf-saved-watch-error-limit-message').hide();\n        $('.sf-saved-watch-count-message').show();\n        $('.sf-saved-watch-count-message .sf-saved-watch-count').text(sessionWatches.length);\n    } else {\n        $('.sf-saved-watch-error-limit-message').hide();\n        $('.sf-saved-watch-count-message').hide();\n    }\n};\n\n// Function to migrate session storage to metafields when user logs in\nmigrateSessionStorageToMetafields = (retryCount = 0) => {\n    const maxRetries = 5;\n    const retryDelay = 2000; // 2 seconds\n    \n    console.log(`\uD83D\uDD04 Migration attempt ${retryCount + 1}/${maxRetries + 1}`);\n    \n    let sessionWatches = [];\n    \n    try {\n        const stored = sessionStorage.getItem('sf_session_watches');\n        if (stored) {\n            sessionWatches = JSON.parse(stored);\n        }\n    } catch (e) {\n        console.warn('Error parsing session storage for migration:', e);\n        return;\n    }\n    \n    console.log('\uD83D\uDCE6 Session watches to migrate:', sessionWatches.length);\n    \n    if (sessionWatches.length === 0) {\n        console.log('\u2705 No session watches to migrate');\n        return;\n    }\n    \n    const $watchFinder = $('jsc-watch-finder');\n    const customerID = $watchFinder.attr('customer-id');\n    const rawWatchList = $watchFinder.attr('customer-save-watch-list');\n    const rawTags = $watchFinder.attr('customer-current-tags') || '';\n    let existingTags = rawTags.split(',').map(tag => tag.trim()).filter(Boolean);\n    \n    console.log('\uD83D\uDD0D Current metafield data:', rawWatchList);\n    console.log('\uFFFD\uFFFD Customer ID:', customerID);\n    \n    // Check if metafields are available (only retry if null/undefined, not if empty string)\n    if ((rawWatchList === null || rawWatchList === undefined) && retryCount < maxRetries) {\n        console.log(`\u23F3 Metafields not ready yet, retrying in ${retryDelay}ms... (attempt ${retryCount + 1}/${maxRetries})`);\n        setTimeout(() => {\n            migrateSessionStorageToMetafields(retryCount + 1);\n        }, retryDelay);\n        return;\n    }\n    \n    // If max retries reached and metafields still not ready, refresh page as fallback\n    if ((rawWatchList === null || rawWatchList === undefined) && retryCount >= maxRetries) {\n        console.log('\uD83D\uDD04 Max retries reached, refreshing page to ensure metafields are loaded...');\n        window.location.reload();\n        return;\n    }\n    \n    // Parse existing watches\n    let existingWatches = safeParseJSON(rawWatchList, []);\n    \n    // Merge session storage watches with existing metafield watches\n    const mergedWatches = [...existingWatches];\n    \n    sessionWatches.forEach(sessionWatch => {\n        // Check if watch already exists (by brand + collection + reference)\n        const exists = existingWatches.length > 0 && existingWatches.some(existing => \n            existing.brand === sessionWatch.brand && \n            existing.collection === sessionWatch.collection && \n            existing.reference === sessionWatch.reference\n        );\n        if (!exists) {\n            mergedWatches.push(sessionWatch);\n        }\n    });\n    \n    // Enforce 50 watch limit\n    if (mergedWatches.length > 50) {\n        mergedWatches.splice(50);\n    }\n    \n    // Update customer tags\n    const currentTagSet = new Set();\n    mergedWatches.forEach(watch => {\n        if (watch.brand) currentTagSet.add(`sf_brand_${watch.brand.toLowerCase()}`);\n        if (watch.model) currentTagSet.add(`sf_model_${watch.model.toLowerCase()}`);\n        if (watch.collection) currentTagSet.add(`sf_collection_${watch.collection.toLowerCase()}`);\n        if (watch.identifier) currentTagSet.add(`sf_id_${watch.identifier.toLowerCase()}`);\n        if (watch.reference) currentTagSet.add(`sf_ref_${watch.reference.toLowerCase()}`);\n    });\n    \n    // Handle watch count range tags\n    for (let i = 1; i <= 50; i += 5) {\n        const upper = Math.min(i + 4, 50);\n        currentTagSet.delete(`sf_${i}-${upper}_watches`);\n    }\n    \n    if (mergedWatches.length > 0) {\n        const lowerBound = Math.floor((mergedWatches.length - 1) / 5) * 5 + 1;\n        const upperBound = Math.min(lowerBound + 4, 50);\n        currentTagSet.add(`sf_${lowerBound}-${upperBound}_watches`);\n    }\n    \n    const newTags = Array.from(currentTagSet).filter(tag => !existingTags.includes(tag));\n    const updatedTagSet = new Set([...existingTags, ...newTags]);\n    \n    $watchFinder.attr('customer-current-tags', Array.from(updatedTagSet).join(','));\n    \n    // Send to webhook\n    $.ajax({\n        url: \"https://webhooks.mechanic.dev/411d70c6-afc5-463b-9db8-583a633f213a\",\n        method: \"POST\",\n        contentType: \"application/json\",\n        data: JSON.stringify({\n            customer_id: customerID,\n            watches: mergedWatches,\n            tags: Array.from(updatedTagSet)\n        }),\n    }).done(() => {\n        // Clear session storage after successful migration\n        sessionStorage.removeItem('sf_session_watches');\n        \n        // Update the customer-save-watch-list attribute with merged watches\n        $watchFinder.attr('customer-save-watch-list', JSON.stringify(mergedWatches));\n        \n        // Update UI to reflect migrated watches\n        const watchList = mergedWatches;\n        \n        if (watchList && watchList.length >= 50) {\n            $('.sf-saved-watch-error-limit-message').show();\n            $('.sf-saved-watch-count-message').hide();\n        } else if (watchList && watchList.length > 0) {\n            $('.sf-saved-watch-error-limit-message').hide();\n            $('.sf-saved-watch-count-message').show();\n            $('.sf-saved-watch-count-message .sf-saved-watch-count').text(watchList.length);\n        } else {\n            $('.sf-saved-watch-error-limit-message').hide();\n            $('.sf-saved-watch-count-message').hide();\n        }\n        \n        // Update icons in Strap Finder tab\n        updateStrapFinderTabIcons();\n        \n        // Update Watch Collection tab visibility\n        const $noWatchesDiv = $('#_jscSavedWatchesList_na');\n        const $watchesDiv = $('#_jscSavedWatchesList_display');\n        \n        if (watchList.length === 0) {\n            $noWatchesDiv.show();\n            $watchesDiv.hide();\n        } else {\n            $noWatchesDiv.hide();\n            $watchesDiv.show();\n        }\n        \n        // Populate logged-in watches\n        updateLoggedInWatchCollection();\n    }).fail((error) => {\n        console.error(\"\u274C Error migrating session storage:\", error);\n    });\n    \n};\n\n// Function to update the Watch Collection tab for non-logged-in users\nupdateSessionStorageWatchCollection = () => {\n    let sessionWatches = [];\n    \n    try {\n        const stored = sessionStorage.getItem('sf_session_watches');\n        if (stored) {\n            sessionWatches = JSON.parse(stored);\n        }\n    } catch (e) {\n        console.warn('Error parsing session storage:', e);\n        sessionWatches = [];\n    }\n    \n    const $noWatchesDiv = $('#_jscSavedWatchesList_na');\n    const $watchesDiv = $('#_jscSavedWatchesList_display');\n    \n    if (sessionWatches.length === 0) {\n        $noWatchesDiv.show();\n        $watchesDiv.hide();\n    } else {\n        $noWatchesDiv.hide();\n        $watchesDiv.show();\n        \n        // Populate the session storage watches\n        const $container = $('#session-storage-watches');\n        $container.empty();\n        \n        sessionWatches.forEach((watch, index) => {\n            const watchHtml = `\n                <div\n                    class=\"jsc-year-img-item cursor columns carousel__slide small-6 medium-6 large-6\"\n                    data-brand=\"${watch.brand}\"\n                    data-model=\"${watch.model}\"\n                    data-collection=\"${watch.collection}\"\n                    data-identifier=\"${watch.identifier}\"\n                    data-reference=\"${watch.reference}\">\n                    <div class=\"product-card-${index + 1} product-card text-left product-card--content-spacing-true product-card--border-false\">\n                        <a href=\"${watch.url}\">\n                            <div class=\"jsc-year-img\">\n                                <img\n                                    class=\"no-blur product-secondary-image lazyautosizes ls-is-cached lazyloaded\"\n                                    src=\"${watch.watchImage}\"\n                                    alt=\"${watch.brand} ${watch.collection} ${watch.reference}\"/>\n                            </div>\n                        </a>\n                        <div class=\"jsc-sf-product-card-save-watch sf-filled \" onclick=\"removeFromSessionStorage({ brand: '${watch.brand}', model: '${watch.model}', reference: '${watch.reference}', collection: '${watch.collection}', identifier: '${watch.identifier}' }, this)\">\n                            <div class=\"sf-save-watch-button\">\n                                <span class=\"sf-save-watch-icon\">\n                                    <img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">\n                                </span>\n                            </div>\n                        </div>\n                        <div class=\"product-card-info\" style=\"background-color: #fff;\">\n                            <a href=\"${watch.url}\">\n                                <div class=\"fontWeight-6\" style=\"font-size: 15px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;\">${watch.model}</div>\n                                <div style=\"margin-top: 10px;font-size: 13px; color: #7E7E7E;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;\">Reference: ${watch.reference}</div>\n                            </a>\n                        </div>\n                    </div>\n                </div>\n            `;\n            $container.append(watchHtml);\n        });\n    }\n};\n\n// Function to update icons in Strap Finder tab for non-logged-in users\nupdateStrapFinderTabIcons = () => {\n    const $watchFinder = $('jsc-watch-finder');\n    const customerId = $watchFinder.attr('customer-id');\n    \n    if (customerId) {\n        // For logged-in users, use metafield data\n        const customerMetafieldData = $watchFinder.attr('customer-save-watch-list');\n        const watchList = safeParseJSON(customerMetafieldData, []);\n        \n        $('#Watch-Finder--Drawer .sf-panel-content-strap-finder .jsc-sf-product-card-save-watch').each(function() {\n            const $saveWatch = $(this);\n            const $dataElement = $saveWatch.closest('.columns').find('.jsc-year-img-data');\n            const watchBrand = $dataElement.attr('brand');\n            const watchCollection = $dataElement.attr('watch');\n            const watchReference = $dataElement.attr('year-ref');\n            \n            const isSaved = watchList.some(watch => \n                watch.brand === watchBrand && \n                watch.collection === watchCollection && \n                watch.reference === watchReference\n            );\n            \n            if (isSaved) {\n                // Show tick icon (saved)\n                $saveWatch.addClass('sf-filled');\n                $saveWatch.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">');\n            } else {\n                // Show plus icon (not saved)\n                $saveWatch.removeClass('sf-filled');\n                $saveWatch.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/add-circle.svg?v=1760405891\" width=\"40\" height=\"40\" alt=\"Add\">');\n            }\n        });\n    } else {\n        // For non-logged-in users, use session storage\n        let sessionWatches = [];\n        try {\n            const stored = sessionStorage.getItem('sf_session_watches');\n            if (stored) {\n                sessionWatches = JSON.parse(stored);\n            }\n        } catch (e) {\n            sessionWatches = [];\n        }\n        \n        $('#Watch-Finder--Drawer .sf-panel-content-strap-finder .jsc-sf-product-card-save-watch').each(function() {\n            const $saveWatch = $(this);\n            const $dataElement = $saveWatch.closest('.columns').find('.jsc-year-img-data');\n            const watchBrand = $dataElement.attr('brand');\n            const watchCollection = $dataElement.attr('watch');\n            const watchReference = $dataElement.attr('year-ref');\n            console.log('\uD83D\uDD0D updateStrapFinderTabIcons (non-logged-in) - Watch check:', {\n                watchBrand,\n                watchCollection, \n                watchReference,\n                sessionWatchesCount: sessionWatches.length\n            });\n            const isSaved = sessionWatches.some(watch => \n                watch.brand === watchBrand && \n                watch.collection === watchCollection && \n                watch.reference === watchReference\n            );\n            \n            \n            \n            if (isSaved) {\n                // Show tick icon (saved)\n                $saveWatch.addClass('sf-filled');\n                $saveWatch.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">');\n            } else {\n                // Show plus icon (not saved)\n                $saveWatch.removeClass('sf-filled');\n                $saveWatch.find('.sf-save-watch-icon').html('<img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/add-circle.svg?v=1760405891\" width=\"40\" height=\"40\" alt=\"Add\">');\n            }\n        });\n    }\n};\n\n// Function to populate logged-in user's watch collection\nupdateLoggedInWatchCollection = () => {\n    const $watchFinder = $('jsc-watch-finder');\n    const customerMetafieldData = $watchFinder.attr('customer-save-watch-list');\n    const watchList = safeParseJSON(customerMetafieldData, []);\n    \n    console.log('\uD83D\uDD04 Updating logged-in watch collection, watch count:', watchList.length);\n    \n    const $container = $('#logged-in-watches');\n    $container.empty();\n    \n    if (watchList.length === 0) {\n        return;\n    }\n    \n    watchList.forEach((watch, index) => {\n        const watchHtml = `\n            <div\n                class=\"jsc-year-img-item cursor columns carousel__slide small-6 medium-6 large-6\"\n                data-brand=\"${watch.brand}\"\n                data-model=\"${watch.model}\"\n                data-collection=\"${watch.collection}\"\n                data-identifier=\"${watch.identifier}\"\n                data-reference=\"${watch.reference}\">\n                <div class=\"product-card-${index + 1} product-card text-left product-card--content-spacing-true product-card--border-false\">\n                    <a href=\"${watch.url}\">\n                        <div class=\"jsc-year-img\">\n                            <img\n                                class=\"no-blur product-secondary-image lazyautosizes ls-is-cached lazyloaded\"\n                                src=\"${watch.watchImage}\"\n                                alt=\"${watch.brand} ${watch.collection} ${watch.reference}\"/>\n                        </div>\n                    </a>\n                    <div class=\"jsc-sf-product-card-save-watch\" onclick=\"removeFromWatchList({ brand: '${watch.brand}', model: '${watch.model}', reference: '${watch.reference}', collection: '${watch.collection}', identifier: '${watch.identifier}' }, this)\">\n                        <div class=\"sf-save-watch-button\">\n                            <span class=\"sf-save-watch-icon\">\n                                <img src=\"https://cdn.shopify.com/s/files/1/0054/9040/9585/files/tick-circle.svg?v=1760404794\" width=\"40\" height=\"40\" alt=\"Saved\">\n                            </span>\n                        </div>\n                    </div>\n                    <div class=\"product-card-info\" style=\"background-color: #fff;\">\n                        <a href=\"${watch.url}\">\n                            <div class=\"fontWeight-6\" style=\"font-size: 15px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;\">${watch.model}</div>\n                            <div style=\"margin-top: 10px;font-size: 13px; color: #7E7E7E;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100%;\">Reference: ${watch.reference}</div>\n                        </a>\n                    </div>\n                </div>\n            </div>\n        `;\n        $container.append(watchHtml);\n    });\n};"],
  "mappings": "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",
  "names": ["resultsContainer"]
}
