{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/api.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/helper.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/loader.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/models/alertHandler.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/models/buttons/payPalBase.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/models/buttons/payPalExpress.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/models/buttons/payPalProduct.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/models/sessionStorage.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/pdp/registered/initPaypalBAButton.js","webpack:///./cartridges/int_paypal/cartridge/client/default/js/pvp/pvp.js"],"names":["module","exports","setTabNextFocus","focusParams","KEYCODE_TAB","isTabPressed","event","key","keyCode","firstFocusableEl","$","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","is","nextToLastElementSelector","length","linkElements","shiftKey","focus","preventDefault","focusHelper","require","getPidValue","$el","pid","hasClass","closest","find","data","text","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","val","undefined","getQuantitySelected","processSwatchValues","attr","$productContainer","msgs","values","forEach","attrValue","$attrValue","id","value","$swatchButton","parent","selected","addClass","siblings","assistiveSelectedText","removeClass","empty","url","removeAttr","selectable","processNonSwatchValues","$attr","$defaultOption","resetUrl","updateAttrs","attrs","attrsWithSwatches","indexOf","updateAvailability","response","availabilityValue","availabilityMessages","product","availability","messages","readyToOrder","resources","info_selectforstock","message","trigger","getAttributesHtml","attributes","html","attributeGroup","ID","attribute","label","updateOptions","optionsHtml","createCarousel","imgs","carousel","carouselId","append","i","alt","parseInt","index","title","appendTo","first","detach","handleVariantResponse","isChoiceOfBonusProducts","parents","isVaraint","variationAttributes","productType","primaryImageUrls","images","large","$priceSelector","replaceWith","price","promotionsHtml","$selectButton","updateQuantities","quantities","map","quantity","join","attributeSelect","selectedValueUrl","container","ajax","method","success","spinner","stop","error","getAddToCartUrl","parseHtml","$html","parseHTML","body","footer","children","chooseBonusProducts","start","remove","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","dataType","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","modal","handlePostCartAdd","messageType","newBonusDiscountLineItem","Object","keys","setTimeout","getChildProducts","childProducts","each","push","JSON","stringify","getOptions","options","$elOption","urlValue","selectedValueId","optionId","toArray","miniCartReportingUrl","methods","editBonusProducts","focusChooseBonusProductModal","on","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","e","colorAttribute","document","selectAttribute","currentTarget","addToCart","pidsObj","setPids","qty","form","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","count","enableBonusProductSelection","available","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","productId","errorMessage","msgSuccess","location","reload","loaderInstance","$loaderContainer","querySelector","loader","CONTENT_TYPE_JSON","AlertHandlerModel","alertHandler","updateOrderData","isAddressNeedChange","arguments","show","window","paypalUrls","type","hide","href","placeOrderStage","err","parse","responseText","showError","errorMsg","transactionExpired","getBillingAgreementToken","isCartFlow","isSkipShippingAddress","get","createBillingAgreementToken","concat","then","createBillingAgreementCall","createBillingAgreement","contentType","createCartBillingFormData","fieldsData","$paypalButton","cartBillingFormData","FormData","getElementById","cartBillingFields","getAttribute","entries","entry","_entry","_slicedToArray","field","_typeof","name","returnFromCart","processData","validateStaticImageAddress","paypalStaticImage","fetch","validateStaticImage","headers","email","formFields","json","catch","finishPayNowFlow","fundingSource","$usedPaymentMethod","pmName","savePaypalDefaultAddress","addressObject","isAccountPage","finishPayNowPayment","usedPaymentMethod","helper","_ref","redirectUrl","processPayNowConfirmForm","getPaypalOrderId","getUrlWithCsrfToken","async","responseJSON","defaultStyle","color","shape","layout","tagline","HIDE_CLASS","PRODUCT_DETAIL_CLASS","PDP_PRICE_VALUE_CLASS","base","getPaypalButtonStyle","button","config","buttonConfigs","style","createConfirmForm","param","action","orderID","orderToken","splitUrl","split","paramsString","searchParams","URLSearchParams","formParam","submit","getPaymentMethodToLowerCase","paymentMethodName","paymentMethod","element","charAt","slice","toLocaleLowerCase","createHTMLElementWithText","tag","createElement","textContent","appendHtml","order","payment","billing","selectedPaymentInstruments","selectedPaymentInstrument","paymnetMethodId","isVenmoUsed","paypalConstants","PAYMENT_METHOD_ID_VENMO","classList","contains","PP_DEBIT_CREDIT_PAYMENT_TYPE","PAYMENT_METHOD_ID_PAYPAL","maskedCreditCardNumber","accountHolderResource","paypalAccountHolder","priceTotal","amount","updateCheckoutView","$paymentSummary","htmlToAppend","add","innerHTML","appendChild","handleValidationAddressResult","status","test","showPaypalButton","paypalButton","hidePaypalButton","isProductZeroAmount","$element","getMiniCartQuantity","initPaypalButtonBehaviorOnPvp","isProductReadyToOrderElement","isProductReadyToOrder","addToCartButton","disabled","initPayPalBtnBehaviorOnSet","miniCartQuantityElement","addToCartButtons","querySelectorAll","miniCartQuantity","btn","parentElement","prices","isWrongAmount","Array","from","some","parseFloat","target","getPaymentMethodName","getCsrfToken","urlInstance","URL","origin","toString","addProductToCart","ppBtnSelector","productContainer","elOption","selectedValue","selectedOption","ppBtn","bundleItems","setItems","ppBtnContainer","isGlobalButton","className","items","item","innerText","removeAllProductsFromCart","finally","containerElement","Constructor","containerEl","prototype","display","obj","Symbol","iterator","constructor","_classCallCheck","instance","TypeError","_defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","_toPropertyKey","_createClass","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","toPrimitive","res","call","Number","$flashMessagesContainer","$alertTemplate","createAlertMessage","alertMessage","alertType","$alertContainer","cloneNode","FLASH_MESSAGE_DANGER","showWarning","warningMessage","FLASH_MESSAGE_WARNING","showInfo","infoMessage","FLASH_MESSAGE_INFO","api","$usedPaymentMethodName","disableFunds","that","isLpmUsed","PayPalBaseModel","payPalBtnSelector","$payPalBtnContainer","isPayNowFlowEnabled","paypalPreferences","usedPaymentMethodName","isBtnEligible","processPayNowFlow","SessionStorageModel","sessionStorageInstance","clear","processGenericBtnFlow","$selectedAccount","click","onClick","paypal","FUNDING","CARD","VENMO","PAYPAL","createOrder","onApprove","onCancel","onError","FLASH_MESSAGE_ERROR_INTERNAL_SERVER","renderButtonMarks","Marks","render","renderPaymentFields","PaymentFields","showButtonTab","fs","createBtnGeneralOption","bind","initBtnsForPayPalTab","btnProperty","_this","eligibleFundingSources","getFundingSources","filter","Buttons","isEligible","PAYPAL_FS","isTabShown","includes","CREDIT","el","assign","initBtnByFundingSource","btnInitResult","initPayPalBtn","PayPalExpressModel","create","cartPage","PayPalProductModel","selector","sessionStorage","setItem","getItem","removeItem","setActiveBillingPmTab","ACTIVE_TAB","getActiveBillingPmTab","paypalInstance","token","fail","close","payer","billingAgreementID","billingAgreementPayerEmail","payer_info","errorResponse","errorName","initPaypalBAButton","createBillingAgreementCallback","onClose","applyPaypalButtonBehavior","_require","isProductSet","Boolean","initStaticImageFunctionality","_require2","_require3","paypalStaticImageContainers","isNeed","staticImage","addEventListener","loaderContainer","result","cart","Error","initPaypalFunctionality","_require4","PP_BTN_SELECTOR","isBAEnabled","billingAgreementEnabled","paypalButtonContainers","ppButton","payPalProductInstance","injectPaypalSDK","head","getElementsByTagName","script","src","paypalSDK","cartSdkUrl","onload","setAttribute","partnerAttributionId","isPaypalStaticImage"],"mappings":"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","file":"int_paypal_pvp.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./cartridges/int_paypal/cartridge/client/default/js/pvp/pvp.js\");\n","'use strict';\n\nmodule.exports = {\n    setTabNextFocus: function (focusParams) {\n        var KEYCODE_TAB = 9;\n        var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n        if (!isTabPressed) {\n            return;\n        }\n\n        var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n        var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n        if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n            lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n            if ($('.product-quickview.product-set').length > 0) {\n                var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n                lastFocusableEl = linkElements[linkElements.length - 1];\n            }\n        }\n\n        if (focusParams.event.shiftKey) /* shift + tab */ {\n            if ($(':focus').is(firstFocusableEl)) {\n                lastFocusableEl.focus();\n                focusParams.event.preventDefault();\n            }\n        } else /* tab */ {\n            if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n                firstFocusableEl.focus();\n                focusParams.event.preventDefault();\n            }\n        }\n    }\n};\n","'use strict';\nvar focusHelper = require('../components/focus');\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n    var pid;\n\n    if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n        pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n    } else if ($('.product-set-detail').length || $('.product-set').length) {\n        pid = $($el).closest('.product-detail').find('.product-id').text();\n    } else {\n        pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n    }\n\n    return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n    var quantitySelected;\n    if ($el && $('.set-items').length) {\n        quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n    } else if ($el && $('.product-bundle').length) {\n        var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n        var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n        if (quantitySelectedModal.val() === undefined) {\n            quantitySelected = quantitySelectedPDP;\n        } else {\n            quantitySelected = quantitySelectedModal;\n        }\n    } else {\n        quantitySelected = $('.quantity-select');\n    }\n    return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n    return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n *     selected.  If there is no variant that corresponds to a specific combination of attribute\n *     values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n    attr.values.forEach(function (attrValue) {\n        var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n            attrValue.value + '\"]');\n        var $swatchButton = $attrValue.parent();\n\n        if (attrValue.selected) {\n            $attrValue.addClass('selected');\n            $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n        } else {\n            $attrValue.removeClass('selected');\n            $attrValue.siblings('.selected-assistive-text').empty();\n        }\n\n        if (attrValue.url) {\n            $swatchButton.attr('data-url', attrValue.url);\n        } else {\n            $swatchButton.removeAttr('data-url');\n        }\n\n        // Disable if not selectable\n        $attrValue.removeClass('selectable unselectable');\n\n        $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n    });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n *     selected.  If there is no variant that corresponds to a specific combination of attribute\n *     values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n    var $attr = '[data-attr=\"' + attr.id + '\"]';\n    var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n    $defaultOption.attr('value', attr.resetUrl);\n\n    attr.values.forEach(function (attrValue) {\n        var $attrValue = $productContainer\n            .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n        $attrValue.attr('value', attrValue.url)\n            .removeAttr('disabled');\n\n        if (!attrValue.selectable) {\n            $attrValue.attr('disabled', true);\n        }\n    });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n *     swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n    // Currently, the only attribute type that has image swatches is Color.\n    var attrsWithSwatches = ['color'];\n\n    attrs.forEach(function (attr) {\n        if (attrsWithSwatches.indexOf(attr.id) > -1) {\n            processSwatchValues(attr, $productContainer, msgs);\n        } else {\n            processNonSwatchValues(attr, $productContainer);\n        }\n    });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n *                            attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n    var availabilityValue = '';\n    var availabilityMessages = response.product.availability.messages;\n    if (!response.product.readyToOrder) {\n        availabilityValue = '<li><div>' + response.resources.info_selectforstock + '</div></li>';\n    } else {\n        availabilityMessages.forEach(function (message) {\n            availabilityValue += '<li><div>' + message + '</div></li>';\n        });\n    }\n\n    $($productContainer).trigger('product:updateAvailability', {\n        product: response.product,\n        $productContainer: $productContainer,\n        message: availabilityValue,\n        resources: response.resources\n    });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n    if (!attributes) {\n        return '';\n    }\n\n    var html = '';\n\n    attributes.forEach(function (attributeGroup) {\n        if (attributeGroup.ID === 'mainAttributes') {\n            attributeGroup.attributes.forEach(function (attribute) {\n                html += '<div class=\"attribute-values\">' + attribute.label + ': '\n                    + attribute.value + '</div>';\n            });\n        }\n    });\n\n    return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n    $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n    var carousel = $productContainer.find('.carousel');\n    $(carousel).carousel('dispose');\n    var carouselId = $(carousel).attr('id');\n    $(carousel).empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" role=\"listbox\"></div><a class=\"carousel-control-prev\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"prev\"><span class=\"fa icon-prev\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('prev') + '</span></a><a class=\"carousel-control-next\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"next\"><span class=\"fa icon-next\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('next') + '</span></a>');\n    for (var i = 0; i < imgs.length; i++) {\n        $('<div class=\"carousel-item\"><img src=\"' + imgs[i].url + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + ' image number ' + parseInt(imgs[i].index, 10) + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($(carousel).find('.carousel-inner'));\n        $('<li data-target=\"#' + carouselId + '\" data-slide-to=\"' + i + '\" class=\"\"></li>').appendTo($(carousel).find('.carousel-indicators'));\n    }\n    $($(carousel).find('.carousel-item')).first().addClass('active');\n    $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n    if (imgs.length === 1) {\n        $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n    }\n    $(carousel).carousel();\n    $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n *     attributes have been selected.  Used partially to\n *     determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n    var isChoiceOfBonusProducts =\n        $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n    var isVaraint;\n    if (response.product.variationAttributes) {\n        updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n        isVaraint = response.product.productType === 'variant';\n        if (isChoiceOfBonusProducts && isVaraint) {\n            $productContainer.parent('.bonus-product-item')\n                .data('pid', response.product.id);\n\n            $productContainer.parent('.bonus-product-item')\n                .data('ready-to-order', response.product.readyToOrder);\n        }\n    }\n\n    // Update primary images\n    var primaryImageUrls = response.product.images.large;\n    createCarousel(primaryImageUrls, $productContainer);\n\n    // Update pricing\n    if (!isChoiceOfBonusProducts) {\n        var $priceSelector = $('.prices .price', $productContainer).length\n            ? $('.prices .price', $productContainer)\n            : $('.prices .price');\n        $priceSelector.replaceWith(response.product.price.html);\n    }\n\n    // Update promotions\n    $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n    updateAvailability(response, $productContainer);\n\n    if (isChoiceOfBonusProducts) {\n        var $selectButton = $productContainer.find('.select-bonus-product');\n        $selectButton.trigger('bonusproduct:updateSelectButton', {\n            product: response.product, $productContainer: $productContainer\n        });\n    } else {\n        // Enable \"Add to Cart\" button if all required attributes have been selected\n        $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n            product: response.product, $productContainer: $productContainer\n        }).trigger('product:statusUpdate', response.product);\n    }\n\n    // Update attributes\n    $productContainer.find('.main-attributes').empty()\n        .html(getAttributesHtml(response.product.attributes));\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n *     etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n    if ($productContainer.parent('.bonus-product-item').length <= 0) {\n        var optionsHtml = quantities.map(function (quantity) {\n            var selected = quantity.selected ? ' selected ' : '';\n            return '<option value=\"' + quantity.value + '\"  data-url=\"' + quantity.url + '\"' +\n                selected + '>' + quantity.value + '</option>';\n        }).join('');\n        getQuantitySelector($productContainer).empty().html(optionsHtml);\n    }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n *         changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n    if (selectedValueUrl) {\n        $('body').trigger('product:beforeAttributeSelect',\n            { url: selectedValueUrl, container: $productContainer });\n\n        $.ajax({\n            url: selectedValueUrl,\n            method: 'GET',\n            success: function (data) {\n                handleVariantResponse(data, $productContainer);\n                updateOptions(data.product.optionsHtml, $productContainer);\n                updateQuantities(data.product.quantities, $productContainer);\n                $('body').trigger('product:afterAttributeSelect',\n                    { data: data, container: $productContainer });\n                $.spinner().stop();\n            },\n            error: function () {\n                $.spinner().stop();\n            }\n        });\n    }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n    return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n    var $html = $('<div>').append($.parseHTML(html));\n\n    var body = $html.find('.choice-of-bonus-product');\n    var footer = $html.find('.modal-footer').children();\n\n    return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n    $('.modal-body').spinner().start();\n\n    if ($('#chooseBonusProductModal').length !== 0) {\n        $('#chooseBonusProductModal').remove();\n    }\n    var bonusUrl;\n    if (data.bonusChoiceRuleBased) {\n        bonusUrl = data.showProductsUrlRuleBased;\n    } else {\n        bonusUrl = data.showProductsUrlListBased;\n    }\n\n    var htmlString = '<!-- Modal -->'\n        + '<div class=\"modal fade\" id=\"chooseBonusProductModal\" tabindex=\"-1\" role=\"dialog\">'\n        + '<span class=\"enter-message sr-only\" ></span>'\n        + '<div class=\"modal-dialog choose-bonus-product-dialog\" '\n        + 'data-total-qty=\"' + data.maxBonusItems + '\"'\n        + 'data-UUID=\"' + data.uuid + '\"'\n        + 'data-pliUUID=\"' + data.pliUUID + '\"'\n        + 'data-addToCartUrl=\"' + data.addToCartUrl + '\"'\n        + 'data-pageStart=\"0\"'\n        + 'data-pageSize=\"' + data.pageSize + '\"'\n        + 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"'\n        + 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">'\n        + '<!-- Modal content-->'\n        + '<div class=\"modal-content\">'\n        + '<div class=\"modal-header\">'\n        + '    <span class=\"\">' + data.labels.selectprods + '</span>'\n        + '    <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">'\n        + '        <span aria-hidden=\"true\">&times;</span>'\n        + '        <span class=\"sr-only\"> </span>'\n        + '    </button>'\n        + '</div>'\n        + '<div class=\"modal-body\"></div>'\n        + '<div class=\"modal-footer\"></div>'\n        + '</div>'\n        + '</div>'\n        + '</div>';\n    $('body').append(htmlString);\n    $('.modal-body').spinner().start();\n\n    $.ajax({\n        url: bonusUrl,\n        method: 'GET',\n        dataType: 'json',\n        success: function (response) {\n            var parsedHtml = parseHtml(response.renderedTemplate);\n            $('#chooseBonusProductModal .modal-body').empty();\n            $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n            $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n            $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n            $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n            $('#chooseBonusProductModal').modal('show');\n            $.spinner().stop();\n        },\n        error: function () {\n            $.spinner().stop();\n        }\n    });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n    $('.minicart').trigger('count:update', response);\n    var messageType = response.error ? 'alert-danger' : 'alert-success';\n    // show add to cart toast\n    if (response.newBonusDiscountLineItem\n        && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n        chooseBonusProducts(response.newBonusDiscountLineItem);\n    } else {\n        if ($('.add-to-cart-messages').length === 0) {\n            $('body').append(\n                '<div class=\"add-to-cart-messages\"></div>'\n            );\n        }\n\n        $('.add-to-cart-messages').append(\n            '<div class=\"alert ' + messageType + ' add-to-basket-alert text-center\" role=\"alert\">'\n            + response.message\n            + '</div>'\n        );\n\n        setTimeout(function () {\n            $('.add-to-basket-alert').remove();\n        }, 5000);\n    }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n    var childProducts = [];\n    $('.bundle-item').each(function () {\n        childProducts.push({\n            pid: $(this).find('.product-id').text(),\n            quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n        });\n    });\n\n    return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n    var options = $productContainer\n        .find('.product-option')\n        .map(function () {\n            var $elOption = $(this).find('.options-select');\n            var urlValue = $elOption.val();\n            var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n                .data('value-id');\n            return {\n                optionId: $(this).data('option-id'),\n                selectedValueId: selectedValueId\n            };\n        }).toArray();\n\n    return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n    if (url) {\n        $.ajax({\n            url: url,\n            method: 'GET',\n            success: function () {\n                // reporting urls hit on the server\n            },\n            error: function () {\n                // no reporting urls hit on the server\n            }\n        });\n    }\n}\n\nmodule.exports = {\n    attributeSelect: attributeSelect,\n    methods: {\n        editBonusProducts: function (data) {\n            chooseBonusProducts(data);\n        }\n    },\n\n    focusChooseBonusProductModal: function () {\n        $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n            $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n            $('#chooseBonusProductModal .close').focus();\n        });\n    },\n\n    onClosingChooseBonusProductModal: function () {\n        $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n            $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n        });\n    },\n\n    trapChooseBonusProductModalFocus: function () {\n        $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n            var focusParams = {\n                event: e,\n                containerSelector: '#chooseBonusProductModal',\n                firstElementSelector: '.close',\n                lastElementSelector: '.add-bonus-products'\n            };\n            focusHelper.setTabNextFocus(focusParams);\n        });\n    },\n\n    colorAttribute: function () {\n        $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n            e.preventDefault();\n\n            if ($(this).attr('disabled')) {\n                return;\n            }\n            var $productContainer = $(this).closest('.set-item');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.product-detail');\n            }\n\n            attributeSelect($(this).attr('data-url'), $productContainer);\n        });\n    },\n\n    selectAttribute: function () {\n        $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n            e.preventDefault();\n\n            var $productContainer = $(this).closest('.set-item');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.product-detail');\n            }\n            attributeSelect(e.currentTarget.value, $productContainer);\n        });\n    },\n\n    availability: function () {\n        $(document).on('change', '.quantity-select', function (e) {\n            e.preventDefault();\n\n            var $productContainer = $(this).closest('.product-detail');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n            }\n\n            if ($('.bundle-items', $productContainer).length === 0) {\n                attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n                    $productContainer);\n            }\n        });\n    },\n\n    addToCart: function () {\n        $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n            var addToCartUrl;\n            var pid;\n            var pidsObj;\n            var setPids;\n\n            $('body').trigger('product:beforeAddToCart', this);\n\n            if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n                setPids = [];\n\n                $('.product-detail').each(function () {\n                    if (!$(this).hasClass('product-set-detail')) {\n                        setPids.push({\n                            pid: $(this).find('.product-id').text(),\n                            qty: $(this).find('.quantity-select').val(),\n                            options: getOptions($(this))\n                        });\n                    }\n                });\n                pidsObj = JSON.stringify(setPids);\n            }\n\n            pid = getPidValue($(this));\n\n            var $productContainer = $(this).closest('.product-detail');\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n            }\n\n            addToCartUrl = getAddToCartUrl();\n\n            var form = {\n                pid: pid,\n                pidsObj: pidsObj,\n                childProducts: getChildProducts(),\n                quantity: getQuantitySelected($(this))\n            };\n\n            if (!$('.bundle-item').length) {\n                form.options = getOptions($productContainer);\n            }\n\n            $(this).trigger('updateAddToCartFormData', form);\n            if (addToCartUrl) {\n                $.ajax({\n                    url: addToCartUrl,\n                    method: 'POST',\n                    data: form,\n                    success: function (data) {\n                        handlePostCartAdd(data);\n                        $('body').trigger('product:afterAddToCart', data);\n                        $.spinner().stop();\n                        miniCartReportingUrl(data.reportingURL);\n                    },\n                    error: function () {\n                        $.spinner().stop();\n                    }\n                });\n            }\n        });\n    },\n    selectBonusProduct: function () {\n        $(document).on('click', '.select-bonus-product', function () {\n            var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n            var pid = $(this).data('pid');\n            var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n            var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n            var totalQty = 0;\n            $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n                totalQty += $(this).data('qty');\n            });\n            totalQty += submittedQty;\n            var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n            var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n            if (totalQty <= maxPids) {\n                var selectedBonusProductHtml = ''\n                + '<div class=\"selected-pid row\" '\n                + 'data-pid=\"' + pid + '\"'\n                + 'data-qty=\"' + submittedQty + '\"'\n                + 'data-optionID=\"' + (optionID || '') + '\"'\n                + 'data-option-selected-value=\"' + (valueId || '') + '\"'\n                + '>'\n                + '<div class=\"col-sm-11 col-9 bonus-product-name\" >'\n                + $choiceOfBonusProduct.find('.product-name').html()\n                + '</div>'\n                + '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>'\n                + '</div>'\n                ;\n                $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n                $('.pre-cart-products').html(totalQty);\n                $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n            } else {\n                $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n            }\n        });\n    },\n    removeBonusProduct: function () {\n        $(document).on('click', '.selected-pid', function () {\n            $(this).remove();\n            var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n            var count = 0;\n            if ($selected.length) {\n                $selected.each(function () {\n                    count += parseInt($(this).data('qty'), 10);\n                });\n            }\n\n            $('.pre-cart-products').html(count);\n            $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n        });\n    },\n    enableBonusProductSelection: function () {\n        $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n            $('button.select-bonus-product', response.$productContainer).attr('disabled',\n                (!response.product.readyToOrder || !response.product.available));\n            var pid = response.product.id;\n            $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n        });\n    },\n    showMoreBonusProducts: function () {\n        $(document).on('click', '.show-more-bonus-products', function () {\n            var url = $(this).data('url');\n            $('.modal-content').spinner().start();\n            $.ajax({\n                url: url,\n                method: 'GET',\n                success: function (html) {\n                    var parsedHtml = parseHtml(html);\n                    $('.modal-body').append(parsedHtml.body);\n                    $('.show-more-bonus-products:first').remove();\n                    $('.modal-content').spinner().stop();\n                },\n                error: function () {\n                    $('.modal-content').spinner().stop();\n                }\n            });\n        });\n    },\n    addBonusProductsToCart: function () {\n        $(document).on('click', '.add-bonus-products', function () {\n            var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n            var queryString = '?pids=';\n            var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n            var pidsObject = {\n                bonusProducts: []\n            };\n\n            $.each($readyToOrderBonusProducts, function () {\n                var qtyOption =\n                    parseInt($(this)\n                        .data('qty'), 10);\n\n                var option = null;\n                if (qtyOption > 0) {\n                    if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n                        option = {};\n                        option.optionId = $(this).data('optionid');\n                        option.productId = $(this).data('pid');\n                        option.selectedValueId = $(this).data('option-selected-value');\n                    }\n                    pidsObject.bonusProducts.push({\n                        pid: $(this).data('pid'),\n                        qty: qtyOption,\n                        options: [option]\n                    });\n                    pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n                }\n            });\n            queryString += JSON.stringify(pidsObject);\n            queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n            queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n            $.spinner().start();\n            $.ajax({\n                url: url + queryString,\n                method: 'POST',\n                success: function (data) {\n                    $.spinner().stop();\n                    if (data.error) {\n                        $('#chooseBonusProductModal').modal('hide');\n                        if ($('.add-to-cart-messages').length === 0) {\n                            $('body').append('<div class=\"add-to-cart-messages\"></div>');\n                        }\n                        $('.add-to-cart-messages').append(\n                            '<div class=\"alert alert-danger add-to-basket-alert text-center\"'\n                            + ' role=\"alert\">'\n                            + data.errorMessage + '</div>'\n                        );\n                        setTimeout(function () {\n                            $('.add-to-basket-alert').remove();\n                        }, 3000);\n                    } else {\n                        $('.configure-bonus-product-attributes').html(data);\n                        $('.bonus-products-step2').removeClass('hidden-xl-down');\n                        $('#chooseBonusProductModal').modal('hide');\n\n                        if ($('.add-to-cart-messages').length === 0) {\n                            $('body').append('<div class=\"add-to-cart-messages\"></div>');\n                        }\n                        $('.minicart-quantity').html(data.totalQty);\n                        $('.add-to-cart-messages').append(\n                            '<div class=\"alert alert-success add-to-basket-alert text-center\"'\n                            + ' role=\"alert\">'\n                            + data.msgSuccess + '</div>'\n                        );\n                        setTimeout(function () {\n                            $('.add-to-basket-alert').remove();\n                            if ($('.cart-page').length) {\n                                location.reload();\n                            }\n                        }, 1500);\n                    }\n                },\n                error: function () {\n                    $.spinner().stop();\n                }\n            });\n        });\n    },\n\n    getPidValue: getPidValue,\n    getQuantitySelected: getQuantitySelected,\n    miniCartReportingUrl: miniCartReportingUrl\n};\n","const loaderInstance = require('./loader');\nconst $loaderContainer = document.querySelector('.paypalLoader');\nconst loader = loaderInstance($loaderContainer);\nconst CONTENT_TYPE_JSON = 'application/json';\n\nconst AlertHandlerModel = require('./models/alertHandler');\nconst alertHandler = new AlertHandlerModel();\n\n/**\n * Updates information about an order\n * @param {boolean} isAddressNeedChange - if we need to change shipping address\n * @returns {Object} Call handling result\n */\nfunction updateOrderData(isAddressNeedChange = false) {\n    loader.show();\n\n    return $.ajax({\n        url: [window.paypalUrls.updateOrderData, '?isCartFlow=true', '?isAddressNeedChange=', isAddressNeedChange].join(''),\n        type: 'PATCH',\n        success: () => {\n            loader.hide();\n            window.location.href = window.paypalUrls.placeOrderStage;\n        },\n        error: (err) => {\n            const error = JSON.parse(err.responseText);\n\n            loader.hide();\n            alertHandler.showError(error.errorMsg);\n\n            if (error.transactionExpired) {\n                location.reload();\n            }\n        }\n    });\n}\n\n/**\n * Gets Billing Agreement Token\n *\n * @param {boolean} isCartFlow - billing agreement flow from cart\n * @param {boolean} isSkipShippingAddress - whether skip or add possibility to edit the shipping address in PayPal window\n * @returns {string} billingToken - returns a JSON response that includes token, an approval URL\n */\nfunction getBillingAgreementToken(isCartFlow, isSkipShippingAddress = false) {\n    return $.get(window.paypalUrls.createBillingAgreementToken\n        + `?isCartFlow=${isCartFlow}&isSkipShippingAddress=${isSkipShippingAddress}`)\n        .then((data) => data);\n}\n\n/**\n * Gets Billing Agreement\n * After buyer approval, you use a billing agreement token to create the agreement.\n * @returns {Object} JSON response body that includes the billing agreement ID,\n * the state of the agreement, which is ACTIVE, and information about the payer\n */\nfunction createBillingAgreementCall() {\n    return $.ajax({\n        url: window.paypalUrls.createBillingAgreement,\n        type: 'POST',\n        contentType: CONTENT_TYPE_JSON\n    });\n}\n\n/**\n * Create billing formData from fields data\n *\n * @param {Object} fieldsData - fields data values\n * @param {Element} $paypalButton - paypal button selector\n * @returns {Object} cart billing form data\n */\nfunction createCartBillingFormData(fieldsData, $paypalButton) {\n    const cartBillingFormData = new FormData();\n\n    if (!$paypalButton) {\n        $paypalButton = document.getElementById('paypal-static-image')\n            || document.getElementById('paypal-image')\n            || document.getElementById('venmo-image');\n    }\n\n    const cartBillingFields = $paypalButton && JSON.parse($paypalButton.getAttribute('data-paypal-billing-form-fields'));\n\n    Object.entries(cartBillingFields)\n        .forEach(entry => {\n            const [key, field] = entry;\n\n            if (typeof field === 'object') {\n                cartBillingFormData.append(field.name, fieldsData && fieldsData[key] ? fieldsData[key] : field.value);\n            }\n        });\n\n    return cartBillingFormData;\n}\n\n/**\n * Calls to returnFromCart endpoint, redirects to place order stage or shows error if it exists\n * @param {boolean} isAddressNeedChange - true if static image address same as BA\n * @returns {Object} Call handling result\n */\nfunction returnFromCart(isAddressNeedChange = false) {\n    loader.show();\n    const cartBillingFormData = createCartBillingFormData();\n\n    return $.ajax({\n        url: [window.paypalUrls.returnFromCart, '?isAddressNeedChange=', isAddressNeedChange].join(''),\n        type: 'POST',\n        contentType: false,\n        data: cartBillingFormData,\n        processData: false,\n        success: () => {\n            loader.hide();\n            window.location.href = window.paypalUrls.placeOrderStage;\n        },\n        error: function(err) {\n            loader.hide();\n            alertHandler.showError(err.responseText);\n        }\n    });\n}\n\n/**\n * Calls to Paypal-ValidateStaticImage endpoint\n * @returns {Promise} promise from fetch with response from Paypal-ValidateStaticImage endpoint\n */\nfunction validateStaticImageAddress() {\n    const paypalStaticImage = document.getElementById('paypal-static-image')\n        || document.getElementById('paypal-image');\n\n    return fetch(window.paypalUrls.validateStaticImage, {\n        method: 'POST',\n        headers: {\n            'Content-Type': 'application/json'\n        },\n        body: JSON.stringify({\n            email: paypalStaticImage.getAttribute('data-paypal-default-ba-email'),\n            formFields: paypalStaticImage.getAttribute('data-paypal-billing-form-fields')\n        })\n    })\n        .then(response => response.json())\n        .then(data => {\n            return data.isAddressNeedChange;\n        })\n        .catch(() => {\n            return false;\n        });\n}\n\n/**\n * Call finishPayNow endpoint\n * @param {string} fundingSource The current paypal funding source\n * @returns {Promise} ajax call\n */\nfunction finishPayNowFlow(fundingSource) {\n    const $usedPaymentMethod = document.querySelector('#usedPaymentMethod');\n    const pmName = $usedPaymentMethod ? $usedPaymentMethod.value : fundingSource;\n\n    return $.ajax({\n        url: window.paypalUrls.finishPayNowFlow,\n        type: 'POST',\n        contentType: CONTENT_TYPE_JSON,\n        data: JSON.stringify({\n            pmName\n        })\n    });\n}\n\n/**\n * Makes call on saving a PayPal default address to the storefront customer.\n * @param {Object} addressObject PayPal address information.\n * @param {boolean} isAccountPage Identifies whether the source page is account.\n * @returns {Object} Whether a success or failed JSON response body.\n */\nfunction savePaypalDefaultAddress(addressObject, isAccountPage) {\n    return $.ajax({\n        url: window.paypalUrls.savePaypalDefaultAddress,\n        type: 'POST',\n        contentType: CONTENT_TYPE_JSON,\n        data: JSON.stringify({ addressObject, isAccountPage })\n    });\n}\n\n/**\n * Finish a PayPal payment by PayPal Pay Now flow\n * @param {string} usedPaymentMethod Current payment method name\n */\nfunction finishPayNowPayment(usedPaymentMethod) {\n    const helper = require('./helper');\n\n    finishPayNowFlow(usedPaymentMethod)\n        .then(({ redirectUrl }) => {\n            loader.hide();\n            helper.processPayNowConfirmForm(redirectUrl);\n        })\n        .catch(function() {\n            loader.hide();\n        });\n}\n\n/**\n * @returns {string} paypal order id\n */\nfunction getPaypalOrderId() {\n    const helper = require('./helper');\n\n    return $.ajax({\n        url: helper.getUrlWithCsrfToken(window.paypalUrls.getPaypalOrderId),\n        type: 'GET',\n        contentType: 'application/json',\n        async: false\n    }).responseJSON.id;\n}\n\nexport {\n    updateOrderData,\n    getBillingAgreementToken,\n    createBillingAgreementCall,\n    returnFromCart,\n    finishPayNowFlow,\n    createCartBillingFormData,\n    savePaypalDefaultAddress,\n    finishPayNowPayment,\n    getPaypalOrderId,\n    validateStaticImageAddress\n};\n","'use strict';\n\nconst defaultStyle = {\n    color: 'gold',\n    shape: 'rect',\n    layout: 'vertical',\n    label: 'paypal',\n    tagline: false\n};\n\nconst HIDE_CLASS = 'none';\nconst PRODUCT_DETAIL_CLASS = '.product-detail';\nconst PDP_PRICE_VALUE_CLASS = '.price .sales .value';\nconst base = require('base/product/base');\n\n/**\n *  Gets paypal button styles\n * @param {Element} button - button element\n * @returns {Object} with button styles or if error appears with default styles\n */\nfunction getPaypalButtonStyle(button) {\n    try {\n        const config = button.getAttribute('data-paypal-button-config');\n\n        if (config) {\n            const buttonConfigs = JSON.parse(config);\n\n            return buttonConfigs.style;\n        }\n\n        return {\n            style: defaultStyle\n        };\n    } catch (error) {\n        return {\n            style: defaultStyle\n        };\n    }\n}\n\n/**\n * Creates a redirecting form to Order-Confirm endpoint\n * @param {Object} param  The helping object for creating a from\n * @returns {Object} form element\n */\nfunction createConfirmForm(param) {\n    const form = $('<form>')\n        .appendTo(document.body)\n        .attr({\n            method: 'POST',\n            action: param.url\n        });\n\n    $('<input>')\n        .appendTo(form)\n        .attr({\n            name: 'orderID',\n            value: param.orderID\n        });\n\n    $('<input>')\n        .appendTo(form)\n        .attr({\n            name: 'orderToken',\n            value: param.orderToken\n        });\n\n    return form;\n}\n\n/**\n * Prepare and submits form in order to confirm order with Lpm\n * @param {string} redirectUrl Redirect Url\n */\nfunction processPayNowConfirmForm(redirectUrl) {\n    const splitUrl = redirectUrl.split('?');\n    const url = splitUrl[0];\n    const paramsString = splitUrl[1];\n    const searchParams = new URLSearchParams(paramsString);\n    const formParam = {\n        orderID: searchParams.get('orderID'),\n        orderToken: searchParams.get('orderToken'),\n        url: url\n    };\n\n    const form = createConfirmForm(formParam);\n\n    form.submit();\n}\n\n/**\n * Return payment method name in lovercase\n * @param {string} paymentMethodName Payment method name\n * @returns {string} Paymnet method name\n */\nfunction getPaymentMethodToLowerCase(paymentMethodName) {\n    const paymentMethod = paymentMethodName.split('_');\n\n    if (paymentMethod.length === 1) {\n        return paymentMethodName;\n    }\n\n    paymentMethod.forEach(function(element, index) {\n        paymentMethod[index] = element.charAt(0) + element.slice(1).toLocaleLowerCase();\n    });\n\n    return paymentMethod[1] ? [paymentMethod[0], paymentMethod[1]].join(' ') : paymentMethod[0];\n}\n\n/**\n * Creates an HTML element with the specified tag and text.\n * @param {string} tag - The tag name for the new element.\n * @param {string} text - The text content for the new element.\n * @returns {HTMLElement} A new HTML element with the specified tag and text.\n */\nfunction createHTMLElementWithText(tag, text) {\n    const element = document.createElement(tag);\n\n    element.textContent = text;\n\n    return element;\n}\n\n/**\n * Updates html div view\n * @param {Object} order Order object\n * @param {Array<HTMLElement>} html Array of HTML elements\n * @returns {Array<HTMLElement>} Updated array of HTML elements\n */\nfunction appendHtml(order, html) {\n    const payment = order.billing.payment;\n\n    payment.selectedPaymentInstruments.forEach(function(selectedPaymentInstrument) {\n        const paymnetMethodId = selectedPaymentInstrument.paymentMethod;\n        const fundingSource = selectedPaymentInstrument.fundingSource;\n        const isVenmoUsed = fundingSource === window.paypalConstants.PAYMENT_METHOD_ID_VENMO\n            && document.getElementById('venmo-content').classList.contains('active');\n\n        if (fundingSource === window.paypalConstants.PP_DEBIT_CREDIT_PAYMENT_TYPE) {\n            html.push(createHTMLElementWithText('div', window.paypalConstants.PP_DEBIT_CREDIT_PAYMENT_TYPE));\n        } else if (isVenmoUsed) {\n            html.push(createHTMLElementWithText('div', window.paypalConstants.PAYMENT_METHOD_ID_VENMO));\n        } else {\n            html.push(createHTMLElementWithText('div', getPaymentMethodToLowerCase(paymnetMethodId)));\n        }\n\n        if (paymnetMethodId !== window.paypalConstants.PAYMENT_METHOD_ID_PAYPAL\n            && selectedPaymentInstrument.maskedCreditCardNumber) {\n            html.push(createHTMLElementWithText('div', selectedPaymentInstrument.maskedCreditCardNumber));\n        }\n\n        if (paymnetMethodId === window.paypalConstants.PAYMENT_METHOD_ID_PAYPAL) {\n            const text = [selectedPaymentInstrument.accountHolderResource, selectedPaymentInstrument.paypalAccountHolder].join('');\n\n            html.push(createHTMLElementWithText('div', text));\n        }\n\n        if (selectedPaymentInstrument.type) {\n            html.push(createHTMLElementWithText('div', selectedPaymentInstrument.type));\n        }\n\n        html.push(createHTMLElementWithText('div', [order.priceTotal.charAt(0), selectedPaymentInstrument.amount].join('')));\n    });\n\n    return html;\n}\n\n/**\n * Updates checkout view\n * @param {Object} data Data object\n */\nfunction updateCheckoutView(data) {\n    const $paymentSummary = document.querySelector('.summary-details .payment-details')\n        || document.querySelector('.summary-details .js-paypal-payment-details');\n\n    const order = data.order;\n    const payment = order.billing.payment;\n\n    let htmlToAppend = [];\n\n    if ($paymentSummary && $paymentSummary.classList.contains('payment-details')) {\n        // Overwrites a basic class to show a correct payment PayPal related data for buyer\n        $paymentSummary.classList.remove('payment-details');\n        $paymentSummary.classList.add('js-paypal-payment-details');\n    }\n\n    if (payment && payment.selectedPaymentInstruments && payment.selectedPaymentInstruments.length > 0) {\n        htmlToAppend = appendHtml(order, htmlToAppend);\n    }\n\n    if ($paymentSummary && htmlToAppend.length > 0) {\n        $paymentSummary.innerHTML = '';\n\n        htmlToAppend.forEach(element => {\n            $paymentSummary.appendChild(element);\n        });\n    }\n}\n\n/**\n * @param {Object} error - an error object data\n * @returns {boolean} - if an error message is displayed then true otherwise false\n */\nfunction handleValidationAddressResult(error) {\n    if (error.status === 422 && /(sh|b)i(p|l){2}ing/i.test(error.responseText)) {\n        const AlertHandlerModel = require('./models/alertHandler');\n        const alertHandler = new AlertHandlerModel();\n\n        alertHandler.showError(error.responseText);\n\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * Shows paypal button\n * @param {Object} paypalButton - paypal button element\n */\nfunction showPaypalButton(paypalButton) {\n    paypalButton.classList.remove(HIDE_CLASS);\n}\n\n/**\n * Hides paypal button\n * @param {Object} paypalButton - paypal button element\n */\nfunction hidePaypalButton(paypalButton) {\n    paypalButton.classList.add(HIDE_CLASS);\n}\n\n/**\n * Check if product price value is equal to zero (0.00)\n * @returns {boolean} - a true for zero value or false\n */\nfunction isProductZeroAmount() {\n    const $element = document.querySelector(PDP_PRICE_VALUE_CLASS);\n\n    return $element && $element.getAttribute('content') === '0.00';\n}\n\n/**\n * Get minicart qualtity\n * @returns {number} - a quantity\n */\nfunction getMiniCartQuantity() {\n    const $element = document.querySelector('.minicart-quantity');\n\n    return $element ? parseInt($element.textContent, 0) : 0;\n}\n\n/**\n * Handling PVP button behavior on Quick View\n * @param {Object} paypalButton - paypal button element\n * @returns {void}\n */\nfunction initPaypalButtonBehaviorOnPvp(paypalButton) {\n    const isProductReadyToOrderElement = document.querySelector('.js-is-show-pp-button');\n    const isProductReadyToOrder = isProductReadyToOrderElement && isProductReadyToOrderElement.value === 'true';\n\n    const addToCartButton = document.querySelector('.add-to-cart, .add-to-cart-global');\n\n    // Check minicart quantity and hide Paypal button if it is not empty\n    if (getMiniCartQuantity() > 0 || isProductZeroAmount()) { // Check if product price is zero\n        hidePaypalButton(paypalButton);\n    }\n\n    if (addToCartButton.disabled || !isProductReadyToOrder) {\n        hidePaypalButton(paypalButton);\n    }\n\n    $('body').on('product:statusUpdate', function() {\n        if (getMiniCartQuantity() === 0 && !isProductZeroAmount()) {\n            if (addToCartButton.disabled) {\n                hidePaypalButton(paypalButton);\n            }\n\n            if (!addToCartButton.disabled) {\n                showPaypalButton(paypalButton);\n            }\n        } else {\n            hidePaypalButton(paypalButton);\n        }\n    });\n}\n\n/**\n * Handling PVP/PDP button behavior on Product Set\n * @returns {void}\n */\nfunction initPayPalBtnBehaviorOnSet() {\n    const miniCartQuantityElement = document.querySelector('.minicart-quantity');\n    const addToCartButtons = document.querySelectorAll('.add-to-cart, .add-to-cart-global');\n\n    const miniCartQuantity = parseInt(miniCartQuantityElement.textContent, 0);\n\n    addToCartButtons.forEach((btn) => {\n        const paypalButton = btn.parentElement\n            .querySelector('.paypal-pvp-button, .paypal-pvp-button-global, .paypal-pdp-button, .paypal-pdp-button-global');\n\n        const isProductReadyToOrderElement = btn.parentElement.querySelector('.js-is-show-pp-button');\n        const isProductReadyToOrder = isProductReadyToOrderElement && isProductReadyToOrderElement.value === 'true';\n\n        const prices = document.querySelectorAll(PDP_PRICE_VALUE_CLASS);\n\n        const isWrongAmount = prices && Array.from(prices).some((price) => {\n            return parseFloat(price.getAttribute('content')) <= 0;\n        });\n\n        if (miniCartQuantity === 0 && !isWrongAmount && isProductReadyToOrder) {\n            if (btn.disabled) {\n                hidePaypalButton(paypalButton);\n            }\n\n            if (!btn.disabled) {\n                showPaypalButton(paypalButton);\n            }\n        } else {\n            hidePaypalButton(paypalButton);\n        }\n    });\n\n    $('body').on('product:statusUpdate', function(event) {\n        const addToCartButton = event.target;\n\n        const paypalButton = addToCartButton.parentElement\n            .querySelector('.paypal-pvp-button, .paypal-pvp-button-global, .paypal-pdp-button, .paypal-pdp-button-global');\n\n        const prices = document.querySelectorAll(PDP_PRICE_VALUE_CLASS);\n\n        const isWrongAmount = prices && Array.from(prices).some((price) => {\n            return parseFloat(price.getAttribute('content')) <= 0;\n        });\n\n        if (miniCartQuantity === 0 && !isWrongAmount) {\n            if (addToCartButton.disabled) {\n                hidePaypalButton(paypalButton);\n            }\n\n            if (!addToCartButton.disabled) {\n                showPaypalButton(paypalButton);\n            }\n        } else {\n            hidePaypalButton(paypalButton);\n        }\n    });\n}\n\n/**\n * Returns a payment method name by the Paypal funding source\n * @param {string} fundingSource PayPal funding source\n * @returns {string} A payment method name\n */\nfunction getPaymentMethodName(fundingSource) {\n    if (fundingSource === 'venmo') {\n        return window.paypalConstants.PAYMENT_METHOD_ID_VENMO;\n    }\n\n    if (fundingSource === 'card') {\n        return window.paypalConstants.PP_DEBIT_CREDIT_PAYMENT_TYPE;\n    }\n\n    return fundingSource;\n}\n\n/**\n * Get CSRF Token\n * @returns {string} - csrf token value\n */\nfunction getCsrfToken() {\n    let $element = document.querySelector('[name=\"csrf_token\"]');\n\n    if ($element && $element.value !== '') {\n        return $element.value;\n    }\n\n    $element = document.querySelector('[data-tokenname=\"csrf_token\"]');\n\n    if ($element && $element.getAttribute('data-token') !== '') {\n        return $element.getAttribute('data-token');\n    }\n\n    return '';\n}\n\n/**\n * Add csrf token param to url\n * @param {string} url - source url\n * @returns {string} - url with csrf_token param\n */\nfunction getUrlWithCsrfToken(url) {\n    const urlInstance = new URL(url, location.origin);\n\n    urlInstance.searchParams.append('csrf_token', getCsrfToken());\n\n    return urlInstance.toString();\n}\n\n/**\n * It takes a selector for a PayPal button, and returns an object with the product ID and quantity of\n * the product that the button is for.\n *\n * @param {string} ppBtnSelector - PayPal button container selector.\n * @returns {void}\n */\nfunction addProductToCart(ppBtnSelector) {\n    /**\n     * Gets options\n     * @param {Object} productContainer - product container\n     * @returns {string} options\n     */\n    function getOptions(productContainer) {\n        return JSON.stringify(Array.from(productContainer.querySelectorAll('.product-option'))\n            .map(elOption => {\n                const selectedValue = elOption.querySelector('.options-select').value;\n                const selectedOption = elOption.querySelector(`.options-select option[value=\"${selectedValue}\"]`);\n\n                return {\n                    optionId: elOption.getAttribute('data-option-id'),\n                    selectedValueId: selectedOption.getAttribute('data-value-id')\n                };\n            }));\n    }\n\n    const ppBtn = document.querySelector(ppBtnSelector);\n    const bundleItems = document.querySelectorAll('.bundle-item');\n    const setItems = document.querySelectorAll('.set-item');\n\n    const ppBtnContainer = ppBtn.closest('.paypal-pvp-button-global, .paypal-pdp-button-global')\n        || ppBtn.closest('.paypal-pdp-button, .paypal-pvp-button');\n\n    const isGlobalButton = ['paypal-pvp-button-global', 'paypal-pdp-button-global'].some(className => ppBtnContainer.classList.contains(className));\n\n    const pid = base.getPidValue(ppBtnContainer);\n\n    let productContainer;\n    let form = {};\n\n    if (isGlobalButton || !setItems.length) {\n        productContainer = document.querySelector(ppBtnSelector).closest(PRODUCT_DETAIL_CLASS) || document.querySelector(PRODUCT_DETAIL_CLASS);\n    } else {\n        productContainer = document.querySelector(ppBtnSelector).closest('.set-item');\n    }\n\n    if (bundleItems.length) {\n        const quantity = document.querySelector('.modal-footer').querySelector('.quantity-select').value;\n\n        form = {\n            pid: pid,\n            quantity: quantity\n        };\n\n        const items = Array.from(bundleItems).map(function(item) {\n            return {\n                pid: item.querySelector('.product-id').innerText,\n                quantity: parseInt(item.querySelector('.quantity').getAttribute('data-quantity'), 10)\n            };\n        });\n\n        form.childProducts = JSON.stringify(items);\n    } else if (setItems.length && isGlobalButton) {\n        const items = Array.from(setItems).map(function(item) {\n            return {\n                pid: base.getPidValue(item),\n                qty: parseInt(base.getQuantitySelected(item), 10),\n                options: getOptions(item)\n            };\n        });\n\n        form.pidsObj = JSON.stringify(items);\n    } else {\n        form = {\n            pid: pid,\n            quantity: base.getQuantitySelected(ppBtnContainer),\n            options: getOptions(productContainer)\n        };\n    }\n\n    return $.ajax({\n        url: $('.add-to-cart-url').val(),\n        method: 'POST',\n        async: false,\n        data: form\n    }).responseJSON;\n}\n\n/**\n * Removes all products from the cart in case if an error occurred\n */\nfunction removeAllProductsFromCart() {\n    const url = getUrlWithCsrfToken(window.paypalUrls.removeAllProductsFromCart);\n\n    fetch(url, {\n        method: 'GET',\n        headers: { 'Content-Type': 'application/json' }\n    })\n        .finally(() => {\n            $.spinner().stop();\n        });\n}\n\nexport {\n    getPaypalButtonStyle,\n    processPayNowConfirmForm,\n    updateCheckoutView,\n    handleValidationAddressResult,\n    initPaypalButtonBehaviorOnPvp,\n    initPayPalBtnBehaviorOnSet,\n    getPaymentMethodName,\n    getCsrfToken,\n    getUrlWithCsrfToken,\n    addProductToCart,\n    removeAllProductsFromCart\n};\n","/* eslint-disable require-jsdoc */\nmodule.exports = function(containerElement) {\n    function Constructor() {\n        this.containerEl = containerElement;\n    }\n\n    Constructor.prototype.show = function() {\n        this.containerEl.style.display = 'block';\n    };\n\n    Constructor.prototype.hide = function() {\n        this.containerEl.style.display = 'none';\n    };\n\n    return new Constructor();\n};\n","'use strict';\n\n/**\n * Alert Handling model\n */\nclass AlertHandlerModel {\n    constructor() {\n        this.$flashMessagesContainer = document.querySelector('.js-flash-messages-container');\n        this.$alertTemplate = document.querySelector('.js-alert-template');\n    }\n\n    /**\n     * Creates an alert message\n     * @param {string} alertMessage alert message\n     * @param {string} alertType alert type, i.e. danger, info, warning etc\n     */\n    createAlertMessage(alertMessage, alertType) {\n        const $alertContainer = this.$alertTemplate.cloneNode(true);\n\n        $alertContainer.classList.add(`alert-${alertType}`, 'show');\n        $alertContainer.classList.remove('d-none');\n\n        $alertContainer.append(alertMessage);\n        this.$flashMessagesContainer.append($alertContainer);\n    }\n\n    /**\n     * Shows an error message\n     * @param {string} errorMessage error message\n     */\n    showError(errorMessage) {\n        this.createAlertMessage(errorMessage, window.paypalConstants.FLASH_MESSAGE_DANGER);\n    }\n\n    /**\n     * Shows a warning message\n     * @param {string} warningMessage warning message\n     */\n    showWarning(warningMessage) {\n        this.createAlertMessage(warningMessage, window.paypalConstants.FLASH_MESSAGE_WARNING);\n    }\n\n    /**\n     * Shows an info message\n     * @param {string} infoMessage info message\n     */\n    showInfo(infoMessage) {\n        this.createAlertMessage(infoMessage, window.paypalConstants.FLASH_MESSAGE_INFO);\n    }\n}\n\nmodule.exports = AlertHandlerModel;\n","'use strict';\n\nconst api = require('../../api');\nconst helper = require('../../helper');\n\nconst loaderInstance = require('../../loader');\nconst $loaderContainer = document.querySelector('.paypalLoader');\nconst $usedPaymentMethodName = document.getElementById('usedPaymentMethod');\n\nconst disableFunds = [\n    'sepa',\n    'bancontact',\n    'eps',\n    'giropay',\n    'ideal',\n    'mybank',\n    'p24',\n    'sofort',\n    'venmo',\n    'blik'\n];\n\nlet that = null;\n\n/**\n * Returns value whether LPM was used or not\n * @param {string} usedPaymentMethod - The payment method name\n * @returns {boolean} value whether LPM was used\n */\nconst isLpmUsed = usedPaymentMethod => {\n    return disableFunds.indexOf(usedPaymentMethod) !== -1;\n};\n\n/**\n * Initiates a PayPalButtonBase model\n * @param {string} payPalBtnSelector A container class where PayPal button will be initiated\n */\nfunction PayPalBaseModel(payPalBtnSelector) {\n    const AlertHandlerModel = require('../alertHandler');\n\n    this.payPalBtnSelector = payPalBtnSelector;\n    this.$payPalBtnContainer = document.querySelector(payPalBtnSelector);\n    this.isPayNowFlowEnabled = window.paypalPreferences.isPayNowFlowEnabled;\n    this.usedPaymentMethodName = null;\n    this.loader = loaderInstance($loaderContainer);\n    this.alertHandler = new AlertHandlerModel();\n\n    this.isBtnEligible = null;\n    this.fundingSource = null;\n}\n\n/**\n * Process the Pay Now flow\n */\nPayPalBaseModel.prototype.processPayNowFlow = function() {\n    const SessionStorageModel = require('../sessionStorage');\n    const sessionStorageInstance = new SessionStorageModel();\n\n    api.finishPayNowPayment(this.usedPaymentMethodName);\n\n    sessionStorageInstance.clear();\n};\n\n/**\n * Process the generic (not Ba) Paypal button flow\n */\nPayPalBaseModel.prototype.processGenericBtnFlow = function() {\n    const $selectedAccount = document.getElementById('sessionPaypalAccount');\n\n    // TODO impelement an Account list for Venmo\n    if (that.usedPaymentMethodName !== window.paypalConstants.PAYMENT_METHOD_ID_VENMO) {\n        if ($selectedAccount.value !== '') {\n            $selectedAccount.value = '';\n            $selectedAccount.innerText = '';\n        }\n\n        $selectedAccount.selected = true;\n        $selectedAccount.style.display = 'block';\n    }\n\n    document.querySelector('button.submit-payment').click();\n    this.loader.hide();\n};\n\n/**\n * Saves a used payment method to hidden input\n * @param {Object} data - object with data\n */\nPayPalBaseModel.prototype.onClick = function(data) {\n    if (data.fundingSource === window.paypal.FUNDING.CARD) {\n        that.usedPaymentMethodName = 'PayPal Debit/Credit Card';\n    } else if (data.fundingSource === window.paypal.FUNDING.VENMO) {\n        that.usedPaymentMethodName = window.paypalConstants.PAYMENT_METHOD_ID_VENMO;\n    } else if (data.fundingSource === window.paypal.FUNDING.PAYPAL) {\n        that.usedPaymentMethodName = window.paypalConstants.PAYMENT_METHOD_ID_PAYPAL;\n    } else {\n        that.usedPaymentMethodName = data.fundingSource;\n    }\n\n    if ($usedPaymentMethodName) {\n        $usedPaymentMethodName.value = that.usedPaymentMethodName;\n    }\n};\n\n/**\n * Gets purchase units object, creates order and returns object with data\n * @returns {Object} With purchase units, payer and application context\n */\nPayPalBaseModel.prototype.createOrder = function() {\n    return api.getPaypalOrderId();\n};\n\n/**\n * Clears session account if it exists and irrelevant errors,\n * and clicks submit payment button OR\n * Finish PayNow flow\n * Is used with adjacent instances (cart, pdp)\n */\nPayPalBaseModel.prototype.onApprove = function() {\n    that.loader.show();\n\n    // Pay Now flow. Using whether when an appropriate site preference is enabled or in case of LPM\n    if (isLpmUsed(that.usedPaymentMethodName) || that.isPayNowFlowEnabled) {\n        that.processPayNowFlow();\n    } else {\n        that.processGenericBtnFlow();\n    }\n};\n\n/**\n * Hides loader on paypal widget closing without errors\n * Is used with adjacent instances (cart, pdp)\n */\nPayPalBaseModel.prototype.onCancel = function() {\n    that.loader.hide();\n};\n\n/**\n * Shows errors if paypal widget was closed with errors\n * Is used with adjacent instances (cart, pdp)\n */\nPayPalBaseModel.prototype.onError = function() {\n    that.loader.hide();\n    that.alertHandler.showError(window.paypalConstants.FLASH_MESSAGE_ERROR_INTERNAL_SERVER);\n};\n\n/**\n * Renders a button mark(tab)\n */\nPayPalBaseModel.prototype.renderButtonMarks = function() {\n    window.paypal.Marks({\n        fundingSource: this.fundingSource\n    }).render(`.js-${this.fundingSource}-mark`);\n};\n\n/**\n * Renders the payment fields for LPM\n */\nPayPalBaseModel.prototype.renderPaymentFields = function() {\n    window.paypal.PaymentFields({\n        fundingSource: this.fundingSource\n    }).render(this.payPalBtnSelector);\n};\n\n/**\n * Shows a tab by funding source\n * @param {string} fs The funding source\n */\nPayPalBaseModel.prototype.showButtonTab = function(fs) {\n    document.querySelector(`.js-nav-item-${fs}`).classList.remove('d-none');\n};\n\n/**\n * Returns a generic PayPal's button parameter object\n * @returns {Object} A generic button parameters object\n */\nPayPalBaseModel.prototype.createBtnGeneralOption = function() {\n    that = this;\n\n    return {\n        onClick: this.onClick,\n        createOrder: this.createOrder.bind(this, this.payPalBtnSelector),\n        onApprove: this.onApprove,\n        onCancel: this.onCancel,\n        onError: this.onError,\n        style: helper.getPaypalButtonStyle(this.$payPalBtnContainer)\n    };\n};\n\n/**\n * Initiates buttons for the PayPal tab\n * @param {Object} btnProperty The button property\n */\nPayPalBaseModel.prototype.initBtnsForPayPalTab = function(btnProperty) {\n    const eligibleFundingSources = window.paypal.getFundingSources().filter(fs => window.paypal.Buttons({\n        fundingSource: fs\n    }).isEligible());\n\n    const PAYPAL_FS = window.paypal.FUNDING.PAYPAL;\n\n    let isTabShown = false;\n\n    if (eligibleFundingSources.length) {\n        this.renderButtonMarks.call({\n            fundingSource: PAYPAL_FS\n        });\n\n        eligibleFundingSources.forEach(fs => {\n            if (!disableFunds.includes(fs)) {\n                // Only white and black colors are available for both Debit/Credit Card and PayPal Credit btn\n                if ((fs === window.paypal.FUNDING.CARD || fs === window.paypal.FUNDING.CREDIT) &&\n                    !['white', 'black'].some(el => el === btnProperty.style.color)) {\n                        // Sets the default color in case if color is not available for both Debit/Credit Card or PayPal Credit btn\n                        if (fs === window.paypal.FUNDING.CREDIT) {\n                            btnProperty.style.color = 'darkblue';\n                        } else {\n                            btnProperty.style.color = 'black';\n                        }\n                }\n\n                window.paypal.Buttons(Object.assign(btnProperty, {\n                    fundingSource: fs\n                })).render(this.payPalBtnSelector);\n\n                if (!isTabShown) {\n                    // Shows the PayPal tab\n                    this.showButtonTab(PAYPAL_FS);\n                    isTabShown = true;\n                }\n            }\n        });\n    }\n};\n\n/**\n * Initiates a button by the provided funding source\n * @param {string} fs The function source(venmo, mybank...)\n * @param {Object} btnProperty The button property\n */\nPayPalBaseModel.prototype.initBtnByFundingSource = function(fs, btnProperty) {\n    const btnInitResult = window.paypal.Buttons(Object.assign(btnProperty, {\n        fundingSource: fs\n    }));\n\n    this.isBtnEligible = btnInitResult.isEligible();\n\n    if (this.isBtnEligible) {\n        this.renderButtonMarks();\n\n        btnInitResult.render(this.payPalBtnSelector);\n\n        this.showButtonTab(fs);\n    }\n};\n\n/**\n * Initiates a Paypal button on billing checkout page\n * Is used with adjacent instances (cart, pdp, pvp)\n * @param {string} fundingSource The funding source of payment method\n */\nPayPalBaseModel.prototype.initPayPalBtn = function(fundingSource) {\n    this.loader.show();\n    this.fundingSource = fundingSource || window.paypal.FUNDING.PAYPAL;\n\n    const btnProperty = this.createBtnGeneralOption();\n\n    if (fundingSource) {\n        this.initBtnByFundingSource(fundingSource, btnProperty);\n    } else {\n        this.initBtnsForPayPalTab(btnProperty);\n    }\n\n    this.loader.hide();\n};\n\nmodule.exports = PayPalBaseModel;\n","'use strict';\n\nconst PayPalBaseModel = require('./payPalBase');\nconst helper = require('../../helper');\n\n/**\n * Initiates a PayPalButtonExpress model (pvp, pdp, cart, mini-cart)\n * @param {string} payPalBtnSelector A container class where PayPal button will be initiated\n */\nfunction PayPalExpressModel(payPalBtnSelector) {\n    PayPalBaseModel.call(this, payPalBtnSelector);\n}\n\nPayPalExpressModel.prototype = Object.create(PayPalBaseModel.prototype);\n\n/**\n * Process the generic (not Ba) Paypal button flow (cart, pdp, mini-cart)\n */\nPayPalExpressModel.prototype.processGenericBtnFlow = function() {\n    const api = require('../../api');\n\n    const cartBillingFormData = api.createCartBillingFormData({\n        usedPaymentMethod: this.usedPaymentMethodName\n    }, this.$payPalBtnContainer);\n\n    $.ajax({\n        type: 'POST',\n        url: window.paypalUrls.returnFromCart,\n        contentType: false,\n        data: cartBillingFormData,\n        processData: false,\n        success: () => {\n            this.loader.hide();\n\n            window.location.href = window.paypalUrls.placeOrderStage;\n        },\n        error: (error) => {\n            this.loader.hide();\n\n            if (this.payPalBtnSelector === '.js-paypal-button-on-cart-page') {\n                this.onError(error);\n            } else if (!helper.handleValidationAddressResult(error)) {\n                window.location.href = window.paypalUrls.cartPage;\n            } else if (this.payPalBtnSelector.includes('.paypal-pdp-button')) {\n                helper.removeAllProductsFromCart();\n            }\n        }\n    });\n};\n\n/**\n * Initiates a Paypal button on express checkout page (Cart, mini-cart, pdp)\n * Is used with adjacent instances (cart, pdp, pvp)\n */\nPayPalExpressModel.prototype.initPayPalBtn = function() {\n    this.loader.show();\n\n    const btnInitResult = window.paypal.Buttons(this.createBtnGeneralOption());\n\n    if (btnInitResult.isEligible()) {\n        btnInitResult.render(this.payPalBtnSelector);\n\n        this.loader.hide();\n    }\n};\n\nmodule.exports = PayPalExpressModel;\n","'use strict';\n\nconst PayPalExpressModel = require('./payPalExpress');\nconst helper = require('../../helper');\n\n/**\n * Initiates a PayPalButtonProduct model\n * @param {string} payPalBtnSelector A container class where PayPal button will be initiated\n */\nfunction PayPalProductModel(payPalBtnSelector) {\n    PayPalExpressModel.call(this, payPalBtnSelector);\n}\n\nPayPalProductModel.prototype = Object.create(PayPalExpressModel.prototype);\n\n/**\n * Adds a product to the basket\n * Inherits functionality from base model\n *\n * @param {string} selector PayPal button container selector\n * @returns {Object} With purchase units, payer and application context\n */\nPayPalProductModel.prototype.createOrder = function(selector) {\n    helper.addProductToCart(selector);\n\n    return PayPalExpressModel.prototype.createOrder.call();\n};\n\n/**\n * Removes a product from the basket and relocates to the Cart page\n * Inherits functionality from base model\n */\nPayPalProductModel.prototype.onError = function() {\n    helper.removeAllProductsFromCart();\n\n    window.location.href = window.paypalUrls.cartPage;\n\n    PayPalExpressModel.prototype.onError.call(this);\n};\n\n/**\n * Removes a product from the basket and relocates to the Cart page\n * Inherits functionality from base model\n */\nPayPalProductModel.prototype.onCancel = function() {\n    helper.removeAllProductsFromCart();\n\n    PayPalExpressModel.prototype.onCancel.call();\n};\n\nmodule.exports = PayPalProductModel;\n","'use strict';\n\n/**\n * Constructor of SessionStorageModel\n */\nfunction SessionStorageModel() {\n    this.sessionStorage = window.sessionStorage;\n}\n\n/**\n * Returns a current session storage\n * @returns {Storage} An object of type storage\n */\nSessionStorageModel.prototype.get = function() {\n    return this.sessionStorage;\n};\n\n/**\n * Set a new item to the session storage\n * @param {string} name A name of the item to set\n * @param {stinrg} value A value of the item to set\n */\nSessionStorageModel.prototype.setItem = function(name, value) {\n    this.sessionStorage.setItem(name, value);\n};\n\n/**\n * Returns a value of session storage item\n * @param {string} name A name of the item to get\n * @returns {string} A value of session storage item\n */\nSessionStorageModel.prototype.getItem = function(name) {\n    return this.sessionStorage.getItem(name);\n};\n\n/**\n * Removes an item from the session storage\n * @param {string} name A name of item to remove\n */\nSessionStorageModel.prototype.removeItem = function(name) {\n    this.sessionStorage.removeItem(name);\n};\n\n/**\n * Completely clears a session storage\n */\nSessionStorageModel.prototype.clear = function() {\n    this.sessionStorage.clear();\n};\n\n/**\n * Sets an active payment method tab name to the session storage\n * @param {string} value A name of the tab\n */\nSessionStorageModel.prototype.setActiveBillingPmTab = function(value) {\n    this.setItem(window.paypalConstants.ACTIVE_TAB, value);\n};\n\n/**\n * Returns a name of active payment method tab\n * @returns {string} A name of the payment tab\n */\nSessionStorageModel.prototype.getActiveBillingPmTab = function() {\n    return this.getItem(window.paypalConstants.ACTIVE_TAB);\n};\n\nmodule.exports = SessionStorageModel;\n","const api = require('../../api');\nconst helper = require('../../helper');\nconst loaderInstance = require('../../loader');\nconst $loaderContainer = document.querySelector('.paypalLoader');\nconst loader = loaderInstance($loaderContainer);\n\nconst AlertHandlerModel = require('../../models/alertHandler');\nconst alertHandler = new AlertHandlerModel();\n\nlet paypalInstance;\n\n/**\n * Creates Billing Agreement\n *\n * @param {string} selector PayPal button container selector\n * @returns {string} returns JSON response that includes a data token\n */\nfunction createBillingAgreement(selector) {\n    helper.addProductToCart(selector);\n\n    const isCartFlow = true;\n\n    loader.show();\n\n    return api.getBillingAgreementToken(isCartFlow)\n        .then((data) => data.token)\n        .fail(err => {\n            paypalInstance.close();\n            loader.hide();\n\n            alertHandler.showError(err.responseText);\n        });\n}\n\n/**\n * Makes post call to create a BA and calls thereturnFromCart endpoint, triggers checkout (stage = place order)\n * @returns {Object} JSON response that includes the billing agreement ID and information about the payer\n */\nfunction onApprove() {\n    return api.createBillingAgreementCall()\n        .then(({ id, payer }) => {\n            const cartBillingFormData = api.createCartBillingFormData({\n                billingAgreementID: id,\n                billingAgreementPayerEmail: payer.payer_info.email\n            }, document.querySelector('.js-paypal-button-on-product-page'));\n\n            return $.ajax({\n                type: 'POST',\n                url: window.paypalUrls.returnFromCart,\n                data: cartBillingFormData,\n                contentType: false,\n                processData: false,\n                dataType: 'json'\n            });\n        })\n        .then(() => {\n            loader.hide();\n            window.location.href = window.paypalUrls.placeOrderStage;\n        })\n        .fail((error) => {\n            loader.hide();\n            const errorResponse = error.responseJSON;\n\n            if (helper.handleValidationAddressResult(error) || errorResponse.errorName === 'shipping.address.invalid') {\n                helper.removeAllProductsFromCart();\n                paypalInstance.close();\n\n                if (errorResponse.message) {\n                    alertHandler.showError(errorResponse.message);\n                }\n            } else {\n                window.location.href = window.paypalUrls.cartPage;\n            }\n        });\n}\n\n/**\n * Hides loader on paypal widget closing without errors\n * If PDP flow, removes product from basket on cancel\n */\nfunction onCancel() {\n    $.ajax({\n        url: helper.getUrlWithCsrfToken(window.paypalUrls.removeAllProductsFromCart),\n        type: 'get',\n        dataType: 'json',\n        success: function() {\n            $.spinner().stop();\n        },\n        error: function() {\n            $.spinner().stop();\n        }\n    });\n    loader.hide();\n}\n\n/**\n * Shows errors if paypal widget was closed with errors\n * If PDP flow, removes product from basket on error\n */\nfunction onError() {\n    $.ajax({\n        url: helper.getUrlWithCsrfToken(window.paypalUrls.removeAllProductsFromCart),\n        type: 'get',\n        dataType: 'json',\n        success: function() {\n            $.spinner().stop();\n        },\n        error: function() {\n            $.spinner().stop();\n        }\n    });\n\n    loader.hide();\n    window.location.href = window.paypalUrls.cartPage;\n}\n\n/**\n * Inits paypal Billing Agreement button on billing checkout page\n * @param {string} selector PayPal button container selector\n */\nfunction initPaypalBAButton(selector = '.paypal-pdp-button') {\n    loader.show();\n    const createBillingAgreementCallback = createBillingAgreement.bind(this, selector);\n\n    paypalInstance = window.paypal.Buttons({\n        createBillingAgreement: createBillingAgreementCallback,\n        onApprove,\n        onCancel,\n        onError,\n        onClose: () => initPaypalBAButton(selector),\n        style: helper.getPaypalButtonStyle(document.querySelector('.js-paypal-button-on-product-page'))\n    });\n\n    paypalInstance.render(selector)\n        .then(() => {\n            loader.hide();\n        });\n}\n\nexport { initPaypalBAButton };\n","/**\n * Applies PayPal button behavior\n */\nfunction applyPaypalButtonBehavior() {\n    const { initPaypalButtonBehaviorOnPvp, initPayPalBtnBehaviorOnSet } = require('../helper');\n\n    const paypalButton = document.querySelector('.paypal-pvp-button-global');\n    const isProductSet = Boolean(document.querySelector('.set-items'));\n\n    if (isProductSet) {\n        initPayPalBtnBehaviorOnSet();\n    } else if (paypalButton) {\n        initPaypalButtonBehaviorOnPvp(paypalButton);\n    }\n}\n\n/**\n * Inits PayPal static image functionality on PVP\n */\nfunction initStaticImageFunctionality() {\n    const { addProductToCart } = require('../helper');\n    const { returnFromCart, validateStaticImageAddress } = require('../api');\n    const loaderInstance = require('../loader');\n\n    const paypalStaticImageContainers = document.querySelectorAll('.paypal-static-image-container');\n\n    let isAddressNeedChange;\n\n    validateStaticImageAddress().then(isNeed => {\n        isAddressNeedChange = isNeed;\n    });\n\n    paypalStaticImageContainers && paypalStaticImageContainers.forEach((container, index) => {\n        const staticImage = container.querySelector('#paypal-static-image');\n        const selector = `${container.className}${index}`;\n\n        staticImage.classList.add(selector);\n\n        staticImage.addEventListener('click', function() {\n            const loaderContainer = this.closest('.pdp-paypal-button-container').querySelector('.paypalLoader');\n            const loader = loaderInstance(loaderContainer);\n\n            loader.show();\n\n            const result = addProductToCart(`.${this.className}`);\n\n            if (result.cart) {\n                returnFromCart(isAddressNeedChange);\n            } else {\n                loader.hide();\n\n                throw new Error(result.message || 'Error occurs while trying to add product to the cart');\n            }\n        });\n    });\n\n    applyPaypalButtonBehavior();\n}\n\n/**\n * Inits PayPal functionality on PVP\n */\nfunction initPaypalFunctionality() {\n    const { initPaypalBAButton } = require('../pdp/registered/initPaypalBAButton');\n\n    const PP_BTN_SELECTOR = '.js-paypal-button-on-product-page';\n    const isBAEnabled = window.paypalPreferences.billingAgreementEnabled;\n\n    const PayPalProductModel = require('../models/buttons/payPalProduct');\n\n    const paypalButtonContainers = document.querySelectorAll('.paypal-pvp-button, .paypal-pvp-button-global');\n\n    paypalButtonContainers && paypalButtonContainers.forEach((container, index) => {\n        const ppButton = container.querySelector(PP_BTN_SELECTOR);\n\n        if (ppButton) {\n            ppButton.classList.add(`${ppButton.classList[1]}-${index}-pvp`);\n\n            const selector = `.${Array.from(ppButton.classList).join('.')}`;\n            const payPalProductInstance = new PayPalProductModel(selector);\n\n            isBAEnabled ? initPaypalBAButton(selector) : payPalProductInstance.initPayPalBtn();\n        }\n    });\n\n    applyPaypalButtonBehavior();\n}\n\n/**\n * When the page loads, inject the PayPal SDK into the page and then call the initPaypalFunctionality\n * function.\n */\nfunction injectPaypalSDK() {\n    const head = document.getElementsByTagName('head').item(0);\n    const script = document.createElement('script');\n\n    script.type = 'text/javascript';\n    script.src = window.paypalSDK.cartSdkUrl;\n    script.onload = initPaypalFunctionality;\n    script.setAttribute('data-partner-attribution-id', window.paypalPreferences.partnerAttributionId);\n    head.appendChild(script);\n}\n\n$('body').on('quickview:ready', () => {\n    const isPaypalStaticImage = Boolean(document.getElementById('paypal-static-image'));\n\n    if (isPaypalStaticImage) {\n        initStaticImageFunctionality();\n    } else if (window.paypal) {\n        initPaypalFunctionality();\n    } else {\n        injectPaypalSDK();\n    }\n});\n"],"sourceRoot":""}