{"version":3,"sources":["customise.js"],"names":["Customise","slickArrow","icon","action","Svg","render","destroyCustomiseModalCarousels","$","slick","this","options","selection","frames","fabric","user","selectedFabric","selectedFrame","selectedOptions","ajaxRunning","setValues","self","each","updateCombinationQty","data","val","forEach","optionName","length","init","watch","setupPopup","setupModular","watchModular","initModular","initCylindoARButton","on","checked","stage","closest","find","hide","undefined","window","CYLINDO","updateFeature","setFabric","HAZE","selectedThumb","attr","text","show","html","css","removeClass","matchMedia","matches","initCustomiseModalCarousels","setTimeout","modal","document","querySelector","classList","add","scrollTop","scrollLock","disablePageScroll","addEventListener","e","preventDefault","remove","enablePageScroll","form","updateUrl","ajax","location","href","type","updateFramesForFabric","formData","serialize","success","refreshAfterAjax","sample","fail","magnificPopup","close","trigger","resetCylindoZoom","replaceUrl","JSON","parse","index","value","updateBasketButton","updateTotalPrice","name","hazeGallery","materials","hash","speed","arguments","target","wrap","animate","offset","top","scrollTo","stickyContainer","fixedContentPos","settings","cache","prependTo","showCloseBtn","callbacks","beforeOpen","getFrames","getFabricId","getOptionId","st","getBoundingClientRect","y","body","documentElement","open","AndrewMartin","svgSymbolsFile","ajaxContentAdded","$cylindo","instantiate","cylindoGallery","$haze","zoom","canvas","backdrop","currItem","src","includes","updatePriceRanges","setupFilters","setupFabricSampleAdd","setupModal","svg","items","mainClass","removeDelay","closeMarkup","beforeClose","afterClose","debug","console","log","updateInstance","selected","selectedQty","getSelectedQuantity","i","element","disable","toggleClass","select","parseInt","updateProductWarning","addClass","showPieces","input","sku","prop","fdPrice","parseFloat","payload","price_raw","toFixed","updateFinancing","initPopups","price","hasOwnProperty","configuration","cylindo_model","model","cylindo_frame","frame","haze","camera","galleryInstance","get","galleryId","placeholder","getElementById","attributes","isViewerInitialised","setCamera","UPHOLSTERY","setModel","keys","skus","updateKey","updateCustomRender","frameSku","qty","clear","identifier","STATE","setParam","params","isEmptyObject","stringify","images","initProductGallery","photoswipe","setAttribute","dataset","head","description","currentPriceHtml","is_modular","v2","customise","pieces","triggerQtyChange","customise_selections","title","image","totalPrice","spec","accordion","key","carousel","features","cylindo","goToGallerySlide","removalDelay","slidesToShow","slidesToScroll","arrows","swipe","infinite","autoplay","mobileFirst","dots","fade","cssEase","asNavFor","prevArrow","nextArrow","focusOnSelect","clicked","span","replace","count","hasClass","initSlider","min","max","nonLinearSlider","noUiSlider","create","connect","start","step","tooltips","range","prefix","notFirst","option_set","join","sectionTitles","availableResults","category","first","last","newMin","Number","newMax","nextAll","toggle","elem","selectReplace","customCheckReplace","filters","is","url","response","listing","showClear","fromPrice","currency_symbol","numberWithCommas","fromQty","error","_this","cylindoARButton","cylindoARViewerButton","slide","cylindoIndex","slickIndex","mouseUpEvent","MouseEvent","bubbles","cancelable","dispatchEvent","x","toString","overlay","closeOverlay","event","pathname","gallery","slideDown","slideUp","galleryV1","galleryV2","querySelectorAll","radio","container","active","contains","Array","from","filterCount","filter","innerText","concat"],"mappings":"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","file":"../../javascript/customise.js","sourcesContent":["function Customise() {\n    this.options = [\n        'leg',\n        'stud',\n        'piping',\n        'studpiping',\n        'infill',\n        'button',\n        'surface',\n    ];\n\n    this.selection = {\n        'frames': {},\n        'fabric': false,\n        'options': {}\n    };\n\n    this.user = {\n        selectedFabric: false,\n        selectedFrame: false,\n        selectedOptions: {},\n    };\n\n    this.ajaxRunning = false;\n\n    this.setValues = setValues;\n    this.init = init;\n    this.watch = watch;\n    this.setupPopup = setupPopup;\n    this.updateBasketButton = updateBasketButton;\n    this.getSelectedQuantity = getSelectedQuantity;\n    this.updateProductWarning = updateProductWarning;\n    this.watchModular = watchModular;\n    this.updateCombinationQty = updateCombinationQty;\n    this.updateUrl = updateUrl;\n    this.replaceUrl = replaceUrl;\n    this.getFrames = getFrames;\n    this.getFabricId = getFabricId;\n    this.getOptionId = getOptionId;\n    this.refreshAfterAjax = refreshAfterAjax;\n    this.initSlider = initSlider;\n    this.updateKey = updateKey;\n    this.updatePriceRanges = updatePriceRanges;\n    this.setupFilters = setupFilters;\n    this.updateTotalPrice = updateTotalPrice;\n    this.updateCustomRender = updateCustomRender;\n    this.resetCylindoZoom = resetCylindoZoom;\n    this.initCylindoARButton = initCylindoARButton;\n    this.numberWithCommas = numberWithCommas;\n    this.setupFabricSampleAdd = setupFabricSampleAdd;\n    this.setupModal = setupModal;\n    this.setupModular = setupModular;\n    this.initModular = initModular;\n    this.showPieces = showPieces;\n    this.triggerQtyChange = triggerQtyChange;\n    this.initCustomiseModalCarousels = initCustomiseModalCarousels;\n    this.goToGallerySlide = goToGallerySlide;\n\n    function init() {\n        this.setValues();\n        this.watch();\n        this.setupPopup();\n        this.setupModular();\n        this.watchModular();\n        this.initModular();\n        this.initCylindoARButton();\n    }\n\n    function setValues() {\n        var self = this;\n        $('.js-combination-configuration input').each(function() {\n            self.updateCombinationQty($(this).data('frame-sku'), $(this).val());\n        });\n        if ($('.js-selected-frame-sku').val()) {\n            self.updateCombinationQty($('.js-selected-frame-sku').val(), 1);\n        }\n        self.selection.fabric = $('.js-selected-fabric-sku').val();\n\n        self.options.forEach(function(optionName) {\n            self.selection[optionName] = $('.js-selected-' + optionName + '-id').val();\n        });\n\n        if ($('.js-user-selected-frame').length > 0) {\n            self.user.selectedFrame = true;\n        }\n        if ($('.js-user-selected-fabric').length > 0) {\n            self.user.selectedFabric = true;\n        }\n\n        self.options.forEach(function(optionName) {\n            if ($('.js-user-selected-' + optionName).length > 0) {\n                self.user.selectedOptions[optionName] = true;\n            }\n        });\n    }\n\n    function watch() {\n        var self = this;\n\n        $('.js-customise__option').on('change', function () {\n            var checked = $(this);\n            var stage = $(this).closest('.customise__stage');\n\n            stage.find('.customise__noimage').hide();\n\n            if (window.CYLINDO !== undefined) {\n                if (checked.data('cylindo')) {\n                    if (checked.data('cylindo-name')) {\n                        CYLINDO.updateFeature('chooser', checked.data('feature-name'), checked.data('cylindo-name'));\n                    } else {\n                        CYLINDO.setFabric('chooser', checked.val());\n                    }\n                }\n            }\n\n            if (window.HAZE !== undefined) {\n                if (checked.data('haze')) {\n                    if (checked.data('haze-name')) {\n                        HAZE.updateFeature('chooser', checked.data('haze-feature'), checked.data('haze-name'), true);\n                    } else {\n                        HAZE.setFabric('chooser', checked.val(), true);\n                    }\n                }\n            }\n\n            var selectedThumb = stage.find('.customise__selected-thumb');\n            selectedThumb.find('img')\n                .attr('src', checked.data('dimensions-image-src'))\n                .attr('sizes', checked.data('dimensions-image-sizes'))\n                .attr('srcset', checked.data('dimensions-image-srcset'));\n            selectedThumb.attr('data-fullsize', checked.data('fillsize-image-src'));\n            if (checked.data('no-custom-image')) {\n                selectedThumb.find('img')\n                    .attr('src', selectedThumb.data('default-image-src'))\n                    .attr('sizes', selectedThumb.data('default-image-sizes'))\n                    .attr('srcset', selectedThumb.data('default-image-srcset'));\n                selectedThumb.attr('data-fullsize', selectedThumb.data('default-fullsize'));\n                stage.find('.customise__selected-fabric').text(checked.data('fabric'));\n                stage.find('.customise__noimage').show();\n            }\n\n            stage.find('.customise__selected-name').html(checked.data('title'));\n            stage.find('.customise__selected-desc').html(checked.data('fabric') || checked.data('subtitle'));\n            stage.find('.customise__selected-fabric-name').html(checked.data('fabric'));\n            stage.find('.customise-modal__header').html(checked.data('fabric'));\n            stage.find('.customise-modal__body').html(checked.data('description'));\n            stage.find('.customise-modal__subtitle').html(checked.data('fabric-category'));\n            stage.find('.customise-modal__swatch').css('background-image', 'url('+checked.data('swatch-image-src')+')');\n            stage.find('.customise__selected-frame').html(checked.data('frame'));\n            stage.find('.customise__selected-price span').html(checked.data('price'));\n            stage.find('.js-customise-modal-media').data('fabric', checked.data('fabric-sku'));\n            stage.find('.js-fabric-detail-link').attr('href', checked.data('detail-link'));\n            stage.find('.js-fabric-sample-add')\n                .attr('href', checked.data('sample-url'))\n                .removeClass('customise__action--done')\n                .removeClass('customise__action--working')\n                .find('span')\n                .html('Order a sample');\n\n            stage.find('.customise__selected-swatch').css('background-image', 'url('+checked.data('swatch-image-src')+')');\n        });\n\n        $('.js-customise__option').on('click', function () {\n            if (!window.matchMedia('(max-width: 999px)').matches) {\n                return;\n            }\n\n            self.initCustomiseModalCarousels();\n            setTimeout(() => {\n                refreshCustomiseModalCarousels();\n            }, 100);\n\n            const modal = document.querySelector('.js-customise-modal');\n\n            modal.classList.add('customise__top-section--active');\n            modal.scrollTop = 0;\n            scrollLock.disablePageScroll(modal);\n\n            document.querySelector('.js-close-custom-modal').addEventListener('click', (e) => {\n                e.preventDefault();\n                modal.classList.remove('customise__top-section--active');\n                scrollLock.enablePageScroll(modal);\n                destroyCustomiseModalCarousels();\n            });\n        });\n\n        $('.js-customise__choose--popup').on('click', function(e) {\n            e.preventDefault();\n            var form = $('.js-fabric-chooser-form');\n\n            self.selection.fabric = $('.js-customise__option--fabric:checked').val();\n            self.updateUrl('fabric', self.selection.fabric);\n\n            $.ajax(window.location.href, {\n                type: 'post',\n                data: {\n                    updateFramesForFabric: true,\n                    formData: form.serialize()\n                },\n                success: function(data) {\n                    self.refreshAfterAjax(data);\n                    self.user.selectedFabric = true;\n                    $('.sample-popup').sample(); // rebind sample events\n                },\n                fail: function() {\n                    $.magnificPopup.close();\n                }\n            });\n\n            $('.js-cylindo-close').trigger('click');\n        });\n\n        $('.js-fabric-chooser-form').on('submit', function(e) {\n            e.preventDefault();\n\n            self.resetCylindoZoom();\n\n            var form = $(this);\n\n            self.selection.fabric = $('.js-customise__option--fabric:checked').val();\n            self.updateUrl('fabric', self.selection.fabric);\n\n            $.ajax(window.location.href, {\n                type: 'post',\n                data: {\n                    updateFramesForFabric: true,\n                    formData: form.serialize()\n                },\n                success: function(data) {\n                    self.refreshAfterAjax(data);\n                    self.user.selectedFabric = true;\n                    $('.sample-popup').sample(); // rebind sample events\n                },\n                fail: function() {\n                    $.magnificPopup.close();\n                }\n            });\n        });\n\n        $('.js-frame-chooser-form').on('submit', function(e) {\n            e.preventDefault();\n\n            self.resetCylindoZoom();\n\n            self.updateCombinationQty($('.js-customise__option--frame:checked').val(), 1, true);\n            if (self.user.selectedFrame) {\n                self.replaceUrl('frames[' + $('.js-customise__option--frame:checked').val() +']', 1);\n            } else {\n                self.updateUrl('frames[' + $('.js-customise__option--frame:checked').val() +']', 1);\n            }\n            var form = $(this);\n\n            $.ajax(window.location.href, {\n                type: 'post',\n                data: {\n                    formData: form.serialize()\n                },\n                success: function(data) {\n                    self.user.selectedFrame = true;\n                    self.refreshAfterAjax(data);\n                },\n                fail: function() {\n                    $.magnificPopup.close();\n                }\n            });\n        });\n\n        $('.js-configuration-chooser-form').on('submit', function(e) {\n            e.preventDefault();\n\n            self.resetCylindoZoom();\n\n            var frames = JSON.parse($('.js-customise__option--configuration:checked').val());\n\n            self.updateCombinationQty('', 0, true);\n            self.replaceUrl('frames', 0);\n\n            $.each(frames['frames'], function(index, value) {\n                self.updateCombinationQty(index, value);\n                self.updateUrl('frames[' + index +']', value);\n            });\n\n            self.updateBasketButton();\n            self.updateTotalPrice();\n\n            var form = $(this);\n\n            $.ajax(window.location.href, {\n                type: 'post',\n                data: {\n                    formData: form.serialize()\n                },\n                success: function(data) {\n                    self.user.selectedFrame = true;\n                    self.refreshAfterAjax(data);\n                },\n                fail: function() {\n                    $.magnificPopup.close();\n                }\n            });\n        });\n\n        $('.js-option-chooser-form').on('submit', function(e) {\n            e.preventDefault();\n\n            self.resetCylindoZoom();\n\n            var form = $(this);\n            var optionName = form.data('option');\n            var checked = $('.js-customise__option--' + optionName + ':checked');\n            self.selection.options[optionName] = checked.val();\n            self.updateUrl(optionName, self.selection.options[optionName]);\n\n            var name = checked.data('cylindo-name');\n            if (name == 'xxx') {\n                name = null;\n            }\n\n            if (window.CYLINDO !== undefined) {\n                CYLINDO.updateFeature('gallery', checked.data('feature-name'), name);\n            }\n\n            var name = checked.data('haze-name');\n            if (name == 'xxx') {\n                name = null;\n            }\n\n            if (window.HAZE !== undefined) {\n                HAZE.updateFeature('gallery', checked.data('haze-feature'), name, true);\n                window.hazeGallery.materials[checked.data('haze-feature')] = name;\n            }\n\n            $.ajax(window.location.href, {\n                type: 'post',\n                data: {\n                    formData: form.serialize()\n                },\n                success: function(data) {\n                    self.user.selectedOptions[optionName] = true;\n                    self.refreshAfterAjax(data);\n                },\n                fail: function() {\n                    $.magnificPopup.close();\n                }\n            });\n        });\n\n        $('.js-customise__view').on('click', function(e) {\n            e.preventDefault();\n            scrollTo('#customise__preview');\n        });\n    }\n\n    function scrollTo(hash, speed = 900) {\n        var target = $(hash);\n        var wrap = $('.customise__form');\n        if (target.length) {\n            $('.mfp-content').animate({\n                scrollTop: target.offset().top - wrap.offset().top - 105\n            }, speed);\n        }\n    }\n\n    function refreshAfterAjax(data) {\n        var self = this;\n\n        if (data.hasOwnProperty('payload')) {\n            if (data.payload.hasOwnProperty('images')) {\n                $('.js-images-insert').html(data.payload.images);\n                initProductGallery();\n            }\n            if (data.payload.hasOwnProperty('photoswipe') && data.payload.photoswipe !== null) {\n                var photoswipe = JSON.stringify(data.payload.photoswipe);\n                document.querySelector('.js-photoswipe-insert').setAttribute('data-photoswipe', photoswipe);\n                document.querySelector('.js-photoswipe-insert').dataset.photoswipe = photoswipe;\n\n                AndrewMartin.photoswipe();\n            }\n            if (data.payload.hasOwnProperty('head')) {\n                $('.js-head-insert').html(data.payload.head);\n            }\n            if (data.payload.hasOwnProperty('description')) {\n                $('.js-description-insert').html(data.payload.description);\n            }\n\n            var currentPriceHtml = null;\n            if (!data.payload.hasOwnProperty('pieces')\n                && data.payload.hasOwnProperty('is_modular')\n                && data.payload.hasOwnProperty('v2')\n                && data.payload.is_modular\n                && data.payload.v2\n            ) {\n                if ($('.js-customise-price-target').length > 0) {\n                    currentPriceHtml = $('.js-customise-price-target').html();\n                }\n            }\n\n            if (data.payload.hasOwnProperty('customise')) {\n                $('.js-customise-insert').html(data.payload.customise);\n\n                if ($('.js-customise-insert .js-customise-price')) {\n                    $('.js-customise-price-target').html($('.js-customise-insert .js-customise-price').html());\n                }\n\n                if (currentPriceHtml) {\n                    $('.js-customise-price-target').html(currentPriceHtml);\n                }\n            }\n            if (data.payload.hasOwnProperty('pieces')) {\n                $('.js-pieces-insert').html(data.payload.pieces);\n            }\n\n            if (data.payload.hasOwnProperty('price_raw')) {\n                $('.js-customise-price-target').data('price', data.payload.price_raw);\n                self.triggerQtyChange();\n            }\n            if (data.payload.hasOwnProperty('customise_selections')) {\n                $('.js-customise-selections-insert').html(data.payload.customise_selections);\n            }\n\n            if (data.payload.hasOwnProperty('configuration')) {\n                if (data.payload.configuration) {\n                    $('.js-customise-configuration-title').html(data.payload.configuration.title);\n                    $('.js-customise-configuration-img').html(data.payload.configuration.image);\n                    $('.product-warning--components').addClass('d3r-hidden');\n                } else {\n                    if ($('.product__group--configurations').length > 0) {\n                        $('.product-warning--components').removeClass('d3r-hidden');\n                    }\n                }\n\n                if (data.payload.configuration && data.payload.hasOwnProperty('pieces')) {\n                    self.showPieces(false, false);\n                } else {\n                    self.showPieces(true, false);\n                }\n            }\n\n            if (data.payload.hasOwnProperty('totalPrice')) {\n                $('.js-total-price-insert').html(data.payload.totalPrice);\n            }\n            if (data.payload.hasOwnProperty('spec')) {\n                $('.js-accordion-insert').html(data.payload.spec);\n                accordion();\n            }\n\n            if (data.payload.hasOwnProperty('key')) {\n                $('.js-wishlist-action').attr('data-sku', data.payload.key);\n            } else if (data.payload.hasOwnProperty('skus')) {\n                $('.js-wishlist-action').attr('data-sku', data.payload.skus);\n            }\n\n            if (data.payload.hasOwnProperty('price_raw') && typeof(fdPrice) != 'undefined') {\n                fdPrice = parseFloat(data.payload.price_raw).toFixed(2);\n                updateFinancing();\n                initPopups();\n            }\n\n            self.watch();\n            self.watchModular();\n            AndrewMartin.carousel();\n\n            const modal = document.querySelector('.js-customise-modal');\n            scrollLock.enablePageScroll(modal);\n\n            if (window.CYLINDO !== undefined) {\n                window.cylindoGallery.features.UPHOLSTERY = self.getFabricId() || data.payload.cylindo.UPHOLSTERY;\n                window.cylindoGallery.model = data.payload.cylindo_model;\n                if (data.payload.cylindo_frame) {\n                    window.cylindoGallery.frame = data.payload.cylindo_frame;\n                }\n                if (window.matchMedia('(max-width: 999px)').matches) {\n                    CYLINDO.instantiate('js-cylindo_mobile', 'mobile-popup', window.cylindoGallery);\n                } else {\n                    CYLINDO.instantiate('js-cylindo_viewer', 'gallery', window.cylindoGallery);\n                }\n            }\n\n            if (window.HAZE !== undefined) {\n                window.hazeGallery.materials.UPHOLSTERY = self.getFabricId() || data.payload.haze.features.UPHOLSTERY;\n                window.hazeGallery.model = data.payload.haze.model;\n                window.hazeGallery.camera = data.payload.haze.camera;\n\n                var galleryInstance = HAZE.get('gallery');\n\n                if (HAZE.debug) {\n                    console.log('HAZE', galleryInstance);\n                }\n\n                if (!galleryInstance) {\n                    if (HAZE.debug) {\n                        console.log('HAZE', 're-initialising', 'refreshAfterAjax');\n                    }\n                    HAZE.instantiate('js-haze-viewer', 'gallery', window.hazeGallery);\n                } else {\n                    if (HAZE.debug) {\n                        console.log('HAZE', 'updating', 'refreshAfterAjax');\n                    }\n                    HAZE.setFabric('gallery', window.hazeGallery.materials.UPHOLSTERY);\n                    HAZE.setCamera('gallery', window.hazeGallery.camera);\n                    HAZE.setModel('gallery', window.hazeGallery.model);\n\n                    // HAZE.updateInstance('gallery');\n                    // HAZE.updateGallery('gallery');\n                }\n            }\n        }\n\n        this.goToGallerySlide();\n        this.updateBasketButton();\n        this.setupPopup();\n        $.magnificPopup.close();\n\n        $('.js-open-sample').on('click', function(e) {\n            e.preventDefault();\n            var svg = new Svg();\n\n            $.magnificPopup.open({\n                type: 'inline',\n                mainClass: 'mfp-sample mfp-fade',\n                removalDelay: 300,\n                items: {\n                    src: '.js-sample-popup',\n                },\n                closeMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">' + svg.render('close') + '</button>',\n                fixedContentPos: true\n            });\n        })\n\n        $('.js-open-sample-detail').on('click', function(e) {\n            e.preventDefault();\n            var svg = new Svg();\n\n            $.magnificPopup.open({\n                type: 'inline',\n                mainClass: 'mfp-sample-detail mfp-fade',\n                removalDelay: 300,\n                items: {\n                    src: '.js-sample-popup--pdp',\n                },\n                closeMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">' + svg.render('close') + '</button>',\n                fixedContentPos: true,\n\n                callbacks: {\n                    open: function() {\n                        function slickArrow(icon, action) {\n                            const svg = new Svg();\n\n                            return '<button type=\"button\" class=\"slick-arrow slick-' + action + '\"><span>' + svg.render(icon) + '</span></button>';\n                        }\n\n                        $(\".js-carousel--customise-modal--pdp\").slick({\n                            slidesToShow: 1,\n                            slidesToScroll: 1,\n                            arrows: true,\n                            swipe: true,\n                            infinite: false,\n                            autoplay: false,\n                            mobileFirst: true,\n                            dots: false,\n                            fade: true,\n                            cssEase: 'linear',\n                            asNavFor: '.js-carousel--modal-thumbnails--pdp',\n                            speed: 100,\n                            prevArrow: slickArrow('icon-arrow-large-left', 'prev'),\n                            nextArrow: slickArrow('icon-arrow-large-right', 'next')\n                        })\n\n                        $(\".js-carousel--modal-thumbnails--pdp\").slick({\n                            slidesToShow: 3.5,\n                            asNavFor: '.js-carousel--customise-modal--pdp',\n                            focusOnSelect: true,\n                            infinite: false,\n                            dots: false,\n                            arrows: false,\n                        })\n\n                        $('.js-fabric-sample-add').on('click', function(e) {\n                            e.preventDefault();\n                            var clicked = $(this);\n                            var span = clicked.find('span');\n                            var html = span.html();\n                            html = html.replace(' Added to basket', '');\n                            clicked.addClass('customise__action--working');\n                            span.html('Adding to basket...');\n                            $.ajax($(this).attr('href'), {\n                                success: function(data) {\n                                    if (data.payload.hasOwnProperty('count')) {\n                                        $('.js-basket-count').html(data.payload.count);\n                                    }\n\n                                    clicked.find('span').html(html + ' Added to basket');\n                                    clicked.removeClass('customise__action--working');\n                                    clicked.addClass('customise__action--done');\n\n                                    if (clicked.hasClass('js-close-after-action')) {\n                                        $.magnificPopup.close();\n                                    }\n                                }\n                            });\n                        });\n                    }\n                }\n            });\n\n            self.initCustomiseModalCarousels();\n        })\n    }\n\n    function triggerQtyChange() {\n        $('.product__qty input').trigger('change');\n    }\n\n    function setupModular() {\n        var self = this;\n\n        if ($('.product__group--pieces').length < 1) {\n            return;\n        }\n\n        // @todo remove after A/B test\n        if ($('.product__group--pieces').attr('data-pdp') === 'version-1') {\n            return;\n        }\n\n        self.updateProductWarning();\n\n        if ($('.product__group--configurations').length > 0) {\n            self.showPieces(false, false);\n        }\n    }\n\n    function showPieces(show, slide) {\n        if (show) {\n            if (slide) {\n                $('.product__group--pieces').slideDown();\n                $('.product__group--configurations').slideUp();\n            } else {\n                $('.product__group--pieces').show();\n                $('.product__group--configurations').hide();\n            }\n        } else {\n            if (slide) {\n                $('.product__group--pieces').slideUp();\n                $('.product__group--configurations').slideDown();\n            } else {\n                $('.product__group--pieces').hide();\n                $('.product__group--configurations').show();\n            }\n        }\n    }\n\n    function watchModular() {\n        var self = this;\n\n        $('.js-toggle-layout-select').on('click', function() {\n            self.showPieces(true, true);\n        });\n\n        $('.js-choose-layout').on('click', function() {\n            self.showPieces(false, true);\n        });\n\n        self.updateProductWarning();\n\n        $('.js-kit-price input').on('change', function() {\n            var input = $(this);\n            var sku = input.data('frame-sku');\n\n            var form = $('#basket-add');\n            form.find('button.product__button').prop('disabled', 'disabled');\n            $('.js-wishlist-action').addClass('product__wishlist--disabled');\n\n            $.ajax('/products/kit-price', {\n                type: 'post',\n                data: $('.product-piece input').serialize(),\n                success: function(data) {\n                    form.find(\"input.\" + sku).val(input.val());\n\n                    if (typeof(fdPrice) != 'undefined') {\n                        fdPrice = parseFloat(data.payload.price_raw).toFixed(2);\n                        updateFinancing();\n                        initPopups();\n                    }\n\n                    $('.product__total-price span.value').html(data.payload.price);\n\n                    if (data.payload.price_raw > 0) {\n                        form.find('button.product__button').prop('disabled', false).removeClass('button--disabled');\n                        $('.product__finance-option').show();\n                    } else {\n                        $('.product__finance-option').hide();\n                    }\n\n                    if (data.payload.hasOwnProperty('configuration')) {\n                        if (data.payload.configuration) {\n                            $('.product-warning--components').addClass('d3r-hidden');\n                        } else {\n                            if ($('.product__group--configurations').length > 0) {\n                                $('.product-warning--components').removeClass('d3r-hidden');\n                            }\n                        }\n                    }\n\n                    self.updateProductWarning();\n\n                    if (window.CYLINDO !== undefined && data.payload.cylindo_model) {\n                        if (window.cylindoGallery.model != data.payload.cylindo_model) {\n                            window.cylindoGallery.model = data.payload.cylindo_model;\n                            if (data.payload.cylindo_frame) {\n                                window.cylindoGallery.frame = data.payload.cylindo_frame;\n                            }\n                            if (window.matchMedia('(max-width: 999px)').matches) {\n                                CYLINDO.instantiate('js-cylindo_mobile', 'mobile-popup', window.cylindoGallery);\n                            } else {\n                                CYLINDO.instantiate('js-cylindo_viewer', 'gallery', window.hazeGallery);\n                            }\n                        }\n                    }\n\n                    if (window.HAZE !== undefined && data.payload.haze) {\n                        HAZE.debug = true;\n                        window.hazeGallery.model = data.payload.haze.model;\n                        window.hazeGallery.camera = data.payload.haze.camera;\n\n                        var galleryInstance = HAZE.get('gallery');\n                        var galleryId = 'js-haze_viewer';\n\n                        if (HAZE.debug) {\n                            console.log('HAZE', galleryInstance);\n                        }\n\n                        if (data.payload.haze.placeholder) {\n                            document.getElementById(galleryId).attributes.placeholder.value = data.payload.haze.placeholder;\n                        }\n\n                        if (!galleryInstance || galleryInstance.isViewerInitialised() !== true) {\n                            if (HAZE.debug) {\n                                console.log('HAZE', 're-initialising');\n                            }\n                            HAZE.instantiate(galleryId, 'gallery', window.hazeGallery);\n                        } else {\n                            if (HAZE.debug) {\n                                console.log('HAZE', 'updating');\n                            }\n                            HAZE.setCamera('gallery', window.hazeGallery.camera);\n                            HAZE.setFabric('gallery', window.hazeGallery.materials.UPHOLSTERY);\n                            HAZE.setModel('gallery', window.hazeGallery.model);\n                            // HAZE.updateInstance('gallery');\n                            // HAZE.updateGallery('gallery');\n                        }\n                    }\n\n                    const keys = data.payload.skus;\n\n                    if (keys.length > 0) {\n                        $('.js-wishlist-action').removeClass('product__wishlist--disabled');\n                        $('.js-wishlist-action').attr('data-sku', keys);\n                    } else {\n                        $('.js-wishlist-action').addClass('product__wishlist--disabled');\n                    }\n                }\n            });\n        });\n\n        $('.js-combination-configuration input').on('change' ,function() {\n            self.updateCombinationQty($(this).data('frame-sku'), $(this).val());\n            self.updateUrl('frames[' + $(this).data('frame-sku') +']', $(this).val());\n            self.updateKey();\n            self.updateBasketButton();\n            self.updateTotalPrice();\n            self.updateCustomRender(true);\n            self.updateProductWarning();\n        });\n    }\n\n    function initModular() {\n        var self = this;\n        $('.js-combination-configuration input').each(function() {\n            if ($(this).val() > 0) {\n                self.updateCombinationQty($(this).data('frame-sku'), $(this).val());\n                self.updateUrl('frames[' + $(this).data('frame-sku') +']', $(this).val());\n                self.updateKey();\n                self.updateBasketButton();\n                self.updateTotalPrice();\n            }\n        });\n    }\n\n    function resetCylindoZoom() {\n        document.querySelector('html').classList.remove('cylindo-zoom');\n    }\n\n    function goToGallerySlide(index) {\n        index = index || 0;\n\n        const galleryV1 = $('.js-carousel--product-gallery');\n        if (galleryV1) {\n            galleryV1.slick('slickGoTo', index);\n        }\n\n        const galleryV2 = $('.js-carousel--product-gallery-v2');\n        if (galleryV2) {\n            galleryV2.slick('slickGoTo', index);\n        }\n    }\n\n    function updateCustomRender(fromQty) {\n        var self = this;\n\n        if (window.CYLINDO !== undefined || window.HAZE !== undefined) {\n            var params = {};\n            fromQty = fromQty || false;\n\n            var fields = $('.js-combination-configuration input');\n            fields.each(function() {\n                params[$(this).attr('data-frame-sku')] = $(this).val();\n            });\n\n            // prevent multiple ajax calls\n            if (self.ajaxRunning) {\n                return;\n            }\n\n            self.ajaxRunning = true;\n\n            $.ajax(window.location.href, {\n                type: 'post',\n                data: {\n                    frames: params,\n                    fromQty: fromQty\n                },\n                success: function(data) {\n                    self.refreshAfterAjax(data);\n                    self.ajaxRunning = false;\n                },\n                error: function () {\n                    self.ajaxRunning = false;\n                }\n            });\n        }\n    }\n\n    function updateProductWarning() {\n        var self = this;\n        var selectedQty = self.getSelectedQuantity();\n\n        if (selectedQty > 0) {\n            $('.product-warning--selection').addClass('d3r-hidden');\n        } else {\n            $('.product-warning--selection').removeClass('d3r-hidden');\n            $('.product-warning--components').addClass('d3r-hidden');\n        }\n    }\n\n    function setupPopup() {\n        var self = this;\n        const stickyContainer = document.querySelector('.product__content');\n\n        $('.js-customise__show-content').magnificPopup({\n            type :'ajax',\n            fixedContentPos: true,\n            ajax: {\n                settings: {\n                    data: {},\n                    cache: false\n                }\n            },\n            prependTo: '.customise__popup',\n            showCloseBtn: false,\n            callbacks: {\n                beforeOpen: function() {\n                    var data = {};\n\n                    data.frames = self.getFrames();\n                    data.fabric = self.getFabricId();\n\n                    self.options.forEach(function(optionName) {\n                        if (self.getOptionId(optionName)) {\n                            data[optionName] = self.getOptionId(optionName);\n                        }\n                    });\n\n                    this.st.ajax.settings.data = data;\n\n                    // Scroll the PDP back up to re-init sticky positioning;\n                    if (stickyContainer.getBoundingClientRect().y < 57) {\n                        document.body.scrollTop = document.documentElement.scrollTop = 0;\n                    }\n                    stickyContainer.classList.add('product__content--activePopup');\n                },\n                open: function() {\n                    $('.customise__popup .mfp-preloader').html(svg('am-logo'));\n                },\n                ajaxContentAdded: function() {\n                    var $cylindo = $('#js-cylindo_chooser');\n                    if (window.CYLINDO !== undefined && $cylindo.length > 0) {\n                        CYLINDO.instantiate('js-cylindo_chooser', 'chooser', window.cylindoGallery);\n                    }\n\n                    var $haze = $('#js-haze_chooser');\n                    if (window.HAZE !== undefined && $haze.length > 0) {\n                        HAZE.instantiate('js-haze_chooser', 'chooser', window.hazeGallery);\n                    }\n\n                    $('.customise__popup .customise__placeholder').remove();\n                    self.watch();\n                    $('.mfp-close').on('click', function(e) {\n                        e.preventDefault();\n                        $.magnificPopup.close();\n                    });\n\n                    var checked = $('.js-customise__option:checked');\n                    var stage = $('.customise__stage');\n\n                    if (checked.length > 0 && checked.data('no-custom-image') && !checked.data('cylindo')) {\n                        var selectedThumb = stage.find('.customise__selected-thumb');\n                        selectedThumb.find('img')\n                            .attr('src', selectedThumb.data('default-image-src'))\n                            .attr('sizes', selectedThumb.data('default-image-sizes'))\n                            .attr('srcset', selectedThumb.data('default-image-srcset'));\n                        selectedThumb.data('fullsize', selectedThumb.data('default-fullsize'));\n                        stage.find('.customise__selected-fabric').text(checked.data('fabric'));\n                        stage.find('.customise__noimage').show();\n                    } else {\n                        stage.find('.customise__noimage').hide();\n                    }\n\n                    if (!checked.data('cylindo')) {\n                        $('.zoom--family').zoom({\n                            canvas: '.zoom__canvas--family',\n                            trigger: '.zoom__trigger--family',\n                            backdrop: '.zoom__backdrop--family',\n                        });\n                    }\n\n                    if (this.currItem.src.includes('fabric-chooser')) {\n                        self.updatePriceRanges();\n                        self.setupFilters();\n                        self.setupFabricSampleAdd();\n                        self.setupModal();\n                    }\n\n                    $('.js-open-from-chooser').on('click', function(e){\n                        var svg = new Svg();\n\n                        e.preventDefault();\n\n                        $.magnificPopup.close(); // Close existing popup\n\n                        // Open new popup\n                        $.magnificPopup.open({\n                          items: {\n                                type: 'inline',\n                                src: '#fit-1',\n                          },\n                          mainClass: 'mfp-pdp mfp-fade',\n                          removeDelay: 300,\n                          closeMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">' + svg.render('close') + '</button>',\n                          fixedContentPos: true,\n                        });\n                    });\n                },\n                beforeClose: function() {\n                    stickyContainer.classList.remove('product__content--activePopup');\n                },\n                afterClose: function() {\n                    document.querySelector('html').scrollTop = 0;\n\n                    setTimeout(() => {\n                        if (window.HAZE !== undefined) {\n                            if (HAZE.debug) {\n                                console.log('HAZE', 'afterClose', 'refreshing');\n                            }\n\n                            HAZE.updateInstance('gallery', true);\n                        }\n                    }, 100);\n                }\n            }\n        });\n    }\n\n    function initCylindoARButton() {\n        const cylindoARButton = document.querySelector('.js-cylindo-ar-open-desktop');\n\n        if (!cylindoARButton) {\n            return;\n        }\n\n        // Use `typeof` to check if `cylindo` is not defined\n        if (typeof cylindo === 'undefined') {\n            cylindoARButton.setAttribute('hidden', '');\n            return;\n        }\n\n        cylindo.on('ready', () => {\n            cylindoARButton.addEventListener('click', () => {\n                const cylindoARViewerButton = document.querySelector('.cylindo-ar-button a');\n\n                const slide = cylindoARViewerButton.closest('.slick-slide');\n\n                if (!slide) {\n                    return;\n                }\n\n                const cylindoIndex = slide.dataset.slickIndex;\n                this.goToGallerySlide(cylindoIndex);\n\n                // Creating and dispatching a 'mouseup' event\n                // The 'click' event attached to the cylindo-controlled button has\n                // code with interception logic attached to it so we can't use.\n                const mouseUpEvent = new MouseEvent('mouseup', {\n                    bubbles: true,\n                    cancelable: true,\n                });\n\n                cylindoARViewerButton.dispatchEvent(mouseUpEvent);\n            })\n        })\n    }\n\n    function setupFabricSampleAdd() {\n        $('.js-fabric-sample-add').on('click', function(e) {\n            e.preventDefault();\n            var clicked = $(this);\n            var span = clicked.find('span');\n            var html = span.html();\n            html = html.replace(' Added to basket', '');\n            clicked.addClass('customise__action--working');\n            span.html('Adding to basket...');\n            $.ajax($(this).attr('href'), {\n                success: function(data) {\n                    if (data.payload.hasOwnProperty('count')) {\n                        $('.js-basket-count').html(data.payload.count);\n                    }\n\n                    clicked.find('span').html('Added to basket');\n                    clicked.removeClass('customise__action--working');\n                    clicked.addClass('customise__action--done');\n\n                    if (clicked.hasClass('js-close-after-action')) {\n                        $.magnificPopup.close();\n                    }\n\n                    window.setTimeout(function() {;\n                        clicked.find('span').html(html);\n                    }, 3000);\n                }\n            });\n        });\n    }\n\n    function slickArrow(icon, action) {\n        const svg = new Svg();\n\n        return '<button type=\"button\" class=\"slick-arrow slick-' + action + '\"><span>' + svg.render(icon) + '</span></button>';\n    }\n\n    function initCustomiseModalCarousels() {\n        $(\".js-carousel--customise-modal\").slick({\n            slidesToShow: 1,\n            slidesToScroll: 1,\n            arrows: true,\n            swipe: true,\n            infinite: false,\n            autoplay: false,\n            mobileFirst: true,\n            dots: false,\n            fade: true,\n            cssEase: 'linear',\n            asNavFor: '.js-carousel--modal-thumbnails',\n            speed: 100,\n            prevArrow: slickArrow('icon-arrow-large-left', 'prev'),\n            nextArrow: slickArrow('icon-arrow-large-right', 'next')\n        })\n\n        $(\".js-carousel--modal-thumbnails\").slick({\n            slidesToShow: 3.5,\n            asNavFor: '.js-carousel--customise-modal',\n            focusOnSelect: true,\n            infinite: false,\n            dots: false,\n            arrows: false,\n        })\n    }\n\n    function refreshCustomiseModalCarousels() {\n        $('.js-carousel--customise-modal').slick('refresh');\n        $('.js-carousel--modal-thumbnails').slick('refresh');\n    }\n\n    function destroyCustomiseModalCarousels() {\n        $(\".js-carousel--customise-modal\").slick('unslick');\n        $(\".js-carousel--modal-thumbnails\").slick('unslick');\n    }\n\n    function setupModal() {\n        var self = this;\n        const overlay = document.querySelector('.js-modal-overlay');\n        const modal = document.querySelector('.js-customise-info-modal');\n        const stage = document.querySelector('.customise__stage');\n\n        if (modal == null) return;\n\n        document.querySelector('.js-open-info-modal').addEventListener('click', (e) => {\n            e.preventDefault();\n\n            const fabric = $('.js-customise-modal-media').data('fabric');\n            const url = window.location.pathname + '/gallery';\n\n            if (fabric) {\n                $.ajax(url, {\n                    type: 'GET',\n                    data: {\n                        'fabric': fabric\n                    },\n                    success: function(data) {\n                        if (data.payload.gallery) {\n                            $('.js-customise-modal-media').html(data.payload.gallery);\n                        }\n\n                        self.initCustomiseModalCarousels();\n                    },\n                    fail: function() {\n                        $.magnificPopup.close();\n                    }\n                });\n            }\n\n            self.initCustomiseModalCarousels();\n\n            modal.classList.add('customise-modal--active');\n            overlay.classList.add('customise-modal__overlay--active');\n            stage.classList.add('customise__stage__overlay--active');\n        });\n\n        function closeOverlay(event) {\n            event.preventDefault()\n\n            modal.classList.remove('customise-modal--active');\n            overlay.classList.remove('customise-modal__overlay--active');\n            stage.classList.remove('customise__stage__overlay--active');\n\n            destroyCustomiseModalCarousels();\n        }\n\n        if (!overlay || !document.querySelector('.js-close-info-modal')) {\n            return;\n        }\n\n        document.querySelector('.js-close-info-modal').addEventListener('click', (e) => {\n            closeOverlay(e);\n        })\n\n        document.querySelector('.js-modal-overlay').addEventListener('click', (e) => {\n            closeOverlay(e);\n        })\n    }\n\n    function setupFilters() {\n        var self = this;\n\n        $('.customise-colour__fabric').on('click', function(elem) {\n            $(this).find('input').prop('checked', true).trigger('change');\n        });\n\n        $('select[multiple]').selectReplace();\n        $('input[type=checkbox].custom-check-replace').customCheckReplace();\n        var filters = $('.customise__filters select, .customise__filters input');\n\n        filters.on('change', function () {\n            var form = $(this).closest('.custom__filters-form');\n            var target = form.data('action');\n            var data = {\n                frames: self.getFrames(),\n                fabric: self.getFabricId(),\n                action: 'updateListing'\n            };\n\n            filters.each(function(i) {\n                if ($(this).is(\"select\") || $(this).is(\"input:checked\")) {\n                    data[$(this).attr('name')] = $(this).val();\n                }\n            });\n\n            $.ajax({\n                'type': 'get',\n                'url': target,\n                data: data,\n                success: function(response) {\n                    if (response.hasOwnProperty('payload')) {\n                        if (response.payload.hasOwnProperty('filters')) {\n                            $('.js-fabric-chooser-filters-target').html(response.payload.filters);\n                            self.setupFilters();\n                        }\n\n                        if (response.payload.hasOwnProperty('listing')) {\n                            $('.js-fabric-chooser-fabric-target').html(response.payload.listing);\n                            self.watch();\n                            self.updatePriceRanges();\n                        }\n                    }\n\n                    var showClear = true;\n                    var newFilters = $('.customise__filters select, .customise__filters input');\n\n                    newFilters.each(function(i) {\n                        if ($(this).is(\"select\") || $(this).is(\"input:checked\")) {\n                            if ($('.customise__filters input:checked').length === 0 && $(this).is('select') && $(this).val() === '') {\n                                showClear = false;\n                            }\n                        }\n                    });\n\n                    if (showClear) {\n                        $('.js-clear-filters').show();\n                    } else {\n                        $('.js-clear-filters').hide();\n                    }\n                }\n            });\n        });\n\n        $('.js-clear-filters').on('click', function() {\n            filters.each(function(i) {\n                if ($(this).is(\"select\")) {\n                    $(this).val(null);\n                } else {\n                    $(this).prop('checked', false);\n                }\n                if (i === filters.length - 1) {\n                    $(this).trigger('change');\n                }\n            });\n\n            var $overview = $('.multi-select-replace__list-item--overview-2');\n\n            $overview.each(function(i) {\n                if ($(this).data('all')) {\n                    $(this).find('.multi-select-replace__actions').trigger('click');\n                }\n            });\n        });\n    }\n\n    function updatePriceRanges() {\n        var sectionTitles = $('.customise__sub-title');\n        var total = sectionTitles.length;\n\n        var min = false;\n        var max = false;\n\n        var availableResults = sectionTitles.length;\n\n        sectionTitles.each(function(i) {\n            var category = $(this).data('category');\n            var group = $('[data-category=\"' + category + '\"]');\n            var options = group.find('.customise__option input');\n            if ((options.length) > 0) {\n                $(this).show();\n                var first = options.first();\n                var last = options.last();\n\n                var newMin = Number($(first).data('price').replace(/[^0-9\\.-]+/g,\"\"));\n                if (newMin < min || !min) {\n                    min = newMin;\n                }\n\n                var newMax = Number($(last).data('price').replace(/[^0-9\\.-]+/g,\"\"));\n                if (newMax > max || !max) {\n                    max = newMax;\n                }\n            } else {\n                availableResults--;\n                $(this).hide();\n                $(this).nextAll('.customise__blurb:first').hide();\n                $(this).nextAll('.customise__category:first').hide();\n            }\n\n            $('.customise__no-fabrics-available').toggle(availableResults == 0);\n            $('.customise__viewing').toggle(availableResults != 0);\n        });\n    }\n\n    function initSlider(min, max) {\n        var nonLinearSlider = document.getElementById('slider');\n\n        noUiSlider.create(nonLinearSlider, {\n            connect: true,\n            start: [ min, max],\n            step: 10,\n            tooltips: true,\n            range: {\n                'min': [ min ],\n                'max': [ max ]\n            }\n        });\n    }\n\n    function svg(icon) {\n        return '<svg class=\"icon icon-' + icon + '\">' +\n                    '<use xlink:href=\"' + AndrewMartin.svgSymbolsFile + '#icon-' + icon + '\" />' +\n                '</svg>'\n    }\n\n    function getSelectedQuantity() {\n        var selectedQty = 1\n\n        if ($('.js-combination-piece-select').length > 0) {\n            selectedQty = 0;\n            $('.js-combination-piece-select').each(function(i, select) {\n                selectedQty += parseInt($(select).val());\n            });\n        } else if ($('.js-piece-input').length > 0) {\n            selectedQty = 0;\n            $('.js-piece-input').each(function(i, select) {\n                selectedQty += parseInt($(select).val());\n            });\n        }\n\n        return selectedQty;\n    }\n\n    function updateBasketButton() {\n        var selected = true;\n        var selectedQty = this.getSelectedQuantity();\n\n        $('.js-customise__show-content').each(function(i, element) {\n            if ($(element).data('required')) {\n                selected = false;\n            }\n        });\n\n        var disable = !selected || selectedQty < 1;\n\n        $('.product__button').toggleClass('button--disabled', disable);\n        $('.js-wishlist-action').toggleClass('product__wishlist--disabled', disable);\n    }\n\n    function updateTotalPrice() {\n        var price = 0;\n        var fromPrice = 0;\n\n        $('.js-combination-configuration').each(function(i) {\n            if (i == 0) {\n                fromPrice = parseInt($('.product-piece__price', $(this)).data('raw'));\n            }\n            var qty = $('.js-combination-piece-select', $(this)).val();\n            if (qty > 0) {\n                price += parseInt($('.product-piece__price', $(this)).data('raw')) * qty;\n            }\n        });\n\n        var currency_symbol = $('.js-customise-price-target').data('currency');\n        var target = $('.js-customise-price-target span.value');\n\n        if (target.length == 0) {\n            target = $('.js-customise-price-target span');\n        }\n\n        if (price > 0) {\n            target.html(currency_symbol + this.numberWithCommas(price));\n        } else {\n            target.html(currency_symbol + this.numberWithCommas(fromPrice));\n        }\n    }\n\n    function updateCombinationQty(frameSku, qty, clear) {\n        if (clear != undefined) {\n            this.selection.frames = {};\n        }\n\n        this.selection.frames[frameSku] = qty;\n    }\n\n    function getFrames() {\n        if ($.isEmptyObject(this.selection.frames)) {\n            return null;\n        }\n        return JSON.stringify(this.selection.frames);\n    }\n\n    function getFabricId() {\n        return this.selection.fabric;\n    }\n\n    function getOptionId(optionName) {\n        return this.selection.options[optionName] || false;\n    }\n\n    function updateUrl(identifier, qty) {\n        if (qty == null) {\n            qty = 1;\n        }\n        STATE.setParam(identifier, qty);\n        STATE.replaceUrl();\n    }\n\n    function replaceUrl(identifier, qty) {\n        var self = this;\n\n        if (qty == undefined) {\n            qty = 1;\n        }\n\n        STATE.params = {};\n        if (this.selection.fabric && this.selection.fabric != '') {\n            STATE.params['fabric'] = this.selection.fabric;\n        }\n\n        this.options.forEach(function(optionName) {\n            if (self.getOptionId(optionName)) {\n                STATE.params[optionName] = self.selection.options[optionName];\n            }\n        });\n\n        STATE.params[identifier] = qty;\n        STATE.replaceUrl();\n    }\n\n    function updateKey() {\n        var prefix = 'Product_CombinationGroup_';\n        var key = '';\n        var notFirst = false;\n\n        $('.js-combination-piece-select').each(function(i, select) {\n            if ($(select).val() > 0) {\n                if (notFirst) {\n                    key += '--';\n                }\n                key += $(select).attr('name') + '-' + $(select).val();\n                notFirst = true;\n            }\n        });\n\n        let option_set = [];\n\n        $('.product__custom-selection_option').each(function (i, element) {\n            if ($(element).val()) {\n                option_set[i] = $(element).val();\n            }\n        });\n\n        if (option_set.length > 0) {\n            key += '_' + option_set.join('--');\n        }\n\n        $('.js-combination-key').val(prefix + key);\n        if (key) {\n            $('.js-wishlist-action').removeClass('product__wishlist--disabled');\n            $('.js-wishlist-action').attr('data-sku', prefix + key);\n        }\n    }\n\n    function numberWithCommas(x) {\n        return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n    }\n\n    function frameSelected() {\n\n        var radios = document.querySelectorAll('input[type=\"radio\"]')\n\n        radios.forEach(radio => {\n            let container = radio.closest('.frame-type__option');\n            let active = 'frame-type__option--active'\n\n            if (radio.checked && !container.classList.contains(active)) {\n                container.classList.add(active)\n            } else if (container.classList.contains(active)) {\n                container.classList.remove(active)\n            }\n        })\n    }\n\n    // Check the number of frame filters that have been set\n    function checkFilterCount() {\n\n        filters = Array.from(document.querySelectorAll('.frame-type__option'));\n\n        filterCount = filters.filter(e => e.classList.contains('frame-type__option--active'))\n\n        if (filterCount.length > 0) {\n            document.querySelector('.js-frame-count').innerText = `(${filterCount.length})`;\n        } else {\n            document.querySelector('.js-frame-count').innerText = '';\n        }\n    }\n\n    if (document.querySelector('.filterable__dimension--frame_type')) {\n        document.querySelector('.filterable__dimension--frame_type').addEventListener('click', frameSelected);\n        document.querySelector('.filterable__dimension--frame_type').addEventListener('click', checkFilterCount);\n    }\n}\n\nAndrewMartin.customise = new Customise();\n\nAndrewMartin.customise.init();\n"],"sourceRoot":"../../../../resources/javascript"}