// source --> https://flirtinfashion.gr/wp-content/plugins/remove-uppercase-accents/js/jquery.remove-uppercase-accents.js?ver=5.9.13 
/*
 * Remove Uppercase Accents for Wordpress
 */

(function (jQuery) {
	jQuery.extend(jQuery.expr[":"], {
		uppercase: function (elem) {
			var attr = jQuery(elem).css("text-transform");
			return (typeof attr !== "undefined" && attr === "uppercase");
		},
		smallcaps: function (elem) {
			var attr = jQuery(elem).css("font-variant");
			return (typeof attr !== "undefined" && attr === "small-caps");
		}
	});

	jQuery.extend({
		removeAcc: function (elem) {
			var text = (elem.tagName.toLowerCase() == "input") ? elem.value : elem.innerHTML;
			var accents = rua.accents;

			accents.forEach(function (item) {
				var reg = new RegExp(item.original, 'g');
				text = text.replace(reg, item.convert);
			});

			(elem.tagName.toLowerCase() == "input") ? (elem.value = text) : (elem.innerHTML = text);
		}
	});

	jQuery.fn.extend({
		removeAcc: function () {
			return this.each(function () {
				if (jQuery(this).attr('id') !== 'ship-to-different-address' && !jQuery(this).parents('#ship-to-different-address').length) {
					jQuery.removeAcc(this);
				}
			});
		}
	});

})(jQuery);

jQuery(document).ready(function ($) {
	$(':uppercase').removeAcc();
	$(document).ajaxComplete(function (event, request, settings) {
		$(':uppercase').removeAcc();
	});
});
// source --> https://flirtinfashion.gr/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4 
/*!
 * JavaScript Cookie v2.1.4
 * https://github.com/js-cookie/js-cookie
 *
 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
 * Released under the MIT license
 */
!function(e){var n,o,t=!1;"function"==typeof define&&define.amd&&(define(e),t=!0),"object"==typeof exports&&(module.exports=e(),t=!0),t||(n=window.Cookies,(o=window.Cookies=e()).noConflict=function(){return window.Cookies=n,o})}(function(){function m(){for(var e=0,n={};e<arguments.length;e++){var o,t=arguments[e];for(o in t)n[o]=t[o]}return n}return function e(C){function g(e,n,o){var t,r;if("undefined"!=typeof document){if(1<arguments.length){"number"==typeof(o=m({path:"/"},g.defaults,o)).expires&&((r=new Date).setMilliseconds(r.getMilliseconds()+864e5*o.expires),o.expires=r),o.expires=o.expires?o.expires.toUTCString():"";try{t=JSON.stringify(n),/^[\{\[]/.test(t)&&(n=t)}catch(l){}n=C.write?C.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=(e=(e=encodeURIComponent(String(e))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape);var i,c="";for(i in o)o[i]&&(c+="; "+i,!0!==o[i]&&(c+="="+o[i]));return document.cookie=e+"="+n+c}e||(t={});for(var s=document.cookie?document.cookie.split("; "):[],f=/(%[0-9A-Z]{2})+/g,p=0;p<s.length;p++){var a=s[p].split("=");'"'===(u=a.slice(1).join("=")).charAt(0)&&(u=u.slice(1,-1));try{var d=a[0].replace(f,decodeURIComponent),u=C.read?C.read(u,d):C(u,d)||u.replace(f,decodeURIComponent);if(this.json)try{u=JSON.parse(u)}catch(l){}if(e===d){t=u;break}e||(t[d]=u)}catch(l){}}return t}}return(g.set=g).get=function(e){return g.call(g,e)},g.getJSON=function(){return g.apply({json:!0},[].slice.call(arguments))},g.defaults={},g.remove=function(e,n){g(e,"",m(n,{expires:-1}))},g.withConverter=e,g}(function(){})});
// source --> https://flirtinfashion.gr/wp-content/plugins/duracelltomi-google-tag-manager/js/gtm4wp-contact-form-7-tracker.js?ver=1.13.1 
jQuery( function() {
	jQuery( ".wpcf7" )
		.on( 'wpcf7mailsent', function( e ) {
			var gtm4wp_cf7formid = '(not set)';
			if ( e && e.detail && e.detail.contactFormId ) {
				gtm4wp_cf7formid = e.detail.contactFormId;
			} else if ( e && e.originalEvent && e.originalEvent.detail && e.originalEvent.detail.contactFormId ) {
				gtm4wp_cf7formid = e.originalEvent.detail.contactFormId;
			}

			var gtm4wp_cf7forminputs = [];
			if ( e && e.detail && e.detail.inputs ) {
				gtm4wp_cf7forminputs = e.detail.inputs;
			} else if ( e && e.originalEvent && e.originalEvent.detail && e.originalEvent.detail.inputs ) {
				gtm4wp_cf7forminputs = e.originalEvent.detail.inputs;
			}

			window[ gtm4wp_datalayer_name ].push({
				'event': 'gtm4wp.contactForm7Submitted',
				'gtm4wp.cf7formid': gtm4wp_cf7formid,
				'gtm4wp.cf7inputs': gtm4wp_cf7forminputs
			});
		});
});
// source --> https://flirtinfashion.gr/wp-content/plugins/duracelltomi-google-tag-manager/js/gtm4wp-form-move-tracker.js?ver=1.13.1 
jQuery( function() {
	jQuery( ":input" )
		.on( "focus", function() {
			var input      = jQuery(this);
			var inputID    = input.attr("id") || "(no input ID)";
			var inputName  = input.attr("name") || "(no input name)";
			var inputClass = input.attr("class") || "(no input class)";

			var form      = jQuery(this.form);
			var formID    = form.attr("id") || "(no form ID)";
			var formName  = form.attr("name") || "(no form name)";
			var formClass = form.attr("class") || "(no form class)";

			window[ gtm4wp_datalayer_name ].push({
				'event'    : 'gtm4wp.formElementEnter',

				'inputID'   : inputID,
				'inputName' : inputName,
				'inputClass': inputClass,

				'formID'   : formID,
				'formName' : formName,
				'formClass': formClass
			});
		})

		.on( "blur", function() {
			var input      = jQuery(this);
			var inputID    = input.attr("id") || "(no input ID)";
			var inputName  = input.attr("name") || "(no input name)";
			var inputClass = input.attr("class") || "(no input class)";

			var form      = jQuery(this.form);
			var formID    = form.attr("id") || "(no form ID)";
			var formName  = form.attr("name") || "(no form name)";
			var formClass = form.attr("class") || "(no form class)";

			window[ gtm4wp_datalayer_name ].push({
				'event'    : 'gtm4wp.formElementLeave',

				'inputID'   : inputID,
				'inputName' : inputName,
				'inputClass': inputClass,

				'formID'   : formID,
				'formName' : formName,
				'formClass': formClass
			});
		});
});
// source --> https://flirtinfashion.gr/wp-content/plugins/duracelltomi-google-tag-manager/js/gtm4wp-woocommerce-classic.js?ver=1.13.1 
jQuery(function() {
	jQuery( document ).on( 'click', '.add_to_cart_button:not(.product_type_variable, .product_type_grouped, .single_add_to_cart_button)', function() {
		var productdata = jQuery( this ).closest( '.product' ).find( '.gtm4wp_productdata' );

		window[ gtm4wp_datalayer_name ].push({
			'event': 'gtm4wp.addProductToCart',
			'productName': productdata.data( 'gtm4wp_product_name' ),
			'productSKU': jQuery( this ).data( 'product_sku' ),
			'productID': jQuery( this ).data( 'product_id' ),
		});
	});

	jQuery( document ).on( 'click', '.single_add_to_cart_button', function() {
		var _product_form     = jQuery( this ).closest( 'form.cart' );
		var _product_id       = jQuery( '[name=gtm4wp_id]', _product_form ).val();
		var _product_name     = jQuery( '[name=gtm4wp_name]', _product_form ).val();
		var _product_sku      = jQuery( '[name=gtm4wp_sku]', _product_form ).val();
		var _product_is_grouped = jQuery( _product_form ).hasClass( 'grouped_form' );

		if ( ! _product_is_grouped ) {
			window[ gtm4wp_datalayer_name ].push({
				'event': 'gtm4wp.addProductToCart',
				'productName': _product_name,
				'productSKU':  _product_sku,
				'productID':   _product_id
			});
		}
	});
});
// source --> https://flirtinfashion.gr/wp-content/plugins/duracelltomi-google-tag-manager/js/gtm4wp-woocommerce-enhanced.js?ver=1.13.1 
var gtm4wp_last_selected_product_variation;
var gtm4wp_changedetail_fired_during_pageload=false;

function gtm4wp_map_eec_to_ga4( productdata ) {
	if (!productdata) {
		return;
	}

	var category_path  = productdata.category ? productdata.category : '';
	var category_parts = category_path.toString().split('/');

	// default, required parameters
	var ga4_product = {
		'item_id': productdata.id ? productdata.id : '',
		'item_name': productdata.name ? productdata.name : '',
		'item_brand': productdata.brand ? productdata.brand : '',
		'price': productdata.price ? productdata.price : ""
	};

	// category, also handle category path
	if ( 1 == category_parts.length ) {
		ga4_product.item_category = category_parts[0];
	} else if ( category_parts.length > 1 ) {
		ga4_product.item_category = category_parts[0];
		for( var i=1; i < Math.min( 5, category_parts.length ); i++ ) {
			ga4_product[ 'item_category_' + (i+1) ] = category_parts[i];
		}
	}

	// optional parameters which should not be included in the array if not set
	if ( productdata.variant ) {
		ga4_product.item_variant = productdata.variant;
	}
	if ( productdata.list ) {
		ga4_product.item_list_name = productdata.list;
	}
	if ( productdata.position ) {
		ga4_product.index = productdata.position;
	}
	if ( productdata.quantity ) {
		ga4_product.quantity = productdata.quantity;
	}
	if ( productdata.coupon ) {
		ga4_product.coupon = productdata.coupon;
	}

	ga4_product.google_business_vertical = window.gtm4wp_business_vertical;
	ga4_product[ window.gtm4wp_business_vertical_id ] = gtm4wp_id_prefix + ga4_product[ "item_id" ];

	return ga4_product;
}

function gtm4wp_handle_cart_qty_change() {
	jQuery( '.product-quantity input.qty' ).each(function() {
		var _original_value = jQuery( this ).prop( 'defaultValue' );

		var _current_value  = parseInt( jQuery( this ).val() );
		if ( Number.isNaN( _current_value ) ) {
			_current_value = _original_value;
		}

		if ( _original_value != _current_value ) {
			var productdata = jQuery( this ).closest( '.cart_item' ).find( '.remove' );
			var productprice = productdata.data( 'gtm4wp_product_price' );

			if ( typeof productprice == "string" ) {
				productprice = parseFloat( productprice );
				if ( isNaN( productprice ) ) {
					productprice = 0;
				}
			} else if ( typeof productprice != "number" ) {
				productprice = 0;
			}

			if ( _original_value < _current_value ) {
				var product_data = {
					'name':       productdata.data( 'gtm4wp_product_name' ),
					'id':         productdata.data( 'gtm4wp_product_id' ),
					'price':      productprice.toFixed(2),
					'category':   productdata.data( 'gtm4wp_product_cat' ),
					'variant':    productdata.data( 'gtm4wp_product_variant' ),
					'stocklevel': productdata.data( 'gtm4wp_product_stocklevel' ),
					'brand':      productdata.data( 'gtm4wp_product_brand' ),
					'quantity':   _current_value - _original_value
				};

				// fire ga3 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'gtm4wp.addProductToCartEEC',
					'ecommerce': {
						'currencyCode': gtm4wp_currency,
						'add': {
							'products': [ product_data ]
						}
					}
				});

				// fire ga4 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'add_to_cart',
					'ecommerce': {
						'currency': gtm4wp_currency, // ga4 version
						'value': productprice.toFixed(2) * (_current_value - _original_value),
						'items': [ gtm4wp_map_eec_to_ga4( product_data ) ]
					}
				});
			} else {
				var product_data = {
					'name':       productdata.data( 'gtm4wp_product_name' ),
					'id':         productdata.data( 'gtm4wp_product_id' ),
					'price':      productprice.toFixed(2),
					'category':   productdata.data( 'gtm4wp_product_cat' ),
					'variant':    productdata.data( 'gtm4wp_product_variant' ),
					'stocklevel': productdata.data( 'gtm4wp_product_stocklevel' ),
					'brand':      productdata.data( 'gtm4wp_product_brand' ),
					'quantity':   _original_value - _current_value
				};

				// fire ga3 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'gtm4wp.removeFromCartEEC',
					'ecommerce': {
						'currencyCode': gtm4wp_currency,
						'remove': {
							'products': [ product_data ]
						}
					}
				});

				// fire ga4 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'remove_from_cart',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'value': productprice.toFixed(2) * (_original_value - _current_value),
						'items': [ gtm4wp_map_eec_to_ga4( product_data ) ]
					}
				});
			}
		} // end if qty changed
	}); // end each qty field
} // end gtm4wp_handle_cart_qty_change()

jQuery(function() {
	var is_cart     = jQuery( 'body' ).hasClass( 'woocommerce-cart' );
	var is_checkout = jQuery( 'body' ).hasClass( 'woocommerce-checkout' );

	// track impressions of products in product lists
	if ( jQuery( '.gtm4wp_productdata,.widget-product-item' ).length > 0 ) {
		var products = [];
		var ga4_products = [];
		var productdata, productprice=0;
		var product_data;

		jQuery( '.gtm4wp_productdata,.widget-product-item' ).each( function() {
			productdata = jQuery( this );
			productprice = productdata.data( 'gtm4wp_product_price' );

			if ( typeof productprice == "string" ) {
				productprice = parseFloat( productprice );
				if ( isNaN( productprice ) ) {
					productprice = 0;
				}
			} else if ( typeof productprice != "number" ) {
				productprice = 0;
			}

			product_data = {
				'name':       productdata.data( 'gtm4wp_product_name' ),
				'id':         productdata.data( 'gtm4wp_product_id' ),
				'price':      productprice.toFixed(2),
				'category':   productdata.data( 'gtm4wp_product_cat' ),
				'position':   productdata.data( 'gtm4wp_product_listposition' ),
				'list':       productdata.data( 'gtm4wp_productlist_name' ),
				'stocklevel': productdata.data( 'gtm4wp_product_stocklevel' ),
				'brand':      productdata.data( 'gtm4wp_product_brand' )
			};
			products.push(product_data);
			ga4_products.push( gtm4wp_map_eec_to_ga4( product_data ) );
		});

		if ( gtm4wp_product_per_impression > 0 ) {
			// Need to split the product submissions up into chunks in order to avoid the GA 8kb submission limit
			var chunk, ga4_chunk;
			while ( products.length ) {
				chunk = products.splice( 0, gtm4wp_product_per_impression );
				ga4_chunk = ga4_products.splice( 0, gtm4wp_product_per_impression );

				// fire ga3 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'gtm4wp.productImpressionEEC',
					'ecommerce': {
						'currencyCode': gtm4wp_currency,
						'impressions': chunk
					}
				});

				// fire ga4 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'view_item_list',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'items': ga4_chunk
					}
				});
			}
		} else {
			for( var i=0; i<window[ gtm4wp_datalayer_name ].length; i++ ) {
				if ( window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ] ) {

					if ( ! window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ][ 'impressions' ] ) {
						window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ][ 'impressions' ] = products;
					} else {
						window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ][ 'impressions' ] = window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ][ 'impressions' ].concat( products );
					}

					break;
				}
			}

			if ( i == window[ gtm4wp_datalayer_name ].length ) {
				// no existing ecommerce data found in the datalayer
				i = 0;
				window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ] = {};
				window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ][ 'impressions' ] = products;
			}

			window[ gtm4wp_datalayer_name ][ i ][ 'ecommerce' ][ 'currencyCode' ] = gtm4wp_currency;
		}
	}

	// track add to cart events for simple products in product lists
	jQuery( document ).on( 'click', '.add_to_cart_button:not(.product_type_variable, .product_type_grouped, .single_add_to_cart_button)', function() {
		var productdata = jQuery( this ).closest( '.product' ).find( '.gtm4wp_productdata' );
		var productprice = productdata.data( 'gtm4wp_product_price' );

		if ( typeof productprice == "string" ) {
			productprice = parseFloat( productprice );
			if ( isNaN( productprice ) ) {
				productprice = 0;
			}
		} else if ( typeof productprice != "number" ) {
			productprice = 0;
		}

		var product_data = {
			'name':       productdata.data( 'gtm4wp_product_name' ),
			'id':         productdata.data( 'gtm4wp_product_id' ),
			'price':      productprice.toFixed(2),
			'category':   productdata.data( 'gtm4wp_product_cat' ),
			'stocklevel': productdata.data( 'gtm4wp_product_stocklevel' ),
			'brand':      productdata.data( 'gtm4wp_product_brand' ),
			'quantity':   1
		};

		// fire ga3 version
		window[ gtm4wp_datalayer_name ].push({
			'event': 'gtm4wp.addProductToCartEEC',
			'ecommerce': {
				'currencyCode': gtm4wp_currency,
				'add': {
					'products': [ product_data ]
				}
			}
		});

		// fire ga4 version
		window[ gtm4wp_datalayer_name ].push({
			'event': 'add_to_cart',
			'ecommerce': {
				'currency': gtm4wp_currency,
				'value': productprice.toFixed(2),
				'items': [ gtm4wp_map_eec_to_ga4( product_data ) ]
			}
		});
	});

	// track add to cart events for products on product detail pages
	jQuery( document ).on( 'click', '.single_add_to_cart_button:not(.disabled)', function() {
		var product_form       = jQuery( this ).closest( 'form.cart' );
		var product_variant_id = jQuery( '[name=variation_id]', product_form );
		var product_is_grouped = jQuery( product_form ).hasClass( 'grouped_form' );

		if ( product_variant_id.length > 0 ) {
			if ( gtm4wp_last_selected_product_variation ) {
				gtm4wp_last_selected_product_variation.quantity = jQuery( '[name=quantity]', product_form ).val();

				// fire ga3 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'gtm4wp.addProductToCartEEC',
					'ecommerce': {
						'currencyCode': gtm4wp_currency,
						'add': {
							'products': [gtm4wp_last_selected_product_variation]
						}
					}
				});

				// fire ga4 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'add_to_cart',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'value': gtm4wp_last_selected_product_variation.price * gtm4wp_last_selected_product_variation.quantity,
						'items': [ gtm4wp_map_eec_to_ga4( gtm4wp_last_selected_product_variation ) ]
					}
				});
			}
		} else if ( product_is_grouped ) {
			var products_in_group = jQuery( '.grouped_form .gtm4wp_productdata' );
			var products = [];
			var ga4_products = [];
			var sum_value = 0;

			products_in_group.each( function() {
				var productdata = jQuery( this );

				var product_qty_input = jQuery( 'input[name=quantity\\[' + productdata.data( 'gtm4wp_product_id' ) + '\\]]' );
				if ( product_qty_input.length > 0 ) {
					product_qty = product_qty_input.val();
				} else {
					return;
				}

				if ( 0 == product_qty ) {
					return;
				}

				var product_data = {
					'id':         gtm4wp_use_sku_instead ? productdata.data( 'gtm4wp_product_sku' ) : productdata.data( 'gtm4wp_product_id' ),
					'name':       productdata.data( 'gtm4wp_product_name' ),
					'price':      productdata.data( 'gtm4wp_product_price' ),
					'category':   productdata.data( 'gtm4wp_product_cat' ),
					'quantity':   product_qty,
					'stocklevel': productdata.data( 'gtm4wp_product_stocklevel' ),
					'brand':      productdata.data( 'gtm4wp_product_brand' )
				};

				products.push( product_data );
				ga4_products.push( gtm4wp_map_eec_to_ga4( product_data ) );
				sum_value += product_data.price * product_data.quantity;
			});

			if ( 0 == products.length ) {
				return;
			}

			// fire ga3 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'gtm4wp.addProductToCartEEC',
				'ecommerce': {
					'currencyCode': gtm4wp_currency,
					'add': {
						'products': products
					}
				}
			});

			// fire ga4 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'add_to_cart',
				'ecommerce': {
					'currency': gtm4wp_currency,
					'value': sum_value,
					'items': ga4_products
				}
			});
		} else {
			var product_data = {
				'id':         gtm4wp_use_sku_instead ? jQuery( '[name=gtm4wp_sku]', product_form ).val() : jQuery( '[name=gtm4wp_id]', product_form ).val(),
				'name':       jQuery( '[name=gtm4wp_name]', product_form ).val(),
				'price':      jQuery( '[name=gtm4wp_price]', product_form ).val(),
				'category':   jQuery( '[name=gtm4wp_category]', product_form ).val(),
				'quantity':   jQuery( '[name=quantity]', product_form ).val(),
				'stocklevel': jQuery( '[name=gtm4wp_stocklevel]', product_form ).val(),
				'brand':      jQuery( '[name=gtm4wp_brand]', product_form ).val()
			};

			// fire ga3 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'gtm4wp.addProductToCartEEC',
				'ecommerce': {
					'currencyCode': gtm4wp_currency,
					'add': {
						'products': [ product_data ]
					}
				}
			});

			// fire ga4 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'add_to_cart',
				'ecommerce': {
					'currency': gtm4wp_currency,
					'value': product_data.price * product_data.quantity,
					'items': [ gtm4wp_map_eec_to_ga4( product_data ) ]
				}
			});
		}
	});

	// track remove links in mini cart widget and on cart page
	jQuery( document ).on( 'click', '.mini_cart_item a.remove,.product-remove a.remove', function() {
		var productdata = jQuery( this );

		var qty = 0;
		var qty_element = jQuery( this ).closest( '.cart_item' ).find( '.product-quantity input.qty' );
		if ( qty_element.length === 0 ) {
			qty_element = jQuery( this ).closest( '.mini_cart_item' ).find( '.quantity' );
			if ( qty_element.length > 0 ) {
				qty = parseInt( qty_element.text() );

				if ( Number.isNaN( qty ) ) {
					qty = 0;
				}
			}
		} else {
			qty = qty_element.val();
		}

		if ( qty === 0 ) {
			return true;
		}

		var product_data = {
			'name':       productdata.data( 'gtm4wp_product_name' ),
			'id':         productdata.data( 'gtm4wp_product_id' ),
			'price':      productdata.data( 'gtm4wp_product_price' ),
			'category':   productdata.data( 'gtm4wp_product_cat' ),
			'variant':    productdata.data( 'gtm4wp_product_variant' ),
			'stocklevel': productdata.data( 'gtm4wp_product_stocklevel' ),
			'brand':      productdata.data( 'gtm4wp_product_brand' ),
			'quantity':   qty
		};

		// fire ga3 version
		window[ gtm4wp_datalayer_name ].push({
			'event': 'gtm4wp.removeFromCartEEC',
			'ecommerce': {
				'currencyCode': gtm4wp_currency,
				'remove': {
					'products': [ product_data ]
				}
			}
		});

		// fire ga4 version
		window[ gtm4wp_datalayer_name ].push({
			'event': 'remove_from_cart',
			'ecommerce': {
				'currency': gtm4wp_currency,
				'value': product_data.price * product_data.quantity,
				'items': [ gtm4wp_map_eec_to_ga4( product_data ) ]
			}
		});
	});

	// track clicks in product lists
	jQuery( document ).on( 'click', '.products li:not(.product-category) a:not(.add_to_cart_button):not(.quick-view-button),.products>div:not(.product-category) a:not(.add_to_cart_button):not(.quick-view-button),.widget-product-item,.woocommerce-grouped-product-list-item__label a', function( event ) {
		// do nothing if GTM is blocked for some reason
		if ( 'undefined' == typeof google_tag_manager ) {
			return true;
		}

		var temp_selector = jQuery( this ).closest( '.product' );
		var dom_productdata = '';

		if ( temp_selector.length > 0 ) {
			dom_productdata = temp_selector.find( '.gtm4wp_productdata' );

		} else {
			temp_selector = jQuery( this ).closest( '.products li' );

			if ( temp_selector.length > 0 ) {
				dom_productdata = temp_selector.find( '.gtm4wp_productdata' );

			} else {
				temp_selector = jQuery( this ).closest( '.products>div' );

				if ( temp_selector.length > 0 ) {
					dom_productdata = temp_selector.find( '.gtm4wp_productdata' );

				} else {
					temp_selector = jQuery( this ).closest( '.woocommerce-grouped-product-list-item__label' );

					if ( temp_selector.length > 0 ) {
						dom_productdata = temp_selector.find( '.gtm4wp_productdata' );
					} else {
						dom_productdata = jQuery( this );
					}
				}
			}
		}

		if ( ( 'undefined' == typeof dom_productdata.data( 'gtm4wp_product_id' ) ) || ( '' == dom_productdata.data( 'gtm4wp_product_id' ) ) ) {
			return true;
		}

		// only act on links pointing to the product detail page
		if ( dom_productdata.data( 'gtm4wp_product_url' ) != jQuery( this ).attr( 'href' ) ) {
			return true;
		}

		var ctrl_key_pressed = event.ctrlKey || event.metaKey;

		event.preventDefault();
		if ( ctrl_key_pressed ) {
			// we need to open the new tab/page here so that popup blocker of the browser doesn't block our code
			var productpage_window = window.open( 'about:blank', '_blank' );
		}

		var product_data = {
			'id':         dom_productdata.data( 'gtm4wp_product_id' ),
			'name':       dom_productdata.data( 'gtm4wp_product_name' ),
			'price':      dom_productdata.data( 'gtm4wp_product_price' ),
			'category':   dom_productdata.data( 'gtm4wp_product_cat' ),
			'stocklevel': dom_productdata.data( 'gtm4wp_product_stocklevel' ),
			'brand':      dom_productdata.data( 'gtm4wp_product_brand' ),
			'position':   dom_productdata.data( 'gtm4wp_product_listposition' )
		};

		// fire ga3 version
		window[ gtm4wp_datalayer_name ].push({
			'event': 'gtm4wp.productClickEEC',
			'ecommerce': {
				'currencyCode': gtm4wp_currency,
				'click': {
					'actionField': {'list': dom_productdata.data( 'gtm4wp_productlist_name' )},
					'products': [ product_data ]
				}
			},
			'eventCallback': function() {

				// do not fire this event multiple times
				if ( window[ "gtm4wp_select_item_" + product_data.id ] ) {
					return;
				}

				// fire ga4 version
				window[ gtm4wp_datalayer_name ].push({
					'event': 'select_item',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'items': [ gtm4wp_map_eec_to_ga4( product_data ) ]
					},
					'eventCallback': function() {

						if ( ctrl_key_pressed && productpage_window ) {
							productpage_window.location.href= dom_productdata.data( 'gtm4wp_product_url' );
						} else {
							document.location.href = dom_productdata.data( 'gtm4wp_product_url' );
						}

					},
					'eventTimeout': 2000
				});

				window[ "gtm4wp_select_item_" + product_data.id ] = true;

			},
			'eventTimeout': 2000
		});
	});

	// track variable products on their detail pages
	jQuery( document ).on( 'found_variation', function( event, product_variation ) {
		if ( "undefined" == typeof product_variation ) {
			// some ither plugins trigger this event without variation data
			return;
		}

		if ( (document.readyState === "interactive") && gtm4wp_changedetail_fired_during_pageload ) {
			// some custom attribute rendering plugins fire this event multiple times during page load
			return;
		}

		var product_form       = event.target;
		var product_variant_id = jQuery( '[name=variation_id]', product_form );
		var product_id         = jQuery( '[name=gtm4wp_id]', product_form ).val();
		var product_name       = jQuery( '[name=gtm4wp_name]', product_form ).val();
		var product_sku        = jQuery( '[name=gtm4wp_sku]', product_form ).val();
		var product_category   = jQuery( '[name=gtm4wp_category]', product_form ).val();
		var product_price      = jQuery( '[name=gtm4wp_price]', product_form ).val();
		var product_stocklevel = jQuery( '[name=gtm4wp_stocklevel]', product_form ).val();
		var product_brand      = jQuery( '[name=gtm4wp_brand]', product_form ).val();

		var current_product_detail_data = {
			name: product_name,
			id: 0,
			price: 0,
			category: product_category,
			stocklevel: product_stocklevel,
			brand: product_brand,
			variant: ''
		};

		current_product_detail_data.id = product_variation.variation_id;
		if ( gtm4wp_use_sku_instead && product_variation.sku && ('' !== product_variation.sku) ) {
			current_product_detail_data.id = product_variation.sku;
		}
		current_product_detail_data.price = product_variation.display_price;

		var _tmp = [];
		for( var attrib_key in product_variation.attributes ) {
			_tmp.push( product_variation.attributes[ attrib_key ] );
		}
		current_product_detail_data.variant = _tmp.join(',');
		gtm4wp_last_selected_product_variation = current_product_detail_data;

		// fire ga3 version
		window[ gtm4wp_datalayer_name ].push({
			'event': 'gtm4wp.changeDetailViewEEC',
			'ecommerce': {
				'currencyCode': gtm4wp_currency,
				'detail': {
					'products': [ current_product_detail_data ]
				}
			},
			'ecomm_prodid': gtm4wp_id_prefix + current_product_detail_data.id,
			'ecomm_pagetype': 'product',
			'ecomm_totalvalue': current_product_detail_data.price,
		});

		// fire ga4 version
		window[ gtm4wp_datalayer_name ].push({
			'event': 'view_item',
			'ecommerce': {
				'currency': gtm4wp_currency,
				'items': [ gtm4wp_map_eec_to_ga4( current_product_detail_data ) ]
			}
		});

		if ( document.readyState === "interactive" ) {
			gtm4wp_changedetail_fired_during_pageload = true;
		}
	});
	jQuery( '.variations select' ).trigger( 'change' );

	// initiate codes in WooCommere Quick View
	jQuery( document ).ajaxSuccess( function( event, xhr, settings ) {
		if(typeof settings !== 'undefined') {
			if (settings.url.indexOf( 'wc-api=WC_Quick_View' ) > -1 ) {
			  setTimeout( function() {
					jQuery( ".woocommerce.quick-view" ).parent().find( "script" ).each( function(i) {
						eval( jQuery( this ).text() );
					});
				}, 500);
			}
		}
	});

	// codes for enhanced ecommerce events on cart page
	if ( is_cart ) {
		jQuery( document ).on( 'click', '[name=update_cart]', function() {
			gtm4wp_handle_cart_qty_change();
		});

		jQuery( document ).on( 'keypress', '.woocommerce-cart-form input[type=number]', function() {
			gtm4wp_handle_cart_qty_change();
		});
	}

	// codes for enhanced ecommerce events on checkout page
	if ( is_checkout ) {
		window.gtm4wp_checkout_step_offset  = window.gtm4wp_checkout_step_offset || 0;
		window.gtm4wp_checkout_value        = window.gtm4wp_checkout_value || 0;
		window.gtm4wp_checkout_products     = window.gtm4wp_checkout_products || [];
		window.gtm4wp_checkout_products_ga4 = window.gtm4wp_checkout_products_ga4 || [];

		var gtm4wp_shipping_payment_method_step_offset =  window.gtm4wp_needs_shipping_address ? 0 : -1;
		var gtm4wp_checkout_step_fired                 = []; // step 1 will be the billing section which is reported during pageload, no need to handle here

		// this checkout step is not reported to GA4 as currently there is no option to report in-between custom steps
		jQuery( document ).on( 'blur', 'input[name^=shipping_]:not(input[name^=shipping_method])', function() {
			// do not report checkout step if already reported
			if ( gtm4wp_checkout_step_fired.indexOf( 'shipping' ) > -1 ) {
				return;
			}

			// do not report checkout step if user is traversing through the section without filling in any data
			if ( jQuery( this ).val().trim() == '' ) {
				return;
			}

			window[ gtm4wp_datalayer_name ].push({
				'event': 'gtm4wp.checkoutStepEEC',
				'ecommerce': {
					'currencyCode': gtm4wp_currency, // ga3 version
					'checkout': {
						'actionField': {
							'step': 2 + window.gtm4wp_checkout_step_offset
						},
						'products': window.gtm4wp_checkout_products
					}
				}
			});

			gtm4wp_checkout_step_fired.push( 'shipping' );
		});

		jQuery( document ).on( 'change', 'input[name^=shipping_method]', function() {
			// do not report checkout step if already reported
			if ( gtm4wp_checkout_step_fired.indexOf( 'shipping_method' ) > -1 ) {
				return;
			}

			// do not fire event during page load
			if ( 'complete' != document.readyState ) {
				return;
			}

			var shipping_tier = '(shipping tier not found)';
			var shipping_el = jQuery( 'input[name^=shipping_method]:checked' );
			if ( shipping_el.length == 0 ) {
				shipping_el = jQuery( 'input[name^=shipping_method]:first' );
			}
			if ( shipping_el.length > 0 ) {
				shipping_tier = shipping_el.val();
			}

			// fire ga3 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'gtm4wp.checkoutStepEEC',
				'ecommerce': {
					'currencyCode': gtm4wp_currency,
					'checkout': {
						'actionField': {
							'step': 3 + window.gtm4wp_checkout_step_offset + gtm4wp_shipping_payment_method_step_offset
						},
						'products': window.gtm4wp_checkout_products
					}
				}
			});

			// fire ga4 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'add_shipping_info',
				'ecommerce': {
					'currency': gtm4wp_currency,
					'shipping_tier': shipping_tier,
					'value': window.gtm4wp_checkout_value,
					'items': window.gtm4wp_checkout_products_ga4
				}
			});

			gtm4wp_checkout_step_fired.push( 'shipping_method' );
		});

		jQuery( document ).on( 'change', 'input[name=payment_method]', function() {
			// do not report checkout step if already reported
			if ( gtm4wp_checkout_step_fired.indexOf( 'payment_method' ) > -1 ) {
				return;
			}

			// do not fire event during page load
			if ( 'complete' != document.readyState ) {
				return;
			}

			var payment_type = '(payment type not found)';
			var payment_el = jQuery( '.payment_methods input:checked' );
			if ( payment_el.length == 0 ) {
				payment_el = jQuery( 'input[name^=payment_method]:first' );
			}
			if ( payment_el.length > 0 ) {
				payment_type = payment_el.val();
			}

			// fire ga3 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'gtm4wp.checkoutStepEEC',
				'ecommerce': {
					'currencyCode': gtm4wp_currency,
					'checkout': {
						'actionField': {
							'step': 4 + window.gtm4wp_checkout_step_offset + gtm4wp_shipping_payment_method_step_offset
						},
						'products': window.gtm4wp_checkout_products
					}
				}
			});

			// fire ga4 version
			window[ gtm4wp_datalayer_name ].push({
				'event': 'add_payment_info',
				'ecommerce': {
					'currency': gtm4wp_currency,
					'payment_type': payment_type,
					'value': window.gtm4wp_checkout_value,
					'items': window.gtm4wp_checkout_products_ga4
				}
			});

			gtm4wp_checkout_step_fired.push( 'payment_method' );
		});

		jQuery( 'form[name=checkout]' ).on( 'submit', function() {
			if ( gtm4wp_checkout_step_fired.indexOf( 'shipping_method' ) == -1 ) {
				// shipping methods are not visible if only one is available
				// and if the user has already a pre-selected method, no click event will fire to report the checkout step
				var selected_shipping_method = jQuery( 'input[name^=shipping_method]:checked' );
				if ( selected_shipping_method.length == 0 ) {
					selected_shipping_method = jQuery( 'input[name^=shipping_method]:first' );
				}
				if ( selected_shipping_method.length > 0 ) {
					selected_shipping_method.trigger( 'change' );
				}
			}

			if ( gtm4wp_checkout_step_fired.indexOf( 'payment_method' ) == -1 ) {
				// if the user has already a pre-selected method, no click event will fire to report the checkout step
				jQuery( 'input[name=payment_method]:checked' ).trigger( 'change' );
			}

			var shipping_el = jQuery( 'input[name^=shipping_method]:checked' );
			if ( shipping_el.length == 0 ) {
				shipping_el = jQuery( 'input[name^=shipping_method]:first' );
			}
			if ( shipping_el.length > 0 ) {
				window[ gtm4wp_datalayer_name ].push({
					'event': 'gtm4wp.checkoutOptionEEC',
					'ecommerce': {
						'checkout_option': {
							'actionField': {
								'step': 3 + window.gtm4wp_checkout_step_offset + gtm4wp_shipping_payment_method_step_offset,
								'option': 'Shipping: ' + shipping_el.val()
							}
						}
					}
				});
			}

			var payment_el = jQuery( '.payment_methods input:checked' );
			if ( payment_el.length == 0 ) {
				payment_el = jQuery( 'input[name^=payment_method]:first' );
			}
			if ( payment_el.length > 0 ) {
				window[ gtm4wp_datalayer_name ].push({
					'event': 'gtm4wp.checkoutOptionEEC',
					'ecommerce': {
						'checkout_option': {
							'actionField': {
								'step': 4 + window.gtm4wp_checkout_step_offset + gtm4wp_shipping_payment_method_step_offset,
								'option': 'Payment: ' + payment_el.val()
							}
						}
					}
				});
			}
		});
	}

	// codes for Google Ads dynamic remarketing
	if ( window.gtm4wp_remarketing&& !is_cart && !is_checkout ) {
		if ( jQuery( '.gtm4wp_productdata' ).length > 0 ) {
			for( var i=0; i<window[ gtm4wp_datalayer_name ].length; i++ ) {
				if ( window[ gtm4wp_datalayer_name ][ i ][ 'ecomm_prodid' ] ) {
					break;
				}
			}

			if ( i == window[ gtm4wp_datalayer_name ].length ) {
				// no existing dyn remarketing data found in the datalayer
				i = 0;
				window[ gtm4wp_datalayer_name ][ i ][ 'ecomm_prodid' ] = [];
			}

			if ( 'undefined' !== typeof window[ gtm4wp_datalayer_name ][ i ][ 'ecomm_prodid' ].push ) {
				var productdata;
				jQuery( '.gtm4wp_productdata' ).each( function() {
					productdata = jQuery( this );

					window[ gtm4wp_datalayer_name ][ i ][ 'ecomm_prodid' ].push( gtm4wp_id_prefix + productdata.data( 'gtm4wp_product_id' ) );
				});
			}
		}
	}

	// loop through datalayer and fire GA4 version of EEC events
	if ( window[ gtm4wp_datalayer_name ] && window[ gtm4wp_datalayer_name ].forEach ) {
		window[ gtm4wp_datalayer_name ].forEach(function( item ) {

			if ( item && item.ecommerce && item.ecommerce.detail ) {
				window[ gtm4wp_datalayer_name ].push({
					'event': 'view_item',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'items': [ gtm4wp_map_eec_to_ga4( item.ecommerce.detail.products[0] ) ]
					}
				});
			}

			if ( item && item.ecommerce && ( item.ecommerce.cart || (item.ecommerce.checkout && is_cart) ) ) {
				var source_products = item.ecommerce.cart || item.ecommerce.checkout.products;
				var ga4_products = [];
				var sum_value = 0;

				source_products.forEach(function( product ) {
					ga4_products.push( gtm4wp_map_eec_to_ga4( product ) );
					sum_value += product.price * product.quantity;
				});

				window[ gtm4wp_datalayer_name ].push({
					'event': 'view_cart',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'value': sum_value.toFixed(2),
						'items': ga4_products
					}
				});
			}

			if ( item && item.ecommerce && item.ecommerce.checkout && !is_cart ) {
				var ga4_products = [];
				var sum_value = 0;

				item.ecommerce.checkout.products.forEach(function( product ) {
					ga4_products.push( gtm4wp_map_eec_to_ga4( product ) );
					sum_value += product.price * product.quantity;
				});

				window[ gtm4wp_datalayer_name ].push({
					'event': 'begin_checkout',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'value': sum_value,
						'items': ga4_products
					}
				});
			}

			// present if product is readded into cart just after removel
			if ( item && item.ecommerce && item.ecommerce.add ) {
				var ga4_products = [];
				var sum_value = 0;

				item.ecommerce.add.products.forEach(function( product ) {
					ga4_products.push( gtm4wp_map_eec_to_ga4( product ) );
					sum_value += product.price * product.quantity;
				});

				window[ gtm4wp_datalayer_name ].push({
					'event': 'add_to_cart',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'value': sum_value,
						'items': ga4_products
					}
				});
			}

			if ( item && item.ecommerce && item.ecommerce.purchase ) {
				var ga4_products = [];
				item.ecommerce.purchase.products.forEach(function( product ) {
					ga4_products.push( gtm4wp_map_eec_to_ga4( product ) );
				});

				window[ gtm4wp_datalayer_name ].push({
					'event': 'purchase',
					'ecommerce': {
						'currency': gtm4wp_currency,
						'items': ga4_products,
						'transaction_id': item.ecommerce.purchase.actionField.id,
						'affiliation': item.ecommerce.purchase.actionField.affiliation,
						'value': item.ecommerce.purchase.actionField.revenue,
						'tax': item.ecommerce.purchase.actionField.tax,
						'shipping': item.ecommerce.purchase.actionField.shipping,
						'coupon': item.ecommerce.purchase.actionField.coupon
					}
				});
			}
		});
	}
});
// source --> https://flirtinfashion.gr/wp-content/plugins/pixelyoursite/dist/scripts/jquery.bind-first-0.2.3.min.js?ver=5.9.13 
/*
 * jQuery.bind-first library v0.2.3
 * Copyright (c) 2013 Vladimir Zhuravlev
 *
 * Released under MIT License
 * @license
 *
 * Date: Thu Feb  6 10:13:59 ICT 2014
 **/
(function(t){function e(e){return u?e.data("events"):t._data(e[0]).events}function n(t,n,r){var i=e(t),a=i[n];if(!u){var s=r?a.splice(a.delegateCount-1,1)[0]:a.pop();return a.splice(r?0:a.delegateCount||0,0,s),void 0}r?i.live.unshift(i.live.pop()):a.unshift(a.pop())}function r(e,r,i){var a=r.split(/\s+/);e.each(function(){for(var e=0;a.length>e;++e){var r=a[e].trim().match(/[^\.]+/i)[0];n(t(this),r,i)}})}function i(e){t.fn[e+"First"]=function(){var n=t.makeArray(arguments),i=n.shift();return i&&(t.fn[e].apply(this,arguments),r(this,i)),this}}var a=t.fn.jquery.split("."),s=parseInt(a[0]),f=parseInt(a[1]),u=1>s||1==s&&7>f;i("bind"),i("one"),t.fn.delegateFirst=function(){var e=t.makeArray(arguments),n=e[1];return n&&(e.splice(0,2),t.fn.delegate.apply(this,arguments),r(this,n,!0)),this},t.fn.liveFirst=function(){var e=t.makeArray(arguments);return e.unshift(this.selector),t.fn.delegateFirst.apply(t(document),e),this},u||(t.fn.onFirst=function(e,n){var i=t(this),a="string"==typeof n;if(t.fn.on.apply(i,arguments),"object"==typeof e)for(type in e)e.hasOwnProperty(type)&&r(i,type,a);else"string"==typeof e&&r(i,e,a);return i})})(jQuery);