true
7291164229728
41558266544224
[{"id":278366781536,"handle":"all","title":"All","updated_at":"2025-09-06T11:14:35-04:00","body_html":null,"published_at":"2025-02-10T13:57:36-05:00","sort_order":"alpha-asc","template_suffix":null,"disjunctive":false,"rules":[{"column":"variant_inventory","relation":"greater_than","condition":"-10000"}],"published_scope":"web"},{"id":271134883936,"handle":"best-selling-products","title":"Best Selling Products","updated_at":"2025-09-06T11:14:35-04:00","body_html":null,"published_at":"2024-07-05T23:27:18-04:00","sort_order":"best-selling","template_suffix":null,"disjunctive":true,"rules":[{"column":"title","relation":"contains","condition":"Best Selling"},{"column":"title","relation":"not_contains","condition":"Best Selling"}],"published_scope":"web"},{"id":278368682080,"handle":"engine-air-oil-separator","title":"Engine Air Oil Separator","updated_at":"2025-09-06T07:03:22-04:00","body_html":null,"published_at":"2025-02-10T14:02:44-05:00","sort_order":"best-selling","template_suffix":null,"disjunctive":false,"rules":[{"column":"type","relation":"equals","condition":"Engine Air Oil Separator"}],"published_scope":"web"},{"id":263168786528,"handle":"everything","title":"Everything","updated_at":"2025-09-06T11:14:35-04:00","body_html":"","published_at":"2024-08-27T16:06:31-04:00","sort_order":"best-selling","template_suffix":"","disjunctive":true,"rules":[{"column":"variant_weight","relation":"greater_than","condition":"1"},{"column":"variant_weight","relation":"less_than","condition":"1"}],"published_scope":"web"},{"id":261186420832,"handle":"iag","title":"IAG","updated_at":"2025-09-06T07:03:22-04:00","body_html":"","published_at":"2021-10-25T13:25:01-04:00","sort_order":"best-selling","template_suffix":"","disjunctive":false,"rules":[{"column":"vendor","relation":"equals","condition":"IAG"}],"published_scope":"global"},{"id":285500375136,"handle":"d","title":"July 4th Sale!","updated_at":"2025-09-06T07:03:22-04:00","body_html":"\u003ctable width=\"625\" height=\"115\" style=\"width: 108.413%;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 100%;\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1398\/9853\/files\/mbrp-4th-july.png?v=1751657471\" alt=\"\" width=\"214\" height=\"214\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1398\/9853\/files\/Copy_of_cobb-accessport-sale.png?v=1751639601\" alt=\"\" width=\"209\" height=\"209\"\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e","published_at":"2025-07-04T15:34:49-04:00","sort_order":"best-selling","template_suffix":"","disjunctive":false,"rules":[{"column":"tag","relation":"equals","condition":"Sale:July 4th Sale"}],"published_scope":"global"},{"id":271134916704,"handle":"newest-products","title":"Newest Products","updated_at":"2025-09-06T11:14:35-04:00","body_html":null,"published_at":"2024-07-05T23:27:19-04:00","sort_order":"created-desc","template_suffix":null,"disjunctive":true,"rules":[{"column":"title","relation":"contains","condition":"Newest"},{"column":"title","relation":"not_contains","condition":"Newest"}],"published_scope":"web"},{"id":286575984736,"handle":"wrx-sti-brz-gr86-performance-parts-sale-import-image-racing","updated_at":"2025-09-06T11:13:41-04:00","published_at":"2025-08-25T17:50:50-04:00","sort_order":"best-selling","template_suffix":"","published_scope":"global","title":"WRX, STI, BRZ \u0026 GR86 Performance Parts Sale | Import Image Racing","body_html":"\u003cstyle\u003e\n .sales-overview-container {\n max-width: 1200px;\n margin: 0 auto;\n padding: 20px;\n font-family: inherit;\n }\n\n .sales-overview-container h1 {\n text-align: center;\n color: inherit;\n margin-bottom: 40px;\n font-size: 2.5em;\n border-bottom: 3px solid #e74c3c;\n padding-bottom: 15px;\n }\n\n .loading-message {\n text-align: center;\n padding: 40px;\n font-size: 1.2em;\n color: #666;\n }\n\n .sale-item {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 15px;\n padding: 25px;\n margin-bottom: 30px;\n box-shadow: 0 8px 25px rgba(0,0,0,0.15);\n }\n\n .sale-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n flex-wrap: wrap;\n }\n\n .sale-title {\n color: #fff;\n margin: 0;\n font-size: 1.8em;\n text-shadow: 2px 2px 4px rgba(0,0,0,0.3);\n }\n\n .sale-countdown {\n background: rgba(231, 76, 60, 0.9);\n color: white;\n padding: 10px 20px;\n border-radius: 25px;\n font-weight: bold;\n box-shadow: 0 4px 15px rgba(231, 76, 60, 0.4);\n }\n\n .sale-end-label {\n font-size: 0.9em;\n }\n\n .sale-end-date {\n font-size: 1em;\n }\n\n .sale-products h3 {\n color: #fff;\n margin-bottom: 20px;\n font-size: 1.3em;\n border-bottom: 2px solid rgba(255, 255, 255, 0.3);\n padding-bottom: 10px;\n }\n\n .fitment-section {\n margin-bottom: 25px;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 12px;\n padding: 20px;\n border-left: 4px solid #ffd700;\n }\n\n .fitment-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n flex-wrap: wrap;\n gap: 10px;\n }\n\n .fitment-title {\n color: #ffd700;\n margin: 0;\n font-size: 1.2em;\n font-weight: bold;\n text-shadow: 1px 1px 2px rgba(0,0,0,0.3);\n }\n\n .fitment-counts {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n font-size: 0.9em;\n }\n\n .product-count {\n color: rgba(255, 255, 255, 0.9);\n font-weight: 600;\n }\n\n .showing-count {\n color: rgba(255, 255, 255, 0.7);\n font-style: italic;\n font-size: 0.85em;\n }\n\n .product-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 15px;\n }\n\n .product-grid-compact {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n gap: 12px;\n margin-bottom: 15px;\n }\n\n .product-card {\n background: rgba(255, 255, 255, 0.1);\n padding: 15px;\n border-radius: 10px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n backdrop-filter: blur(10px);\n transition: transform 0.2s ease, background 0.2s ease;\n }\n\n .product-card-compact {\n background: rgba(255, 255, 255, 0.1);\n padding: 12px;\n border-radius: 10px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n backdrop-filter: blur(10px);\n transition: transform 0.2s ease, background 0.2s ease;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .product-image {\n width: 100%;\n height: 120px;\n overflow: hidden;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.05);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .product-image img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 6px;\n transition: transform 0.2s ease;\n }\n\n .product-card-compact:hover .product-image img {\n transform: scale(1.05);\n }\n\n .product-card:hover,\n .product-card-compact:hover {\n transform: translateY(-2px);\n background: rgba(255, 255, 255, 0.15);\n }\n\n .view-more-section {\n text-align: center;\n margin-top: 10px;\n }\n\n .view-more-btn {\n display: inline-block;\n background: rgba(255, 215, 0, 0.2);\n color: #ffd700;\n padding: 8px 16px;\n border-radius: 20px;\n text-decoration: none;\n font-weight: 600;\n font-size: 0.9em;\n border: 1px solid rgba(255, 215, 0, 0.3);\n transition: all 0.2s ease;\n }\n\n .view-more-btn:hover {\n background: rgba(255, 215, 0, 0.3);\n color: #fff;\n text-decoration: none;\n transform: translateY(-1px);\n }\n\n .product-link {\n color: #fff;\n text-decoration: none;\n font-weight: 600;\n font-size: 0.9em;\n display: block;\n line-height: 1.3;\n flex-grow: 1;\n }\n\n .product-link:hover {\n text-decoration: underline;\n color: #ffd700;\n }\n\n .product-collection {\n display: block;\n color: #87ceeb;\n font-size: 0.9em;\n text-decoration: none;\n font-style: italic;\n transition: color 0.2s ease;\n }\n\n .product-collection:hover {\n color: #ffd700;\n text-decoration: underline;\n }\n\n .no-sales {\n text-align: center;\n padding: 60px 20px;\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n color: white;\n border-radius: 15px;\n box-shadow: 0 8px 25px rgba(0,0,0,0.15);\n }\n\n .no-sales h2 {\n color: #fff;\n margin-bottom: 10px;\n font-size: 2em;\n text-shadow: 2px 2px 4px rgba(0,0,0,0.3);\n }\n\n .no-sales p {\n color: rgba(255, 255, 255, 0.9);\n font-size: 1.1em;\n line-height: 1.5;\n }\n\n @media screen and (max-width: 749px) {\n .sale-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 15px;\n }\n \n .sale-countdown {\n align-self: stretch;\n text-align: center;\n }\n \n .product-grid,\n .product-grid-compact {\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n \n .sales-overview-container h1 {\n font-size: 2em;\n }\n\n .fitment-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 5px;\n }\n\n .fitment-counts {\n align-items: flex-start;\n }\n\n .product-image {\n height: 100px;\n }\n }\n\u003c\/style\u003e\n\n\u003cdiv class=\"sales-overview-container\"\u003e\n \u003ch1\u003eCurrent Sales \u0026amp; Promotions\u003c\/h1\u003e\n \u003cdiv id=\"sales-content\"\u003e\n \u003cdiv class=\"loading-message\"\u003eLoading current sales...\u003c\/div\u003e\n \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n const COLLECTION_HANDLE = 'wrx-sti-brz-gr86-performance-parts-sale-import-image-racing';\n const salesContainer = document.getElementById('sales-content');\n \n \/\/ Fetch collection products using handle\n fetch(`\/collections\/${COLLECTION_HANDLE}\/products.json?limit=100`)\n .then(response =\u003e {\n console.log(`Fetching: \/collections\/${COLLECTION_HANDLE}\/products.json`);\n console.log('Response status:', response.status);\n \n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n \n return response.json();\n })\n .then(data =\u003e {\n console.log('API Response:', data);\n console.log('Fetched products:', data.products?.length || 0);\n \n if (data.products \u0026\u0026 data.products.length \u003e 0) {\n \/\/ Debug: Show first few products and their tags\n console.log('First product example:', {\n title: data.products[0].title,\n tags: data.products[0].tags,\n handle: data.products[0].handle\n });\n \n processSalesData(data.products);\n } else {\n console.log('No products found in collection');\n salesContainer.innerHTML = `\n \u003cdiv class=\"no-sales\"\u003e\n \u003ch2\u003e📦 Empty Collection\u003c\/h2\u003e\n \u003cp\u003eNo products found in the specified collection.\u003c\/p\u003e\n \u003cp\u003e\u003csmall\u003eCollection: ${COLLECTION_HANDLE}\u003c\/small\u003e\u003c\/p\u003e\n \u003c\/div\u003e\n `;\n }\n })\n .catch(error =\u003e {\n console.error('Error fetching collection:', error);\n salesContainer.innerHTML = `\n \u003cdiv class=\"no-sales\"\u003e\n \u003ch2\u003e❌ Error Loading Collection\u003c\/h2\u003e\n \u003cp\u003eFailed to load collection: \u003cstrong\u003e${COLLECTION_HANDLE}\u003c\/strong\u003e\u003c\/p\u003e\n \u003cp\u003e\u003csmall\u003eError: ${error.message}\u003cbr\u003eCheck browser console for more details.\u003c\/small\u003e\u003c\/p\u003e\n \u003c\/div\u003e\n `;\n });\n\n function processSalesData(products) {\n const currentDate = new Date();\n const salesData = [];\n \n console.log('Processing', products.length, 'products for sales');\n console.log('Current date:', currentDate);\n \n products.forEach(product =\u003e {\n let saleName = '';\n let saleEnd = '';\n const fitmentTags = [];\n \n \/\/ Debug: Log each product being checked\n console.log(`Checking product: ${product.title}`);\n console.log('Product tags:', product.tags);\n \n \/\/ Check product tags\n product.tags.forEach(tag =\u003e {\n const tagLower = tag.toLowerCase();\n \n if (tagLower.includes('sale:')) {\n saleName = tag.replace(\/sale:\/i, '').trim();\n console.log(`Found sale name: \"${saleName}\" from tag: \"${tag}\"`);\n }\n \n if (tagLower.includes('saleend:')) {\n saleEnd = tag.replace(\/saleend:\/i, '').trim();\n console.log(`Found sale end: \"${saleEnd}\" from tag: \"${tag}\"`);\n }\n \n \/\/ Look for fitment tags\n if (tag.includes('WRX_') || tag.includes('STI_') || tag.includes('BRZ_') || \n tag.includes('FORESTER_') || tag.includes('OUTBACK_') || tag.includes('LEGACY_')) {\n fitmentTags.push(tag);\n }\n });\n \n \/\/ If we found both sale name and end date\n if (saleName \u0026\u0026 saleEnd) {\n console.log(`Product ${product.title} has both sale name and end date`);\n const saleEndDate = new Date(saleEnd);\n console.log(`Sale end date parsed as:`, saleEndDate);\n console.log(`Is sale active? ${saleEndDate \u003e currentDate}`);\n \n \/\/ Only process if sale hasn't ended\n if (saleEndDate \u003e currentDate) {\n console.log(`Adding ${product.title} to active sales`);\n \n \/\/ Get product image - use featured_image or first image\n let productImage = null;\n if (product.featured_image) {\n productImage = product.featured_image;\n } else if (product.images \u0026\u0026 product.images.length \u003e 0) {\n productImage = product.images[0];\n }\n \n \/\/ Debug: Log image info\n console.log(`Product: ${product.title}`);\n console.log('Featured image:', product.featured_image);\n console.log('Featured image type:', typeof product.featured_image);\n console.log('All images:', product.images);\n console.log('First image:', product.images?.[0]);\n console.log('Selected image:', productImage);\n console.log('Selected image type:', typeof productImage);\n \n salesData.push({\n saleName: saleName,\n saleEnd: saleEnd,\n saleEndDate: saleEndDate,\n productTitle: product.title,\n productUrl: `\/products\/${product.handle}`,\n productImage: productImage,\n fitmentTags: fitmentTags,\n collectionTitle: 'Collection',\n collectionUrl: `\/collections\/${COLLECTION_HANDLE}`\n });\n } else {\n console.log(`Sale for ${product.title} has expired`);\n }\n } else {\n if (!saleName) console.log(`No sale name found for ${product.title}`);\n if (!saleEnd) console.log(`No sale end found for ${product.title}`);\n }\n });\n \n console.log('Final sales data:', salesData);\n displaySales(salesData);\n }\n \n function displaySales(salesData) {\n if (salesData.length === 0) {\n salesContainer.innerHTML = `\n \u003cdiv class=\"no-sales\"\u003e\n \u003ch2\u003e🎉 No Active Sales\u003c\/h2\u003e\n \u003cp\u003eCheck back soon for new promotions and deals!\u003c\/p\u003e\n \u003c\/div\u003e\n `;\n return;\n }\n \n \/\/ Group sales by sale name and end date\n const salesGroups = {};\n \n salesData.forEach(item =\u003e {\n const key = `${item.saleName}::${item.saleEnd}`;\n if (!salesGroups[key]) {\n salesGroups[key] = {\n saleName: item.saleName,\n saleEnd: item.saleEnd,\n saleEndDate: item.saleEndDate,\n products: []\n };\n }\n salesGroups[key].products.push(item);\n });\n \n let html = '';\n \n Object.values(salesGroups).forEach(sale =\u003e {\n html += `\n \u003cdiv class=\"sale-item\"\u003e\n \u003cdiv class=\"sale-header\"\u003e\n \u003ch2 class=\"sale-title\"\u003e🏷️ ${sale.saleName}\u003c\/h2\u003e\n \u003cdiv class=\"sale-countdown\"\u003e\n \u003cspan class=\"sale-end-label\"\u003eEnds:\u003c\/span\u003e\n \u003cspan class=\"sale-end-date\" data-end-date=\"${sale.saleEnd}\"\u003e\n ${sale.saleEndDate.toLocaleDateString('en-US', { \n year: 'numeric', \n month: 'long', \n day: 'numeric', \n hour: 'numeric', \n minute: '2-digit',\n hour12: true\n })}\n \u003c\/span\u003e\n \u003c\/div\u003e\n \u003c\/div\u003e\n \n \u003cdiv class=\"sale-products\"\u003e\n \u003ch3\u003eProducts on Sale (Organized by Vehicle Fitment):\u003c\/h3\u003e\n ${generateFitmentSections(sale.products)}\n \u003c\/div\u003e\n \u003c\/div\u003e\n `;\n });\n \n salesContainer.innerHTML = html;\n addCountdownTimers();\n }\n \n function generateFitmentSections(products) {\n \/\/ Group products by fitment\n const fitmentGroups = {};\n \n products.forEach(product =\u003e {\n if (product.fitmentTags.length \u003e 0) {\n product.fitmentTags.forEach(fitment =\u003e {\n if (!fitmentGroups[fitment]) {\n fitmentGroups[fitment] = [];\n }\n fitmentGroups[fitment].push(product);\n });\n } else {\n \/\/ Products without fitment tags go to \"Universal\"\n if (!fitmentGroups['Universal']) {\n fitmentGroups['Universal'] = [];\n }\n fitmentGroups['Universal'].push(product);\n }\n });\n \n let html = '';\n \n \/\/ Sort fitment groups alphabetically\n const sortedFitments = Object.keys(fitmentGroups).sort();\n \n sortedFitments.forEach(fitment =\u003e {\n const displayName = fitment === 'Universal' \n ? '🔧 Universal \/ Multi-Fit'\n : `🚗 ${fitment.replace(\/_\/g, ' ')\n .replace('WRX', 'Subaru WRX')\n .replace('STI', 'Subaru STI')\n .replace('BRZ', 'Subaru BRZ')\n .replace('FORESTER', 'Subaru Forester')\n .replace('OUTBACK', 'Subaru Outback')\n .replace('LEGACY', 'Subaru Legacy')}`;\n \n const allProducts = fitmentGroups[fitment];\n const displayProducts = allProducts.slice(0, 5); \/\/ Show only first 5\n const hasMore = allProducts.length \u003e 5;\n \n html += `\n \u003cdiv class=\"fitment-section\"\u003e\n \u003cdiv class=\"fitment-header\"\u003e\n \u003ch4 class=\"fitment-title\"\u003e${displayName}\u003c\/h4\u003e\n \u003cdiv class=\"fitment-counts\"\u003e\n \u003cspan class=\"product-count\"\u003e${allProducts.length} product${allProducts.length === 1 ? '' : 's'} on sale\u003c\/span\u003e\n ${hasMore ? `\u003cspan class=\"showing-count\"\u003eShowing top 5\u003c\/span\u003e` : ''}\n \u003c\/div\u003e\n \u003c\/div\u003e\n \u003cdiv class=\"product-grid-compact\"\u003e\n `;\n \n displayProducts.forEach(product =\u003e {\n let imageUrl = '';\n \n console.log('Processing product image:', product.productTitle, product.productImage);\n \n if (product.productImage) {\n \/\/ Handle Shopify image object or string\n let imageSrc = '';\n if (typeof product.productImage === 'string') {\n imageSrc = product.productImage;\n console.log('Image is string:', imageSrc);\n } else if (product.productImage.src) {\n imageSrc = product.productImage.src;\n console.log('Image has .src property:', imageSrc);\n } else if (product.productImage.url) {\n imageSrc = product.productImage.url;\n console.log('Image has .url property:', imageSrc);\n } else {\n console.log('Image object structure:', Object.keys(product.productImage));\n }\n \n if (imageSrc) {\n \/\/ Handle Shopify image URL transformation\n if (imageSrc.includes('shopifycdn.com') || imageSrc.includes('shopify.com')) {\n \/\/ For Shopify images, add size transformation\n imageUrl = imageSrc.replace(\/(\\.[^.]*$)\/, '_150x150$1');\n console.log('Transformed Shopify URL:', imageUrl);\n } else {\n \/\/ Use image as-is if it's not a Shopify CDN URL\n imageUrl = imageSrc;\n console.log('Using image as-is:', imageUrl);\n }\n }\n }\n \n \/\/ Use placeholder if no image URL found\n if (!imageUrl) {\n imageUrl = 'data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUwIiBoZWlnaHQ9IjEyMCIgdmlld0JveD0iMCAwIDE1MCAxMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxMjAiIGZpbGw9IiNmNGY0ZjQiLz48dGV4dCB4PSI3NSIgeT0iNjAiIGZpbGw9IiM5OTk5OTkiIGZvbnQtZmFtaWx5PSJBcmlhbCIgZm9udC1zaXplPSIxNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSI+Tm8gSW1hZ2U8L3RleHQ+PC9zdmc+';\n console.log('Using placeholder image');\n }\n \n html += `\n \u003cdiv class=\"product-card-compact\"\u003e\n \u003cdiv class=\"product-image\"\u003e\n \u003cimg src=\"${imageUrl}\" alt=\"${product.productTitle}\" loading=\"lazy\" onerror=\"this.src='data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUwIiBoZWlnaHQ9IjEyMCIgdmlld0JveD0iMCAwIDE1MCAxMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxMjAiIGZpbGw9IiNmNGY0ZjQiLz48dGV4dCB4PSI3NSIgeT0iNjAiIGZpbGw9IiM5OTk5OTkiIGZvbnQtZmFtaWx5PSJBcmlhbCIgZm9udC1zaXplPSIxNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSI+Tm8gSW1hZ2U8L3RleHQ+PC9zdmc+';\"\u003e\n \u003c\/div\u003e\n \u003ca href=\"${product.productUrl}\" class=\"product-link\"\u003e\n \u003cstrong\u003e${product.productTitle}\u003c\/strong\u003e\n \u003c\/a\u003e\n \u003c\/div\u003e\n `;\n });\n \n html += `\n \u003c\/div\u003e\n `;\n \n \/\/ Add \"View More\" button if there are more products\n if (hasMore) {\n const filterTag = fitment !== 'Universal' ? fitment : '';\n const viewMoreUrl = filterTag \n ? `${fitmentGroups[fitment][0].collectionUrl}?constraint=${encodeURIComponent(filterTag)}`\n : fitmentGroups[fitment][0].collectionUrl;\n \n html += `\n \u003cdiv class=\"view-more-section\"\u003e\n \u003ca href=\"${viewMoreUrl}\" class=\"view-more-btn\"\u003e\n View All ${allProducts.length} ${displayName.replace(\/🚗|🔧\/, '').trim()} Products →\n \u003c\/a\u003e\n \u003c\/div\u003e\n `;\n }\n \n html += `\n \u003c\/div\u003e\n `;\n });\n \n return html;\n }\n \n function addCountdownTimers() {\n const saleEndElements = document.querySelectorAll('.sale-end-date');\n \n saleEndElements.forEach(function(element) {\n const endDateStr = element.getAttribute('data-end-date');\n const endDate = new Date(endDateStr);\n const now = new Date();\n \n if (endDate \u003e now) {\n const timeDiff = endDate - now;\n const days = Math.floor(timeDiff \/ (1000 * 60 * 60 * 24));\n const hours = Math.floor((timeDiff % (1000 * 60 * 60 * 24)) \/ (1000 * 60 * 60));\n const minutes = Math.floor((timeDiff % (1000 * 60 * 60)) \/ (1000 * 60));\n \n let countdown = '';\n if (days \u003e 0) {\n countdown = ` \u003csmall style=\"display: block; margin-top: 5px;\"\u003e(${days}d ${hours}h ${minutes}m left)\u003c\/small\u003e`;\n } else if (hours \u003e 0) {\n countdown = ` \u003csmall style=\"display: block; margin-top: 5px;\"\u003e(${hours}h ${minutes}m left)\u003c\/small\u003e`;\n } else if (minutes \u003e 0) {\n countdown = ` \u003csmall style=\"display: block; margin-top: 5px;\"\u003e(${minutes} minutes left!)\u003c\/small\u003e`;\n } else {\n countdown = ` \u003csmall style=\"display: block; margin-top: 5px; color: #ffd700;\"\u003e(ENDING NOW!)\u003c\/small\u003e`;\n }\n \n element.innerHTML += countdown;\n }\n });\n }\n});\n\u003c\/script\u003e"}]
import-image-racing.myshopify.com
[{"id":41558266544224,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"IAG-ENG-7191BK","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"IAG Air \/ Oil Separator (AOS) 2020+ Outback XT, 2022+ Outback Wilderness (Black) | IAG-ENG-7191BK","public_title":null,"options":["Default Title"],"price":49999,"weight":4082,"compare_at_price":49999,"inventory_quantity":0,"inventory_management":"shopify","inventory_policy":"continue","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}]