jQuery(function ($){
let cuw_data=cuw_template.data;
let cuw_i18n=cuw_template.i18n;
let cuw_is_rtl=cuw_template.is_rtl;
window.cuw_offer={
init: function (){
this.event_listeners();
if($("#cuw-ppu-offer").length){
cuw_offer.update_ppu_totals($("#cuw-ppu-offer"));
}},
update_price: function (select, section){
let variant=select.find('option:selected');
section.find('.cuw-product-price, .cuw-page-product-price, .cuw-ppu-product-price').html(variant.data('price_html'));
section.find('.cuw-ppu-order-totals').data('price', variant.data('price')).data('tax', variant.data('tax'));
section.find('.cuw-qty').prop('max', variant.data('stock_qty'));
if(variant.data('image')){
section.find('.cuw-product-image, .cuw-page-product-image, .cuw-ppu-product-image').html(variant.data('image'));
}},
update_quantity: function (button){
let wrapper=button.parent();
let input=wrapper.find('input'),
val=parseFloat(input.val())||0,
max=parseFloat(input.attr('max'))||'',
min=parseFloat(input.attr('min'))||0,
step=parseFloat(input.attr('step'))||1;
if(button.is('.cuw-plus')){
if(max&&(val >=max)) input.val(max);
else input.val(val + step);
}else{
if(min&&(val <=min)) input.val(min);
else if(val > 0) input.val(val - step);
}
val=parseFloat(input.val());
wrapper.find('.cuw-minus').css('opacity', min===val ? 0.6:1);
wrapper.find('.cuw-plus').css('opacity', max===val ? 0.6:1);
input.trigger('change');
},
check_quantity: function (input){
let product_quantity=parseInt(input.val());
let max_quantity=parseInt(input.prop('max'));
if(product_quantity > max_quantity){
input.val(max_quantity);
}
input.closest('.quantity-input').find('.cuw-plus').css('opacity', product_quantity >=max_quantity ? 0.6:1);
input.closest('.cuw-offer, .cuw-page, .cuw-product, .cuw-product-row').find('.variant-select').trigger('change');
},
update_ppu_totals: function (section){
let qty=section.find(".cuw-ppu-product-quantity .cuw-qty").val();
if(qty===undefined){
qty=section.find(".cuw-ppu-order-totals").data('qty');
}
let product_price=section.find(".cuw-ppu-order-totals").data('price');
let tax=section.find(".cuw-ppu-order-totals").data('tax');
let order_total=section.find(".cuw-ppu-order-totals").data('order_total');
let subtotal=parseFloat(product_price) * parseFloat(qty);
let subtotal_tax=parseFloat(tax) * parseFloat(qty);
let updated_order_total=parseFloat(order_total) + subtotal + subtotal_tax;
section.find(".cuw-ppu-subtotal").html(cuw_helper.format_price(subtotal));
section.find(".cuw-ppu-tax").html(cuw_helper.format_price(subtotal_tax));
section.find(".cuw-ppu-total").html(cuw_helper.format_price(updated_order_total));
},
event_listeners: function (){
$(document).on("click", ".cuw-offer .quantity-input .cuw-plus, .cuw-offer .quantity-input .cuw-minus", function (){
cuw_offer.update_quantity($(this));
});
$(document).on("click", ".cuw-page .quantity-input .cuw-plus, .cuw-page .quantity-input .cuw-minus", function (){
cuw_offer.update_quantity($(this));
});
$(document).on("change", ".cuw-offer .variant-select", function (){
cuw_offer.update_price($(this), $(this).closest('.cuw-offer'));
});
$(document).on("input", '.cuw-offer .cuw-qty, #cuw-ppu-offer .cuw-qty', function (){
cuw_offer.check_quantity($(this));
});
$(document).on("change", '#cuw-ppu-offer .cuw-qty', function (){
cuw_offer.update_ppu_totals($("#cuw-ppu-offer"));
});
$(document).on("change", ".cuw-page .variant-select", function (){
cuw_offer.update_price($(this), $(this).closest('.cuw-page'));
cuw_offer.update_ppu_totals($("#cuw-ppu-offer"));
});
},
}
window.cuw_products={
init: function (){
this.event_listeners();
this.load_sections();
},
load_sections: function (){
$(".cuw-products").each(function (index, section){
cuw_products.load_section($(section));
});
},
load_section: function (section){
section.find('.variant-select').trigger('change');
cuw_products.update_prices(section);
},
get_all_products: function (section){
let products=[];
section.find('.cuw-product').each(function (index, product){
if($(product).find(".cuw-product-checkbox").length||$(product).data('key')){
products.push($(product));
}});
return products;
},
get_chosen_products: function (section){
let products=[];
section.find('.cuw-product').each(function (index, product){
if($(product).find(".cuw-product-checkbox").prop("checked")||$(product).data('key')){
products.push($(product));
}});
return products;
},
update_product_row: function (section, product_row){
let price_column=product_row.find('.cuw-product-price');
let product_id=product_row.data('product_id'), variant_id;
if(!product_id){
product_id=product_row.data('id');
}
let product=section.find('.cuw-product[data-id="' + product_id + '"]').first();
let variant_select=product_row.find('.variant-select').first();
if(variant_select&&variant_select.length){
variant_id=variant_select.val();
let variant=variant_select.find('option[value="' + variant_id + '"]').first();
product.data('regular_price', variant.data('regular_price'));
product.data('price', variant.data('price'));
if(product_id){
product.closest('.cuw-products').find('.cuw-product[data-id="' + product_id + '"]').data('regular_price', variant.data('regular_price'));
product.closest('.cuw-products').find('.cuw-product[data-id="' + product_id + '"]').data('price', variant.data('price'));
}
product.find('.cuw-product-variation-id').val(variant_id);
product.find('.cuw-product-variation-attributes-json').val(JSON.stringify(variant_select.data('chosen_attributes')));
product_row.find('.cuw-product-variation-id').val(variant_id);
product_row.find('.cuw-qty').prop('max', variant.data('stock_qty'));
if(variant.data('image')){
if(section.data('change_image')!='only_row'){
product.find('.cuw-product-image').html(variant.data('image'));
}
product_row.find('.cuw-product-image').html(variant.data('image'));
}
price_column.html(variant.data('price_html'));
}else if(price_column.html()===''){
price_column.html(product.find('.cuw-product-price').html());
}},
update_prices: function (section, data={}){
if(section.closest('.cuw-modal').length > 0){
section=section.closest('.cuw-modal');
}
let regular_price_total=0, price_total=0, items=0, main_price=0, main_item=0, addons_price=0,
addon_items=0;
let total_items=this.get_all_products(section).length;
let main_product_id=parseInt(section.find('[name="main_product_id"]').val());
this.get_chosen_products(section).forEach(function (product){
let quantity=1;
if(product.find('.quantity-input .cuw-qty').length > 0){
quantity=parseFloat(product.find('.quantity-input .cuw-qty').first().val());
}else if(product.data('quantity')){
quantity=parseFloat(product.data('quantity'));
}
if(main_product_id===product.data('id')){
main_price=parseFloat(product.data('price')) * quantity;
main_item=1;
}else{
addons_price +=parseFloat(product.data('price')) * quantity;
addon_items++;
}
regular_price_total +=parseFloat(product.data('regular_price')) * quantity;
price_total +=parseFloat(product.data('price')) * quantity;
items++;
});
let total_savings=regular_price_total - price_total;
let at_least_items=parseInt(section.find(".cuw-buy-section").find(".cuw-add-to-cart").data('at_least_items'))||1;
if(items >=at_least_items){
section.find(".cuw-buy-section .cuw-message").hide();
if(section.find(".cuw-buy-section .cuw-actions").first().data('inactive')==='disable'){
section.find(".cuw-buy-section .cuw-actions").show();
section.find(".cuw-buy-section .cuw-actions").find(":input").prop('disabled', false);
}else{
section.find(".cuw-buy-section .cuw-actions").show();
}
section.find(".cuw-buy-section .cuw-prices").show();
section.find(".cuw-main-item").html(main_item);
section.find(".cuw-addon-items").html(addon_items);
section.find(".cuw-total-items").html(items);
section.find(".cuw-main-price").html(cuw_helper.get_price_html(main_price));
section.find(".cuw-addons-price").html(cuw_helper.get_price_html(addons_price));
if(section.data('main_product_price')){
regular_price_total +=parseFloat(section.data('main_product_regular_price'));
price_total +=parseFloat(section.data('main_product_price'));
}
section.find(".cuw-total-price").html(cuw_helper.get_price_html(price_total, regular_price_total));
if(price_total==0){
section.find('.cuw-total-price-section').hide();
}else{
section.find('.cuw-total-price-section').show();
}}else{
if(section.find(".cuw-buy-section .cuw-actions").first().data('inactive')==='disable'){
section.find(".cuw-buy-section .cuw-actions").find(":input").prop('disabled', true);
}else{
section.find(".cuw-buy-section .cuw-actions").hide();
}
section.find(".cuw-buy-section .cuw-prices").hide();
section.find(".cuw-buy-section .cuw-message").show();
}
if(total_savings > 0){
section.find('.cuw-total-savings').not('[data-hidden="1"]').show();
section.find('.cuw-total-savings .cuw-saved-amount').html(cuw_helper.get_price_html(total_savings));
}else{
section.find('.cuw-total-savings').not('[data-hidden="1"]').hide();
section.find('.cuw-total-savings .cuw-saved-amount').html('');
}
if(data.cart_subtotal){
section.find('.cuw-cart-subtotal').html(data.cart_subtotal);
}
this.update_add_to_cart_text(section, items, total_items);
this.update_cta_button(section);
jQuery(document.body).trigger('cuw_product_prices_updated', [{
regular_price_total: regular_price_total,
price_total: price_total,
items: items,
main_item: main_item,
main_price: main_price,
addon_items: addon_items,
addons_price: addons_price,
total_savings: total_savings,
available_items: total_items,
other_data: data,
}, section]);
},
update_cta_button: function (section){
let disable=false;
this.get_chosen_products(section).forEach(function (product){
if(product.hasClass('is_variable')){
if(product.find('.variant-select').val()===''||product.find('.cuw-product-variation-id').val()===''){
disable=true;
return false;
}}
});
section.find('.cuw-add-to-cart').not('[data-choose_variants="1"]').prop('disabled', disable);
},
update_inputs: function (product, show=true){
let inputs=product.find(':input').not('input[type="checkbox"]');
let product_id=product.data('id');
if(show){
inputs.prop("disabled", false);
product.css('opacity', '1');
if(product_id){
product.closest('.cuw-products').find('.cuw-product[data-id="' + product_id + '"]').css('opacity', '1');
}
product.find('.cuw-plus, .cuw-minus, .cuw-attributes-section').css('pointer-events', 'all');
product.find('.cuw-remove-item-from-cart, .cuw-added-text, .cuw-added-icon').hide();
product.find('.cuw-add-product-to-cart').show();
}else{
inputs.prop("disabled", true);
product.css('opacity', '0.8');
if(product_id){
product.closest('.cuw-products').find('.cuw-product[data-id="' + product_id + '"]').css('opacity', '0.8');
}
product.find('.cuw-plus, .cuw-minus, .cuw-attributes-section').css('pointer-events', 'none');
product.find('.cuw-add-product-to-cart').hide();
product.find('.cuw-remove-item-from-cart, .cuw-added-text, .cuw-added-icon').show();
}},
update_add_to_cart_text: function (section, chosen_items_count, total_items_count){
if(section.find(".cuw-buy-section").find(".cuw-add-to-cart").data('buy_now')){
return;
}
let text=section.find(".cuw-buy-section").find(".cuw-add-to-cart").data('text');
if(text&&!text.includes('{items_text}')&&!text.includes('{items_count}')){
text=text;
}else if(text&&chosen_items_count > 1){
let items_text='';
let items_count=chosen_items_count + ' ' + cuw_i18n.add_to_cart.items;
if(cuw_i18n.add_to_cart.number_to_text[chosen_items_count]){
items_text=cuw_i18n.add_to_cart.number_to_text[chosen_items_count];
}else if(chosen_items_count===total_items_count){
items_text=cuw_i18n.add_to_cart.all_items;
}else{
items_text=cuw_i18n.add_to_cart.selected_items;
}
text=text.replace('{items_text}', items_text).replace('{items_count}', items_count);
}else{
text=cuw_i18n.add_to_cart.text;
}
section.find(".cuw-add-to-cart").html(text);
},
update_badges: function (product){
if(product.find('.cuw-badge').data('hidden')=='1') return;
let save_text=product.find('.cuw-badge').data('save_text');
let regular_price=product.data('regular_price');
let price=product.data('price');
if(regular_price===''||price===''||!save_text) return;
if(regular_price===price){
product.find('.cuw-badge').hide();
}else{
let amount=cuw_helper.format_price(regular_price - price);
let percentage=cuw_helper.format_percentage((regular_price - price) / regular_price * 100);
let text=save_text.replace('{price}', amount).replace('{percentage}', percentage);
product.find('.cuw-badge').html(text).show();
}},
carousel_update_actions: function (section){
let slider=section.find(".cuw-carousel-slider");
if(slider[0].scrollLeft===0){
section.find(".cuw-previous").css('opacity', 0.5);
}else if(Math.abs(slider[0].scrollLeft) + slider[0].clientWidth==slider[0].scrollWidth){
section.find(".cuw-next").css('opacity', 0.5);
}else{
section.find(".cuw-previous, .cuw-next").css('opacity', 1);
}},
carousel_scroll_items: function (section, action){
let slider=section.find(".cuw-carousel-slider");
let item_gap=parseInt(slider.data('gap'))||18;
let item_width=parseInt(slider.find(':first-child').width());
if(action.hasClass('cuw-next')){
slider.animate({
scrollLeft: (cuw_is_rtl ? '-=':'+=') + (item_width + item_gap),
behaviour: 'smooth'
}, 10);
}else if(action.hasClass('cuw-previous')){
slider.animate({
scrollLeft: (cuw_is_rtl ? '+=':'-=') + (item_width + item_gap),
behaviour: 'smooth'
}, 10);
}},
event_listeners: function (){
$(document).on("click", ".cuw-products .cuw-product-image", function (){
let checkbox=$(this).closest(".cuw-product").find(".cuw-product-checkbox").first();
checkbox.prop("checked", !checkbox.prop("checked")).trigger("change");
});
$(document).on('click', '.cuw-carousel .cuw-scroll-action', function (){
cuw_products.carousel_scroll_items($(this).closest(".cuw-carousel"), $(this));
});
$('.cuw-carousel .cuw-carousel-slider').on('scroll', function (){
cuw_products.carousel_update_actions($(this).closest(".cuw-carousel"));
});
$(".single_variation_wrap").on("show_variation", function (event, variation){
$('.cuw-product-addons').each(function (index, section){
$(section).data('main_product_regular_price', variation.display_regular_price);
$(section).data('main_product_price', variation.display_price);
cuw_products.update_prices($(section));
});
});
$(document).on("change", ".cuw-products .cuw-product-checkbox", function (){
cuw_products.update_inputs($(this).closest(".cuw-product"), $(this).is(":checked"));
cuw_products.update_prices($(this).closest(".cuw-products"));
});
$(document).on("click", ".cuw-products .quantity-input .cuw-plus, .cuw-products .quantity-input .cuw-minus", function (){
cuw_offer.update_quantity($(this));
});
$(document).on("change", '.cuw-products .quantity-input .cuw-qty', function (){
cuw_products.update_prices($(this).closest(".cuw-products"));
});
$(document).on("input", '.cuw-products .quantity-input .cuw-qty', function (){
cuw_offer.check_quantity($(this));
});
$(document).on("change", ".cuw-products .variant-select", function (){
cuw_products.update_product_row($(this).closest(".cuw-products"), $(this).closest(".cuw-product-row"));
cuw_products.update_prices($(this).closest(".cuw-products"));
cuw_products.update_badges($(this).closest(".cuw-product-row"));
});
$(document).on("cuw_products_load_section", function (event, section){
cuw_products.load_section(section);
});
$(document).on("click", '.cuw-cart-addon-products .cuw-toggle-addons', function (){
$(this).closest(".cuw-cart-addon-products").find(".cuw-products").slideToggle();
$(this).closest(".cuw-cart-addon-products").find(".cuw-addon-arrow-up").toggle();
$(this).closest(".cuw-cart-addon-products").find(".cuw-addon-arrow-down").toggle();
});
$(document).on("click", '.cuw-attributes-select .cuw-reset-attributes', function (event){
event.preventDefault();
$(this).closest('.cuw-attributes-select').find('select').each(function (index, element){
$(element).html($(element).data('attribute_html'));
});
$(this).closest('.cuw-attributes-select').find('select').trigger('change');
});
$(document).on("change", '.cuw-attributes-select select', function (){
cuw_variations.update_attributes_fields($(this).closest('.cuw-attributes-select'));
var chosen_attributes=cuw_variations.get_chosen_attributes($(this).closest('.cuw-attributes-select'));
var chosen_attribute_data=cuw_variations.find_matching_variants($(this).closest('.cuw-attributes-select').data('product_variations'),
chosen_attributes.data
);
var section=$(this).closest('.cuw-attributes-section');
var variant_select=section.find('.variant-select');
if(chosen_attribute_data.length===1&&chosen_attributes.count===chosen_attributes.chosenCount){
chosen_attribute_data=chosen_attribute_data.shift();
variant_select.val(chosen_attribute_data.id).prop('selected', true);
variant_select.data('chosen_attributes', chosen_attributes.data);
variant_select.trigger('change');
$(this).closest('.cuw-offer, .cuw-page').find('.cuw-button, .cuw-checkbox, .cuw-page-button, .cuw-ppu-accept-button')
.prop('disabled', false)
.css({'pointer-events': 'all', 'opacity': '1'});
$(this).closest('#cuw-ppu-offer').find('.cuw-ppu-order-totals-table').css('display', 'table');
$(this).closest('.cuw-product').find('.cuw-add-product-to-cart')
.prop('disabled', false)
.css({'pointer-events': 'all', 'opacity': '1'});
}else if(chosen_attribute_data.length===0&&chosen_attributes.count===chosen_attributes.chosenCount){
}else{
variant_select.data('chosen_attributes', '[]');
variant_select.val('').prop('selected', true);
variant_select.trigger('change');
$(this).closest('.cuw-offer, .cuw-page').find('.cuw-button, .cuw-checkbox, .cuw-page-button, .cuw-ppu-accept-button')
.prop('disabled', true)
.css({'pointer-events': 'none', 'opacity': '0.8'});
$(this).closest('#cuw-ppu-offer').find('.cuw-ppu-order-totals-table').css('display', 'none');
$(this).closest('.cuw-product').find('.cuw-add-product-to-cart')
.prop('disabled', true)
.css({'pointer-events': 'none', 'opacity': '0.8'});
}
section.find('.cuw-reset-attributes').css('display', chosen_attributes.chosenCount > 0 ? 'block':'none');
});
},
}
window.cuw_variations={
update_attributes_fields: function (variation_section){
var product_variations=variation_section.data('product_variations');
var currently_chosen_attributes=cuw_variations.get_chosen_attributes(variation_section).data;
variation_section.find('select').each(function (index, element){
var current_attribute_select=$(element),
current_attribute_name=current_attribute_select.data('attribute_name'),
attached_options_count=0,
new_attribute_select=$('<select/>'),
option_gt_filter=':gt(0)',
selected_attribute_value=current_attribute_select.val()||'',
selected_attribute_value_valid=true;
if(!current_attribute_select.data('attribute_html')){
var reference_select=current_attribute_select.clone();
reference_select.find('option').removeAttr('attached').prop('disabled', false).prop('selected', false);
current_attribute_select.data('attribute_options', reference_select.find('option' + option_gt_filter).get());
current_attribute_select.data('attribute_html', reference_select.html());
}
new_attribute_select.html(current_attribute_select.data('attribute_html'));
var check_attributes=$.extend(true, {}, currently_chosen_attributes);
check_attributes[current_attribute_name]='';
var variations_data=cuw_variations.find_matching_variants(product_variations, check_attributes);
for (var num in variations_data){
if(typeof (variations_data[num])!=='undefined'){
var variation_attributes=variations_data[num].attributes;
for (var attribute_name in variation_attributes){
if(variation_attributes.hasOwnProperty(attribute_name)){
var attribute_value=variation_attributes[attribute_name], variation_active='';
if(attribute_name===current_attribute_name){
if(variations_data[num].is_active){
variation_active='enabled';
}
if(attribute_value){
attribute_value=$('<div/>').html(attribute_value).text();
var option_elements=new_attribute_select.find('option');
if(option_elements.length){
for (var i=0, length=option_elements.length; i < length; i++){
var option_element=$(option_elements[i]),
option_value=option_element.val();
if(attribute_value===option_value){
option_element.addClass('attached ' + variation_active);
break;
}}
}}else{
new_attribute_select.find('option:gt(0)').addClass('attached ' + variation_active);
}}
}}
}}
attached_options_count=new_attribute_select.find('option.attached').length;
if(selected_attribute_value){
selected_attribute_value_valid=false;
if(0!==attached_options_count){
new_attribute_select.find('option.attached.enabled').each(function (){
var option_value=$(this).val();
if(selected_attribute_value===option_value){
selected_attribute_value_valid=true;
return false;
}});
}}
if(attached_options_count > 0&&selected_attribute_value&&selected_attribute_value_valid){
new_attribute_select.find('option:first').remove();
option_gt_filter='';
}
new_attribute_select.find('option' + option_gt_filter + ':not(.attached)').remove();
current_attribute_select.html(new_attribute_select.html());
current_attribute_select.find('option' + option_gt_filter + ':not(.enabled)').prop('disabled', true);
if(selected_attribute_value){
if(selected_attribute_value_valid){
current_attribute_select.val(selected_attribute_value);
}else{
current_attribute_select.val('').trigger('change');
}}else{
current_attribute_select.val('');
}});
},
find_matching_variants: function (variations_data, attributes){
var matching=[];
for (var i=0; i < variations_data.length; i++){
var variation=variations_data[i];
if(cuw_variations.is_attributes_match(variation.attributes, attributes)){
matching.push(variation);
}}
return matching;
},
is_attributes_match: function (variation_attributes, attributes){
var match=true;
for (var attr_name in variation_attributes){
if(variation_attributes.hasOwnProperty(attr_name)){
var value_1=variation_attributes[attr_name];
var value_2=attributes[attr_name];
if(value_1!==undefined&&value_2!==undefined&&value_1.length!==0&&value_2.length!==0&&value_1!==value_2){
match=false;
}}
}
return match;
},
get_chosen_attributes: function (variation_section){
var data={}, count=0, chosen=0;
variation_section.find('select').each(function (index, element){
var attribute_name=$(element).data('attribute_name');
var value=$(element).val()||'';
if(value.length > 0){
chosen++;
}
count++;
data[attribute_name]=value;
});
return {
'count': count,
'chosenCount': chosen,
'data': data,
};},
}
window.cuw_helper={
format_price: function (price, tag=''){
price=parseFloat(price).toFixed(cuw_data.woocommerce.price.decimals);
price=price.replace(".", cuw_data.woocommerce.price.decimal_separator);
let split=price.split(cuw_data.woocommerce.price.decimal_separator);
split[0]=split[0].replace(/\B(?=(\d{3})+(?!\d))/g, cuw_data.woocommerce.price.thousand_separator);
price=split.join(cuw_data.woocommerce.price.decimal_separator);
price=cuw_data.woocommerce.price.format.replace('%1$s', cuw_data.woocommerce.price.symbol).replace('%2$s', price);
return tag ? '<' + tag + '>' + price + '</' + tag + '>':price;
},
get_price_html: function (price, regular_price=null){
if(regular_price&&regular_price > price){
return this.format_price(regular_price, 'del') + ' ' + this.format_price(price, 'ins');
}
return this.format_price(price, 'ins');
},
get_discount_text: function (discount_type, discount_value){
let discount_text='';
if(discount_type==='percentage'&&discount_value!==''){
discount_text=cuw_helper.format_percentage(discount_value);
}else if(discount_type==='fixed_price'&&discount_value!==''){
discount_text=cuw_helper.format_price(discount_value);
}else if(discount_type==='free'){
discount_text=cuw_i18n.free;
}
return discount_text;
},
format_percentage: function (price, round=true){
if(price==='') return price;
if(round){
price=Math.round(price * 100) / 100;
price=price.toFixed(2);
price=price.replace(/\.?0+$/, '');
}
return price +='%';
},
}
window.cuw_spinner={
show: function (section){
if(typeof section==='string'){
section=$(section).first();
}
if(section.block){
$(section).block({message: null, overlayCSS: {background: '#fff', opacity: 0.6}});
}},
hide: function (section){
if(typeof section==='string'){
section=$(section).first();
}
if(section.unblock){
$(section).unblock();
}}
}
window.cuw_modal={
show: function (modal, temp=false){
if(typeof modal==='string'){
modal=$(modal).first();
}
modal.show();
modal.find('.cuw-modal-close').click(function (){
temp ? modal.remove():modal.hide()
});
$(window).click(function (event){
if($(event.target).hasClass('cuw-modal')){
temp ? modal.remove():modal.hide()
}});
$(document).keydown(function (event){
if(event.keyCode===27){
temp ? modal.remove():modal.hide()
}});
},
hide: function (modal){
if(typeof modal==='string'){
modal=$(modal).first();
}
modal.hide();
}}
$(document).ready(function (){
cuw_offer.init();
cuw_products.init();
});
});
jQuery(function ($){
let cuw_ajax_url=cuw_frontend.ajax_url;
let cuw_ajax_nonce=cuw_frontend.ajax_nonce;
let cuw_is_cart=(cuw_frontend.is_cart=='1');
let cuw_is_checkout=(cuw_frontend.is_checkout=='1');
let cuw_has_cart_block=(cuw_frontend.has_cart_block=='1');
let cuw_has_checkout_block=(cuw_frontend.has_checkout_block=='1');
let cuw_dynamic_offer_display_enabled=(cuw_frontend.dynamic_offer_display_enabled=='1');
var cuw_page_action_performing=false;
window.cuw_actions={
add_offer_to_cart: function (offer){
let offer_id=offer.data('id');
if(!offer_id){
return;
}
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'add_offer_to_cart',
offer_id: offer_id,
quantity: offer.find('[name="quantity"]').val()||1,
variation_id: offer.find('[name="variation_id"]').val()||0,
variation_attributes: offer.find('[name="variation_id"]').data('chosen_attributes')||[],
location: offer.closest('.cuw-offers').data('location')||'',
nonce: cuw_ajax_nonce||''
},
beforeSend: function (){
cuw_spinner.show(offer);
offer.find('.cuw-offer :input').prop('disabled', true);
},
success: function (response){
if(response.success&&response.data){
jQuery(document.body).trigger('cuw_offer_added_to_cart', [response.data, offer]);
cuw_actions.update_fragments();
if(response.data.cart_item_key){
offer.data('cart_item_key', response.data.cart_item_key);
offer.addClass('cuw-offer-added');
offer.find('.cuw-offer-cta-section .cuw-offer-cta-text').hide();
offer.find('.cuw-offer-cta-section .cuw-offer-added-text').show();
offer.find('.cuw-product-quantity, .cuw-product-variants').css('pointer-events', 'none');
offer.find('.cuw-product-quantity, .cuw-product-variants').css('opacity', '0.8');
}else{
offer.find('.cuw-checkbox').prop('checked', false);
}
if(response.data.remove_offer){
if(response.data.notice){
$(response.data.notice).insertBefore(offer);
}
offer.fadeOut(1000, function (){
$(this).remove();
});
}else{
cuw_spinner.hide(offer);
}
if(response.data.remove_all_offers){
$('.cuw-offer').fadeOut(1000, function (){
$(this).remove();
});
}}
offer.find('.cuw-offer :input').prop('disabled', false);
}});
},
remove_offer_from_cart: function (offer){
let key=offer.data('cart_item_key');
if(!key){
return;
}
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'remove_item_from_cart',
item_key: key,
nonce: cuw_ajax_nonce||''
},
beforeSend: function (){
cuw_spinner.show(offer);
},
success: function (response){
cuw_actions.update_fragments();
if(response.data.item_removed){
offer.removeClass('cuw-offer-added');
offer.find('.cuw-offer-cta-section .cuw-offer-added-text').hide();
offer.find('.cuw-offer-cta-section .cuw-offer-cta-text').show();
offer.find('.cuw-product-quantity, .cuw-product-variants').css('pointer-events', 'all');
offer.find('.cuw-product-quantity, .cuw-product-variants').css('opacity', '1.0');
}
cuw_spinner.hide(offer);
},
});
},
perform_action: function (action){
let params=action.data();
params.checked=action.find('input[type=checkbox]').is(':checked');
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'perform_action',
params: params,
nonce: cuw_ajax_nonce||''
},
beforeSend: function (){
cuw_spinner.show(action);
$('.cuw-action :input').prop('disabled', true);
},
success: function (response){
if(response.success&&response.data){
jQuery(document.body).trigger('cuw_action_performed', [response.data, action]);
if(response.data.trigger){
jQuery(document.body).trigger(response.data.trigger, {});
}
cuw_spinner.hide(action);
if(!response.data.remove){
action.find('input[type=checkbox]').prop('checked', response.data.checked ? true:false);
action.data('lock', response.data.lock ? true:false);
}else{
action.remove();
}}
$('.cuw-action :input').prop('disabled', false);
}});
},
perform_ppu_action: function (action){
cuw_spinner.show($('#cuw-ppu-offer'));
$('#cuw-ppu-offer [name="cuw_ppu_action"]').val(action);
$('#cuw-ppu-offer').submit();
},
add_products_to_cart: function (section, choose_variants=false){
if(choose_variants){
let chosen_product_ids=[];
let chosen_variable_product_ids=[];
cuw_products.get_chosen_products(section).forEach(function (product){
chosen_product_ids.push(product.data('id'));
if(product.hasClass('is_variable')){
chosen_variable_product_ids.push(product.data('id'));
}});
if(chosen_variable_product_ids.length > 0){
let modal=section.find('.cuw-modal').first();
modal.find('.cuw-product-row').each(function (index, row){
if(chosen_product_ids.includes($(row).data('product_id'))){
cuw_products.update_product_row(section, $(row));
$(row).show();
}else{
$(row).hide();
}});
cuw_products.update_prices(section);
cuw_modal.show(modal);
}else{
this.add_products_to_cart(section, false);
}}else{
cuw_spinner.show(section.find(".cuw-buy-section, .cuw-modal-content"));
section.find('form').submit();
}},
add_product_to_cart: function (section, product){
let page=this.get_page(section);
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'add_product_to_cart',
campaign_id: section.data('campaign_id')||0,
product_id: product.data('id')||0,
quantity: product.find('[name="quantity"]').val()||1,
variation_id: product.find('[name="variation_id"]').val()||0,
variation_attributes: product.find('[name="variation_id"]').data('chosen_attributes')||[],
page: page,
nonce: cuw_ajax_nonce||''
},
beforeSend: function (){
cuw_spinner.show(product);
product.find('.cuw-add-product-to-cart, .cuw-remove-item-from-cart').prop('disabled', true).css('opacity', 0.8);
},
success: function (response){
if(response.success&&response.data){
if(response.data.item_key&&response.data.cart_subtotal){
product.data('key', response.data.item_key);
cuw_products.update_inputs(product, false);
cuw_products.update_prices(section, response.data);
cuw_actions.update_fragments(page);
}}
cuw_spinner.hide(product);
product.find('.cuw-add-product-to-cart, .cuw-remove-item-from-cart').prop('disabled', false).css('opacity', 1);
},
});
},
remove_item_from_cart: function (section, product){
let key=product.data('key');
if(!key){
return;
}
let page=this.get_page(section);
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'remove_item_from_cart',
item_key: key,
page: page,
nonce: cuw_ajax_nonce||''
},
beforeSend: function (){
cuw_spinner.show(product);
product.find('.cuw-add-product-to-cart, .cuw-remove-item-from-cart').prop('disabled', true).css('opacity', 0.8);
},
success: function (response){
if(response.success&&response.data){
if(response.data.item_removed&&response.data.cart_subtotal){
product.data('key', '');
cuw_products.update_inputs(product, true);
cuw_products.update_prices(section, response.data);
cuw_actions.update_fragments(page);
}}
cuw_spinner.hide(product);
product.find('.cuw-add-product-to-cart, .cuw-remove-item-from-cart').prop('disabled', false).css('opacity', 1);
},
});
},
add_addon_to_cart: function (section, product){
let wrapper=product;
if(product.closest('.cart_item').length){
wrapper=product.closest('.cart_item');
}
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'add_addon_to_cart',
campaign_id: section.data('campaign_id')||0,
product_id: product.data('id')||0,
quantity: section.data('quantity')||0,
variation_id: product.data('variant_id')||product.val()||0,
main_item_key: section.data('main_item_key')||'',
nonce: cuw_ajax_nonce||""
},
beforeSend: function (){
cuw_spinner.show(wrapper);
},
success: function (response){
if(response.success&&response.data&&response.data.item_key){
cuw_actions.update_fragments('cart');
}
cuw_spinner.hide(wrapper);
},
});
},
remove_addon_from_cart: function (section, product){
let key=product.data('item_key');
if(!key){
return;
}
let wrapper=product;
if(product.closest('.cart_item').length){
wrapper=product.closest('.cart_item');
}
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'remove_addon_from_cart',
item_key: key,
nonce: cuw_ajax_nonce||""
},
beforeSend: function (){
cuw_spinner.show(wrapper);
},
success: function (response){
if(response.success&&response.data){
cuw_actions.update_fragments('cart');
}
cuw_spinner.hide(wrapper);
product.data('lock', false);
},
});
},
change_cart_item_variant: function (section, variant){
let key=section.data('item_key');
if(!key){
return;
}
let wrapper=variant;
if(variant.closest('.cart_item').length > 0){
wrapper=variant.closest('.cart_item');
}
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'change_cart_item_variant',
item_key: key,
variation_id: variant.val()||0,
nonce: cuw_ajax_nonce||""
},
beforeSend: function (){
cuw_spinner.show(wrapper);
},
success: function (response){
if(response.success&&response.data){
cuw_actions.update_fragments('cart');
}
cuw_spinner.hide(wrapper);
},
});
},
get_page: function (section=null){
let page='';
if(section!==null){
page=section.data('page') ? section.data('page'):section.closest('.cuw-modal').data('page');
}
return page;
},
update_fragments: function (page=''){
if(page==='cart'||cuw_is_cart){
jQuery(document.body).trigger('wc_update_cart');
jQuery(document.body).trigger('cuw_cart_page_updated');
}else if(page==='checkout'||cuw_is_checkout){
jQuery(document.body).trigger('update_checkout');
jQuery(document.body).trigger('cuw_checkout_page_updated');
}else{
jQuery(document.body).trigger('wc_fragment_refresh');
jQuery(document.body).trigger('cuw_fragment_refreshed');
}
if(cuw_has_cart_block||cuw_has_checkout_block){
setTimeout(function (){
jQuery(document.body).trigger('added_to_cart', {});
}, 0);
}},
show_product_details_popup: function (section, product_id){
cuw_spinner.show(section);
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: false,
data: {
action: 'cuw_ajax',
method: 'get_product_details_popup',
product_id: product_id,
nonce: cuw_ajax_nonce||''
},
success: function (response){
if(response.data.html){
$('body').append(response.data.html);
cuw_modal.show($('#cuw-modal-product-details-' + product_id), true);
$('#cuw-modal-product-details-' + product_id + ' .variant-select').trigger('change');
}
cuw_spinner.hide(section);
},
});
},
update_product_image: function (section, product_id){
cuw_spinner.show(section.find(".cuw-product-image"));
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: true,
data: {
action: 'cuw_ajax',
method: 'get_offer_image',
product_id: product_id,
nonce: cuw_ajax_nonce||''
},
success: function (response){
cuw_spinner.hide(section.find('.cuw-product-image'));
if(response.data.html){
if(section.find('.cuw-product-image a').length > 0){
section.find('.cuw-product-image a').html(response.data.html);
}else{
section.find('.cuw-product-image').html(response.data.html);
}}
},
});
},
}
$(document).on("change", ".cuw-product-addons .cuw-product .cuw-product-checkbox", function (){
let addons_count=$('.cuw-product-addons .cuw-product-checkbox:checked').length;
$('.cuw-product-addons-pricing-section').css('display', (addons_count > 0 ? 'flex':'none'));
$(this).closest('.cuw-product').find('.cuw-product-quantity').toggle($(this).prop('checked'));
$(this).closest('.cuw-product').find('.cuw-product-variants').toggle($(this).prop('checked'));
});
$(document).on("click", ".cuw-modal-product-detail", function (){
cuw_actions.show_product_details_popup($(this).closest('.cuw-container'), $(this).data('id'));
});
$(document).on("click", ".cuw-products .cuw-product .cuw-add-product-to-cart", function (){
cuw_actions.add_product_to_cart($(this).closest('.cuw-products'), $(this).closest('.cuw-product'));
});
$(document).on("change", ".cuw-cart-item-variants .variant-select", function (){
cuw_actions.change_cart_item_variant($(this).closest('.cuw-cart-item-variants'), $(this).find("option:selected"));
});
$(document).on("click", ".cuw-products .cuw-product .cuw-remove-item-from-cart", function (){
cuw_actions.remove_item_from_cart($(this).closest('.cuw-products'), $(this).closest('.cuw-product'));
});
$(document).on("click", ".cuw-cart-addon-products .cuw-products .cuw-product input[type=checkbox]", function (){
if($(this).is(":checked")){
cuw_actions.add_addon_to_cart($(this).closest('.cuw-products'), $(this).closest('.cuw-product'));
}else{
cuw_actions.remove_addon_from_cart($(this).closest('.cuw-products'), $(this).closest('.cuw-product'));
}});
$(document).on("click", ".cuw-offer input[type=checkbox], .cuw-offer button", function (){
let offer=$(this).closest('.cuw-offer');
if(!offer.hasClass('cuw-offer-added')){
cuw_actions.add_offer_to_cart(offer);
}else{
cuw_actions.remove_offer_from_cart(offer);
}});
$(document).on("click", ".cuw-action input[type=checkbox], .cuw-action button", function (){
cuw_actions.perform_action($(this).closest('.cuw-action'));
});
$(document).on("click", ".cuw-products .cuw-add-to-cart", function (){
cuw_actions.add_products_to_cart($(this).closest(".cuw-products"), $(this).data('choose_variants')=='1');
});
$(".cuw-page .cuw-qty").change(function (){
$(".cuw-page .cuw-qty").val($(this).val());
$('.cuw-hidden-product-quantity').val($(this).val());
}).trigger('change');
$(".cuw-page .variant-select").change(function (){
$(".cuw-page .variant-select").val($(this).val());
$('.cuw-hidden-product-variant').val($(this).val());
}).trigger('change');
$(".cuw-page-offer-form, .cuw-page-offer-accept").submit(function (){
cuw_spinner.show($(this));
cuw_page_action_performing=true;
});
$(".cuw-offer-decline-link").click(function (){
cuw_page_action_performing=true;
$(".cuw-offer-decline-link").css({'pointer-events': 'none', 'opacity': '0.8'});
});
$("#cuw-ppu-offer .cuw-ppu-ignore-offers").click(function (){
cuw_actions.perform_ppu_action('ignore_offers');
});
$("#cuw-ppu-offer .cuw-ppu-accept-button").click(function (){
cuw_actions.perform_ppu_action('accept_offer');
});
$("#cuw-ppu-offer .cuw-ppu-decline-button, #cuw-ppu-offer .cuw-ppu-decline-link").click(function (){
cuw_actions.perform_ppu_action('decline_offer');
});
jQuery(document.body).on('click', '.cuw-custom-trigger', function (){
cuw_spinner.show($(this).closest('.cuw-modal').find('.cuw-modal-body'));
$($(this).data('target')).trigger($(this).data('event'));
});
jQuery(document.body).on('cuw_update_offers', function (event, campaign_type=''){
if($('.cuw-offers').length===0||campaign_type===''){
return;
}
$.ajax({
type: 'post',
url: cuw_ajax_url,
async: false,
data: {
action: 'cuw_ajax',
method: 'get_all_offers_html',
campaign_type: campaign_type,
nonce: cuw_ajax_nonce||''
},
success: function (response){
if(response.data&&response.data.html){
$.each(response.data.html, function (location, html){
$('.cuw-offers[data-location="' + location + '"]').html(html);
});
}},
});
});
if(cuw_dynamic_offer_display_enabled){
if(cuw_is_cart||cuw_has_cart_block){
jQuery(document.body).on('applied_coupon removed_coupon', function (){
jQuery(document.body).trigger('cuw_update_offers', ['cart_upsells']);
});
}else if(cuw_is_checkout||cuw_has_checkout_block){
jQuery(document.body).on('applied_coupon_in_checkout removed_coupon_in_checkout', function (){
jQuery(document.body).trigger('cuw_update_offers', ['checkout_upsells']);
});
}}
jQuery(document.body).on('cuw_show_upsell_popup', function (event, data, element){
if(data.dynamic_content){
$.ajax({
type: 'post',
url: cuw_ajax_url,
data: {
action: 'cuw_ajax',
method: 'get_upsell_popup',
campaign_id: data.campaign_id,
product_id: data.product_id,
trigger: data.trigger,
page: data.page,
nonce: cuw_ajax_nonce||''
},
success: function (response){
if(response.success&&response.data&&response.data.campaign_id&&response.data.html){
let campaign_id=response.data.campaign_id;
if($('#cuw-modal-' + campaign_id).length > 0){
$('#cuw-modal-' + campaign_id).find('.cuw-cart-subtotal').html(response.data.cart_subtotal);
}else{
$('body').append(response.data.html);
}
cuw_modal.show($('#cuw-modal-' + campaign_id), true);
if(cuw_products&&cuw_products.carousel_update_actions){
$('#cuw-modal-' + campaign_id + ' .cuw-carousel .cuw-carousel-slider').on('scroll', function (){
cuw_products.carousel_update_actions($(this).closest(".cuw-carousel"));
});
}}
},
});
}else if(data.campaign_id){
let modal=$('#cuw-modal-' + data.campaign_id);
if(modal.length > 0){
modal.data('shown', true);
cuw_modal.show(modal);
}}
});
jQuery(document.body).on('checkout_error', function (){
cuw_modal.hide('.cuw-modal');
});
let messages=$(".cuw-page-timer");
if(messages.length > 0){
let element=messages.first();
let message=element.data('message');
let params=new URLSearchParams(window.location.search);
let unique_id=params.get('cuw_order_id');
if(params.get('cuw_ppu_offer')){
unique_id=params.get('cuw_ppu_offer') + '_' + (params.get('cuw_order')||'');
}
if(!unique_id){
return;
}
let duration=(element.data('minutes') * 60) + element.data('seconds'), minutes, seconds;
if(Cookies&&unique_id){
let duration_from_cookie=Cookies.get("cuw_timer_" + unique_id);
if(duration_from_cookie!==undefined){
duration=duration_from_cookie;
}}
setInterval(function (){
if(duration >=0){
minutes=parseInt(duration / 60, 10);
seconds=parseInt(duration % 60, 10);
minutes=minutes < 10 ? "0" + minutes:minutes;
seconds=seconds < 10 ? "0" + seconds:seconds;
messages.html(message.replace('{minutes}', minutes).replace('{seconds}', seconds));
if(duration===0){
if(params.get('cuw_ppu_offer')){
cuw_actions.perform_ppu_action('decline_offer');
}else if(!cuw_page_action_performing){
window.location=element.data('redirect');
}}
if(Cookies&&unique_id){
Cookies.set("cuw_timer_" + unique_id, duration);
}
duration--;
}}, 1000);
}});
(()=>{"use strict";const t=window.wp.data,e="wc/store/cart",r="wc/store/checkout",o="wc/store/payment",c="view_item_list",n="select_item",i="view_item",s=t=>{const e={};for(const r of t)r&&void 0!==r.key&&null!==r.key&&(e[r.key]=r);return e},a=(t,e)=>{const r=window.gtmkit_settings.datalayer_name;window.gtmkit.events.push({ecommerce:null},r),window.gtmkit.events.push({event:t,...e},r),!0===window.gtmkit_settings.console_log&&console.log(`Pushing event ${t}`)},u=()=>{if(!0===window.gtmkit_data.wc.add_shipping_info.fired)return;const t={ecommerce:{currency:window.gtmkit_data.wc.currency,value:window.gtmkit_data.wc.cart_value,shipping_tier:window.gtmkit_data.wc.chosen_shipping_method,items:window.gtmkit_data.wc.cart_items}};a("add_shipping_info",t),window.gtmkit_data.wc.add_shipping_info.fired=!0},l=()=>{if(!0===window.gtmkit_data.wc.add_payment_info.fired)return;const t={ecommerce:{currency:window.gtmkit_data.wc.currency,value:window.gtmkit_data.wc.cart_value,payment_type:window.gtmkit_data.wc.chosen_payment_method,items:window.gtmkit_data.wc.cart_items}};a("add_payment_info",t),window.gtmkit_data.wc.add_payment_info.fired=!0},m=()=>{var t;return null!==(t=window.gtmkit_data?.wc?.currency)&&void 0!==t?t:""},d=t=>{if(!t)return{};if("string"==typeof t)try{return JSON.parse(t)}catch(t){return{}}return{...t}},w=(t,e="")=>{const r=d(t?.extensions?.gtmkit?.item);return e&&(r.item_list_name=e),r},y=t=>{let e=!1;return()=>{e||(e=!0,Promise.resolve().then((()=>{e=!1,t()})))}},p=(t,e)=>{!0===window.gtmkit_settings?.console_log&&console.error(`GTM Kit: Error in ${t} handler`,e)},_=(t,e)=>{for(const o of t){var r;const t=Number(null!==(r=o.item.price)&&void 0!==r?r:0)*o.quantity;a(e,{ecommerce:{currency:m(),value:t,items:[o.item]}})}},g=({select:t,subscribe:r})=>{let o=null;return r(y((()=>{try{const r=(()=>{const r=t(e);if(!r||"function"!=typeof r.getCartData)return null;if("function"==typeof r.hasFinishedResolution&&!r.hasFinishedResolution("getCartData"))return null;const o=r.getCartData();return o&&Array.isArray(o.items)?(c=o)&&Array.isArray(c.items)?c.items.map((t=>{var e;const r=d(t?.extensions?.gtmkit?.item);r.quantity=t.quantity;const o=Number(null!==(e=t?.prices?.sale_price)&&void 0!==e?e:0);return{key:t.key,quantity:t.quantity,unitPrice:Number.isFinite(o)?o/100:0,item:r}})):[]:null;var c})();if(null===r)return;if(null===o)return void(o=r);const{added:c,removed:n}=((t=[],e=[])=>{const r=s(t),o=s(e),c=[],n=[];for(const t of Object.keys(o)){const e=o[t],i=r[t]?r[t].quantity:0,s=e.quantity-i;s>0?c.push({item:{...e.item,quantity:s},quantity:s}):s<0&&n.push({item:{...e.item,quantity:-s},quantity:-s})}for(const t of Object.keys(r))if(!o[t]){const e=r[t];n.push({item:{...e.item,quantity:e.quantity},quantity:e.quantity})}return{added:c,removed:n}})(o,r);o=r,_(c,"add_to_cart"),_(n,"remove_from_cart")}catch(t){p("cart-subscriber",t)}})))},f=["before_processing","processing","complete"],k=t=>{if(!t||"function"!=typeof t.getCartData)return"";const e=t.getCartData(),r=e&&Array.isArray(e.shippingRates)?e.shippingRates:[];for(const t of r){const e=(Array.isArray(t.shipping_rates)?t.shipping_rates:[]).find((t=>!0===t.selected));var o;if(e)return null!==(o=e.rate_id)&&void 0!==o?o:""}return""},h=t=>{var e;return t&&"function"==typeof t.getActivePaymentMethod&&null!==(e=t.getActivePaymentMethod())&&void 0!==e?e:""},v=({root:t=document}={})=>{let e=null;const r=t=>{const r=t.target;r&&r.closest&&r.closest(".wc-block-mini-cart__button")&&(async()=>{try{const t=await(async()=>{const t=window.gtmkitWooCommerceBlocksBuild;if(!t||!t.root)return null;const e=await fetch(`${t.root}wc/store/v1/cart`,{credentials:"include",headers:{"X-WP-Nonce":t.nonce}});return e.ok?e.json():null})();if(!t)return;const{items:r,value:o,signature:c}=(t=>{var e;const r=Array.isArray(t?.items)?t.items:[],o=r.map((t=>{const e=d(t?.extensions?.gtmkit?.item);return e.quantity=t.quantity,e})),c=(t=>t.map((t=>`${t.key}:${t.quantity}`)).sort().join("|"))(r.map((t=>({key:t.key,quantity:t.quantity})))),n=Number(null!==(e=t?.totals?.total_price)&&void 0!==e?e:0);return{items:o,value:Number.isFinite(n)?n/100:0,signature:c}})(t);if(0===r.length)return;if(c===e)return;e=c,a("view_cart",{ecommerce:{currency:m(),value:o,items:r}})}catch(t){p("mini-cart",t)}})()};return t.addEventListener("click",r,!0),()=>t.removeEventListener("click",r,!0)},b="Cross-sells",q=window.wp.hooks,A="gtmkit/woocommerce-blocks",S="experimental__woocommerce_blocks",C=()=>!!document.querySelector(".wp-block-woocommerce-cart, .wp-block-woocommerce-checkout"),E=".gtmkit_block_product_data",N=".added_to_cart, .wc-forward, .wc_forward",L=".wp-block-woocommerce-cart, .wp-block-woocommerce-checkout",j=(t,e)=>{const r=t.closest(e);if(!r||r.closest(L))return null;const o=t.closest("li, .wc-block-product, .wp-block-post"),c=o?o.querySelector(E):null;if(!c)return null;const n=d(c.getAttribute("data-gtmkit_product_data"));return n&&0!==Object.keys(n).length?{item:n,root:r}:null},$=t=>t.getAttribute("data-gtmkit-list-name")||"Product Collection",D=({root:t=document,selector:e=".wp-block-woocommerce-product-collection",listNameResolver:r=$,observerFactory:o=t=>new window.MutationObserver(t)})=>{const i=[];Array.from(t.querySelectorAll(e)).filter((t=>!t.closest(L))).forEach((t=>{const e=r(t);let n=null;const s=()=>{try{(()=>{const r=((t,e)=>{const r=[];return t.querySelectorAll(E).forEach(((t,o)=>{const c=d(t.getAttribute("data-gtmkit_product_data"));c&&0!==Object.keys(c).length&&(e&&(c.item_list_name=e),c.index=o+1,r.push(c))})),r})(t,e);if(0===r.length)return;const o=(t=>t.map((t=>{var e,r;return`${null!==(e=null!==(r=t.item_id)&&void 0!==r?r:t.id)&&void 0!==e?e:""}`})).join("|"))(r);o!==n&&(n=o,a(c,{ecommerce:{items:r}}))})()}catch(t){p("product-collection",t)}};s();const u=o(s);u.observe(t,{childList:!0,subtree:!0}),i.push(u)}));const s=t=>{try{if(!t.target.closest)return;const o=t.target.closest("a");if(!o||o.closest(N))return;const c=j(o,e);if(!c)return;const i=r(c.root);i&&(c.item.item_list_name=i),a(n,{ecommerce:{items:[c.item]}})}catch(t){p("product-collection-select",t)}},u=t=>{try{var o;if(!t.target.closest)return;const c=t.target.closest(".add_to_cart_button");if(!c||c.matches(N))return;const n=j(c,e);if(!n)return;const i=r(n.root);i&&(n.item.item_list_name=i),n.item.quantity=1,a("add_to_cart",{ecommerce:{currency:m(),value:Number(null!==(o=n.item.price)&&void 0!==o?o:0),items:[n.item]}})}catch(t){p("product-collection-add",t)}},l=t===document?document:t;return l.addEventListener("click",s,!0),l.addEventListener("click",u,!0),()=>{i.forEach((t=>t.disconnect())),l.removeEventListener("click",s,!0),l.removeEventListener("click",u,!0)}},O=()=>{try{const s={select:t.select,subscribe:t.subscribe};g(s),document.querySelector(".wc-block-mini-cart")&&v(),((e=>{try{return Boolean((0,t.select)(e))}catch(t){return!1}})(r)||document.querySelector(".wp-block-woocommerce-checkout"))&&(({select:t,subscribe:c})=>{let n=k(t(e)),i=h(t(o)),s=!1;const a=()=>window.gtmkit_settings.wc.add_shipping_info.config,m=()=>window.gtmkit_settings.wc.add_payment_info.config;c(y((()=>{try{if(!0!==window.gtmkit_data?.wc?.is_checkout)return;const w=k(t(e));w&&w!==n&&(n=w,window.gtmkit_data.wc.chosen_shipping_method=w,2===a()&&u());const y=h(t(o));y&&y!==i&&(i=y,window.gtmkit_data.wc.chosen_payment_method=y,2===m()&&l());const p=(c=t(r))&&"function"==typeof c.getCheckoutStatus&&null!==(d=c.getCheckoutStatus())&&void 0!==d?d:"";!s&&f.includes(p)&&(s=!0,0!==a()&&u(),0!==m()&&l())}catch(t){p("checkout-subscriber",t)}var c,d})))})(s),document.querySelector(".wp-block-woocommerce-cart")&&(({select:t,subscribe:r,root:o=document})=>{let i=null,s=[];const u=()=>{try{if(s=(()=>{const r=t(e);if(!r||"function"!=typeof r.getCartData)return[];const o=r.getCartData();return Array.isArray(o&&o.crossSells)?o.crossSells:[]})(),0===s.length)return;const r=s.map(((t,e)=>({...w(t,b),index:e+1}))),o=r.map((t=>{var e,r;return`${null!==(e=null!==(r=t.item_id)&&void 0!==r?r:t.id)&&void 0!==e?e:""}`})).join("|");if(o===i)return;i=o,a(c,{ecommerce:{items:r}})}catch(t){p("cart-cross-sells",t)}},l=r(y(u));u();const m=t=>{try{const e=t.target.closest?t.target.closest("a[href]"):null;if(!e)return;const r=e.getAttribute("href");if(!r)return;const o=s.find((t=>t.permalink&&t.permalink===r));if(!o)return;a(n,{ecommerce:{items:[w(o,b)]}})}catch(t){p("cart-cross-sells-select",t)}};o.addEventListener("click",m,!0)})(s),(()=>{const t={};(0,q.addAction)(`${S}-product-list-render`,A,(({products:e=[],listName:r="All products"}={})=>{try{if(!e.length||C())return;const o=e.map(((t,e)=>({...w(t,r),index:e+1}))),n=(t=>t.map((t=>{var e,r;return`${null!==(e=null!==(r=t.item_id)&&void 0!==r?r:t.id)&&void 0!==e?e:""}`})).join("|"))(o);if(t[r]===n)return;t[r]=n,a(c,{ecommerce:{items:o}})}catch(t){p("all-products-list",t)}})),(0,q.addAction)(`${S}-product-view-link`,A,(({product:t,listName:e=""}={})=>{try{if(!t||C())return;a(n,{ecommerce:{items:[w(t,e)]}})}catch(t){p("all-products-select",t)}}))})(),document.querySelector(".wp-block-woocommerce-product-collection")&&D({}),document.querySelector(".wp-block-woocommerce-related-products")&&(({root:t=document,observerFactory:e}={})=>{D({root:t,selector:".wp-block-woocommerce-related-products",listNameResolver:()=>"Related products",...e?{observerFactory:e}:{}})})(),document.querySelector(".wp-block-woocommerce-single-product")&&(({root:t=document}={})=>{try{var e;const r=t.querySelector(".wp-block-woocommerce-single-product");if(!r)return;if((()=>{const t=window.gtmkit_settings?.datalayer_name||"dataLayer",e=window[t];return!!Array.isArray(e)&&e.some((t=>t&&"object"==typeof t&&t.event===i))})())return;const o=r.querySelector(".gtmkit_block_product_data");if(!o)return;const c=d(o.getAttribute("data-gtmkit_product_data"));if(!c||0===Object.keys(c).length)return;a(i,{ecommerce:{currency:m(),value:Number(null!==(e=c.price)&&void 0!==e?e:0),items:[c]}})}catch(t){p("single-product-block",t)}})(),document.querySelector(".wc-block-product-search")&&(({root:t=document}={})=>{t.addEventListener("submit",(t=>{try{const e=t.target.closest?t.target.closest(".wc-block-product-search"):null;if(!e)return;const r=e.querySelector('.wc-block-product-search__field, input[type="search"], input[name="s"]'),o=r&&r.value?r.value.trim():"";if(!o)return;a("search",{search_term:o})}catch(t){p("product-search",t)}}),!0)})()}catch(t){p("boot",t)}};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",O):O()})();