{"version":3,"sources":["customise.js"],"names":["Customise","handleMeasurementsChange","e","preventDefault","HAZE","setDimensionsToggle","currentTarget","checked","console","log","showDimensions","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","stage","closest","find","hide","undefined","window","CYLINDO","updateFeature","setFabric","selectedThumb","attr","text","show","html","css","removeClass","querySelectorAll","classList","add","split","iconElement","querySelector","remove","matchMedia","matches","initCustomiseModalCarousels","setTimeout","modal","document","scrollTop","scrollLock","disablePageScroll","addEventListener","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","mesurementsButton","removeEventListener","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","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","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","_this2","getAttribute","status","parentNode","samplesAddedText","added","addedQty","total_qty","createElement","innerHTML","concat","after","overlay","closeOverlay","event","pathname","galleryTarget","specTarget","gallery","specification","slideDown","slideUp","galleryV1","galleryV2","radio","container","active","contains","Array","from","filterCount","filter","innerText"],"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    this.handleMeasurementsChange = handleMeasurementsChange;\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\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[0] is the DOM element - we need this to use querySelectorAll and forEach together\n            stage[0].querySelectorAll('.customise-modal__icon').forEach(icon => {\n                icon.classList.add('d3r-hidden');\n            });\n            if (checked.data('icons')) {\n                var icons = checked.data('icons').split(',');\n                icons.forEach(icon => {\n                    var iconElement = stage[0].querySelector('.customise-modal__icon--' + icon);\n                    if (iconElement) {\n                        iconElement.classList.remove('d3r-hidden');\n                    }\n                });\n            }\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        const mesurementsButton = document.querySelector('.js-haze-measure');\n        if (mesurementsButton) {\n            console.log('HAZE', 'binding measurements button');\n            mesurementsButton.removeEventListener('change', handleMeasurementsChange);\n            mesurementsButton.addEventListener('change', handleMeasurementsChange);\n        }\n    }\n\n    function handleMeasurementsChange(e) {\n        e.preventDefault();\n\n        HAZE.setDimensionsToggle('gallery', e.currentTarget.checked);\n\n        if (e.currentTarget.checked) {\n            console.log('HAZE', 'showing dimensions');\n            HAZE.showDimensions('gallery', true);\n        } else {\n            console.log('HAZE', 'hiding dimensions');\n            HAZE.showDimensions('gallery', false);\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\n                    HAZE.setFabric('gallery', window.hazeGallery.materials.UPHOLSTERY);\n                    HAZE.setCamera('gallery', window.hazeGallery.camera);\n                    HAZE.setModel('gallery', window.hazeGallery.model, true);\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, true);\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            $.ajax(this.getAttribute('href'), {\n                success: (data) => {\n                    if (data.payload.hasOwnProperty('count')) {\n                        $('.js-basket-count').html(data.payload.count);\n                    }\n\n                    let status = this.parentNode.querySelector('.customise-action__status');\n\n                    if (status) {\n                        status.remove();\n                    }\n\n                    var samplesAddedText = 'Sample added';\n                    if (data.payload.hasOwnProperty('added') && data.payload.added.hasOwnProperty('total_qty')) {\n                        var addedQty = parseFloat(data.payload.added.total_qty) || 0;\n                        samplesAddedText = addedQty > 1 ? addedQty + ' samples added' : 'Sample added';\n                    }\n\n                    status = document.createElement('span');\n                    status.classList.add('customise-action__status');\n                    status.innerHTML = `<svg class=\"icon-tick\"><use xlink:href=\"${AndrewMartin.svgSymbolsFile}#icon-tick\" /></svg>${samplesAddedText}`;\n\n                    this.after(status);\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                        const galleryTarget = document.querySelector('.js-customise-modal-media');\n                        const specTarget = document.querySelector('.js-fabric-specification');\n\n                        if (data.payload.gallery && galleryTarget) {\n                            galleryTarget.innerHTML = data.payload.gallery;\n                        }\n\n                        if (data.payload.specification && specTarget) {\n                            specTarget.innerHTML = data.payload.specification;\n                        }\n\n                        var status = document.querySelector('.customise-action__status');\n                        if (status) {\n                            status.remove();\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            if (availableResults === 0) {\n                $('.customise__no-fabrics-available').show();\n                $('.customise__viewing').hide();\n            } else {\n                $('.customise__no-fabrics-available').hide();\n                $('.customise__viewing').show();\n            }\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"}