(function ($){
"use strict";
function initMpdGallery($container){
var $galleries=$container ? $container.find('.mpd-product-gallery'):$('.mpd-product-gallery');
$galleries.each(function(){
var $gallery=$(this);
if($gallery.data('mpd-gallery-init')){
return;
}
$gallery.data('mpd-gallery-init', true);
var $mainImage=$gallery.find('.mpd-gallery-main-image');
var $slides=$mainImage.find('.mpd-gallery-slide');
var $thumbs=$gallery.find('.mpd-thumb-item');
var $lightboxTrigger=$gallery.find('.mpd-gallery-lightbox-trigger');
var enableZoom=$gallery.data('enable-zoom')==='yes';
var zoomType=$gallery.data('zoom-type')||'inner';
var enableLightbox=$gallery.data('enable-lightbox')==='yes';
var enableVideoSupport=$gallery.data('video-support')==='yes';
var autoplay=$gallery.data('autoplay')==='yes';
var autoplaySpeed=parseInt($gallery.data('autoplay-speed'))||5000;
var currentIndex=0;
var slideCount=$slides.length;
var autoplayInterval=null;
if(slideCount===0){
return;
}
$thumbs.on('click', function(e){
e.preventDefault();
var $thumb=$(this);
var index=parseInt($thumb.data('index'));
goToSlide(index);
if(autoplay){
stopAutoplay();
startAutoplay();
}});
function isVideoSlide($slide){
return $slide.data('type')==='video';
}
function updateLightboxTrigger($slide){
if(isVideoSlide($slide)){
$lightboxTrigger.hide();
}else{
if(enableLightbox){
$lightboxTrigger.show();
}}
}
function stopAllVideos(){
$slides.each(function(){
var $slide=$(this);
if(isVideoSlide($slide)&&$slide.hasClass('mpd-video-playing')){
$slide.removeClass('mpd-video-playing');
$slide.find('.mpd-video-embed-container iframe').attr('src', '');
}});
}
function goToSlide(index){
stopAllVideos();
currentIndex=index;
$thumbs.removeClass('mpd-thumb-active');
$thumbs.filter('[data-index="' + index + '"]').addClass('mpd-thumb-active');
$slides.removeClass('mpd-slide-active');
var $activeSlide=$slides.filter('[data-index="' + index + '"]');
$activeSlide.addClass('mpd-slide-active');
updateLightboxTrigger($activeSlide);
if(!isVideoSlide($activeSlide)){
var newUrl=$activeSlide.find('a').attr('href');
$lightboxTrigger.attr('href', newUrl);
}
if(enableZoom&&!isVideoSlide($activeSlide)){
initZoomOnSlide($activeSlide);
}}
function nextSlide(){
var nextIndex=(currentIndex + 1) % slideCount;
goToSlide(nextIndex);
}
function startAutoplay(){
if(autoplayInterval){
clearInterval(autoplayInterval);
}
autoplayInterval=setInterval(function(){
nextSlide();
}, autoplaySpeed);
}
function stopAutoplay(){
if(autoplayInterval){
clearInterval(autoplayInterval);
autoplayInterval=null;
}}
function initZoomOnSlide($slide){
var $img=$slide.find('img');
var $link=$slide.find('a');
var zoomUrl=$link.attr('href')||$img.attr('data-large_image')||$img.attr('data-src')||$img.attr('src');
$slide.find('.mpd-zoom-lens, .mpd-zoom-overlay').remove();
$slide.off('.mpdZoom');
if(!zoomUrl) return;
$img.addClass('mpd-zoomable');
$img.attr('data-zoom-image', zoomUrl);
var zoomImg=new Image();
zoomImg.src=zoomUrl;
if(zoomType==='inner'){
var $zoomOverlay=$('<div class="mpd-zoom-overlay"></div>');
$zoomOverlay.css({
'position': 'absolute',
'top': 0,
'left': 0,
'width': '100%',
'height': '100%',
'background-repeat': 'no-repeat',
'background-image': 'url(' + zoomUrl + ')',
'opacity': 0,
'pointer-events': 'none',
'z-index': 10
});
$slide.css('position', 'relative').append($zoomOverlay);
$slide.on('mouseenter.mpdZoom', function(){
$zoomOverlay.css('opacity', 1);
$img.css('opacity', 0);
}).on('mousemove.mpdZoom', function(e){
var offset=$slide.offset();
var slideWidth=$slide.width();
var slideHeight=$slide.height();
var x=e.pageX - offset.left;
var y=e.pageY - offset.top;
var xPercent=(x / slideWidth) * 100;
var yPercent=(y / slideHeight) * 100;
$zoomOverlay.css({
'background-size': (slideWidth * 2) + 'px auto',
'background-position': xPercent + '% ' + yPercent + '%'
});
}).on('mouseleave.mpdZoom', function(){
$zoomOverlay.css('opacity', 0);
$img.css('opacity', 1);
});
}else if(zoomType==='lens'){
var $lens=$('<div class="mpd-zoom-lens"></div>');
$slide.css('position', 'relative').append($lens);
$slide.on('mouseenter.mpdZoom', function(){
$lens.show();
}).on('mousemove.mpdZoom', function(e){
var offset=$slide.offset();
var imgWidth=$slide.width();
var imgHeight=$slide.height();
var lensSize=150;
var x=e.pageX - offset.left;
var y=e.pageY - offset.top;
var lensX=x - (lensSize / 2);
var lensY=y - (lensSize / 2);
lensX=Math.max(0, Math.min(lensX, imgWidth - lensSize));
lensY=Math.max(0, Math.min(lensY, imgHeight - lensSize));
var bgX=(x / imgWidth) * 100;
var bgY=(y / imgHeight) * 100;
$lens.css({
'display': 'block',
'left': lensX + 'px',
'top': lensY + 'px',
'background-image': 'url(' + zoomUrl + ')',
'background-position': bgX + '% ' + bgY + '%',
'background-size': (imgWidth * 2) + 'px auto'
});
}).on('mouseleave.mpdZoom', function(){
$lens.hide();
});
}else if(zoomType==='window'){
var $zoomWindow=$gallery.find('.mpd-zoom-window');
if(!$zoomWindow.length){
$zoomWindow=$('<div class="mpd-zoom-window"></div>');
$gallery.find('.mpd-gallery-main-image').append($zoomWindow);
}
$slide.on('mouseenter.mpdZoom', function(){
$zoomWindow.show();
}).on('mousemove.mpdZoom', function(e){
var offset=$slide.offset();
var imgWidth=$slide.width();
var imgHeight=$slide.height();
var x=e.pageX - offset.left;
var y=e.pageY - offset.top;
var xPercent=(x / imgWidth) * 100;
var yPercent=(y / imgHeight) * 100;
$zoomWindow.css({
'display': 'block',
'background-image': 'url(' + zoomUrl + ')',
'background-position': xPercent + '% ' + yPercent + '%',
'background-size': '200%'
});
}).on('mouseleave.mpdZoom', function(){
$zoomWindow.hide();
});
}}
if(enableZoom){
var $activeSlide=$slides.filter('.mpd-slide-active');
if($activeSlide.length&&!isVideoSlide($activeSlide)){
initZoomOnSlide($activeSlide);
}}
var $initialSlide=$slides.filter('.mpd-slide-active');
if($initialSlide.length){
updateLightboxTrigger($initialSlide);
}
if(enableVideoSupport){
$gallery.on('click keypress', '.mpd-video-trigger', function(e){
if(e.type==='keypress'&&e.which!==13&&e.which!==32){
return;
}
e.preventDefault();
e.stopPropagation();
var $trigger=$(this);
var $videoSlide=$trigger.closest('.mpd-gallery-video-slide');
var action=$trigger.data('action');
var embedUrl=$videoSlide.data('embed-url');
if(action==='lightbox'&&enableLightbox){
openMpdVideoLightbox(embedUrl);
}else{
$videoSlide.addClass('mpd-video-playing');
$videoSlide.find('.mpd-video-embed-container iframe').attr('src', embedUrl);
if(autoplay){
stopAutoplay();
}}
});
}
if(enableLightbox){
$lightboxTrigger.on('click', function(e){
e.preventDefault();
var $activeSlide=$slides.filter('.mpd-slide-active');
if(!isVideoSlide($activeSlide)){
openMpdLightbox($gallery, $slides, currentIndex);
}});
$slides.find('a').on('click', function(e){
e.preventDefault();
var $slide=$(this).closest('.mpd-gallery-slide');
if(isVideoSlide($slide)){
return;
}
var slideIndex=parseInt($slide.data('index'));
openMpdLightbox($gallery, $slides, slideIndex);
});
}else{
$slides.find('a').on('click', function(e){
e.preventDefault();
});
$lightboxTrigger.on('click', function(e){
e.preventDefault();
});
}
if(autoplay&&slideCount > 1){
startAutoplay();
$gallery.on('mouseenter', function(){
stopAutoplay();
}).on('mouseleave', function(){
startAutoplay();
});
}
(function(){
var productId=$gallery.data('product-id');
var variationImagesEnabled=$gallery.data('variation-images')==='yes';
var $variationsForm=null;
if(productId){
$variationsForm=$('form.variations_form[data-product_id="' + productId + '"]');
}
if(!$variationsForm||!$variationsForm.length){
$variationsForm=$gallery.closest('.product, .mpd-single-product, .elementor-widget-container').find('form.variations_form');
}
if(!$variationsForm||!$variationsForm.length){
$variationsForm=$('form.variations_form').first();
}
if(!$variationsForm||!$variationsForm.length){
return;
}
var $firstSlide=$slides.filter('[data-index="0"]');
var $firstThumb=$thumbs.filter('[data-index="0"]');
var originalSlideHtml=$firstSlide.html();
var originalThumbHtml=$firstThumb.length ? $firstThumb.html():'';
var originalAttachmentId=$firstSlide.data('attachment-id');
var isSwapped=false;
if(variationImagesEnabled){
var variationsData=$variationsForm.data('product_variations');
$gallery.on('click', '.mpd-gallery-slide[data-variation-id], .mpd-thumb-item[data-variation-id]', function(e){
var variationId=$(this).data('variation-id');
if(!variationId||!variationsData){
return;
}
var matchedVariation=null;
for (var i=0; i < variationsData.length; i++){
if(variationsData[i].variation_id==variationId){
matchedVariation=variationsData[i];
break;
}}
if(!matchedVariation||!matchedVariation.attributes){
return;
}
$.each(matchedVariation.attributes, function(attrName, attrValue){
var $select=$variationsForm.find('select[name="' + attrName + '"]');
if($select.length&&attrValue){
$select.val(attrValue).trigger('change');
}});
$variationsForm.trigger('check_variations');
});
}
$variationsForm.on('found_variation', function(event, variation){
if(!variation||!variation.image||!variation.image.src||variation.image.src===''){
return;
}
var img=variation.image;
var variationImageId=variation.image_id||0;
if(variationImageId){
var $existingSlide=$slides.filter('[data-attachment-id="' + variationImageId + '"]');
if($existingSlide.length){
if(isSwapped){
$firstSlide.html(originalSlideHtml);
$firstSlide.attr('data-attachment-id', originalAttachmentId);
if($firstThumb.length){
$firstThumb.html(originalThumbHtml);
$firstThumb.attr('data-attachment-id', originalAttachmentId);
}
isSwapped=false;
}
goToSlide(parseInt($existingSlide.data('index')));
return;
}}
var imgAttrs='src="' + img.src + '"';
if(img.srcset) imgAttrs +=' srcset="' + img.srcset + '"';
if(img.sizes) imgAttrs +=' sizes="' + img.sizes + '"';
imgAttrs +=' alt="' + (img.alt||'') + '"';
imgAttrs +=' title="' + (img.title||'') + '"';
imgAttrs +=' class="wp-post-image"';
var newSlideHtml='<a href="' + (img.full_src||img.src) + '" data-lightbox="mpd-gallery">' +
'<img ' + imgAttrs + ' />' +
'</a>';
$firstSlide.html(newSlideHtml);
$firstSlide.attr('data-attachment-id', variationImageId);
if($firstThumb.length){
var thumbSrc=img.gallery_thumbnail_src||img.thumb_src||img.src;
$firstThumb.html('<img src="' + thumbSrc + '" alt="' + (img.alt||'') + '" />');
$firstThumb.attr('data-attachment-id', variationImageId);
}
isSwapped=true;
goToSlide(0);
if(enableLightbox&&$lightboxTrigger.length){
$lightboxTrigger.attr('href', img.full_src||img.src);
}
if(enableZoom){
initZoomOnSlide($firstSlide);
}});
$variationsForm.on('reset_image', function(){
if(!isSwapped){
goToSlide(0);
return;
}
$firstSlide.html(originalSlideHtml);
$firstSlide.attr('data-attachment-id', originalAttachmentId);
if($firstThumb.length){
$firstThumb.html(originalThumbHtml);
$firstThumb.attr('data-attachment-id', originalAttachmentId);
}
isSwapped=false;
goToSlide(0);
if(enableZoom&&!isVideoSlide($firstSlide)){
initZoomOnSlide($firstSlide);
}});
})();
});
}
function openMpdLightbox($gallery, $slides, startIndex){
startIndex=startIndex||0;
var images=[];
var slideIndexMap={};
var imageIndex=0;
$slides.each(function(){
var $slide=$(this);
var slideIdx=parseInt($slide.data('index'));
if($slide.data('type')==='video'){
return;
}
var url=$slide.find('a').attr('href')||$slide.find('img').attr('src');
images.push(url);
slideIndexMap[slideIdx]=imageIndex;
imageIndex++;
});
if(images.length===0){
return;
}
var adjustedStartIndex=slideIndexMap[startIndex]!==undefined ? slideIndexMap[startIndex]:0;
var $lightbox=$('#mpd-lightbox-overlay');
if($lightbox.length===0){
$lightbox=$('<div id="mpd-lightbox-overlay">' +
'<div class="mpd-lb-content">' +
'<img src="" class="mpd-lb-image">' +
'<button class="mpd-lb-prev" aria-label="Previous">&lt;</button>' +
'<button class="mpd-lb-next" aria-label="Next">&gt;</button>' +
'<button class="mpd-lb-close" aria-label="Close">&times;</button>' +
'<div class="mpd-lb-counter"><span class="mpd-lb-current">1</span> / <span class="mpd-lb-total">1</span></div>' +
'</div>' +
'</div>');
$('body').append($lightbox);
var lbStyles='<style id="mpd-lightbox-styles">' +
'#mpd-lightbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.95);z-index:999999;display:none;align-items:center;justify-content:center;}' +
'.mpd-lb-content{position:relative;max-width:90%;max-height:90%;display:flex;align-items:center;justify-content:center;}' +
'.mpd-lb-image{max-width:100%;max-height:90vh;object-fit:contain;}' +
'.mpd-lb-close{position:fixed;top:20px;right:30px;color:#fff;font-size:40px;background:none;border:none;cursor:pointer;z-index:10;}' +
'.mpd-lb-prev,.mpd-lb-next{position:fixed;top:50%;transform:translateY(-50%);color:#fff;font-size:30px;background:rgba(0,0,0,0.5);border:none;cursor:pointer;padding:20px 15px;z-index:10;}' +
'.mpd-lb-prev{left:20px;}' +
'.mpd-lb-next{right:20px;}' +
'.mpd-lb-prev:hover,.mpd-lb-next:hover{background:rgba(255,255,255,0.2);}' +
'.mpd-lb-counter{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);color:#fff;font-size:14px;}' +
'</style>';
if(!$('#mpd-lightbox-styles').length){
$('head').append(lbStyles);
}}
var currentLbIndex=adjustedStartIndex;
function showImage(index){
currentLbIndex=index;
$lightbox.find('.mpd-lb-image').attr('src', images[index]);
$lightbox.find('.mpd-lb-current').text(index + 1);
$lightbox.find('.mpd-lb-total').text(images.length);
if(images.length <=1){
$lightbox.find('.mpd-lb-prev, .mpd-lb-next, .mpd-lb-counter').hide();
}else{
$lightbox.find('.mpd-lb-prev, .mpd-lb-next, .mpd-lb-counter').show();
}}
$lightbox.off('click.mpdLb').on('click.mpdLb', '.mpd-lb-close', function(){
$lightbox.fadeOut(200);
}).on('click.mpdLb', '.mpd-lb-prev', function(e){
e.stopPropagation();
var prevIndex=(currentLbIndex - 1 + images.length) % images.length;
showImage(prevIndex);
}).on('click.mpdLb', '.mpd-lb-next', function(e){
e.stopPropagation();
var nextIndex=(currentLbIndex + 1) % images.length;
showImage(nextIndex);
}).on('click.mpdLb', function(e){
if($(e.target).is('#mpd-lightbox-overlay')){
$lightbox.fadeOut(200);
}});
$(document).off('keydown.mpdLb').on('keydown.mpdLb', function(e){
if(!$lightbox.is(':visible')) return;
if(e.key==='Escape'){
$lightbox.fadeOut(200);
}else if(e.key==='ArrowLeft'){
var prevIndex=(currentLbIndex - 1 + images.length) % images.length;
showImage(prevIndex);
}else if(e.key==='ArrowRight'){
var nextIndex=(currentLbIndex + 1) % images.length;
showImage(nextIndex);
}});
showImage(adjustedStartIndex);
$lightbox.css('display', 'flex').hide().fadeIn(200);
}
function openMpdVideoLightbox(embedUrl){
var $videoLightbox=$('#mpd-video-lightbox-overlay');
if($videoLightbox.length===0){
$videoLightbox=$('<div id="mpd-video-lightbox-overlay">' +
'<div class="mpd-vlb-content">' +
'<div class="mpd-vlb-video-wrapper">' +
'<iframe src="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>' +
'</div>' +
'<button class="mpd-vlb-close" aria-label="Close">&times;</button>' +
'</div>' +
'</div>');
$('body').append($videoLightbox);
var vlbStyles='<style id="mpd-video-lightbox-styles">' +
'#mpd-video-lightbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.95);z-index:999999;display:none;align-items:center;justify-content:center;}' +
'.mpd-vlb-content{position:relative;width:90%;max-width:1000px;display:flex;align-items:center;justify-content:center;}' +
'.mpd-vlb-video-wrapper{position:relative;width:100%;padding-bottom:56.25%;background:#000;}' +
'.mpd-vlb-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;}' +
'.mpd-vlb-close{position:fixed;top:20px;right:30px;color:#fff;font-size:40px;background:none;border:none;cursor:pointer;z-index:10;transition:transform 0.2s;}' +
'.mpd-vlb-close:hover{transform:scale(1.1);}' +
'</style>';
if(!$('#mpd-video-lightbox-styles').length){
$('head').append(vlbStyles);
}
$videoLightbox.on('click', '.mpd-vlb-close', function(){
closeMpdVideoLightbox();
});
$videoLightbox.on('click', function(e){
if($(e.target).is('#mpd-video-lightbox-overlay')){
closeMpdVideoLightbox();
}});
$(document).on('keydown.mpdVlb', function(e){
if(!$videoLightbox.is(':visible')) return;
if(e.key==='Escape'){
closeMpdVideoLightbox();
}});
}
function closeMpdVideoLightbox(){
$videoLightbox.fadeOut(200, function(){
$videoLightbox.find('iframe').attr('src', '');
});
}
$videoLightbox.find('iframe').attr('src', embedUrl);
$videoLightbox.css('display', 'flex').hide().fadeIn(200);
}
$(document).ready(function(){
initMpdGallery();
initMpdCollapsible();
});
function initMpdCollapsible(){
$('.mpd-attributes-collapsible').each(function(){
var $wrapper=$(this);
var $toggle=$wrapper.find('.mpd-attributes-toggle');
var $content=$wrapper.find('.mpd-attributes-content');
var $icon=$toggle.find('.mpd-toggle-icon');
if($wrapper.data('mpd-collapsible-init')){
return;
}
$wrapper.data('mpd-collapsible-init', true);
$toggle.off('click.mpdCollapsible').on('click.mpdCollapsible', function(e){
e.preventDefault();
e.stopPropagation();
var isExpanded=$wrapper.hasClass('mpd-attributes-expanded');
if(isExpanded){
$content.stop(true, true).slideUp(300);
$toggle.attr('aria-expanded', 'false');
$wrapper.removeClass('mpd-attributes-expanded').addClass('mpd-attributes-collapsed');
}else{
$content.stop(true, true).slideDown(300);
$toggle.attr('aria-expanded', 'true');
$wrapper.removeClass('mpd-attributes-collapsed').addClass('mpd-attributes-expanded');
}});
});
}
$(window).on("elementor/frontend/init", function (){
elementorFrontend.hooks.addAction('frontend/element_ready/global', function($scope){
$('body .bsk-tabs').removeClass('no-load');
});
elementorFrontend.hooks.addAction('frontend/element_ready/mpd-product-gallery.default', function($scope){
$scope.find('.mpd-product-gallery').data('mpd-gallery-init', false);
initMpdGallery($scope);
});
elementorFrontend.hooks.addAction('frontend/element_ready/mpd-product-attributes.default', function($scope){
$scope.find('.mpd-attributes-collapsible').data('mpd-collapsible-init', false);
initMpdCollapsible();
});
});
$(document).on('click', '.mpd-thumb-item', function(e){
e.preventDefault();
var $thumb=$(this);
var $gallery=$thumb.closest('.mpd-product-gallery');
var $mainImage=$gallery.find('.mpd-gallery-main-image');
var $slides=$mainImage.find('.mpd-gallery-slide');
var $thumbs=$gallery.find('.mpd-thumb-item');
var index=$thumb.data('index');
$thumbs.removeClass('mpd-thumb-active');
$thumb.addClass('mpd-thumb-active');
$slides.removeClass('mpd-slide-active');
$slides.filter('[data-index="' + index + '"]').addClass('mpd-slide-active');
});
var tooltipTriggerList=[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList=tooltipTriggerList.map(function (tooltipTriggerEl){
return new bootstrap.Tooltip(tooltipTriggerEl)
})
var popoverTriggerList=[].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList=popoverTriggerList.map(function (popoverTriggerEl){
return new bootstrap.Popover(popoverTriggerEl, {
html: true
})
})
}(jQuery));