Pave Setting Oval Yellow Gold Diamond Earrings

Stud Earrings
Stud Earrings
Halo Earrings
Halo Earrings
Cluster Earrings
Cluster Earrings
Hoop Earrings
Hoop Earrings
Designer Earrings
Designer Earrings
Drop Earrings
Drop Earrings
Everyday Earrings
Everyday Earrings
Diamond Earrings For Women
Diamond Earrings For Women
Journey Earrings
Journey Earrings
Men's Diamond Earrings
Men's Diamond Earrings
Yellow Diamond Earrings
Yellow Diamond Earrings
Ruby Earrings
Ruby Earrings
Toi Et Moi Earrings
Toi Et Moi Earrings
Emerald Earrings
Emerald Earrings
Sapphire Earrings
Sapphire Earrings
Black Diamond Earrings
Black Diamond Earrings
Birthstone Earrings
Birthstone Earrings
Moissanite Earrings
Moissanite Earrings
Gold Earrings
Gold Earrings
Gemstone Earring
Gemstone Earring
$(document).ready(function() { // Category slider arrows - safe check so JS does not break if slider is missing var slider = document.getElementById('categoryStyleSlider'); var leftArrow = document.querySelector('.left-arrow'); var rightArrow = document.querySelector('.right-arrow'); if (slider && leftArrow) { leftArrow.addEventListener('click', function () { slider.scrollBy({ left: -150, behavior: 'smooth' }); }); } if (slider && rightArrow) { rightArrow.addEventListener('click', function () { slider.scrollBy({ left: 150, behavior: 'smooth' }); }); } // Initialize Bootstrap collapse functionality $('[data-toggle="collapse"]').on('click', function(e) { e.preventDefault(); var target = $(this).data('target'); var $target = $(target); // Toggle the collapse $target.collapse('toggle'); // Update the button state var $button = $(this); var $icon = $button.find('.fa'); if ($target.hasClass('show')) { $button.removeClass('collapsed'); $icon.removeClass('fa-plus').addClass('fa-minus'); } else { $button.addClass('collapsed'); $icon.removeClass('fa-minus').addClass('fa-plus'); } }); // Handle collapse events $('.collapse').on('show.bs.collapse', function() { var $button = $('[data-target="#' + $(this).attr('id') + '"]'); var $icon = $button.find('.fa'); $button.removeClass('collapsed'); $icon.removeClass('fa-plus').addClass('fa-minus'); }); $('.collapse').on('hide.bs.collapse', function() { var $button = $('[data-target="#' + $(this).attr('id') + '"]'); var $icon = $button.find('.fa'); $button.addClass('collapsed'); $icon.removeClass('fa-minus').addClass('fa-plus'); }); // Initialize filter UI state on page load updateFilterUI(); // Infinite Scroll Implementation var currentPage = 1; var isLoading = false; var hasMoreProducts = true; var loadMoreThreshold = 200; // pixels from bottom to trigger load var scrollTimeout; var infiniteScrollEnabled = true; // Function to load more products function loadMoreProducts() { if (isLoading || !hasMoreProducts || !infiniteScrollEnabled) return; isLoading = true; $('#infinite-scroll-loader').show(); $('.product-wrapper-grid').addClass('loading'); // Build the AJAX URL with current parameters var url = 'index.php?route=product/category|loadMoreProducts'; var urlParams = new URLSearchParams(window.location.search); var category_id = $('#category_id').val(); urlParams.set('category_id', category_id); var filter_param = $('#filter_param').val(); urlParams.set('filter_param', filter_param); var filter = $('#filter').val(); urlParams.set('filter', filter); var sort = $('#sort').val(); urlParams.set('sort', sort); var order = $('#order').val(); urlParams.set('order', order); // Add current URL parameters urlParams.set('page', currentPage + 1); // Add the parameters to the URL url += '&' + urlParams.toString(); $.ajax({ url: url, type: 'GET', dataType: 'json', success: function(response) { if (response.products && response.products.length > 0) { // Append new products to the grid var $productGrid = $('.product-wrapper-grid-row'); response.products.forEach(function(product) { var productHtml = generateProductHtml(product); $productGrid.append(productHtml); }); currentPage++; hasMoreProducts = response.has_more; // If no more products, show end message if (!hasMoreProducts) { $('#end-of-products').show(); } } else { hasMoreProducts = false; $('#end-of-products').show(); } }, error: function(xhr, status, error) { console.error('Error loading more products:', error); // Fallback to regular pagination on error $('#fallback-pagination').show(); }, complete: function() { isLoading = false; $('#infinite-scroll-loader').hide(); $('.product-wrapper-grid').removeClass('loading'); } }); } if ('IntersectionObserver' in window) { const loadTrigger = document.getElementById('load-more-trigger'); const observer = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { loadMoreProducts(); } }, { root: null, rootMargin: '200px', // preload before reaching end threshold: 0 }); if (loadTrigger) { observer.observe(loadTrigger); } } // Function to generate product HTML function generateProductHtml(product) { var style_view = $('#style-view-toggle').find('.active').data('style-view'); var grid_size = 'col-xl-4'; if(style_view == 2){ grid_size = 'col-xl-6'; } else if(style_view == 3){ grid_size = 'col-xl-4'; } else if(style_view == 4){ grid_size = 'col-xl-3'; } else { grid_size = 'col-xl-4'; } var html = '
'; html += '
'; html += '
'; html += ''; html += '
'; html += '
'; html += ''; html += '
'; html += '
From
'; html += '

' + product.sale_price + '

'; html += '
'; html += '
'; html += '
'; html += '
'; html += '
    '; html += '
  • '; html += '
  • '; html += '
  • '; html += '
  • '; html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; return html; } // Initialize infinite scroll on page load // Check if we have more than one page of products var totalProducts = parseInt($('#category_product_total').val()) || 0; var productsPerPage = parseInt($('#category_limit').val()) || 12; var totalPages = Math.ceil(totalProducts / productsPerPage); if (totalPages <= 1) { // Only one page, show end message hasMoreProducts = false; $('#end-of-products').show(); } // View Mode Toggle Functionality var infiniteScrollEnabled = true; $('#infinite-scroll-toggle').on('click', function() { if (!infiniteScrollEnabled) { infiniteScrollEnabled = true; $(this).removeClass('btn-outline-secondary').addClass('btn-outline-primary active'); $('#pagination-toggle').removeClass('btn-outline-primary active').addClass('btn-outline-secondary'); $('#fallback-pagination').hide(); $('#infinite-scroll-loader').show(); $('#end-of-products').show(); } }); $('#pagination-toggle').on('click', function() { if (infiniteScrollEnabled) { infiniteScrollEnabled = false; $(this).removeClass('btn-outline-secondary').addClass('btn-outline-primary active'); $('#infinite-scroll-toggle').removeClass('btn-outline-primary active').addClass('btn-outline-secondary'); $('#fallback-pagination').show(); $('#infinite-scroll-loader').hide(); $('#end-of-products').hide(); } }); // Colour dot click handler — swap product card image to selected metal colour $(document).on('click', '.color-panel-item', function(e) { e.stopPropagation(); var color = $(this).data('color'); var productId = $(this).data('product-id'); var $container = $('.thumb-img-' + productId); $container.find('img').each(function() { var src = $(this).attr('src') || ''; if (src) { src = src.replace(/_ww_|_yy_|_rr_/g, '_' + color + '_'); $(this).attr('src', src); } }); }); // Update scroll handler to respect toggle state with debouncing $(window).off('scroll.infinite').on('scroll.infinite', function() { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(function() { if (infiniteScrollEnabled && $(window).scrollTop() + $(window).height() >= $(document).height() - loadMoreThreshold) { loadMoreProducts(); } }, 100); // 100ms debounce }); // Function to update filter UI state function updateFilterUI() { var filter_param = $('#filter_param').val(); var filter = $('#filter').val(); // Parse current filter parameters var activeFilterIds = []; if (filter_param) { var filtered_param = []; if (filter_param.indexOf('_') !== -1) { var filter_param_arr = filter_param.split("_"); filter_param_arr.forEach(function(param) { if (param.indexOf('.') !== -1) { var exp_data = param.split("."); if (exp_data[1]) { filtered_param.push(exp_data[1]); } } else { filtered_param.push(param); } }); } else { if (filter_param.indexOf('.') !== -1) { var exp_data = filter_param.split("."); if (exp_data[1]) { filtered_param.push(exp_data[1]); } } else { filtered_param.push(filter_param); } } activeFilterIds = filtered_param; } if (filter) { var filterIds = filter.split(','); filterIds.forEach(function(filterId) { if (filterId && activeFilterIds.indexOf(filterId) === -1) { activeFilterIds.push(filterId); } }); } // Remove all active/selected states $('.category-box, .category-a-box, .js_filter_option, .filter-checkbox').removeClass('selected active').prop('checked', false); activeFilterIds.forEach(function(filterId) { $('.category-box[data-filter-id="' + filterId + '"]').addClass('selected'); $('.category-a-box[data-filter-id="' + filterId + '"]').addClass('selected'); $('.js_filter_option[data-filter-id="' + filterId + '"]').addClass('active'); $('.filter-checkbox[id="checkbox' + filterId + '"]').prop('checked', true); }); } // AJAX Filter Functionality function applyFilters(updateUrl = true) { $('.product-wrapper-grid').addClass('loading'); $('#infinite-scroll-loader').show(); var category_id = $('#category_id').val(); var filter_param = $('#filter_param').val(); var filter = $('#filter').val(); var sort = $('#sort').val(); var order = $('#order').val(); var stone_price_min = $('#stone_price_min').val() || '0'; var stone_price_max = $('#stone_price_max').val() || '50000'; var url = 'index.php?route=product/category|loadMoreProducts'; var urlParams = new URLSearchParams(); urlParams.set('category_id', category_id); urlParams.set('filter_param', filter_param); urlParams.set('filter', filter); urlParams.set('sort', sort); urlParams.set('order', order); urlParams.set('page', 1); // Reset to first page for new filters url += '&' + urlParams.toString(); $.ajax({ url: url, type: 'GET', dataType: 'json', success: function(response) { // Clear existing products $('.product-wrapper-grid-row').empty(); currentPage = 1; hasMoreProducts = true; if (response.products && response.products.length > 0) { var $productGrid = $('.product-wrapper-grid-row'); response.products.forEach(function(product) { var productHtml = generateProductHtml(product); $productGrid.append(productHtml); }); currentPage++; hasMoreProducts = response.has_more; if (!hasMoreProducts) { $('#end-of-products').show(); } else { $('#end-of-products').hide(); } } else { hasMoreProducts = false; $('#end-of-products').show(); } updateFilterUI(); }, error: function(xhr, status, error) { console.error('Error applying filters:', error); location.reload(); // Fallback to full page reload on error }, complete: function() { $('.product-wrapper-grid').removeClass('loading'); $('#infinite-scroll-loader').hide(); } }); } // Handle price range slider changes $(document).on('slidechange', '.slider-price-range', function(event, ui) { var priceSliderSteps = [ 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 3000, 5000, 7500, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000, 300000, 500000, 700000, 999999 ]; var minValue = priceSliderSteps[ui.values[0]]; var maxValue = priceSliderSteps[ui.values[1]]; // Update hidden inputs $('#stone_price_min').val(minValue); $('#stone_price_max').val(maxValue); // Update display values $('.span_stone_price_min').text('£' + minValue); $('.span_stone_price_max').text('£' + maxValue); applyFiltersWithCarat(minValue, maxValue, true); }); // Function to apply filters with carat range function applyFiltersWithCarat(minPrice, maxPrice, updateUrl = true) { $('.product-wrapper-grid').addClass('loading'); $('#infinite-scroll-loader').show(); var category_id = $('#category_id').val(); var filter_param = $('#filter_param').val(); var filter = $('#filter').val(); var sort = $('#sort').val(); var order = $('#order').val(); var url = 'index.php?route=product/category|loadMoreProducts'; var urlParams = new URLSearchParams(); urlParams.set('category_id', category_id); urlParams.set('filter_param', filter_param); urlParams.set('filter', filter); urlParams.set('stone_price_min', minPrice); urlParams.set('stone_price_max', maxPrice); urlParams.set('sort', sort); urlParams.set('order', order); urlParams.set('page', 1); url += '&' + urlParams.toString(); $.ajax({ url: url, type: 'GET', dataType: 'json', success: function(response) { $('.product-wrapper-grid-row').empty(); currentPage = 1; hasMoreProducts = true; if (response.products && response.products.length > 0) { var $productGrid = $('.product-wrapper-grid-row'); response.products.forEach(function(product) { var productHtml = generateProductHtml(product); $productGrid.append(productHtml); }); currentPage++; hasMoreProducts = response.has_more; if (!hasMoreProducts) { $('#end-of-products').show(); } else { $('#end-of-products').hide(); } } else { hasMoreProducts = false; $('#end-of-products').show(); } updateFilterUI(); }, error: function(xhr, status, error) { console.error('Error applying filters:', error); location.reload(); }, complete: function() { $('.product-wrapper-grid').removeClass('loading'); $('#infinite-scroll-loader').hide(); } }); } }); $('#faqAccordion').on('shown.bs.collapse', function (e) { $(e.target).prev('.faq-header').find('.fa') .removeClass('fa-plus') .addClass('fa-minus'); }); $('#faqAccordion').on('hidden.bs.collapse', function (e) { $(e.target).prev('.faq-header').find('.fa') .removeClass('fa-minus') .addClass('fa-plus'); });