{"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","querySelectorAll","classList","add","split","iconElement","querySelector","remove","matchMedia","matches","initCustomiseModalCarousels","setTimeout","modal","document","scrollTop","scrollLock","disablePageScroll","addEventListener","e","preventDefault","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","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\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    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            $.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"}