{"version":3,"sources":["cart.js"],"names":["Cart","$","currentXhr","updateTimerId","api","init","$body","touchedTriggered","updateTableVisibility","on","e","STATE","hasItem","showCart","swal","wwdh","t","hideCart","code","keyCode","which","elem","target","parents","length","hasClass","event","object","productId","data","undefined","parent","params","buildProductParamsByEventTarget","updateQuantityFields","quantity","updateCart","IS_WHOLESALE","handleAdd","onCheckout","handleAddOnCheckout","handleRemove","handleAddCoupon","handleClearCoupon","handleQuantityChange","handleAddQuantityChange","handleMinusEvent","handlePlusEvent","handleMinusAddEvent","handlePlusAddEvent","isModifiedSince","date","lastmod","Date","parseInt","window","localStorage","getItem","STORAGE_LASTMOD","isNaN","getTime","MIN_QUANTITY","MAX_QUANTITY","CHANGE_THROTTLE","removeClass","setTimeout","find","css","overflow","animated","addClass","location","this","val","show","$target","$removableRows","$parentRow","prevAll","each","i","row","add","fadeOut","remove","removeProductRow","parseQuantity","preventDefault","updateQuantity","updateQuantityAdd","offset","$quantityFields","clearTimeout","buildProductParams","updateQuantityFieldsAdd","quantityField","subProductIds","map","value","get","tagName","toLowerCase","join","cartProductId","action","parameters","callback","readyState","abort","setItem","ajax","url","cartParameters","extend","method","beforeSend","html","success","response","elements","k","v","setPrevQuantities","errorMessages","displayMessages","languageItems","error","buttonText","redirectUrl","warningMessages","warning","warning_button_text","successMessages","cart_updated","htmlElements","id","$updatedElement","RegExp","test","replaceWith","isWholesale","products","product","property","updateProducts","discountAlert","trigger","isGuest","isGuestUser","document","width","hide","refreshHeader","statusText","title","text","type","confirmButtonText","reload","messages","console","log","href","jQuery"],"mappings":"AAoBA,IAAAA,KAAA,SAAAC,GACA,aAEA,IAwBAC,EACAC,EAzBAC,EAAA,CACAC,KAAA,WAgCA,IACAC,EACAC,EAjCAC,IAmGAP,EAAA,QAAAQ,GAAA,QAAA,QAAA,SAAAC,GACA,WAAAC,EACAC,IACAC,GAAA,GAEAC,KAAAC,KAAAC,EAAA,kBAAA,KAAA,QAGAC,MAGAhB,EAAA,QAAAQ,GAAA,QAAA,SAAAC,GACA,IAAAQ,EAAAR,EAAAS,SAAAT,EAAAU,MACA,KAAAF,GAAA,WAAAP,GACAM,MAGAhB,EAAA,QAAAQ,GAAA,QAAA,gBAAA,SAAAC,GACA,IAAAW,EAAApB,EAAAS,EAAAY,SACA,IAAAD,EAAAE,QAAA,cAAAC,QAAAH,EAAAE,QAAA,cAAAC,OAAA,GAAAH,EAAAI,SAAA,eACAR,MAvFAX,EAAAL,EAAA,QACAM,GAAA,EASAD,EAAAG,GAAA,QAAA,eAAA,SAAAiB,GACAnB,EAGAA,GAAA,EAmFA,SAAAmB,GAEA,IAAAC,EAAA1B,EAAAyB,EAAAJ,QACAM,EAAAD,EAAAE,KAAA,wBAEAC,IAAAF,IACAD,EAAA1B,EAAAyB,EAAAJ,QAAAS,SACAH,EAAAD,EAAAE,KAAA,oBAGA,IAAAG,EAAAC,EAAAN,GAEAO,EAAAN,EAAAI,EAAAG,UACAC,EAAA,MAAAJ,EAAA,WACAK,GACAxB,GAAA,KApGAyB,CAAAZ,KAMApB,EAAAG,GAAA,QAAA,2BAAA,SAAAiB,GACAnB,EAGAA,GAAA,EA+FA,SAAAmB,GACA,IAAAC,EAAA1B,EAAAyB,EAAAJ,QACAM,EAAAD,EAAAE,KAAA,wBAEAC,IAAAF,IACAD,EAAA1B,EAAAyB,EAAAJ,QAAAS,SACAH,EAAAD,EAAAE,KAAA,oBAGA,IAAAG,EAAAC,EAAAN,GAEAO,EAAAN,EAAAI,EAAAG,UACAH,EAAAO,WAAA,EACAH,EAAA,MAAAJ,EAAA,cA9GAQ,CAAAd,KAOApB,EAAAG,GAAA,QAAA,kBAAAgC,GACAnC,EAAAG,GAAA,QAAA,sBAAAiC,GACApC,EAAAG,GAAA,QAAA,wBAAAkC,GAEArC,EAAAG,GAAA,SAAA,kBAAAmC,GACAtC,EAAAG,GAAA,SAAA,qBAAAoC,GAEAvC,EAAAG,GAAA,QAAA,iBAAAqC,GACAxC,EAAAG,GAAA,QAAA,gBAAAsC,GAEAzC,EAAAG,GAAA,QAAA,qBAAAuC,GACA1C,EAAAG,GAAA,QAAA,oBAAAwC,IA7DAC,gBAAA,SAAAC,GACA,IAAAC,EAAA,IAAAC,KAAAC,SAAAC,OAAAC,aAAAC,QAAAC,GAAA,KAEA,SAAAN,GAAAO,MAAAP,EAAAQ,aAIAR,EAAAQ,UAAAT,EAAAS,YAQAC,EAAA,EACAC,EAAA,IACAC,EAAA,IACAL,EAAA,eACArB,GAAA,EACA1B,EAAA,SA8CA,SAAAM,IACAhB,EAAA,4BAAA+D,YAAA,UACAC,WAAA,WACAhE,EAAA,iBAAA+D,YAAA,UACA/D,EAAA,iBAAAiE,KAAA,sBAAAF,YAAA,WACA/D,EAAA,QAAAkE,IAAA,CAAAC,SAAA,aACA,KACAzD,EAAA,SAEA,SAAAE,EAAAwD,GACAA,EAAAA,IAAA,EACApE,EAAA,QAAAkE,IAAA,CAAAC,SAAA,WACAnE,EAAA,iBAAAqE,SAAA,UACAD,EACApE,EAAA,4BAAAqE,SAAA,YAEArE,EAAA,4BAAA+D,YAAA,YAEA/D,EAAA,4BAAAqE,SAAA,UACArE,EAAA,iBAAAiE,KAAA,sBAAAI,SAAA,WACA3D,EAAA,SA6BA,SAAAC,IAEA,OAAAX,EAAA,oCAAAuB,OAAA,EA0CA,SAAAkB,IAEAa,OAAAgB,SAAA,qCAAAtE,EAAAA,EAAAuE,MAAA3C,KAAA,+BAAA4C,MAQA,SAAA9B,IACAP,EAAA,cAAA,GAAA,WACAnC,EAAA,qBAAAyE,SAIA,SAAAjC,IACA,IAAAkC,EAAA1E,EAAAuE,MAEApC,EAAA,SAAAH,EAAA0C,GAAA,YAKA,SAAAA,GACA,IAAAC,EACAC,EAEAF,EAAApD,QAAA,eAAAC,SAAAmD,EAAApD,QAAA,gBAAAC,QACAqD,EAAAF,EAAApD,QAAA,YACAqD,EAAAC,EAEAA,EAAAC,UAAAC,KAAA,SAAAC,EAAAC,GAIA,GAHAL,EAAAA,EAAAM,IAAAD,GAGAhF,EAAAgF,GAAAxD,SAAA,YACA,OAAA,KAIAmD,EAAA3E,EAAA,gBAAA0E,EAAA9C,KAAA,oBAGA+C,EAAAO,QAAA,WACAlF,EAAAuE,MAAAY,SAEA5E,MA3BA6E,CAAAV,KA+BA,SAAA/B,IAEAV,EADAjC,EAAAuE,MAAA3C,KAAA,mBACA5B,EAAAuE,MAAAC,OACArC,EAAA,SAAAH,EAAAhC,EAAAuE,QAGA,SAAA3B,IACA5C,EAAAuE,MAAAC,IAAAa,EAAArF,EAAAuE,MAAAC,QAGA,SAAA1B,EAAArC,GACAA,EAAA6E,iBACAC,EAAAvF,EAAAuE,MAAA3C,KAAA,mBAAA,GAGA,SAAAiB,EAAApC,GACAA,EAAA6E,iBACAC,EAAAvF,EAAAuE,MAAA3C,KAAA,oBAAA,GAGA,SAAAoB,EAAAvC,GACAA,EAAA6E,iBACAE,EAAAxF,EAAAuE,MAAA3C,KAAA,mBAAA,GAGA,SAAAmB,EAAAtC,GACAA,EAAA6E,iBACAE,EAAAxF,EAAAuE,MAAA3C,KAAA,oBAAA,GAGA,SAAA2D,EAAA5D,EAAA8D,GACA,IAAAC,EAAA1F,EAAA,6BAAA2B,GACAO,EAAAmD,EAAAhC,SAAAqC,EAAAlB,MAAA,IAAAiB,GAEAxD,EAAAN,EAAAO,GAEAwD,EAAAlE,SAAA,oBACAmE,aAAAzF,GAEAA,EAAA8D,WAAA,WACA7B,EAAA,SAAAyD,EAAAjE,EAAAO,KACA4B,IAIA,SAAA0B,EAAA7D,EAAA8D,GACA,IAAAC,EAAA1F,EAAA,iCAAA2B,IAqBA,SAAAA,EAAAO,GACAlC,EAAA,iCAAA2B,GAAA6C,IAAAa,EAAAnD,IApBA2D,CAAAlE,EADA0D,EAAAhC,SAAAqC,EAAAlB,MAAA,IAAAiB,IAUA,SAAAxD,EAAAN,EAAAO,GACAlC,EAAA,6BAAA2B,GAAA6C,IAAAa,EAAAnD,IAkBA,SAAAmD,EAAAnD,GAGA,OAFAA,EAAAmB,SAAAnB,EAAA,IAEAwB,MAAAxB,GACA,EAGAA,EAAA0B,EACAA,EACA1B,EAAA2B,EACAA,EAGA3B,EAGA,SAAAF,EAAA0C,GACA,IAIAxC,EAJA4D,EAAApB,EAAA9C,KAAA,gCACAmE,EAAA/F,EAAA0E,EAAA9C,KAAA,gCAAAoE,IAAA,WACA,OAAAzB,KAAA0B,QACAC,MAWA,OAPAhE,EADA4D,EACA9F,EAAA8F,GAAAtB,MACA,UAAAE,EAAA,GAAAyB,QAAAC,cACA1B,EAAAF,MAEAE,EAAA9C,KAAA,iBAGAgE,EAAAlB,EAAA9C,KAAA,mBAAAM,EAAA6D,GASA,SAAAH,EAAAjE,EAAAO,EAAA6D,GAKA,OAJAA,GAAAA,EAAAxE,SACAI,GAAA,IAAAoE,EAAAM,KAAA,MAGA,CACAC,cAAA3E,EACAO,SAAAmD,EAAAnD,IASA,SAAAC,EAAAoE,EAAAC,EAAAC,GAEAxG,GAAA,IAAAA,EAAAyG,YACAzG,EAAA0G,QAGArD,OAAAC,aAAAqD,QAAAnD,EAAA,IAAA,IAAAL,MAAAO,WAEA1D,EAAAD,EAAA6G,KAAA,CACAC,IAAA,uBACAlF,KAAA,CACAmF,eAAA/G,EAAAgH,OAAAR,EAAA,CACAD,OAAAA,KAGAU,OAAA,OACAC,WAAA,WACAlH,EAAA,SAAAqE,SAAA,YACArE,EAAA,oBAAAmH,KAAA,KAEAC,QAAA,SAAAC,GAqFA,IAAAf,EAkBAgB,EArGAD,EAAAD,QA4FA,SAAAd,GACAtG,EAAA,0BAAAsG,EAAA,0BAAAxB,KAAA,SAAAyC,EAAAC,GACAxH,EAAAwH,GAAA5F,KAAA,gBAAA5B,EAAAwH,GAAAhD,SArFAiD,CAAAjB,EAAAF,gBARAe,EAAAK,cAAAnG,OACAoG,EAAA,QAAAN,EAAAK,cAAAL,EAAAO,cAAAC,MAAAR,EAAAS,WAAAT,EAAAU,aACAV,EAAAW,gBAAAzG,QACAoG,EAAA,UAAAN,EAAAW,gBAAAX,EAAAO,cAAAK,QAAAZ,EAAAO,cAAAM,oBAAA,IA+EA5B,EA7EAE,EAAAF,cA8EAtG,EAAA,0BAAAsG,EAAA,0BAAAxB,KAAA,SAAAyC,EAAAC,GACAxH,EAAAwH,GAAAhD,IAAAxE,EAAAwH,GAAA5F,KAAA,qBAzEA+F,EAAA,UAAAN,EAAAc,gBAAAd,EAAAO,cAAAQ,aAAA,GAAA,IAyFAd,EAxFAD,EAAAgB,aAyFArI,EAAA8E,KAAAwC,EAAA,SAAAgB,EAAArC,GACA,IAAAsC,EAAAvI,EAAA,IAAAsI,GAEA,IAAAE,OAAA,eAAAF,EAAA,QAAA,KAAAG,KAAAxC,IACAsC,EAAAG,YAAAzC,GACA,iBAAAqC,GAAA,WAAA5H,IACAC,IACAC,GAAA,GAEAI,MAGAuH,EAAAhH,QAAA,UAAAgH,EAAA,GAAApC,QAAAC,eAEAmC,EAAApB,KAAAlB,KAtGA7D,EAAAiF,EAAAsB,YA+GA,SAAAC,GACA,IAAA7D,EACA8D,EAEA,IAAA9D,EAAA,EAAAA,EAAA6D,EAAArH,SAAAwD,EACA8D,EAAAD,EAAA7D,GAEA/E,EAAA8E,KAAA+D,EAAA,SAAAC,EAAA7C,GACA,IAAAsC,EAAAvI,EAAA,oBAAA8I,EAAA,IAAAD,EAAAP,IAEAC,EAAAhH,QAAA,UAAAgH,EAAA,GAAApC,QAAAC,eAEAmC,EAAApB,KAAAlB,KA1HA8C,CAAA1B,EAAAuB,UACArI,IACA8G,EAAA2B,eACAhJ,EAAA,QAAAiJ,QAAA,wBAwBA,WAEA,IAAAC,EAAAC,cAAA,EACAxI,KACAX,EAAA,yBAAA+D,YAAA,WAAAM,SAAA,UACArE,EAAA,6BAAA+D,YAAA,UAAAM,SAAA,WACA6E,GACAlJ,EAAA,qBAAA+D,YAAA,UAAAM,SAAA,aAEA1D,KAAAuI,IACAlJ,EAAA,6BAAA+D,YAAA,WAAAM,SAAA,UACArE,EAAA,yBAAA+D,YAAA,UAAAM,SAAA,WACArE,EAAA,qBAAA+D,YAAA,WAAAM,SAAA,WAGArE,EAAAoJ,UAAAC,QAAA,KACArJ,EAAA,QAAAiE,KAAA,2BAAAiF,EACAlJ,EAAA,QAAAiE,KAAA,yBAAAQ,OACAzE,EAAA,QAAAiE,KAAA,2BAAAiF,GACAlJ,EAAA,QAAAiE,KAAA,0BAAAqF,OAGAtJ,EAAA,QAAAiE,KAAA,gCAAAiF,EACAlJ,EAAA,QAAAiE,KAAA,+BAAAQ,OACAzE,EAAA,QAAAiE,KAAA,kCAAAiF,GACAlJ,EAAA,QAAAiE,KAAA,gCAAAqF,QAEAtJ,EAAAoJ,UAAAC,SAAA,MACArJ,EAAA,QAAAiE,KAAA,2BAAAiF,EACAlJ,EAAA,QAAAiE,KAAA,0BAAAqF,OACAtJ,EAAA,QAAAiE,KAAA,2BAAAiF,GACAlJ,EAAA,QAAAiE,KAAA,yBAAAQ,OAEAzE,EAAA,QAAAiE,KAAA,kCAAAiF,EACAlJ,EAAA,QAAAiE,KAAA,gCAAAqF,OACAtJ,EAAA,QAAAiE,KAAA,gCAAAiF,GACAlJ,EAAA,QAAAiE,KAAA,+BAAAQ,QAzDA8E,GAEA9C,GACAA,KAGAoB,MAAA,SAAAR,GACA,UAAAA,EAAAmC,YACA3I,KAAA,CACA4I,MAAA3I,KAAAC,EAAA,mCACA2I,KAAA5I,KAAAC,EAAA,iDACA4I,KAAA,QACAC,kBAAA9I,KAAAC,EAAA,cACA,WACAuD,SAAAuF,cA4GA,SAAAtJ,IACAP,EAAA,SAAA4B,KAAA,eACA5B,EAAA,qBAAAyE,OACAzE,EAAA,kBAAAsJ,SAEAtJ,EAAA,qBAAAsJ,OACAtJ,EAAA,kBAAAyE,QAWA,SAAAkD,EAAAgC,EAAAG,EAAAL,EAAAG,EAAA7B,GACA+B,EAAAvI,SAGAqI,IACAA,EAAA,MAGA/I,KAAA,CACAsG,MAAA,EACAsC,MAAAA,EACAC,KAAAI,EAAAzD,KAAA,QACAsD,KAAAA,EACAC,kBAAAA,GACA,WACA,IAAA7B,IACAgC,QAAAC,IAAAjC,GACAzD,SAAA2F,KAAAlC,MAyBA,OAAA5H,EApkBA,CAqkBA+J,QAEAA,OAAA,WACAnK,KAAAK","file":"cart.min.js","sourcesContent":["/**\n * Cart műveletekhez a következő selectorok használhatók:\n *\n * - .js-cart-add: click-re hozzáadja a terméket a kosárhoz. További opciók:\n * - data-cart-subproduct-id-selector: Ha csomagot adunk a kosárhoz, akkor a hozzátartozó productId-ket tároló\n * inputmezők selectorja. Ez alapján lesz elküldve, hogy az adott csomaghoz, milyen termékeket választott be.\n * - .js-cart-change: quantity input-ra helyezhető, change eventre módosítja a kosárban levő termék mennyiségét.\n * - .js-cart-minus / .js-cart-plus: click-re növeli a kapcsolódó quantity mező értékét\n * (Ennek class-a: js-cart-product-quantity-{productId}). Ha a quantity input rendelkezik a js-cart-change classzal, akkor\n * módosítja a kosárban levő termék mennyiséget is.\n * - .js-cart-remove: törli a terméket, és az elem parentjét (.js-cart-row-{productId}), ami tartalmazza a terméket.\n * - .js-cart-add-coupon: click-re hozzáadja a data-cart-coupon-field-selector attribútumban definiált inputban\n * levő kupont a cart-hoz.\n *\n *\n * A fenti selectorokat tartalmazó elemek data attribútumai:\n * - data-cart-product-id: A kapcsolódó product ID. Kötelező megadni!\n * - data-cart-quantity-field-selector: opcionális, a mennyiséget tartalmazó input mező selectorja.\n * - data-cart-quantity: opcionális, a termék mennyisége (nincs figyelembe véve, ha van selector megadva).\n */\n;var Cart = (function ($) {\n 'use strict';\n\n var api = {\n init: function () {\n updateTableVisibility();\n initCartToggle();\n bindEvenHandlers();\n },\n /**\n * @param {Date} date\n *\n * @returns {Boolean}\n */\n isModifiedSince: function (date) {\n var lastmod = new Date(parseInt(window.localStorage.getItem(STORAGE_LASTMOD), 10));\n\n if (!lastmod || isNaN(lastmod.getTime())) {\n return false;\n }\n\n return lastmod.getTime() > date.getTime();\n }\n },\n /**\n * @var {XMLHttpRequest}\n */\n currentXhr,\n updateTimerId,\n MIN_QUANTITY = 1,\n MAX_QUANTITY = 100000,\n CHANGE_THROTTLE = 200,\n STORAGE_LASTMOD = 'cart_lastmod',\n IS_WHOLESALE = false,\n STATE = 'closed';\n\n function bindEvenHandlers() {\n var $body = $('body');\n var touchedTriggered = false;\n // $body.on('touchstart', '.js-cart-add', function (event) {\n // touchedTriggered = true;\n // handleAdd(event);\n // });\n // $body.on('touchstart', '.js-cart-add-on-checkout', function (event) {\n // touchedTriggered = true;\n // handleAddOnCheckout(event);\n // });\n $body.on('click', '.js-cart-add', function (event) {\n if (!touchedTriggered) {\n handleAdd(event);\n } else {\n touchedTriggered = false;\n }\n });\n\n $body.on('click', '.js-cart-add-on-checkout', function (event) {\n if (!touchedTriggered) {\n handleAddOnCheckout(event);\n } else {\n touchedTriggered = false;\n }\n });\n\n\n $body.on('click', '.js-cart-remove', handleRemove);\n $body.on('click', '.js-cart-add-coupon', handleAddCoupon);\n $body.on('click', '.js-cart-clear-coupon', handleClearCoupon);\n\n $body.on('change', '.js-cart-change', handleQuantityChange);\n $body.on('change', '.js-cart-add-input', handleAddQuantityChange);\n\n $body.on('click', '.js-cart-minus', handleMinusEvent);\n $body.on('click', '.js-cart-plus', handlePlusEvent);\n\n $body.on('click', '.js-cart-minus-add', handleMinusAddEvent);\n $body.on('click', '.js-cart-plus-add', handlePlusAddEvent);\n\n\n }\n\n function hideCart() {\n $('#cart-sidebar .cart-list').removeClass('active');\n setTimeout(function () {\n $('#cart-sidebar').removeClass('active');\n $('#cart-sidebar').find('.cart-btn a.button').removeClass('hovered');\n $('body').css({'overflow': 'initial'});\n }, 300);\n STATE = 'closed';\n }\n function showCart(animated) {\n animated = animated || false;\n $('body').css({'overflow': 'hidden'});\n $('#cart-sidebar').addClass('active');\n if (animated) {\n $('#cart-sidebar .cart-list').addClass('animated');\n } else {\n $('#cart-sidebar .cart-list').removeClass('animated');\n }\n $('#cart-sidebar .cart-list').addClass('active');\n $('#cart-sidebar').find('.cart-btn a.button').addClass('hovered');\n STATE = 'opened';\n }\n\n function initCartToggle() {\n $(\"body\").on('click', '#cart', function (e) {\n if (STATE === 'closed') {\n if (hasItem()){\n showCart(true);\n } else {\n swal(wwdh.t('A kosara üres!'), null, 'info');\n }\n } else {\n hideCart();\n }\n });\n $(\"body\").on('keyup', function(e){\n var code = e.keyCode || e.which;\n if (code === 27 && STATE === 'opened'){\n hideCart();\n }\n });\n $(\"body\").on('click', '#cart-sidebar', function(e) {\n var elem = $(e.target);\n if (elem.parents('.cart-list').length === 0 || elem.parents('.cart-hide').length > 0 || elem.hasClass('cart-hide')){\n hideCart();\n }\n });\n }\n\n function hasItem()\n {\n return $('#cart-sidebar .cart-item-product').length > 0;\n }\n\n function handleAdd(event) {\n\n var object = $(event.target);\n var productId = object.data('cart-product-id');\n\n if (productId === undefined) {\n object = $(event.target).parent();\n productId = object.data('cart-product-id');\n }\n\n var params = buildProductParamsByEventTarget(object);\n\n updateQuantityFields(productId, params.quantity);\n updateCart('add', params, function () {\n if (!IS_WHOLESALE) {\n showCart(true);\n }\n });\n }\n\n function handleAddOnCheckout(event) {\n var object = $(event.target);\n var productId = object.data('cart-product-id');\n\n if (productId === undefined) {\n object = $(event.target).parent();\n productId = object.data('cart-product-id');\n }\n\n var params = buildProductParamsByEventTarget(object);\n\n updateQuantityFields(productId, params.quantity);\n params.onCheckout = 1;\n updateCart('add', params, function () {\n //displayMessages('success', [wwdh.t('A termék sikeresen hozzáadva a kosárhoz!')],[wwdh.t('Extra kedvezmény')]);\n });\n }\n\n\n function handleAddCoupon() {\n\n window.location = '/cart/default/index?coupon-redeem=' + $($(this).data('cart-coupon-field-selector')).val();\n // updateCart('addCoupon', {\n // couponCode: $($(this).data('cart-coupon-field-selector')).val()\n // }, function (result) {\n // window.location.reload();\n // });\n }\n\n function handleClearCoupon() {\n updateCart('clearCoupon', {}, function () {\n $('#coupon-code-form').show();\n });\n }\n\n function handleRemove() {\n var $target = $(this);\n\n updateCart('remove', buildProductParamsByEventTarget($target), function () {\n removeProductRow($target);\n });\n }\n\n function removeProductRow($target) {\n var $removableRows,\n $parentRow;\n\n if ($target.parents('.stacktable').length && !$target.parents('.js-cart-row').length) {\n $parentRow = $target.parents('tr:eq(0)');\n $removableRows = $parentRow;\n\n $parentRow.prevAll().each(function (i, row) {\n $removableRows = $removableRows.add(row);\n\n // Az első spacer után megállunk, megvan minden sor az adott termékhez.\n if ($(row).hasClass('st-space')) {\n return false;\n }\n });\n } else {\n $removableRows = $('.js-cart-row-' + $target.data('cart-product-id'));\n }\n\n $removableRows.fadeOut(function () {\n $(this).remove();\n\n updateTableVisibility();\n });\n }\n\n function handleQuantityChange() {\n var productId = $(this).data('cart-product-id');\n updateQuantityFields(productId, $(this).val());\n updateCart('change', buildProductParamsByEventTarget($(this)));\n }\n\n function handleAddQuantityChange() {\n $(this).val(parseQuantity($(this).val()));\n }\n\n function handlePlusEvent(e) {\n e.preventDefault();\n updateQuantity($(this).data('cart-product-id'), 1);\n }\n\n function handleMinusEvent(e) {\n e.preventDefault();\n updateQuantity($(this).data('cart-product-id'), -1);\n }\n\n function handlePlusAddEvent(e) {\n e.preventDefault();\n updateQuantityAdd($(this).data('cart-product-id'), 1);\n }\n\n function handleMinusAddEvent(e) {\n e.preventDefault();\n updateQuantityAdd($(this).data('cart-product-id'), -1);\n }\n\n function updateQuantity(productId, offset) {\n var $quantityFields = $('.js-cart-product-quantity-' + productId),\n quantity = parseQuantity(parseInt($quantityFields.val(), 10) + offset);\n\n updateQuantityFields(productId, quantity);\n\n if ($quantityFields.hasClass('js-cart-change')) {\n clearTimeout(updateTimerId);\n\n updateTimerId = setTimeout(function () {\n updateCart('change', buildProductParams(productId, quantity));\n }, CHANGE_THROTTLE);\n }\n }\n\n function updateQuantityAdd(productId, offset) {\n var $quantityFields = $('.js-cart-product-quantity-add-' + productId),\n quantity = parseQuantity(parseInt($quantityFields.val(), 10) + offset);\n updateQuantityFieldsAdd(productId, quantity);\n }\n\n /**\n * Frissíti a termékhez tartozó összes quantity mezőt (mivel a stackable() többet hoz létre).\n *\n * @param {Number} productId\n * @param {Number} quantity\n */\n function updateQuantityFields(productId, quantity) {\n $('.js-cart-product-quantity-' + productId).val(parseQuantity(quantity));\n }\n\n /**\n * Frissíti a termékhez tartozó összes quantity mezőt (mivel a stackable() többet hoz létre).\n *\n * @param {Number} productId\n * @param {Number} quantity\n */\n function updateQuantityFieldsAdd(productId, quantity) {\n $('.js-cart-product-quantity-add-' + productId).val(parseQuantity(quantity));\n }\n\n /**\n * @param {mixed} quantity\n *\n * @return {Number}\n */\n function parseQuantity(quantity) {\n quantity = parseInt(quantity, 10);\n\n if (isNaN(quantity)) {\n return 1;\n }\n\n if (quantity < MIN_QUANTITY) {\n return MIN_QUANTITY;\n } else if (quantity > MAX_QUANTITY) {\n return MAX_QUANTITY;\n }\n\n return quantity;\n }\n\n function buildProductParamsByEventTarget($target) {\n var quantityField = $target.data('cart-quantity-field-selector'),\n subProductIds = $($target.data('cart-subproduct-id-selector')).map(function () {\n return this.value;\n }).get(),\n quantity;\n\n if (quantityField) {\n quantity = $(quantityField).val();\n } else if ($target[0].tagName.toLowerCase() === 'input') {\n quantity = $target.val();\n } else {\n quantity = $target.data('cart-quantity');\n }\n\n return buildProductParams($target.data('cart-product-id'), quantity, subProductIds);\n }\n\n /**\n *\n * @param {String} productId\n * @param {Number} quantity\n * @param {Array} subProductIds [optional]\n */\n function buildProductParams(productId, quantity, subProductIds) {\n if (subProductIds && subProductIds.length) {\n productId += '-' + subProductIds.join('-');\n }\n\n return {\n cartProductId: productId,\n quantity: parseQuantity(quantity)\n };\n }\n\n /**\n * @param {String} action\n * @param {Object} parameters\n * @param {Function} callback [optional]\n */\n function updateCart(action, parameters, callback) {\n //alert('updateCart');\n if (currentXhr && currentXhr.readyState !== 4) {\n currentXhr.abort();\n }\n\n window.localStorage.setItem(STORAGE_LASTMOD, '' + new Date().getTime());\n //alert('setStorage');\n currentXhr = $.ajax({\n url: '/cart/default/update',\n data: {\n cartParameters: $.extend(parameters, {\n action: action\n })\n },\n method: 'POST',\n beforeSend: function () {\n $('#cart').addClass('updating');\n $('#cart-add-result').html('');\n },\n success: function (response) {\n //alert('ajaxSuccess');\n if (!response.success) {\n if (response.errorMessages.length) {\n displayMessages('error', response.errorMessages, response.languageItems.error,response.buttonText, response.redirectUrl);\n } else if (response.warningMessages.length) {\n displayMessages('warning', response.warningMessages, response.languageItems.warning, response.languageItems.warning_button_text, '');\n }\n resetQuantitiesToPrev(parameters.cartProductId);\n } else {\n //glamiTracking(parameters, response, action);\n setPrevQuantities(parameters.cartProductId);\n }\n\n displayMessages('success', response.successMessages, response.languageItems.cart_updated,'','');\n updateHtmlElements(response.htmlElements);\n IS_WHOLESALE = response.isWholesale;\n updateProducts(response.products);\n updateTableVisibility();\n if (response.discountAlert) {\n $('body').trigger('choose-discount-type');\n }\n\n refreshHeader();\n\n if (callback) {\n callback();\n }\n },\n error: function (response) {\n if (response.statusText !== 'abort') {\n swal({\n title: wwdh.t('Sajnáljuk, valami hiba történt!'),\n text: wwdh.t('Kérjük, frissítsd az oldalt, és próbáld újra!'),\n type: \"error\",\n confirmButtonText: wwdh.t('Frissítés')\n },function(){\n location.reload();\n });\n }\n }\n });\n }\n\n function refreshHeader()\n {\n var isGuest = isGuestUser || false;\n if (hasItem()) {\n $('.empty-cart-container').removeClass('visible').addClass('hidden');\n $('.not-empty-cart-container').removeClass('hidden').addClass('visible');\n if (isGuest) {\n $('.hax-login-button').removeClass('hidden').addClass('visible');\n }\n } else if(!hasItem() && isGuest) {\n $('.not-empty-cart-container').removeClass('visible').addClass('hidden');\n $('.empty-cart-container').removeClass('hidden').addClass('visible');\n $('.hax-login-button').removeClass('visible').addClass('hidden');\n }\n\n if ($(document).width() < 768) {\n if ($('body').find('.personal-menu:hidden') && !isGuest) {\n $('body').find('.personal-menu:hidden').show();\n }else if ($('body').find('.personal-menu:visible') && isGuest) {\n $('body').find('.personal-menu:visible').hide();\n }\n\n if ($('body').find('.personal-menu-guest:hidden') && isGuest) {\n $('body').find('.personal-menu-guest:hidden').show();\n } else if ($('body').find('.personal-menu-guest:visible') && !isGuest) {\n $('body').find('.personal-menu-guest:visible').hide();\n }\n } else if ($(document).width() >= 768) {\n if ($('body').find('.personal-menu:visible') && isGuest) {\n $('body').find('.personal-menu:visible').hide();\n }else if ($('body').find('.personal-menu:hidden') && !isGuest) {\n $('body').find('.personal-menu:hidden').show();\n }\n if ($('body').find('.personal-menu-guest:visible') && !isGuest) {\n $('body').find('.personal-menu-guest:visible').hide();\n } else if ($('body').find('.personal-menu-guest:hidden') && isGuest) {\n $('body').find('.personal-menu-guest:hidden').show();\n }\n }\n }\n\n function resetQuantitiesToPrev(cartProductId) {\n $('[data-cart-product-id=\"' + cartProductId + '\"][data-prev-quantity]').each(function (k, v) {\n $(v).val($(v).data('prev-quantity'));\n })\n }\n\n function getPrevQuantities(cartProductId) {\n return $('[data-cart-product-id=\"' + cartProductId + '\"][data-prev-quantity]').data('prev-quantity');\n }\n function setPrevQuantities(cartProductId) {\n $('[data-cart-product-id=\"' + cartProductId + '\"][data-prev-quantity]').each(function (k, v) {\n $(v).data('prev-quantity', $(v).val());\n })\n }\n\n /**\n * @param {Object} elements\n */\n function updateHtmlElements(elements) {\n $.each(elements, function (id, value) {\n var $updatedElement = $('#' + id);\n\n if (new RegExp('id\\s*=\\s*[\\'\"]' + id + '[\\'\"]', 'i').test(value)) {\n $updatedElement.replaceWith(value);\n if (id === 'cart-sidebar' && STATE === 'opened') {\n if (hasItem()){\n showCart(false);\n } else {\n hideCart();\n }\n }\n } else if ($updatedElement.length && $updatedElement[0].tagName.toLowerCase() === 'input') {\n } else {\n $updatedElement.html(value);\n }\n });\n }\n\n /**\n *\n * @param {Array} products\n */\n function updateProducts(products) {\n var i,\n product;\n\n for (i = 0; i < products.length; ++i) {\n product = products[i];\n\n $.each(product, function (property, value) {\n var $updatedElement = $('.js-cart-product-' + property + '-' + product.id);\n\n if ($updatedElement.length && $updatedElement[0].tagName.toLowerCase() === 'input') {\n } else {\n $updatedElement.html(value);\n }\n });\n }\n }\n\n function updateTableVisibility() {\n if ($('#cart').data('item-count')) {\n $('.js-cart-notempty').show();\n $('.js-cart-empty').hide();\n } else {\n $('.js-cart-notempty').hide();\n $('.js-cart-empty').show();\n }\n }\n\n\n /**\n * @param {String} type\n * @param {Array} messages\n * @param {String} title\n * @param {String} confirmButtonText\n */\n function displayMessages(type, messages, title, confirmButtonText, redirectUrl) {\n if (!messages.length) {\n return;\n }\n if (!confirmButtonText) {\n confirmButtonText = 'OK';\n }\n\n swal({\n html: true,\n title: title,\n text: messages.join('
'),\n type: type,\n confirmButtonText: confirmButtonText,\n },function(){\n if (redirectUrl != ''){\n console.log(redirectUrl);\n location.href = redirectUrl;\n }\n });\n }\n\n function glamiTracking(params, response, action)\n {\n return true;\n var recentQuantity = params.quantity;\n var prevQuantity = getPrevQuantities(params.cartProductId);\n if(recentQuantity > prevQuantity || action === 'add') {\n var glamiParams = response.glami;\n glami(\n 'track',\n 'AddToCart',\n {\n consent: 1, // The user's consent to the storage analytical cookies on their devices. [0 = no; 1 = yes]\n item_ids: [glamiParams.id], // product ID currently added to a cart. Use the same ID as you use in the feed (ITEM_ID).\n value: glamiParams.price, // product price\n currency: glamiParams.currency // product price currency\n }\n );\n }\n }\n\n return api;\n})(jQuery);\n\njQuery(function () {\n Cart.init();\n});"]}