let numberFormat = require('./libs.js').numberFormat; let stickyFilterRow = require('./libs.js').stickyFilterRow; if (typeof window.dataLayer === 'undefined') { window.dataLayer = []; } $('.readmore').readmore(window.HWG_php_bridge.readmore); $('img.pb-defer').defer(); $('body').on('click', function(event){ if( !$(event.target).is('.submenu') && !$(event.target).is('.main-menu *') ) { $('.submenu').hide(); } if( $('.productEnlarged').length >= 1 ) { if( $('.productEnlarged').hasClass('opened') ) { $('.productEnlarged').remove(); } $('.productEnlarged').addClass('opened'); } }); // open menu on desktop window.openSubMenu = function ( num ) { if( $('.sub' + num).css('display') == 'none') { // close all opened $('.submenu').css('display', 'none'); // open clicked one $('.sub' + num).css('display', 'block'); } else { // close clicked one $('.sub' + num).css('display', 'none'); } }; window.deletefreeproduct = function (id,url,msg) { if (confirm(msg)) { document.location=url+'/?a=removefa&i='+id; } }; window.deletefromWL = function (id,sid,url,msg) { if (confirm(msg)) { document.location=url+'/?a=remove&i='+id+'&pageSession='+sid; } }; window.printReceipt = function (obj,Width,Height) { if (obj) { winId=window.open('','printwin','width='+Width+',height='+Height+''); winId.document.write(''+obj.innerHTML+''); winId.document.close(); winId.focus(); winId.print(); // The below line closes the window after the dialog got closed... You can disable it if you dont want to close it winId.close(); } }; // language selector $('.language-selector-wrap').first('img').on('click', function(){ if( $('.language-selector').hasClass('opened') ) { $('.language-selector').css('height', '0px'); $('.language-selector').css('padding', '0px'); $('.language-selector').removeClass('opened'); } else { $('.language-selector').css('height', 'auto'); $('.language-selector').css('padding', '12px'); $('.language-selector').addClass('opened'); } }); // scroll to element window.scrollme = function ( toWhom ){ if($('.'+toWhom).length > 0 && $('.'+toWhom).is(':visible')) { $('html, body').animate({ scrollTop: $('.'+toWhom).offset().top }, 500); } }; window.setStars2 = function (score){ console.log( 'setStars2 function called' ); document.getElementById('rating').value = score; var a = 0; // color stars for(i = 1; i <= score; i++) { var elementID = "star_" + i; document.getElementById(elementID).src = "/images/reviews/star.png"; a = i; } // grey out remaining stars for(x = (a+1); a < 5; x++) { var elementID = "star_" + x; document.getElementById(elementID).src = "/images/reviews/star-gray.png"; } event.preventDefault(); return false; }; window.setStars = function (score, field, row, star){ document.getElementById(field).value = score; var a = 0; // color stars for(i = 1; i <= star; i++) { var elementID = "star_" + row + "_" + i; document.getElementById(elementID).src = "/images/reviews/star.png"; a = i; } // grey out remaining stars for(x = (a+1); a < 5; x++) { var elementID = "star_" + row + "_" + x; document.getElementById(elementID).src = "/images/reviews/star-gray.png"; } event.preventDefault(); return false; }; var comparisonRequest = null; var comparisonChange = function (productID, productName, add) { if (comparisonRequest) { comparisonRequest.abort(); } comparisonRequest = $.ajax({ url : '/ajax/comparison.php', type : 'POST', dataType: "json", data : { productID: productID | 0, add: (!!add) | 0, }, }).done(function (json) { $('.comparison-checkbox').each(function () { $(this).prop('checked', json.products.indexOf($(this).data('pid')) != -1); }); var open = $('.product-comparison-popup').hasClass('open'); var scroll = $('.product-comparison-popup .product-comparison-body').scrollTop() | 0; $('.product-comparison-popup').remove(); if (json.products.length) { $(document.body).append(json.htmlPopup); } $('.product-comparison-popup').toggleClass('open', open); $('.product-comparison-popup .product-comparison-body').scrollTop(scroll); if (add) { GoogleTagManagerProductComparison(productName); } }).fail(function (response) { if (typeof response.responseJSON != 'undefined' && response.responseJSON.error) { $('[data-remodal-id=add_to_cart_modal]').html(response.responseJSON.error).remodal().open(); } }); return comparisonRequest; }; $(document).on('change', '.comparison-checkbox', function (e) { e.preventDefault(); var checkbox = $(this); comparisonChange( $(this).data('pid'), $(this).data('pname'), $(this).prop('checked') ).fail(function (response) { checkbox.prop('checked', !checkbox.prop('checked')); }); }); $(document).on('click', '.product-comparison-remove', function (e) { e.preventDefault(); comparisonChange($(this).data('pid'), '', false); }); $(document).on('click', '.remove-comparison-product', function (e) { e.preventDefault(); comparisonChange($(this).data('remove'), '', false).done(function() { window.location.reload(); }); }); $(document).on('click', '.product-comparison-handle', function (e) { e.preventDefault(); $(this).closest('.product-comparison-popup').toggleClass('open'); }); $(document).on('click', '.product-comparison-handle .fa-times', function (e) { e.preventDefault(); e.stopPropagation(); $(this).closest('.product-comparison-popup').remove(); }); window.addToShoppingcart = function ( productID, productPrice, ssize ) { $("[data-remodal-id=add_to_cart_modal]").html('

'); var place = ($('.pdp__top').length > 0) ? 'pdp' : 'rollout'; var data = { productID : productID, productPrice : productPrice, place : place }; if (typeof ssize != 'undefined') { data.ssize = ssize; } $.ajax({ url : '/ajax/addToShoppingcart.php', type : 'POST', dataType: "json", data : data, success : function(json) { var add_to_cart = true; if (json.hasOwnProperty('add')) { $('.icon-' + productID).parent().addClass('in-comparison'); if (place != 'pdp') { $("[data-product-id="+productID+"]").removeAttr("data-remodal-target"); } $("[data-remodal-id=add_to_cart_modal]").remodal().settings.hashTracking = false; $("[data-remodal-id=add_to_cart_modal]").html(json.content); if (place != 'pdp') { GoogleTagManagerAddToCartEvent(json.add); } } else if (json.hasOwnProperty('remove')) { $('.icon-' + productID).parent().removeClass('in-comparison'); $("[data-product-id="+productID+"]").attr("data-remodal-target", "add_to_cart_modal"); add_to_cart = false; } if (json.alreadyInCart != 1) { var num_items_block = $('.shoppingcart-header .numitems'); var num_items_block_new = $('.main-header .numitems_new'); var price_block = $('.totalItemPrice'); // update num items in cart var items_cart = parseInt(num_items_block.html()); var items_cart_new = parseInt(num_items_block_new.html()); if (add_to_cart == true) { num_items_block.html(items_cart+1); num_items_block_new.html(items_cart_new+1); $('strong.hide-when-zero').show(); } else { num_items_block.html(items_cart-1); num_items_block_new.html(items_cart_new-1); if ((items_cart_new - 1) <= 0) { $('strong.hide-when-zero').hide(); } } // update price if ( price_block.length >= 1 ) { var curPrice = price_block.attr('data-raw-price'); var decPoint = price_block.attr('data-dec-point'); var thousandSep = price_block.attr('data-thousand-sep'); if (add_to_cart == true) { curPrice = ( parseFloat(curPrice) + parseFloat(productPrice) ); } else { curPrice = ( parseFloat(curPrice) - parseFloat(productPrice) ); } price_block.attr('data-raw-price', curPrice ); curPrice = numberFormat(curPrice, 2, decPoint, thousandSep); price_block.html( curPrice ); } } } }); }; window.fastAddToShoppingcart = function (productID, productPrice, parentID) { var button = $('#upseller-' + productID) button.html(''); $.ajax({ url : '/ajax/addToShoppingcart.php', type : 'POST', dataType: "json", data : { productID : productID, productPrice : productPrice, upsold: parentID, }, success : function(json) { var add_to_cart = true; if (json.hasOwnProperty('add')) { button.html(''); GoogleTagManagerAddToCartEvent(json.add); } else if (json.hasOwnProperty('remove')) { button.html('   '); add_to_cart = false; } var num_items_block = $('.shoppingcart-header .numitems'); var num_items_block_new = $('.main-header .numitems_new'); var price_block = $('.totalItemPrice'); // update num items in cart var items_cart = parseInt(num_items_block.html()); var items_cart_new = parseInt(num_items_block_new.html()); if (add_to_cart == true) { num_items_block.html(items_cart+1); num_items_block_new.html(items_cart_new+1); $('strong.hide-when-zero').show(); } else { num_items_block.html(items_cart-1); num_items_block_new.html(items_cart_new-1); if ((items_cart_new - 1) <= 0) { $('strong.hide-when-zero').hide(); } } // update price if( price_block.length >= 1 ) { var curPrice = price_block.attr('data-raw-price'); var decPoint = price_block.attr('data-dec-point'); var thousandSep = price_block.attr('data-thousand-sep'); if (add_to_cart == true) { curPrice = ( parseFloat(curPrice) + parseFloat(productPrice) ); } else { curPrice = ( parseFloat(curPrice) - parseFloat(productPrice) ); } price_block.attr('data-raw-price', curPrice ); curPrice = numberFormat(curPrice, 2, decPoint, thousandSep); price_block.html( curPrice ); } } }); }; /* This function does a check of customer had added essential product or not. If they didn't they get an extra spam message */ window.checkUpsellingEssentials = function () { var essentials = $('.remodal .is-essential-upseller .upseller__button i.fa-shopping-cart'); if (essentials.length > 0) { var newModal = $('
'); var newModalContent = $('
'); var upseller = essentials.first().closest('.is-essential-upseller'); // get image var image = upseller.find('img').first(); if (image.length > 0) { $('
').html(image).appendTo(newModalContent); } var sidepart = $('
'); var contentPart = $('
'); var metaInfos = upseller.find('strong.upseller__title, strong.upseller__price'); metaInfos.each(function () { contentPart.append('

' + $(this).html() + '

'); }); if (upseller.data('text')) { contentPart.append('

' + upseller.data('text') + '

'); } contentPart.appendTo(sidepart); sidepart.appendTo(newModalContent); newModalContent.appendTo(newModal); var buttonPart = $('
'); var childproduct = upseller.data('childproduct'); var parentproduct = upseller.data('parentproduct'); // Get links if (upseller.data('link2') && upseller.data('link2text')) { $('
' + upseller.data('link2text') + '
').appendTo(buttonPart); } if (upseller.data('link1') && upseller.data('link1text')) { $('
' + upseller.data('link1text') + '
').appendTo(buttonPart); } buttonPart.appendTo(newModal); $('#are-you-sure').replaceWith(newModal); return false; } return true; } // Toggle upsellers in cart $('.cart-upselling > h3').on('click', function() { $(this).closest('.cart-upselling').toggleClass('hidden-upsellers'); }) $(document).on('closed', '[data-remodal-id=add_to_cart_modal]', function (e) { $("[data-remodal-id=add_to_cart_modal]").html(''); }); $(document).on('click', '.product-comparison-close', function (e) { $(".product-comparison").hide(250); }); window.autoHeightMe = function ( a ) { if( $( '.' + a ).hasClass('active')){ $( '.' + a ).removeClass('active'); $( '.' + a ).css('height', '30px'); } else { $( '.' + a ).addClass('active'); $( '.' + a ).css('height', 'auto'); } //$('.btn-show-pop-tags-mob').remove(); }; $(window).on( 'orientationchange', function( event ) { setTimeout( function(){ if( $(window).width() <= 991 ) { var loc = $('.company-logo img').data('logo-clean'); $('.company-logo img').attr('src', loc) } else { var loc = $('.company-logo img').data('logo-org'); $('.company-logo img').attr('src', loc); } }, 500); }); $(window).on('resize', function( event ) { if( $(window).width() <= 991 ) { var loc = $('.company-logo img').data('logo-clean'); $('.company-logo img').attr('src', loc) } else { var loc = $('.company-logo img').data('logo-org'); $('.company-logo img').attr('src', loc); } }); window.result_request = function (id){ var element, post_value; GoogleTagManagerSearchUniversalWatchStrap($('#BandSize option:selected').text(), $('#BandColorID option:selected').text()); element = $('#'+id).val(); post_value = id+'_'+element; //var h = $('.brand-page-thumbnail-frame').height(); var h = 0; $('#kieshulp').prepend('
'); $.get('/ajax/horlogebanden-process.php?element=' + post_value, function(data) { var domdata = $(data); //$.scrollTo('#advancedsearchform',500); $('#kieshulp').html(domdata); var isMobDevice = (/iphone|ipad|Android|webOS|iPod|BlackBerry|Windows Phone|ZuneWP7/gi).test(navigator.appVersion); if(!isMobDevice){ $("img.lazy").show().lazyload({ effect : "fadeIn" }); } else { $('img.lazy').each(function(){ $(this).attr('src',$(this).data('original')).removeClass('lazy'); }); } } ); }; var lastPositionBeforeOverlayOpened = 0; // Toggle pdp overlay window.pdpOverlay = function (what = false) { if ($(window).width() >= 768) { return; } $('.pdp__overlay .replaceable').hide(); if (typeof what !== undefined && what == 'specs') { $('.pdp__overlay .replaceable#overlay-specs-funcs').css('display', 'block'); } else if (typeof what !== undefined && what == 'reviews') { $('.pdp__overlay .replaceable#overlay-reviews').css('display', 'block'); } else { $('body').removeClass('open-pdp-overlay').css('margin-top', ''); $(window).scrollTop(lastPositionBeforeOverlayOpened); return; } lastPositionBeforeOverlayOpened = $(window).scrollTop(); $('body').addClass('open-pdp-overlay').css('margin-top', '-' + lastPositionBeforeOverlayOpened + 'px'); $('.pdp__overlay .pdp__overlay__container').scrollTop(0); }; window.triggerPdpTab = function (target) { $('.nav-area, .pdp__tabcontainers > div').css('display', 'none'); $('.' + target ).css('display', 'block'); $('.nav-tabs li, .pdp__tabs li').removeClass('active'); $('.nav-tabs li a[data-display="' + target + '"], .pdp__tabs li a[data-display="' + target + '"]') .parent('li') .addClass('active'); }; $(function() { var lastPositionBeforeLocked = 0; // Function to open info modals function openInfoModal () { var button = $(this); var key = (button.data('key') && button.data('key') != '') ? button.data('key') : false; var vars = (button.data('vars')) ? button.data('vars') : null; var title = (button.data('title')) ? button.data('title') : null; if (!key) { return; } if (title) { GoogleTagManagerInfoButtonClick(title); } else { GoogleTagManagerInfoButtonClick(key); } closeInfoModal(false); button.addClass('loading'); $.ajax({ url : '/ajax/infoModal.php', type : 'POST', data : { key: key, title: title, vars : vars }, dataType: 'json', cache : false }).done(function(response) { if (typeof response.modal !== 'undefined') { $('body').append(response.modal); lastPositionBeforeLocked = $(window).scrollTop(); $('body').css('margin-top', '-' + lastPositionBeforeLocked + 'px').addClass('locked'); } else { console.log('Error while getting info modal'); button.remove(); } }).fail(function(response) { alert('Error retrieving info modal.'); button.remove(); }).always(function() { button.removeClass('loading'); }); }; // Function to open info modals function closeInfoModal(toggle = true) { $('.info-modal').remove(); if (toggle) { $('body').removeClass('locked').css('margin-top', ''); $(window).scrollTop(lastPositionBeforeLocked); } }; $(document).on('click', '.nav-tabs a, .pdp__tabs a', function(target) { triggerPdpTab($(this).data('display')); return false; }); $(document).on('click', '.info-button[data-key], .info-button-helper[data-key]', openInfoModal); $(document).on('click', '.close-info-modal', closeInfoModal); $(document).on('click', '.info-modal', function (e) { if ($(e.target).is('.info-modal')) { closeInfoModal(); } }) // Old safari is shit and doesn't work with events on body function close_legacy_menu (e) { $('.small-mobile-side-menu').removeClass('open'); $('.small-mobile-side-menu-background').remove(); GoogleTagManagerToggleMobileMenu('close'); e.stopPropagation(); e.preventDefault(); return false; }; // small mobile menu bar $('.open-small-menu-bar').on('click', function(event){ $('.small-mobile-side-menu').addClass('open') var $menuBackground = $('
').hide().fadeIn(200); $menuBackground.on('click', close_legacy_menu); $('body').append($menuBackground); GoogleTagManagerToggleMobileMenu('open'); event.preventDefault(); }); $('.close-mobile-small-menu').on('click', close_legacy_menu); // swap logo for mobile if( $(window).width() <= 991 ) { var loc = $('.company-logo img').data('logo-clean'); $('.company-logo img').attr('src', loc) } else { var loc = $('.company-logo img').data('logo-org'); $('.company-logo img').attr('src', loc); } // like review $(".product_review_like").on('click', function () { var reviewID = $(this).data('review-id'); if (reviewID) { likeReview(reviewID); } }); // accept cookies $('.accept_cookies').on('click', function(){ GoogleTagManagerCookieNotificationUse('On'); // add cookie to user with ajax $.ajax({ type: 'POST', url: '/ajax/acceptedCookies', data: { accept: 1, }, success: function () { $('.cookie-notification').slideUp(); }, }); return false; }); $('.reject_cookies').on('click', function () { GoogleTagManagerCookieNotificationUse('Off'); $.ajax({ type: 'POST', url: '/ajax/acceptedCookies', data: { accept: 0, }, success: function () { $('.cookie-notification').slideUp(); }, }); return false; }); $('.more_info_cookies').on('click', function () { GoogleTagManagerCookieNotificationUse('Lees meer'); }); $(".language-item").on('click', function() { var website = $(this).attr('data-website'); var url = $(this).attr('data-href'); var country = $(this).attr('data-country'); var language = $(this).attr('data-language'); if (language == country) { url = "/" + language + url; } else { url = "/" + country + "/" + language + url; } window.location = website+url; }); // Newsletter form: add email hidden confirm input $(".subscribeform_email").on('change keyup', function () { var email = $(this).val(); $(".subscribeform_emailconfirm").val(email); }); // Straps page brand page var stdIMG = $('.bigImage').attr('src'); var hoverIMG = $('.bigImage').attr('data-hover'); $('.watch-straps-block-image').on('hover', function(){ $('.thumbnailbox').show(250); }, function(){ $('.thumbnailbox').hide(250); }); /** * Left menu in / uitklappen */ $('.menu_toggle_button').on('click', function () { var target = $(this).data('target'); // $('.close_mobile#'+target).toggle('slide'); if ($('.close_mobile#'+target).is(':visible')) { $('.close_mobile#'+target).slideUp(); } else { $('.close_mobile#'+target).slideDown(); } }); // Remove pdp overlay $('.back-to-pdp').on('click', function(){ pdpOverlay(); }); $(document).on('click', '.specs_functions .info-button[data-popup]', function () { closeInfoModal(false); $('body').append($(this).data('popup')); lastPositionBeforeLocked = $(window).scrollTop(); $('body').css('margin-top', '-' + lastPositionBeforeLocked + 'px').addClass('locked'); }); $('.specs_specifications h3, .specs_functions h3').on('click', function(event) { var target = $(event.target); if (! target.is('span')) { $(this).closest('.foldable:not(.primary)').toggleClass('closed'); return false; } }); $('.specs_specifications, .specs_functions').find('tfoot a.expand, tfoot a.unexpand').on('click', function () { $(this).closest('.foldable').toggleClass('closed'); return false; }); $('.mpn-pdfs .expand').on('click', function () { $(this).closest('.mpn-pdfs').toggleClass('closed'); return false; }); var videoSlides = $('.pdp__images__main > .main-img--video'); var initialSlide = (videoSlides.length > 0) ? 1 : 0; $('').on('load error', function () { $('.pdp__images__main .main-img img.main:not(#main0)').each(function () { if (!$(this).prop('src')) { $(this).prop('src', $(this).data('original')); } }); }).prop('src', $('.pdp__images__main .main-img#main0 img.main').prop('src')); $('.pdp__images__main').slick({ infinite: false, slidesToShow: 1, arrows: true, initialSlide: initialSlide, prevArrow: '
', nextArrow: '
', asNavFor: '.pdp__images__thumbs', dots: ($(window).width() <= 768), }).on('afterChange', function() { GoogleTagManagerProductImageThumbClick(); }); var countSlides = $('.pdp__images__thumbs > .thumb-img').length; if (countSlides == 0 || countSlides > 4) { countSlides = 5; } $('.pdp__images__thumbs').slick({ infinite: false, slidesToShow: countSlides, slidesToScroll: 1, adaptiveHeight: true, focusOnSelect: true, arrows: true, prevArrow: '
', nextArrow: '
', asNavFor: '.pdp__images__main' }); $('.pdp__images__thumbs .slick-slide').on('click', function (event) { $('.pdp__images__main').slick('slickGoTo', $(this).data('slickIndex')); }); if (initialSlide == 1) { $('.pdp__images__thumbs').find('.slick-slide').removeClass('slick-current'); $('.pdp__images__thumbs').find('.slick-slide[data-slick-index="1"]').addClass('slick-current'); } $('.pdp__gift .giftimg').on('click', function (e) { $('.pdp__images__main .free-gift').first().siblings('a').first().trigger('click'); }); $(document).on({ mouseenter: function () { var newSrc = ($(this).data('example')) ? $(this).data('example') : null; if (newSrc != null) { var activeImage = $('.pdp__images__main .slick-current img'); if (activeImage.length) { activeImage.attr('src', newSrc); } } }, mouseleave: function () { setOriginalImage(); } }, '.pdp__images__thumbs .slick-slide:not(.slick-current) .thumb-img'); function setOriginalImage () { $('.pdp__images__main img[data-original]').each(function () { $(this).attr('src', $(this).data('original')); }); } if($(window).width() >= 768) { $(document).on({ mouseenter: function () { var newSrc = ($(this).data('preview')) ? $(this).data('preview') : null; var newColor = ($(this).data('color')) ? $(this).data('color') : null; if (newColor != null) { $('.pdp__variants #pdp-color-name').text(newColor); } timer = setTimeout(function(){ if (newSrc != null) { var activeImage = $('.pdp__images__main .slick-current img'); if (activeImage.length) { activeImage.fadeTo(150, 0, function() { $(this).attr('src', newSrc).fadeTo(150, 1); }); } } }, 500); }, mouseleave: function () { clearTimeout(timer); setOriginalImage(); setOriginalColor(); } }, '.pdp__variants a:not(.current-color)[data-preview]'); } else { var reviewSummary = $('.pdp__review-summary'); if (reviewSummary.length > 0) { reviewSummary.insertAfter('.pdp h1'); } $(window).bind("load", function() { // Check if we need to scroll the current variant var pdpVariants = $('.pdp .pdp__variants > ul'); if (pdpVariants.length > 0) { var currentVariant = pdpVariants.find('a.current-color').first(); if (currentVariant.length > 0) { var windowWidth = $(window).width(); var currentPos = currentVariant.position().left; if (currentPos > windowWidth) { pdpVariants.scrollLeft((currentPos - windowWidth) + (currentVariant.outerWidth(true) * 1.5)); } } } }); } function setOriginalColor () { $('.pdp__variants #pdp-color-name').each(function () { var originalColor = $(this).data('original'); $(this).text(originalColor); }); } $('.zoom-tip').click(function(){ $('.pdp__images__main .slick-current a').trigger('click'); }); if($(window).width() < 768) { $('.pdp__images__main .slick-slide a').on('click', function () { GoogleTagManagerProductImageZoom(); }).magnify(); } else { $('.pdp__images__main').slickLightbox({ itemSelector: '.slick-slide a', slick: { infinite: false } }).on('show.slickLightbox', function() { GoogleTagManagerProductImageZoom(); $('html,body').css('overflow', 'hidden'); $('.pdp__images__main')[0].slickLightbox.slick.on('afterChange', function() { GoogleTagManagerProductImageThumbClick(); }); }).on('hide.slickLightbox', function() { $('html,body').css('overflow', 'auto'); }); } // Function to toggle pdp info $(document).on('click', '.pdp-toggle .toggle, .pdp-toggle .untoggle', function () { $(this).closest('.pdp-toggle').toggleClass('untoggled'); }); /** * Set newsletter subscribe checked */ $("input[name='list[3]']").prop("checked", true); $('.addWishlistForm').on('submit', function(event){ if (location.protocol != 'https:') { return; } $('.ajaxAddWishList .alert').remove(); $('.ajaxAddWishList').addClass('loading'); /* ajax call */ $.ajax({ type : 'POST', url: '/ajax/addToWishlist.php', data: $(this).serialize(), success : function( result ) { var json_object = $.parseJSON(result); if( 'success' in json_object ) { GoogleTagManagerWishlistUse(); $('.ajaxAddWishList').empty().html('
'+json_object.success+'
'); GoogleTagManagerMessages('success', json_object.success); } else if( 'exists' in json_object ) { $('.ajaxAddWishList').empty().html('
'+json_object.exists+'
'); GoogleTagManagerMessages('error', json_object.exists); } else if ('validation_errors' in json_object ) { var error = "
"; var errorText = ''; $.each(json_object.validation_errors, function (key, value) { error += "

"+value+"

"; errorText += value + " "; }); error += "
"; $('.ajaxAddWishList').prepend(error); GoogleTagManagerMessages('error', errorText); } else { $('.ajaxAddWishList').prepend('
'+json_object.error+'
'); GoogleTagManagerMessages('error', json_object.error); } $('.ajaxAddWishList').removeClass('loading'); } }); event.preventDefault(); }); $('.questionMarkInfo1').on('click', function(){ if( $(this).find('.questionContent_1').hasClass('opened')) { $(this).find('.questionContent_1').removeClass('opened'); $(this).find('.questionContent_1').fadeOut(500) } else { $(this).find('.questionContent_1').addClass('opened'); $(this).find('.questionContent_1').fadeIn(500); } }); $('.questionMarkInfo2').on('click', function(){ if( $(this).find('.questionContent_2').hasClass('opened')) { $(this).find('.questionContent_2').removeClass('opened'); $(this).find('.questionContent_2').fadeOut(500) } else { $(this).find('.questionContent_2').addClass('opened'); $(this).find('.questionContent_2').fadeIn(500); } }); $('.navbar-nav a.logout').on('click', function(){ var url = $(this).attr('href'); $.ajax({ url: '/ajax/logout.php', success: function(data) { document.location.assign(url); } }); return false; }); if($('#receiptBirthdaySubscribe select[name="date_of_birth[month]"]').length > 0) { $('#receiptBirthdaySubscribe select[name="date_of_birth[month]"]') .on('change keyup', function() { if($(this).val() == "") $(this).addClass("empty"); else $(this).removeClass("empty") }) .change(); } }); $('.openclose-header').on('click', function(){ // get settings var toOpen = $(this).data('rel'); var direction = 'auto'; // we are closing or opening if( $('.'+toOpen).css('height') != '0px'){ direction = '0px'; $(this).find('.fa-plus-square-o').css('transform', 'rotate(0deg)'); } else { $(this).find('.fa-plus-square-o').css('transform', 'rotate(90deg)'); } // alle openstaande sluiten $('.openclose-content').each(function(){ if( $(this).css('height') != '0px' ) { $(this).animate({ height : '0px' }, 200); } }); // calculate the auto height if(direction != '0px'){ direction = $('.'+toOpen).css('height', 'auto').height(); $('.'+toOpen).css('height', '0px') } // animate $('.'+toOpen).animate({ height : direction }, 200); }); $(function(){ /** * touchstart * touchmove * touchend * touchcancel */ $('a img').on({ 'touchstart' : function(){ $(this).css('filter', 'opacity(30%)'); }, 'touchend' : function(){ $(this).css('filter', 'inherit'); }, 'touchcancel' : function(){ $(this).css('filter', 'inherit'); }, 'touchmove' : function(){ $(this).css('filter', 'inherit'); } }); $('.pay_method [data-cc-method-type]').on('click', function(e){ e.stopPropagation(); var method_name = $(this).data('method-name'); var method_id = $(this).data('cc-method-type'); // update borders $('[data-cc-method-type]').removeClass('selected_payment'); $(this).addClass('selected_payment'); $('.PaymentType_creditcard').prop("checked", true); $('.PaymentType_creditcard').attr('data-method-name', method_name); $('.PaymentType_creditcard').attr('id', 'PaymentType_'+method_id); $('.PaymentType_creditcard').val(method_id); $('.creditcard-type-container:first-child').addClass('selected_payment'); }); $('.pay_method').on('click', function(){ if ($(this).data('method-name') == 'Creditcard') { var do_trigger = true; $('.creditcard-type-block').each(function () { if($(this).hasClass('selected_payment')) { do_trigger = false; } }); if (do_trigger == true) { $('[data-cc-method-type]').first('.creditcard-type-block').trigger('click'); } } else { $('[data-cc-method-type]').removeClass('selected_payment'); } }); }); /* carousel header mobile */ $(function(){ $('.caroussel').slick({ infinite: true, autoplay: true, autoplaySpeed: 5000 }); }); // submit the mobile search form in the header $(function(){ if($('#orderTrackingBlock').length != 0) { var currentElement = $('#orderTrackingBlock'); var orderID = currentElement.data('order-id'); var email = currentElement.data('email'); $.ajax({ type: 'GET', url: '/ajax/request-order-tracking/'+orderID+'/?email='+email, success : function( html ) { currentElement.html(html); }, error: function () { currentElement.html(''); } }); } }); // Fire GTM event if video is present on product depth page $(function(){ if($('.productpage .embed-responsive').length > 0) { GoogleTagManagerProductVideoPresent(); } if($('.productpage .main-product-image-container .ribbon').length > 0) { $('.productpage .main-product-image-container .ribbon').each(function(){ var ribbon = $(this).find('span').text(); GoogleTagManagerProductRibbon(ribbon); }); } else { if($('.productpage .main-product-image-container').length > 0) { // This is a product page, but no ribbons found var ribbon = 'none'; GoogleTagManagerProductRibbon(ribbon); } } }); window.redirectContinueShopping = function (fallbackUrl) { // Using referrer might not be safe, but we are not depending on it (fallback to homepage). // If website visitor malformed his request with malicious referrer, nothing bad will happen. var referrer = document.referrer; if(window.location.href.indexOf('a=remove') >= 0) { // prevent redirect back to shopping cart, if you are on the shopping cart window.location = fallbackUrl; return false; } if(typeof referrer !== 'undefined' && referrer !== '' && referrer !== null) { if(window.location.href !== document.referrer) { // Previous request was not a POST request from checkout page window.history.back(); } else { // Previous request was a POST request (for example, changing shipping country). // We do not know previous page, just return to all-watches index window.location = fallbackUrl; return false; } } else { window.location = fallbackUrl; } return false; }; $(function(){ if($('#back-to-top').length > 0 && $( window ).width() < 1170) { $(window).on('scroll', function () { if ($(this).scrollTop() > 400) { $('#back-to-top').fadeIn(); } else { $('#back-to-top').fadeOut(); } }); } if($('#back-to-top-pdp').length > 0 && $( window ).width() < 768) { $(window).on('scroll', function () { if ($(this).scrollTop() > 1400) { $('#back-to-top-pdp').fadeIn(); } else { $('#back-to-top-pdp').fadeOut(); } }); } $(document).on('click', '#back-to-top, #back-to-top-pdp', function(){ GoogleTagManagerScrolltoTopArrow(); $("html, body").animate({ scrollTop: 0 }, 600); return false; }); }); $(function(){ $(document).on('click', '.checkout-shipping-methods input[type="radio"]', function(){ $('.checkout-shipping-methods > div').removeClass('selected'); $(this).closest('.cart-shipment').parents('div:eq(0)').addClass('selected'); }); $(document).on('click', '.product-fit .toggle-button, .product-description .toggle-button', function(){ var otherTarget; if($(this).closest('.product-fit').length > 0) { otherTarget = $('.product-description .toggle-button').attr('href'); } else if($(this).closest('.product-description').length > 0) { otherTarget = $('.product-fit .toggle-button').attr('href'); } $(otherTarget).collapse('hide'); }); $(document).on('click', 'a.print-and-fit-button', function(event){ var href = $(this).attr('href'); window.open(href, null, 'height=640,width=840,status=yes,toolbar=no,menubar=no,location=no'); event.preventDefault(); }); $(document).on('click', '.pdp__description.untoggled .toggle', function(event){ GoogleTagManagerExtendedDescription(); }); var body = document.getElementsByTagName('body')[0]; if(body && typeof MutationObserver !== 'undefined') { var obs = new MutationObserver(function (list) { for (index in list) { let item = list[index]; if (!item.removedNodes.length) { return; } let searchPattern = new RegExp('^tsbadgeResponsiveTop_', 'i'); let id = item.target.id; if (id && searchPattern.test(id)) { GoogleTagManagerTrustedShopsWidget('close'); } } }); obs.observe(body, {childList: true, subtree: true}); } $(document).on('click', 'div[id^=tsbadgeResponsiveTop_], div[id^=tsbadge][data-shopname]', function(e) { var $target = $(e.target); var searchPattern = new RegExp('^RemoveTrustbadgeLink_', 'i'); var id = $target.attr('id'); if (id && searchPattern.test(id)) { return; } GoogleTagManagerTrustedShopsWidget('open'); }); checkForCookieNotification(); $(document).on('focus', '#mobile-search, input.header-zoekopdracht', function(){ $(this).attr('hide-placeholder', $(this).attr('placeholder')); $(this).attr('placeholder', ''); }).on('focusout', '#mobile-search, input.header-zoekopdracht', function(){ $(this).attr('placeholder', $(this).attr('hide-placeholder')); $(this).attr('hide-placeholder', ''); $('.mobile-search-box').removeClass('focus'); $('body').css('overflow', 'auto'); }); if ($(window).width() < 768) { $('.button_carousel > .row > div').removeMatchingClasses('col-'); $('.button_carousel').each(function(){ if(!$(this).find('.slick-slide:last-child').visible()) { $(this).addClass('white-noise-right'); } }); $('.button_carousel > .row').slick({ autoplay: false, infinite: false, slidesToShow: 1, centerMode: false, variableWidth: true, touchThreshold: 25, arrows: false, outerEdgeLimit: true }).on('afterChange', function(event, slick, currentSlide, nextSlide){ // Use visible plugin to detect if buttons are visible $('.button_carousel').each(function(){ if($(this).find('.slick-slide:first-child').visible()) { $(this).removeClass('white-noise-left'); } else { $(this).addClass('white-noise-left'); } if($(this).find('.slick-slide:last-child').visible()) { $(this).removeClass('white-noise-right'); } else { $(this).addClass('white-noise-right'); } }); }); } $(document).on('click', '.productpage .average-review-rating a', function(){ if($('.product-review-details').length > 0) { scrollme('product-review-details'); GoogleTagManagerClickedReviewTitle(); } return false; }); $(window).on('scroll', stickyFilterRow); stickyFilterRow(); var slickProductSlideOptions = { dots: false, infinite: true, slidesToShow: 6, slidesToScroll: 1, arrows: false, responsive: [ { breakpoint: 1025, settings: { slidesToShow: 3, slidesToScroll: 3, dots: true } }, { breakpoint: 481, settings: { slidesToShow: 2, slidesToScroll: 2, dots: true } } ] }; $('.container-products-others-bought').slick(slickProductSlideOptions); $('.container-products-recently-viewed').slick(slickProductSlideOptions); $('.container-available-in-name-serie').slick(slickProductSlideOptions); $('.pdp__slick').slick(slickProductSlideOptions); $('.movement_slick_products').slick(slickProductSlideOptions); $(document).on('click', '.available-in-name-serie', function() { var productNumber = $(this).data('product-number'); if(productNumber) { GoogleTagManagerAvailableInNameSerie(productNumber); } }).on('click', '.products-recently-viewed', function() { var productNumber = $(this).data('product-number'); if(productNumber) { GoogleTagManagerProductsRecentlyViewed(productNumber); } }).on('click', '.products-others-bought', function() { var productNumber = $(this).data('product-number'); if(productNumber) { GoogleTagManagerProductsOthersBought(productNumber); } }); $(document).on('change', '#receiptNewsletterSubscribe #newsletter_subscribe', function() { if($(this).is(':checked')) { $(this).closest('form').find('button').prop('disabled', false); } else { $(this).closest('form').find('button').prop('disabled', 'disabled'); } }); $(document).on('submit', '#receiptNewsletterSubscribe', function() { var $form = $(this); var remote = $form.attr('action'); var $loading = $('
'); $form.append($loading); $.post(remote, $form.serialize(), function(json) { if(json.status === 200) { $form.replaceWith(json.message); GoogleTagManagerMessages('success', json.message); GoogleTagManagerNewsletterSubscription('receipt'); $('.receipt_page .emarsys-date-of-birth-container').show(); } $loading.remove(); }); return false; }); $(document).on('submit', '.subscribe_newsletter', function() { var $form = $(this); $.post($form.attr('action'), $form.serialize(), function(json) { if(json.status === 200) { $form.replaceWith('
' + json.message + '
'); GoogleTagManagerMessages('success', json.message); GoogleTagManagerNewsletterSubscription('footer'); } else { $form.find('.newsletter_error').remove(); $form.append('
' + json.message + '
'); GoogleTagManagerMessages('error', json.message); } }); return false; }); checkForCheckoutErrors(); if($('.msg-add-to-cart').length > 0) { $('.msg-add-to-cart').each(function(){ var $target = $(this); GoogleTagManagerMessages('success', $target.text()); setTimeout(function() { $target.hide('slow', function(){ $target.remove(); }); }, 3000); }); } $(document).on('click', '.scroll-to-products-in-same-serie', function() { scrollme('products-in-same-serie'); var productNumber = $(this).data('product-number'); if(productNumber) { GoogleTagManagerAvailableInNameSerieScroll(productNumber); } }); $('#receiptBirthdaySubscribe').on('submit', function(){ var day = $(this).find('input[name="date_of_birth[day]"]').val(); var month = $(this).find('select[name="date_of_birth[month]"]').val(); var year = $(this).find('input[name="date_of_birth[year]"]').val(); // javascript is month -1 if(!isValidDate(month + '/' + day + '/' + year)) { $(this).find('.birthdaygift-error').slideDown(500); GoogleTagManagerMessages('error', $(this).find('.birthdaygift-error').text()); } else { $(this).find('.birthdaygift-error').hide(); var remote = $(this).attr('action'); var $form = $(this); // Do update $.post(remote, { 'date_of_birth': year + '-' + month + '-' + day, 'order_id': $form.find('input[name="order_id"]').val() }, function(json) { if(json.status === 200) { $form.replaceWith('

'+ json.message +'

'); GoogleTagManagerMessages('success', json.message); } else { $form.append('

'+ json.message +'

'); GoogleTagManagerMessages('error', json.message); } }); } return false; }); // jQuery unveil needs to be last (Won't work on images display:hidden at time of run) $('img.unveil').unveil(window.HWG_php_bridge.unveil); $(document).on('click', '.emarsys-predict .bs-product', function() { GoogleTagManagerEmarsysPredict($(this).closest('.emarsys-predict').find('.emarsys-predict-title').text()); }); $(document).on('click', '.pdp__shortcuts a', function() { if($(this).attr('data-trigger')) { $($(this).data('trigger')).trigger('click'); } if($(this).attr('data-target')) { scrollme($(this).data('target')); } GoogleTagManagerShortcutButton($(this).text()); return false; }); $('.compare-diff').on('change', function () { $('body').toggleClass('compare-diff-only', $(this).prop('checked')); }).trigger('change'); var compareButtons = function () { var elem = $('.compare-container')[0]; var scroll = $('.compare-container').scrollLeft(); $('.compare-slide-left, .compare-slide-right').show(); if (scroll == 0) { $('.compare-slide-left').hide(); } if (scroll == elem.scrollWidth - elem.getBoundingClientRect().width) { $('.compare-slide-right').hide(); } }; $(window).on('resize scroll', function () { if (!$('.compare-container').length) { return; } var dist = $(window).scrollTop() - $('.compare-container').offset().top; if (dist < 0) { $('.compare-sticky').css('transform', ''); } else { $('.compare-sticky').css('transform', 'translateY(' + dist + 'px)'); } compareButtons(); }).trigger('resize'); $('.compare-container').on('scroll', compareButtons); var compareSlide = function(diff) { var colsize = $('.compare-container .compare-blocks td')[0].getBoundingClientRect().width; var curcol = Math.floor(($('.compare-container').scrollLeft() + (colsize / 2)) / colsize); var newpos = Math.ceil((curcol + diff) * colsize); if ('scrollBehavior' in document.documentElement.style) { $('.compare-container')[0].scroll({ left: newpos, behavior: 'smooth', }); } else { $('.compare-container').scrollLeft(newpos); } }; $('.compare-slide-right').on('click', function () { compareSlide(1); }); $('.compare-slide-left').on('click', function () { compareSlide(-1); }); }); function checkForCookieNotification() { if($('.cookie-notification').length > 0) { GoogleTagManagerCookieNotificationShown(); } } jQuery.fn.extend({ removeMatchingClasses: function(pattern) { return this.each(function() { var element = jQuery(this); var classes = element.attr("class").split(/\s+/); jQuery.each(classes, function(idx, cssClass) { if (cssClass.match(pattern)) element.removeClass(cssClass); }); return this; }); } }); function checkForCheckoutErrors() { if($('.hwg_checkout').length > 0 || $('.cart-summary').length > 0) { $('.alert.alert-danger:visible').each(function(){ GoogleTagManagerMessages('error', $.trim($(this).text().replace("\u2022", ""))); }); $('#checkoutForm .text-danger').each(function(){ GoogleTagManagerMessages('error', $.trim($(this).text())); }); if($('#checkoutForm .pay_method.has-error input[data-method-name="iDEAL"]:checked').length == 1) { GoogleTagManagerMessages('error', 'Kies uw bank'); } if($('#checkoutForm div[data-method-name="AfterPay"] .inputError:visible').length == 1) { GoogleTagManagerMessages('error', 'Ik ga akkoord met de Afterpay betaalvoorwaarden'); } } } /* Bind function to select image */ $(document).on('click', 'div.footer-menu-block > strong.footer-menu-heading', function() { $(this).parent().toggleClass('toggled'); }); $.fn.isInViewport = function() { var elementTop = $(this).offset().top; var elementBottom = elementTop + $(this).outerHeight(); var viewportTop = $(window).scrollTop(); var viewportBottom = viewportTop + $(window).height(); return elementBottom > viewportTop && elementTop < viewportBottom; }; $(window).on('resize scroll', function() { var elem = $('div.newsletter-container > div.stamp:not(.show-it)'); if (elem.length && elem.isInViewport()) { elem.addClass('show-it'); } }); // Validates that the input string is a valid date formatted as "mm/dd/yyyy" function isValidDate(dateString) { // First check for the pattern if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString)) return false; // Parse the date parts to integers var parts = dateString.split("/"); var day = parseInt(parts[1], 10); var month = parseInt(parts[0], 10); var year = parseInt(parts[2], 10); // Check the ranges of month and year if(year < 1000 || year > 3000 || month == 0 || month > 12) return false; var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; // Adjust for leap years if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) monthLength[1] = 29; // Check the range of the day return day > 0 && day <= monthLength[month - 1]; }; $('#checkoutForm .orderbutton').click(function () { if ($(this).is('.disabled')) { return false; } $(this).addClass('disabled'); }); // Search for defined words and wrap them in a defined tag $.fn.wrapInTag = function (opts) { // http://stackoverflow.com/a/1646618 function getText(obj) { return obj.textContent ? obj.textContent : obj.innerText; } var tag = opts.tag || 'strong', words = opts.words || [], regex = RegExp(words.join('|'), 'gi'), replacement = '<' + tag + '>$&'; // http://stackoverflow.com/a/298758 $(this).contents().each(function () { if (this.nodeType === 3) //Node.TEXT_NODE { // http://stackoverflow.com/a/7698745 $(this).replaceWith(getText(this).replace(regex, replacement)); } else if (!opts.ignoreChildNodes) { $(this).wrapInTag(opts); } }); }; $(function () { $('.slick_products').slick({ autoplay: false, arrows: false, dots: false, draggable: false, infinite: true, speed: 500, slidesToShow: 6, slidesToScroll: 1, adaptiveHeight: false, responsive: [ { breakpoint: 768, settings: { slidesToShow: 3, arrows: true, draggable: true, }, }, ], }); }); $(document).on('click', 'a.reviews-toggle', function() { if ($(window).width() < 768) { pdpOverlay('reviews'); return; } else { // Check if there are still hidden reviews var label_more = $(this).data('more'); var label_less = $(this).data('less'); if($('ol#reviews-list > li.hidden-review').length) { $('ol#reviews-list > li.hidden-review:lt(3)').addClass('animate-review').removeClass('hidden-review'); if(!$('ol#reviews-list > li.hidden-review').length) { $(this).text(label_less); $(this).html(' ' + label_less); } } else { $('ol#reviews-list > li:not(:lt(3))').addClass('hidden-review').removeClass('animate-review'); $(this).html(' ' + label_more + ''); $('html, body').animate({ scrollTop: ($('ol#reviews-list').offset().top - 15) }, 600); } } return false; }); $(function() { var elem = $('.sticky-product-info-container > .sticky-product-info')[0]; $(window).on('scroll resize', function() { if (elem !== undefined){ var container = elem.parentNode; var styles = getComputedStyle(container); var width = container.getBoundingClientRect().width - parseFloat(styles.paddingLeft) - parseFloat(styles.paddingRight); var pos = container.offsetTop - container.scrollTop + container.clientTop + 10; $(elem).css('width', width + 'px'); $(elem).toggleClass('sticky', $(window).scrollTop() > pos); } }); });