(function($, window){
'use strict';
window.NggTikTokVideo=window.NggTikTokVideo||{};
let linkHandlersInitialized=false;
const galleryIdCache=new Map();
const DEFAULT_DIMENSIONS={ width: 480, height: 854 };
const ASPECT_RATIO=9 / 16;
const MAX_DEPTH=15;
const INIT_DELAY=100;
NggTikTokVideo.getTikTokSettings=(galleryId)=> {
if(!window.ngg_tiktok_gallery_settings){
window.ngg_tiktok_gallery_settings={
global: {
link: '0',
link_target: '0'
}};}
const settings=window.ngg_tiktok_gallery_settings;
const galleryIdStr=galleryId ? String(galleryId):null;
if(galleryIdStr&&settings[`gallery_${galleryIdStr}`]){
const gallerySettings=settings[`gallery_${galleryIdStr}`];
if(gallerySettings&&(gallerySettings.link!==undefined||gallerySettings.link_target!==undefined)){
return {
link: String(gallerySettings.link ?? '0'),
link_target: String(gallerySettings.link_target ?? '0')
};}}
const globalSettings=settings.global||{};
return {
link: String(globalSettings.link||'0'),
link_target: String(globalSettings.link_target||'0')
};};
const findGalleryId=($anchor, imageId)=> {
const cacheKey=imageId||$anchor[0];
const cachedResult=galleryIdCache.get(cacheKey);
if(cachedResult){
return cachedResult;
}
let $galleryContainer=null;
let galleryId=null;
$galleryContainer=$anchor.closest('[data-gallery-id]');
if($galleryContainer.length){
galleryId=$galleryContainer.attr('data-gallery-id')||$galleryContainer.data('gallery-id');
}
if(!galleryId){
$galleryContainer=$anchor.closest('.ngg-galleryoverview, .ngg-imagebrowser, .ngg-slideshow');
if($galleryContainer.length){
galleryId=$galleryContainer.attr('data-gallery-id') ||
$galleryContainer.data('gallery-id') ||
$galleryContainer.attr('data-nextgen-gallery-id') ||
$galleryContainer.data('nextgen-gallery-id');
}}
if(!galleryId){
let $current=$anchor;
let depth=0;
while (depth < MAX_DEPTH&&$current.length){
if($current.is('[data-gallery-id]')){
galleryId=$current.attr('data-gallery-id')||$current.data('gallery-id');
$galleryContainer=$current;
break;
}
const $sibling=$current.siblings('[data-gallery-id]').first();
if($sibling.length){
galleryId=$sibling.attr('data-gallery-id')||$sibling.data('gallery-id');
$galleryContainer=$sibling;
break;
}
$current=$current.parent();
depth++;
}}
if(!galleryId&&imageId){
const $allContainers=$('[data-gallery-id]');
$allContainers.each(function(){
const $container=$(this);
if($container.find($anchor).length > 0){
galleryId=$container.attr('data-gallery-id')||$container.data('gallery-id');
$galleryContainer=$container;
return false;
}});
}
const result={
galleryId: galleryId ? String(galleryId):null,
$galleryContainer
};
galleryIdCache.set(cacheKey, result);
return result;
};
const getTikTokDataFromAnchor=($anchor, imageId)=> {
if(imageId&&window.ngg_tiktok_images?.[imageId]){
return window.ngg_tiktok_images[imageId];
}
const playUrl=$anchor.attr('data-tiktok-play-url');
const shareUrl=$anchor.attr('data-tiktok-share-url');
const embedUrl=$anchor.attr('data-tiktok-embed-url');
if(playUrl||shareUrl||embedUrl){
return {
playUrl: playUrl||'',
shareUrl: shareUrl||'',
embedUrl: embedUrl||''
};}
return null;
};
const handleTikTokLinkClick=(e)=> {
const anchor=e.target.closest('a[data-image-id]');
if(!anchor){
return;
}
const $anchor=$(anchor);
const imageId=$anchor.attr('data-image-id');
const tiktokData=getTikTokDataFromAnchor($anchor, imageId);
if(!tiktokData){
return;
}
const { galleryId }=findGalleryId($anchor, imageId);
const tiktokSettings=NggTikTokVideo.getTikTokSettings(galleryId);
const linkSetting=String(tiktokSettings.link||'0');
const linkTarget=String(tiktokSettings.link_target||'0');
if(linkSetting!=='1'&&linkSetting!=='2'){
return;
}
if(linkSetting==='1'&&!tiktokData.shareUrl){
return;
}
if(linkSetting==='2'&&!tiktokData.embedUrl&&!tiktokData.shareUrl){
return;
}
e.preventDefault();
e.stopPropagation();
const openNewTab=linkTarget==='1'||linkTarget==='_blank';
let targetUrl='';
if(linkSetting==='1'){
targetUrl=tiktokData.shareUrl||'';
}else if(linkSetting==='2'){
targetUrl=tiktokData.embedUrl||tiktokData.shareUrl||'';
}
if(targetUrl){
if(openNewTab){
window.open(targetUrl, '_blank', 'noopener,noreferrer');
}else{
window.location.href=targetUrl;
}}
};
NggTikTokVideo.initLinkHandlers=()=> {
if(linkHandlersInitialized){
return;
}
linkHandlersInitialized=true;
document.addEventListener('click', handleTikTokLinkClick, true);
};
NggTikTokVideo.isTikTokImage=(element)=> {
const $el=$(element);
const $anchor=$el.is('a') ? $el:$el.closest('a');
if($anchor.attr('data-ngg-tiktok-source')==='true'){
return true;
}
const imageId=$anchor.attr('data-image-id');
if(imageId&&window.ngg_tiktok_images?.[imageId]){
const $galleryContainer=$anchor.closest('[data-gallery-id]');
const galleryId=$galleryContainer.length ? $galleryContainer.attr('data-gallery-id'):null;
const settings=NggTikTokVideo.getTikTokSettings(galleryId);
return String(settings.link||'0')==='0';
}
return false;
};
NggTikTokVideo.getTikTokData=(element)=> {
const $el=$(element);
const $anchor=$el.is('a') ? $el:$el.closest('a');
const playUrl=$anchor.attr('data-ngg-tiktok-play-url');
const shareUrl=$anchor.attr('data-ngg-tiktok-share-url');
const embedUrl=$anchor.attr('data-ngg-tiktok-embed-url');
const tiktokId=$anchor.attr('data-ngg-tiktok-id');
if(playUrl||shareUrl||embedUrl){
return {
tiktokId: tiktokId||'',
playUrl: playUrl||'',
shareUrl: shareUrl||'',
embedUrl: embedUrl||'',
linkSetting: '0'
};}
const imageId=$anchor.attr('data-image-id');
if(imageId&&window.ngg_tiktok_images?.[imageId]){
return window.ngg_tiktok_images[imageId];
}
return null;
};
NggTikTokVideo.getVideoUrl=(tiktokData)=> {
if(!tiktokData){
return '';
}
if(tiktokData.playUrl?.length > 0){
return tiktokData.playUrl;
}
if(tiktokData.shareUrl?.length > 0){
return tiktokData.shareUrl;
}
return '';
};
NggTikTokVideo.getEmbedUrl=(tiktokData)=> {
if(!tiktokData){
return '';
}
if(tiktokData.embedUrl){
return tiktokData.embedUrl;
}
if(tiktokData.shareUrl){
const match=tiktokData.shareUrl.match(/video\/(\d+)/);
if(match?.[1]){
return `https://www.tiktok.com/embed/v2/${match[1]}`;
}}
return '';
};
const createErrorMessage=(message)=> {
return $('<div class="ngg-tiktok-error"></div>')
.text(message)
.css({
color: '#fff',
textAlign: 'center',
padding: '20px'
});
};
const createVideoElement=(videoUrl, autoplay, onReady, onError)=> {
const $video=$('<video></video>').attr({
src: videoUrl,
controls: true,
autoplay: autoplay,
playsinline: true,
preload: 'auto'
}).css({
width: '100%',
height: '100%',
objectFit: 'contain'
});
$video.on('loadeddata', ()=> {
onReady($video[0]);
});
$video.on('error', ()=> {
$video.remove();
onError(new Error('Video failed to load'));
});
return $video;
};
NggTikTokVideo.createPlayer=(options={})=> {
const {
tiktokData,
width=DEFAULT_DIMENSIONS.width,
height=DEFAULT_DIMENSIONS.height,
autoplay=true,
onReady=()=> {},
onError=()=> {}}=options;
const $container=$('<div class="ngg-tiktok-video-container"></div>').css({
position: 'relative',
width,
height,
maxWidth: '100%',
maxHeight: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
});
const videoUrl=NggTikTokVideo.getVideoUrl(tiktokData);
if(videoUrl&&videoUrl.includes('tiktokcdn.com')){
const $video=createVideoElement(videoUrl, autoplay, onReady, (error)=> {
$container.append(createErrorMessage('Video failed to load'));
onError(error);
});
$container.append($video);
}else{
$container.append(createErrorMessage('Video not available'));
onError(new Error('No video URL available'));
}
return $container;
};
NggTikTokVideo._createEmbedPlayer=($container, embedUrl, width, height, autoplay, onReady, onError)=> {
$container.empty();
if(!embedUrl){
$container.append(createErrorMessage('Video not available'));
onError(new Error('No embed URL available'));
return;
}
const url=autoplay
? `${embedUrl}${embedUrl.includes('?') ? '&':'?'}autoplay=1`
: embedUrl;
const $iframe=$('<iframe></iframe>').attr({
src: url,
frameborder: '0',
allowfullscreen: true,
allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'
}).css({
width: '100%',
height: '100%',
border: 'none'
});
$iframe.on('load', ()=> {
onReady($iframe[0]);
});
$iframe.on('error', ()=> {
onError(new Error('Failed to load TikTok embed'));
});
$container.append($iframe);
};
NggTikTokVideo.replaceImageWithVideo=(imageElement, options={})=> {
const $image=$(imageElement);
const $anchor=$image.closest('a');
const tiktokData=options.tiktokData||NggTikTokVideo.getTikTokData($anchor);
if(!tiktokData){
return null;
}
const width=options.width||$image.width()||DEFAULT_DIMENSIONS.width;
const height=options.height||$image.height()||DEFAULT_DIMENSIONS.height;
const playerOptions={
...options,
tiktokData,
width,
height
};
const $player=NggTikTokVideo.createPlayer(playerOptions);
$image.replaceWith($player);
return $player;
};
NggTikTokVideo.createLightboxPlayer=(tiktokData, lightboxOptions={})=> {
const {
maxWidth=window.innerWidth * 0.8,
maxHeight=window.innerHeight * 0.9,
onReady,
onError
}=lightboxOptions;
let width, height;
if(maxHeight * ASPECT_RATIO <=maxWidth){
height=maxHeight;
width=height * ASPECT_RATIO;
}else{
width=maxWidth;
height=width / ASPECT_RATIO;
}
return NggTikTokVideo.createPlayer({
tiktokData,
width: Math.round(width),
height: Math.round(height),
autoplay: true,
onReady,
onError
});
};
NggTikTokVideo.destroyPlayer=($container)=> {
if(!$container?.length){
return;
}
const $video=$container.find('video');
if($video.length){
$video[0].pause();
$video.attr('src', '');
}
const $iframe=$container.find('iframe');
if($iframe.length){
$iframe.attr('src', '');
}
$container.remove();
};
$(()=> {
setTimeout(()=> {
NggTikTokVideo.initLinkHandlers();
}, INIT_DELAY);
});
})(jQuery, window);
(function($){
"use strict";
window.NextGEN_Video={
detect_platform: function(url){
if(!url) return null;
url=url.trim().toLowerCase();
if(url.match(/youtube\.com|youtu\.be|youtube-nocookie\.com/)){
return 'youtube';
}
if(url.match(/vimeo\.com/)){
return 'vimeo';
}
if(url.match(/dailymotion\.com|dai\.ly/)){
return 'dailymotion';
}
if(url.match(/twitch\.tv/)){
return 'twitch';
}
if(url.match(/videopress\.com|video\.wordpress\.com/)){
return 'videopress';
}
if(url.match(/wistia\.com|wistia\.net/)){
return 'wistia';
}
if(url.match(/\.(mp4|webm|ogg|ogv|mov|avi|wmv|flv|mkv)(\?|$)/i)){
return 'local';
}
return null;
},
extract_youtube_id: function(url){
if(!url) return null;
var patterns=[
/(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/|youtube-nocookie\.com\/embed\/)([^&\n?#]+)/,
/youtube\.com\/.*[?&]v=([^&\n?#]+)/,
];
for (var i=0; i < patterns.length; i++){
var match=url.match(patterns[i]);
if(match&&match[1]){
return match[1];
}}
return null;
},
extract_vimeo_id: function(url){
if(!url) return null;
var patterns=[
/vimeo\.com\/(\d+)/,
/vimeo\.com\/.*\/(\d+)/,
/player\.vimeo\.com\/video\/(\d+)/,
];
for (var i=0; i < patterns.length; i++){
var match=url.match(patterns[i]);
if(match&&match[1]){
return match[1];
}}
return null;
},
extract_dailymotion_id: function(url){
if(!url) return null;
var patterns=[
/dailymotion\.com\/video\/([^/?]+)/,
/dai\.ly\/([^/?]+)/,
/dailymotion\.com\/embed\/video\/([^/?]+)/,
];
for (var i=0; i < patterns.length; i++){
var match=url.match(patterns[i]);
if(match&&match[1]){
return match[1];
}}
return null;
},
extract_twitch_id: function(url){
if(!url) return null;
var videoMatch=url.match(/twitch\.tv\/videos\/(\d+)/);
if(videoMatch&&videoMatch[1]){
return { videoId: videoMatch[1], type: 'video' };}
var clipMatch=url.match(/(?:twitch\.tv\/|clips\.twitch\.tv\/)([^/?]+)/);
if(clipMatch&&clipMatch[1]){
return { videoId: clipMatch[1], type: 'clip' };}
return null;
},
extract_videopress_id: function(url){
if(!url) return null;
var patterns=[
/videopress\.com\/v\/([^/?]+)/,
/video\.wordpress\.com\/v\/([^/?]+)/,
];
for (var i=0; i < patterns.length; i++){
var match=url.match(patterns[i]);
if(match&&match[1]){
return match[1];
}}
return null;
},
extract_wistia_id: function(url){
if(!url) return null;
var patterns=[
/wistia\.(?:com|net)\/medias\/([^/?]+)/,
/wistia\.(?:com|net)\/embed\/([^/?]+)/,
];
for (var i=0; i < patterns.length; i++){
var match=url.match(patterns[i]);
if(match&&match[1]){
return match[1];
}}
return null;
},
get_embed_url: function(platform, videoId, settings){
if(!platform||!videoId) return null;
settings=settings||{};
var autoplay=settings.autoplay_videos ? 1:0;
var controls=settings.show_video_controls!==false ? 1:0;
switch (platform){
case 'youtube':
var youtubeId=typeof videoId==='string' ? videoId:videoId.videoId;
return 'https://www.youtube.com/embed/' + youtubeId +
'?autoplay=' + autoplay +
'&controls=' + controls +
'&rel=0&modestbranding=1';
case 'vimeo':
var vimeoId=typeof videoId==='string' ? videoId:videoId.videoId;
return 'https://player.vimeo.com/video/' + vimeoId +
'?autoplay=' + autoplay +
'&controls=' + controls;
case 'dailymotion':
var dmId=typeof videoId==='string' ? videoId:videoId.videoId;
return 'https://www.dailymotion.com/embed/video/' + dmId +
'?autoplay=' + autoplay +
'&controls=' + controls;
case 'twitch':
var twitchData=typeof videoId==='object' ? videoId:{ videoId: videoId, type: 'video' };
if(twitchData.type==='clip'){
return 'https://clips.twitch.tv/embed?clip=' + twitchData.videoId +
'&autoplay=' + autoplay +
'&parent=' + window.location.hostname;
}else{
return 'https://player.twitch.tv/?video=v' + twitchData.videoId +
'&autoplay=' + autoplay +
'&parent=' + window.location.hostname;
}
case 'videopress':
var vpId=typeof videoId==='string' ? videoId:videoId.videoId;
return 'https://videopress.com/embed/' + vpId +
'?autoplay=' + autoplay +
'&controls=' + controls;
case 'wistia':
var wistiaId=typeof videoId==='string' ? videoId:videoId.videoId;
return 'https://fast.wistia.net/embed/iframe/' + wistiaId +
'?autoplay=' + autoplay +
'&controlsVisibleOnLoad=' + controls;
case 'local':
return typeof videoId==='string' ? videoId:null;
default:
return null;
}},
create_local_player: function(videoUrl, settings, containerClass, videoClass){
var container=document.createElement("div");
container.className=containerClass||"ngg-video-container";
var video=document.createElement("video");
video.className=videoClass||"ngg-video-player";
video.controls=settings.show_video_controls!==false;
video.autoplay=settings.autoplay_videos===true;
video.playsInline=true;
video.preload="auto";
video.setAttribute("playsinline", "");
video.setAttribute("webkit-playsinline", "");
video.src=videoUrl;
video.addEventListener("error", function(e){
console.error("Video player error:", {
error: e,
videoUrl: videoUrl,
errorCode: video.error ? video.error.code:"unknown",
errorMessage: video.error ? video.error.message:"Unknown error"
});
});
video.addEventListener("loadedmetadata", function (){
var naturalWidth=video.videoWidth;
var naturalHeight=video.videoHeight;
if(naturalWidth&&naturalHeight){
var container=video.closest('.ngg-video-container');
var displayWidth=naturalWidth;
var displayHeight=naturalHeight;
if(container){
var fancyboxContent=container.closest('#fancybox-content');
var tbWindow=container.closest('#TB_window');
var slImage=container.closest('.sl-image');
var shWrap=container.closest('#shWrap');
if(shWrap){
var wiH=window.innerHeight||0;
var dbH=document.body.clientHeight||0;
var deH=document.documentElement ? document.documentElement.clientHeight:0;
var wHeight;
if(wiH > 0){
wHeight=((wiH - dbH) > 1&&(wiH - dbH) < 30) ? dbH:wiH;
wHeight=((wHeight - deH) > 1&&(wHeight - deH) < 30) ? deH:wHeight;
}else{
wHeight=(deH > 0) ? deH:dbH;
}
if(document.getElementsByTagName("body")[0].className.match(/admin-bar/)
&& document.getElementById('wpadminbar')!==null){
wHeight=wHeight - document.getElementById('wpadminbar').offsetHeight;
}
var shHeight=wHeight - 50;
var deW=document.documentElement ? document.documentElement.clientWidth:0;
var dbW=window.innerWidth||document.body.clientWidth;
var wWidth=(deW > 1) ? deW:dbW;
if(displayHeight > shHeight){
displayWidth=displayWidth * (shHeight / displayHeight);
displayHeight=shHeight;
}
if(displayWidth > (wWidth - 16)){
displayHeight=displayHeight * ((wWidth - 16) / displayWidth);
displayWidth=wWidth - 16;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.style.maxWidth="none";
video.style.maxHeight="none";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}else if(fancyboxContent){
setTimeout(function(){
var contentRect=fancyboxContent.getBoundingClientRect();
if(contentRect.width > 10&&contentRect.height > 10){
var maxW=contentRect.width;
var maxH=contentRect.height;
if(displayWidth > maxW||displayHeight > maxH){
var ratio=displayWidth / displayHeight > maxW / maxH
? displayWidth / maxW
: displayHeight / maxH;
displayWidth=displayWidth / ratio;
displayHeight=displayHeight / ratio;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}}, 50);
return;
}else if(tbWindow){
var pageWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
var pageHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
var x=pageWidth - 150;
var y=pageHeight - 150;
if(displayWidth > x){
displayHeight=displayHeight * (x / displayWidth);
displayWidth=x;
if(displayHeight > y){
displayWidth=displayWidth * (y / displayHeight);
displayHeight=y;
}}else if(displayHeight > y){
displayWidth=displayWidth * (y / displayHeight);
displayHeight=y;
if(displayWidth > x){
displayHeight=displayHeight * (x / displayWidth);
displayWidth=x;
}}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}else if(slImage){
var widthRatio=0.8;
var heightRatio=0.9;
var windowWidth=window.innerWidth;
var windowHeight=window.innerHeight;
var maxWidth=windowWidth * widthRatio;
var maxHeight=windowHeight * heightRatio;
if(displayWidth > maxWidth||displayHeight > maxHeight){
var ratio=displayWidth / displayHeight > maxWidth / maxHeight
? displayWidth / maxWidth
: displayHeight / maxHeight;
displayWidth /=ratio;
displayHeight /=ratio;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.style.maxWidth=maxWidth + "px";
video.style.maxHeight=maxHeight + "px";
}}
}});
if(settings.autoplay_videos){
video.addEventListener("canplay", function (){
video.play().catch(function (error){
console.error("Video autoplay failed:", error);
});
});
}
container.appendChild(video);
return container;
},
create_embed_player: function(embedUrl, settings, containerClass){
var container=document.createElement("div");
container.className=containerClass||"ngg-video-container";
var iframe=document.createElement("iframe");
iframe.src=embedUrl;
iframe.frameBorder="0";
iframe.allowFullscreen=true;
iframe.setAttribute("allow", "autoplay; encrypted-media");
iframe.style.width="100%";
iframe.style.height="100%";
iframe.style.border="none";
iframe.addEventListener("error", function(e){
console.error("Video iframe error:", {
error: e,
embedUrl: embedUrl
});
});
iframe.addEventListener("load", function(){
try {
var iframeDoc=iframe.contentDocument||iframe.contentWindow.document;
} catch (e){
if(e.name!=="SecurityError"){
console.error("Video iframe load error:", e);
}}
});
var aspectRatio=16 / 9;
var maxWidth=window.innerWidth * 0.9;
var maxHeight=window.innerHeight * 0.9;
var width=Math.min(maxWidth, 1080);
var height=width / aspectRatio;
if(height > maxHeight){
height=maxHeight;
width=height * aspectRatio;
}
container.style.width=width + "px";
container.style.height=height + "px";
container.style.maxWidth="100%";
container.style.maxHeight="90vh";
container.appendChild(iframe);
return container;
},
handle_content: function(options){
var self=this;
var videoUrl=options.videoUrl;
var $targetContainer=$(options.container);
var settings=options.settings||{};
if(!videoUrl){
console.error("Video URL is required");
return null;
}
try {
var platform=self.detect_platform(videoUrl);
if(!platform){
console.warn("Unrecognized video URL:", videoUrl);
return null;
}} catch (error){
console.error("Error detecting video platform:", error);
return null;
}
var videoContent=null;
var videoId=null;
switch (platform){
case 'youtube':
videoId=self.extract_youtube_id(videoUrl);
break;
case 'vimeo':
videoId=self.extract_vimeo_id(videoUrl);
break;
case 'dailymotion':
videoId=self.extract_dailymotion_id(videoUrl);
break;
case 'twitch':
videoId=self.extract_twitch_id(videoUrl);
break;
case 'videopress':
videoId=self.extract_videopress_id(videoUrl);
break;
case 'wistia':
videoId=self.extract_wistia_id(videoUrl);
break;
case 'local':
videoId=videoUrl;
break;
}
if(!videoId){
var errorMsg=self.create_error("Could not extract video ID from URL", options.errorClass);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
return errorMsg;
}
try {
if(platform==='local'){
videoContent=self.create_local_player(videoId, settings, options.containerClass, options.videoClass);
}else{
var embedUrl=self.get_embed_url(platform, videoId, settings);
if(embedUrl){
videoContent=self.create_embed_player(embedUrl, settings, options.containerClass);
}else{
var errorMsg=self.create_error("Could not generate embed URL", options.errorClass);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
return errorMsg;
}}
if(videoContent){
if(platform==='local'){
var video=videoContent.querySelector("video");
if(video){
video.onerror=function (){
$(videoContent).remove();
var errorMsg=self.create_error("Video failed to load", options.errorClass);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
};}}
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(videoContent);
$targetContainer.append(videoContent);
}} catch (error){
console.error("Error creating video player:", error);
var errorMsg=self.create_error("Video player creation failed", options.errorClass);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
return errorMsg;
}
return videoContent;
},
create_error: function(message, containerClass){
var container=document.createElement("div");
container.className=containerClass||"ngg-video-error";
container.innerHTML =
'<div class="ngg-video-error-content">' +
'<span class="ngg-video-error-icon">&#9888;</span>' +
'<span class="ngg-video-error-text">' +
(message||"Video failed to load") +
"</span>" +
"</div>";
return container;
}};})(jQuery);
function nextgen_lightbox_filter_selector($, selector){
if(nextgen_lightbox_settings&&nextgen_lightbox_settings.context){
var context=nextgen_lightbox_settings.context;
if(context=='all_images'){
selector=selector.add($('a > img').parent());
}
else if(context=='all_images_direct'){
selector=selector.add($('a[href] > img').parent()
.filter(function(){
var href=$(this).attr('href').toLowerCase();
var ext=href.substring(href.length - 3);
var ext2=href.substring(href.length - 4);
return (ext=='jpg'||ext=='gif'||ext=='png'||ext2=='tiff'||ext2=='jpeg'||ext2=='webp');
}));
}
else if(context=='nextgen_and_wp_images'){
selector=selector.add($('a > img[class*="wp-image-"]').parent());
}
selector=selector.not('.gallery_link');
selector=selector.not('.use_imagebrowser_effect');
}
return selector;
};
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce'.split('|'),0,{}));
(s=>{function i(){f.hide(),k.onerror=k.onload=null,C&&C.abort(),l.empty()}function h(){!1===w.onError(m,u,w)?(f.hide(),A=!1):(w.titleShow=!1,w.width="auto",w.height="auto",l.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>'),E())}function a(){var n,t,e,a,o,d,c,r=m[u];if(i(),w=s.extend({},s.fn.fancybox.defaults,void 0===s(r).data("fancybox")?w:s(r).data("fancybox")),!1===(d=w.onStart(m,u,w)))A=!1;else{e=(w="object"==typeof d?s.extend(w,d):w).title||(r.nodeName?s(r).attr("title"):r.title)||"",r.nodeName&&!w.orig&&(w.orig=s(r).children("img:first").length?s(r).children("img:first"):s(r)),""===e&&w.orig&&w.titleFromAlt&&(e=w.orig.attr("alt"));let i={A:["href","class","title"],BR:[],EM:[],I:[],STRONG:[],B:[],U:[],P:["class"],DIV:["class","id"],SPAN:["class","id"]};if(c=e,(c=(new DOMParser).parseFromString(c,"text/html")).body.querySelectorAll("*").forEach(e=>{i[e.tagName]?[...e.attributes].forEach(t=>{i[e.tagName].includes(t.name)||e.removeAttribute(t.name)}):e.remove()}),e=c.body.innerHTML,n=w.href||(r.nodeName?s(r).attr("href"):r.href)||null,!/^(?:javascript)/i.test(n)&&"#"!=n||(n=null),w.type?(t=w.type,n=n||w.content):w.content?t="html":n&&(t=n.match(O)?"image":n.match(z)?"swf":s(r).hasClass("iframe")?"iframe":0===n.indexOf("#")?"inline":"ajax"),t)switch("inline"==t&&(r=n.substr(n.indexOf("#")),t=0<s(r).length?"inline":"ajax"),w.type=t,w.href=n,w.title=e,w.autoDimensions&&("html"==w.type||"inline"==w.type||"ajax"==w.type?(w.width="auto",w.height="auto"):w.autoDimensions=!1),w.modal&&(w.overlayShow=!0,w.hideOnOverlayClick=!1,w.hideOnContentClick=!1,w.enableEscapeButton=!1,w.showCloseButton=!1),w.padding=parseInt(w.padding,10),w.margin=parseInt(w.margin,10),l.css("padding",w.padding+w.margin),s(".fancybox-inline-tmp").off("fancybox-cancel").on("fancybox-change",function(){s(this).replaceWith(p.children())}),t){case"html":l.html(w.content),E();break;case"inline":!0===s(r).parent().is("#fancybox-content")?A=!1:(s('<div class="fancybox-inline-tmp" />').hide().insertBefore(s(r)).on("fancybox-cleanup",function(){s(this).replaceWith(p.children())}).on("fancybox-cancel",function(){s(this).replaceWith(l.children())}),s(r).appendTo(l),E());break;case"image":A=!1,s.fancybox.showActivity(),(k=new Image).onerror=function(){h()},k.onload=function(){A=!0,k.onerror=k.onload=null,w.width=k.width,w.height=k.height,s("<img />").attr({id:"fancybox-img",src:k.src,alt:w.title}).appendTo(l),P()},k.src=n;break;case"swf":w.scrolling="no",a='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+w.width+'" height="'+w.height+'"><param name="movie" value="'+n+'"></param>',o="",s.each(w.swf,function(t,e){a+='<param name="'+t+'" value="'+e+'"></param>',o+=" "+t+'="'+e+'"'}),a+='<embed src="'+n+'" type="application/x-shockwave-flash" width="'+w.width+'" height="'+w.height+'"'+o+"></embed></object>",l.html(a),E();break;case"ajax":A=!1,s.fancybox.showActivity(),w.ajax.win=w.ajax.success,C=s.ajax(s.extend({},w.ajax,{url:n,data:w.ajax.data||{},error:function(t,e,i){0<t.status&&h()},success:function(t,e,i){if(200==("object"==typeof i?i:C).status){if("function"==typeof w.ajax.win){if(!1===(d=w.ajax.win(n,t,e,i)))return void f.hide();"string"!=typeof d&&"object"!=typeof d||(t=d)}l.html(t),E()}}}));break;case"iframe":P()}else h()}}function M(t){var e=t.offset();return e.top+=parseInt(t.css("paddingTop"),10)||0,e.left+=parseInt(t.css("paddingLeft"),10)||0,e.top+=parseInt(t.css("border-top-width"),10)||0,e.left+=parseInt(t.css("border-left-width"),10)||0,e.width=t.width(),e.height=t.height(),e}function L(){f.is(":visible")?(s("div",f).css("top",-40*j+"px"),j=(j+1)%12):clearInterval(e)}var l,f,n,o,t,p,d,c,r,g,e,b,y,u=0,w={},m=[],x=0,v={},I=[],C=null,k=new Image,O=/\.(jpg|gif|png|bmp|jpeg|webp)(.*)?$/i,z=/[^\.]\.(swf)\s*$/i,j=1,S=0,T="",A=!1,D=s.extend(s("<div/>")[0],{prop:0}),N=!1,E=function(){var t=w.width,e=w.height,t=-1<t.toString().indexOf("%")?parseInt((s(window).width()-2*w.margin)*parseFloat(t)/100,10)+"px":"auto"==t?"auto":t+"px",e=-1<e.toString().indexOf("%")?parseInt((s(window).height()-2*w.margin)*parseFloat(e)/100,10)+"px":"auto"==e?"auto":e+"px";l.wrapInner('<div style="width:'+t+";height:"+e+";overflow: "+("auto"==w.scrolling?"auto":"yes"==w.scrolling?"scroll":"hidden")+';position:relative;"></div>'),w.width=l.width(),w.height=l.height(),P()},P=function(){var t,e;f.hide(),o.is(":visible")&&!1===v.onCleanup(I,x,v)?(s.event.trigger("fancybox-cancel"),A=!1):(A=!0,s(p.add(n)).off(),s(window).off("resize.fb scroll.fb"),s(document).off("keydown.fb"),o.is(":visible")&&"outside"!==v.titlePosition&&o.css("height",o.height()),I=m,x=u,(v=w).overlayShow?(n.css({"background-color":v.overlayColor,opacity:v.overlayOpacity,cursor:v.hideOnOverlayClick?"pointer":"auto",height:s(document).height()}),n.is(":visible")||(N&&s("select:not(#fancybox-tmp select)").filter(function(){return"hidden"!==this.style.visibility}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"}),n.show())):n.hide(),y=q(),R(),o.is(":visible")?(s(d.add(r).add(g)).hide(),t=o.position(),b={top:t.top,left:t.left,width:o.width(),height:o.height()},e=b.width==y.width&&b.height==y.height,p.fadeTo(v.changeFade,.3,function(){function t(){p.html(l.contents()).fadeTo(v.changeFade,1,F)}s.event.trigger("fancybox-change"),p.empty().removeAttr("filter").css({"border-width":v.padding,width:y.width-2*v.padding,height:w.autoDimensions?"auto":y.height-S-2*v.padding}),e?t():(D.prop=0,s(D).animate({prop:1},{duration:v.changeSpeed,easing:v.easingChange,step:B,complete:t}))})):(o.removeAttr("style"),p.css("border-width",v.padding),"elastic"==v.transitionIn?(b=U(),p.html(l.contents()),o.show(),v.opacity&&(y.opacity=0),D.prop=0,s(D).animate({prop:1},{duration:v.speedIn,easing:v.easingIn,step:B,complete:F})):("inside"==v.titlePosition&&0<S&&c.show(),p.css({width:y.width-2*v.padding,height:w.autoDimensions?"auto":y.height-S-2*v.padding}).html(l.contents()),o.css(y).fadeIn("none"==v.transitionIn?0:v.speedIn,F))))},H=function(t){return!(!t||!t.length)&&("float"==v.titlePosition?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+t+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+v.titlePosition+'">'+t+"</div>")},R=function(){if((T=v.title||"",S=0,c.empty().removeAttr("style").removeClass(),!1!==v.titleShow)&&((T="function"==typeof v.titleFormat?v.titleFormat(T,I,x,v):H(T))&&""!==T))switch(c.addClass("fancybox-title-"+v.titlePosition).html(T).appendTo("body").show(),v.titlePosition){case"inside":c.css({width:y.width-2*v.padding,marginLeft:v.padding,marginRight:v.padding}),S=c.outerHeight(!0),c.appendTo(t),y.height+=S;break;case"over":c.css({marginLeft:v.padding,width:y.width-2*v.padding,bottom:v.padding}).appendTo(t);break;case"float":c.css("left",-1*parseInt((c.width()-y.width-40)/2,10)).appendTo(o);break;default:c.css({width:y.width-2*v.padding,paddingLeft:v.padding,paddingRight:v.padding}).appendTo(o)}c.hide()},K=function(){(v.enableEscapeButton||v.enableKeyboardNav)&&s(document).on("keydown.fb",function(t){27==t.keyCode&&v.enableEscapeButton?(t.preventDefault(),s.fancybox.close()):37!=t.keyCode&&39!=t.keyCode||!v.enableKeyboardNav||"INPUT"===t.target.tagName||"TEXTAREA"===t.target.tagName||"SELECT"===t.target.tagName||(t.preventDefault(),s.fancybox[37==t.keyCode?"prev":"next"]())}),v.showNavArrows?((v.cyclic&&1<I.length||0!==x)&&r.show(),(v.cyclic&&1<I.length||x!=I.length-1)&&g.show()):(r.hide(),g.hide())},F=function(){s.support.opacity||(p.get(0).style.removeProperty("filter"),o.get(0).style.removeProperty("filter")),w.autoDimensions&&p.css("height","auto"),o.css("height","auto"),T&&T.length&&c.show(),v.showCloseButton&&d.show(),K(),v.hideOnContentClick&&p.on("click",s.fancybox.close),v.hideOnOverlayClick&&n.on("click",s.fancybox.close),s(window).on("resize.fb",s.fancybox.resize),v.centerOnScroll&&s(window).on("scroll.fb",s.fancybox.center),"iframe"==v.type&&s('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0"  scrolling="'+w.scrolling+'" src="'+v.href+'"></iframe>').appendTo(p),o.show(),A=!1,s.fancybox.center(),v.onComplete(I,x,v),Q()},Q=function(){var t;I.length-1>x&&void 0!==(t=I[x+1].href)&&t.match(O)&&((new Image).src=t),0<x&&void 0!==(t=I[x-1].href)&&t.match(O)&&((new Image).src=t)},B=function(t){var e={width:parseInt(b.width+(y.width-b.width)*t,10),height:parseInt(b.height+(y.height-b.height)*t,10),top:parseInt(b.top+(y.top-b.top)*t,10),left:parseInt(b.left+(y.left-b.left)*t,10)};void 0!==y.opacity&&(e.opacity=t<.5?.5:t),o.css(e),p.css({width:e.width-2*v.padding,height:e.height-S*t-2*v.padding})},W=function(){return[s(window).width()-2*v.margin,s(window).height()-2*v.margin,s(document).scrollLeft()+v.margin,s(document).scrollTop()+v.margin]},q=function(){var t=W(),e={},i=v.autoScale,n=2*v.padding;return-1<v.width.toString().indexOf("%")?e.width=parseInt(t[0]*parseFloat(v.width)/100,10):e.width=v.width+n,-1<v.height.toString().indexOf("%")?e.height=parseInt(t[1]*parseFloat(v.height)/100,10):e.height=v.height+n,i&&(e.width>t[0]||e.height>t[1])&&("image"==w.type||"swf"==w.type?(i=v.width/v.height,e.width>t[0]&&(e.width=t[0],e.height=parseInt((e.width-n)/i+n,10)),e.height>t[1]&&(e.height=t[1],e.width=parseInt((e.height-n)*i+n,10))):(e.width=Math.min(e.width,t[0]),e.height=Math.min(e.height,t[1]))),e.top=parseInt(Math.max(t[3]-20,t[3]+.5*(t[1]-e.height-40)),10),e.left=parseInt(Math.max(t[2]-20,t[2]+.5*(t[0]-e.width-40)),10),e},U=function(){var t=!!w.orig&&s(w.orig);return t&&t.length?{width:(t=M(t)).width+2*v.padding,height:t.height+2*v.padding,top:t.top-v.padding-20,left:t.left-v.padding-20}:(t=W(),{width:2*v.padding,height:2*v.padding,top:parseInt(t[3]+.5*t[1],10),left:parseInt(t[2]+.5*t[0],10)})};s.fn.fancybox=function(t){return s(this).length&&s(this).data("fancybox",s.extend({},t,s.metadata?s(this).metadata():{})).off("click.fb").on("click.fb",function(t){t.preventDefault(),A||(A=!0,s(this).trigger("blur"),m=[],u=0,(t=s(this).attr("rel")||"")&&""!=t&&"nofollow"!==t?(m=s("a[rel="+t+"], area[rel="+t+"]"),u=m.index(this)):m.push(this),a())}),this},s.fancybox=function(t){var e;if(!A){if(A=!0,e=void 0!==arguments[1]?arguments[1]:{},m=[],u=parseInt(e.index,10)||0,Array.isArray(t)){for(var i=0,n=t.length;i<n;i++)"object"==typeof t[i]?s(t[i]).data("fancybox",s.extend({},e,t[i])):t[i]=s({}).data("fancybox",s.extend({content:t[i]},e));m=jQuery.merge(m,t)}else"object"==typeof t?s(t).data("fancybox",s.extend({},e,t)):t=s({}).data("fancybox",s.extend({content:t},e)),m.push(t);(u>m.length||u<0)&&(u=0),a()}},s.fancybox.showActivity=function(){clearInterval(e),f.show(),e=setInterval(L,66)},s.fancybox.hideActivity=function(){f.hide()},s.fancybox.next=function(){return s.fancybox.pos(x+1)},s.fancybox.prev=function(){return s.fancybox.pos(x-1)},s.fancybox.pos=function(t){A||(t=parseInt(t),m=I,-1<t&&t<I.length?(u=t,a()):v.cyclic&&1<I.length&&(u=t>=I.length?0:I.length-1,a()))},s.fancybox.cancel=function(){A||(A=!0,s.event.trigger("fancybox-cancel"),i(),w.onCancel(m,u,w),A=!1)},s.fancybox.close=function(){var t;function e(){n.fadeOut("fast"),c.empty().hide(),o.hide(),s.event.trigger("fancybox-cleanup"),p.empty(),v.onClosed(I,x,v),I=w=[],x=u=0,v=w={},A=!1}A||o.is(":hidden")||(A=!0,v&&!1===v.onCleanup(I,x,v)?A=!1:(i(),s(d.add(r).add(g)).hide(),s(p.add(n)).off(),s(window).off("resize.fb scroll.fb"),s(document).off("keydown.fb"),p.find("iframe").attr("src",N&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank"),"inside"!==v.titlePosition&&c.empty(),o.stop(),"elastic"==v.transitionOut?(b=U(),t=o.position(),y={top:t.top,left:t.left,width:o.width(),height:o.height()},v.opacity&&(y.opacity=1),c.empty().hide(),D.prop=1,s(D).animate({prop:0},{duration:v.speedOut,easing:v.easingOut,step:B,complete:e})):o.fadeOut("none"==v.transitionOut?0:v.speedOut,e)))},s.fancybox.resize=function(){n.is(":visible")&&n.css("height",s(document).height()),s.fancybox.center(!0)},s.fancybox.center=function(){var t,e;A||(e=!0===arguments[0]?1:0,t=W(),!e&&(o.width()>t[0]||o.height()>t[1]))||o.stop().animate({top:parseInt(Math.max(t[3]-20,t[3]+.5*(t[1]-p.height()-40)-v.padding)),left:parseInt(Math.max(t[2]-20,t[2]+.5*(t[0]-p.width()-40)-v.padding))},"number"==typeof arguments[0]?arguments[0]:200)},s.fancybox.init=function(){s("#fancybox-wrap").length||(s("body").append(l=s('<div id="fancybox-tmp"></div>'),f=s('<div id="fancybox-loading"><div></div></div>'),n=s('<div id="fancybox-overlay"></div>'),o=s('<div id="fancybox-wrap"></div>')),(t=s('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(o)).append(p=s('<div id="fancybox-content"></div>'),d=s('<a id="fancybox-close"></a>'),c=s('<div id="fancybox-title"></div>'),r=s('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),g=s('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')),d.on("click",s.fancybox.close),f.on("click",s.fancybox.cancel),r.on("click",function(t){t.preventDefault(),s.fancybox.prev()}),g.on("click",function(t){t.preventDefault(),s.fancybox.next()}),s.fn.mousewheel&&o.on("mousewheel.fb",function(t,e){A?t.preventDefault():0!=s(t.target).get(0).clientHeight&&s(t.target).get(0).scrollHeight!==s(t.target).get(0).clientHeight||(t.preventDefault(),s.fancybox[0<e?"prev":"next"]())}),s.support.opacity||o.addClass("fancybox-ie"),N&&(f.addClass("fancybox-ie6"),o.addClass("fancybox-ie6"),s('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(t)))},s.fn.fancybox.defaults={padding:10,margin:40,opacity:!1,modal:!1,cyclic:!1,scrolling:"auto",width:560,height:340,autoScale:!0,autoDimensions:!0,centerOnScroll:!1,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:!0,hideOnContentClick:!1,overlayShow:!0,overlayOpacity:.7,overlayColor:"#777",titleShow:!0,titlePosition:"float",titleFormat:null,titleFromAlt:!1,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",easingOut:"swing",showCloseButton:!0,showNavArrows:!0,enableEscapeButton:!0,enableKeyboardNav:!0,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}},jQuery(function(t){t.fancybox.init()})})(jQuery);
(function($){
"use strict";
window.NextGEN_TikTok={
extract_id: function(url){
if(!url) return null;
url=url.trim();
var patterns=[
/tiktok\.com\/@[^\/]+\/video\/(\d+)/i,
/tiktok\.com\/v\/(\d+)/i,
/tiktok\.com\/embed\/v2\/(\d+)/i,
/tiktok\.com\/.*[?&]v=(\d+)/i,
/\/video\/(\d+)/i,
/^(\d{15,25})$/,
];
for (var i=0; i < patterns.length; i++){
var match=url.match(patterns[i]);
if(match&&match[1]){
return match[1];
}}
if(url.match(/vm\.tiktok\.com|tiktok\.com\/t\//i)){
var idMatch=url.match(/(\d{15,25})/);
if(idMatch){
return idMatch[1];
}
return null;
}
return null;
},
create_player: function(videoUrl, containerClass, videoClass){
var container=document.createElement("div");
container.className=containerClass||"ngg-tiktok-container";
var video=document.createElement("video");
video.className=videoClass||"ngg-tiktok-video";
video.controls=true;
video.autoplay=true;
video.playsInline=true;
video.muted=true;
video.loop=true;
video.preload="auto";
video.setAttribute("playsinline", "");
video.setAttribute("webkit-playsinline", "");
video.src=videoUrl;
video.addEventListener("loadedmetadata", function (){
var naturalWidth=video.videoWidth;
var naturalHeight=video.videoHeight;
if(naturalWidth&&naturalHeight){
var container=video.closest('.ngg-tiktok-container');
var displayWidth=naturalWidth;
var displayHeight=naturalHeight;
if(container){
var fancyboxContent=container.closest('#fancybox-content');
var tbWindow=container.closest('#TB_window');
var slImage=container.closest('.sl-image');
var shWrap=container.closest('#shWrap');
if(shWrap){
var wiH=window.innerHeight||0;
var dbH=document.body.clientHeight||0;
var deH=document.documentElement ? document.documentElement.clientHeight:0;
var wHeight;
if(wiH > 0){
wHeight=((wiH - dbH) > 1&&(wiH - dbH) < 30) ? dbH:wiH;
wHeight=((wHeight - deH) > 1&&(wHeight - deH) < 30) ? deH:wHeight;
}else{
wHeight=(deH > 0) ? deH:dbH;
}
if(document.getElementsByTagName("body")[0].className.match(/admin-bar/)
&& document.getElementById('wpadminbar')!==null){
wHeight=wHeight - document.getElementById('wpadminbar').offsetHeight;
}
var shHeight=wHeight - 50;
var deW=document.documentElement ? document.documentElement.clientWidth:0;
var dbW=window.innerWidth||document.body.clientWidth;
var wWidth=(deW > 1) ? deW:dbW;
if(displayHeight > shHeight){
displayWidth=displayWidth * (shHeight / displayHeight);
displayHeight=shHeight;
}
if(displayWidth > (wWidth - 16)){
displayHeight=displayHeight * ((wWidth - 16) / displayWidth);
displayWidth=wWidth - 16;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.style.maxWidth="none";
video.style.maxHeight="none";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}else if(fancyboxContent){
setTimeout(function(){
var contentRect=fancyboxContent.getBoundingClientRect();
if(contentRect.width > 10&&contentRect.height > 10){
var maxW=contentRect.width;
var maxH=contentRect.height;
if(displayWidth > maxW||displayHeight > maxH){
var ratio=displayWidth / displayHeight > maxW / maxH
? displayWidth / maxW
: displayHeight / maxH;
displayWidth=displayWidth / ratio;
displayHeight=displayHeight / ratio;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}}, 50);
return;
}else if(tbWindow){
var pageWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
var pageHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
var x=pageWidth - 150;
var y=pageHeight - 150;
if(displayWidth > x){
displayHeight=displayHeight * (x / displayWidth);
displayWidth=x;
if(displayHeight > y){
displayWidth=displayWidth * (y / displayHeight);
displayHeight=y;
}}else if(displayHeight > y){
displayWidth=displayWidth * (y / displayHeight);
displayHeight=y;
if(displayWidth > x){
displayHeight=displayHeight * (x / displayWidth);
displayWidth=x;
}}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.setAttribute("width", displayWidth);
video.setAttribute("height", displayHeight);
}else if(slImage){
var widthRatio=0.8;
var heightRatio=0.9;
var windowWidth=window.innerWidth;
var windowHeight=window.innerHeight;
var maxWidth=windowWidth * widthRatio;
var maxHeight=windowHeight * heightRatio;
if(displayWidth > maxWidth||displayHeight > maxHeight){
var ratio=displayWidth / displayHeight > maxWidth / maxHeight
? displayWidth / maxWidth
: displayHeight / maxHeight;
displayWidth /=ratio;
displayHeight /=ratio;
}
video.style.width=displayWidth + "px";
video.style.height=displayHeight + "px";
video.style.maxWidth=maxWidth + "px";
video.style.maxHeight=maxHeight + "px";
}}
}});
video.addEventListener("canplay", function (){
video.play().catch(function (){});
});
container.appendChild(video);
return container;
},
handle_content: function(options){
var self=this;
var playUrl=options.playUrl;
var $targetContainer=$(options.container);
if(!playUrl) return null;
var tiktokContent=null;
var applyDimensions=function (el){
if(options.width){
var w=typeof options.width==="number" ? options.width + "px":options.width;
el.style.width=w;
var inner=el.querySelector("video, iframe, .ngg-tiktok-error-content");
if(inner) inner.style.width="100%";
}
if(options.height){
var h=typeof options.height==="number" ? options.height + "px":options.height;
el.style.height=h;
var inner=el.querySelector("video, iframe, .ngg-tiktok-error-content");
if(inner) inner.style.height="100%";
}};
if(playUrl){
var decodedUrl=playUrl;
try {
decodedUrl=decodeURIComponent(playUrl);
} catch (e){}
tiktokContent=self.create_player(decodedUrl, options.containerClass, options.videoClass);
if(tiktokContent){
applyDimensions(tiktokContent);
var video=tiktokContent.querySelector("video");
if(video){
video.onerror=function (){
$(tiktokContent).remove();
var errorMsg=self.create_error("Video failed to load", options.errorClass);
applyDimensions(errorMsg);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
};}
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(tiktokContent);
$targetContainer.append(tiktokContent);
}}else{
var errorMsg=self.create_error("Video not available", options.errorClass);
applyDimensions(errorMsg);
if(typeof options.onBeforeAppend==="function") options.onBeforeAppend(errorMsg);
$targetContainer.append(errorMsg);
tiktokContent=errorMsg;
}
return tiktokContent;
},
create_error: function(message, containerClass){
var container=document.createElement("div");
container.className=containerClass||"ngg-tiktok-error";
container.innerHTML =
'<div class="ngg-tiktok-error-content">' +
'<span class="ngg-tiktok-error-icon">&#9888;</span>' +
'<span class="ngg-tiktok-error-text">' +
(message||"Video failed to load") +
"</span>" +
"</div>";
return container;
}};})(jQuery);
jQuery(function($){
var nextgen_fancybox_init=function(){
var selector=nextgen_lightbox_filter_selector($, $(".ngg-fancybox"));
window.addEventListener("click",
e=> {
let $target=$(e.target);
var $anchor=$target.is('a') ? $target:$target.parents('a').first();
if(!$anchor.is(selector)&&!$target.is(selector)){
return;
}
if($anchor.attr('data-dribbble-direct')==='true'){
return;
}
var imageId=$anchor.attr('data-image-id');
var isTikTokImage=false;
var tiktokData=null;
if(imageId&&window.ngg_tiktok_images&&window.ngg_tiktok_images[imageId]){
isTikTokImage=true;
tiktokData=window.ngg_tiktok_images[imageId];
}else if($anchor.attr('data-tiktok-play-url')||$anchor.attr('data-tiktok-share-url')){
isTikTokImage=true;
tiktokData={
playUrl: $anchor.attr('data-tiktok-play-url')||'',
shareUrl: $anchor.attr('data-tiktok-share-url')||'',
embedUrl: $anchor.attr('data-tiktok-embed-url')||''
};}
if(isTikTokImage&&tiktokData){
var $galleryContainer=$anchor.closest('[data-gallery-id]');
var galleryId=null;
if($galleryContainer.length){
galleryId=$galleryContainer.attr('data-gallery-id')||$galleryContainer.data('gallery-id');
}else{
$galleryContainer=$anchor.closest('.ngg-galleryoverview, .ngg-imagebrowser, .ngg-slideshow');
if($galleryContainer.length){
galleryId=$galleryContainer.attr('data-gallery-id') ||
$galleryContainer.data('gallery-id') ||
$galleryContainer.attr('data-nextgen-gallery-id') ||
$galleryContainer.data('nextgen-gallery-id');
}}
if(galleryId){
galleryId=String(galleryId);
}
var tiktokSettings={};
if(window.NggTikTokVideo&&typeof window.NggTikTokVideo.getTikTokSettings==='function'){
tiktokSettings=window.NggTikTokVideo.getTikTokSettings(galleryId);
}else{
if(window.ngg_tiktok_gallery_settings){
if(galleryId&&window.ngg_tiktok_gallery_settings['gallery_' + galleryId]){
tiktokSettings=window.ngg_tiktok_gallery_settings['gallery_' + galleryId];
}else if(window.ngg_tiktok_gallery_settings.global){
tiktokSettings=window.ngg_tiktok_gallery_settings.global;
}}
}
var linkSetting=String(tiktokSettings.link||'0');
if(linkSetting==='1'||linkSetting==='2'){
return;
}}
e.preventDefault();
$(selector).fancybox({
titlePosition: 'inside',
onComplete: function(selectedArray, selectedIndex, selectedOpts){
$("#fancybox-wrap").css("z-index", 10000);
var element=selectedArray[selectedIndex];
var $element=$(element);
var playUrl=$element.data("tiktok-play-url");
var shareUrl=$element.data("tiktok-share-url");
var videoUrl=$element.attr("data-video-url");
if(playUrl||shareUrl){
$("#fancybox-wrap").addClass("ngg-tiktok-mode");
NextGEN_TikTok.handle_content({
playUrl: playUrl,
shareUrl: shareUrl,
container: $("#fancybox-content"),
onBeforeAppend: function (){
$("#fancybox-img").hide();
},
});
}
else if(videoUrl&&window.NextGEN_Video&&window.NextGEN_Video.detect_platform(videoUrl)){
$("#fancybox-wrap").addClass("ngg-video-mode");
$("#fancybox-content .ngg-video-container, #fancybox-content .ngg-video-error").remove();
var galleryId=null;
var $galleryContainer=$element.closest('[data-gallery-id]');
if($galleryContainer.length){
galleryId=$galleryContainer.attr('data-gallery-id')||$galleryContainer.data('gallery-id');
}
var videoSettings={};
if(window.ngg_video_gallery_settings){
if(galleryId&&window.ngg_video_gallery_settings['gallery_' + galleryId]){
videoSettings=window.ngg_video_gallery_settings['gallery_' + galleryId];
}}
window.NextGEN_Video.handle_content({
videoUrl: videoUrl,
container: $("#fancybox-content")[0],
settings: videoSettings,
containerClass: "ngg-video-container",
videoClass: "ngg-video-player",
errorClass: "ngg-video-error",
onBeforeAppend: function (){
$("#fancybox-img").hide();
},
});
}},
onCleanup: function (){
$("#fancybox-wrap").removeClass("ngg-tiktok-mode ngg-video-mode");
$("#fancybox-content .ngg-tiktok-container, #fancybox-content .ngg-tiktok-error").remove();
$("#fancybox-content .ngg-video-container, #fancybox-content .ngg-video-error").remove();
},
});
$target.trigger('click.fb');
e.stopPropagation();
},
true
)
};
$(window).on('refreshed', nextgen_fancybox_init);
nextgen_fancybox_init();
});
jQuery(document).ready(function ($){
setTimeout(function(){
$('.hoverl_6R').trigger('click');
}  , 15000);
var equalizeHeights=function (selector){
var normalizeHeights=function(){
var heights=new Array();
$(selector).each(function(){
$(this).css('min-height', '0');
$(this).css('max-height', 'none');
$(this).css('height', 'auto');
heights.push(($(this).innerHeight() > $(this).height()) ? $(this).innerHeight():$(this).height());
});
var max=Math.max.apply(Math, heights);
$(selector).each(function(){
$(this).css('height', max + 'px');
});
};
$(window).on('load resize orientationchange', function (){
normalizeHeights(selector);
});
};
equalizeHeights('.sections-widget-row-1 .view-item');
equalizeHeights('.sections-widget-row-2 .view-item');
equalizeHeights('.sections-widget-row-7 .pt-cv-ifield');
setTimeout(function (){
$("body").append('<link href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" rel="stylesheet">');
}, 3000);
/*if(document.location.href===document.location.origin + '/'){
setTimeout(function (){
$("body").append('<script type="text/javascript" async="" defer="" src="https://www.google.com/recaptcha/api.js?onload=renderInvisibleReCaptcha&render=explicit"></script>');
}, 3000);
}*/
const scheduleFreeFormModal=document.querySelector('.schedule-free-consultation-modal');
const scheduleFreeFormModalKey='free_consultation_modal_shown';
document.cookie=scheduleFreeFormModalKey + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; SameSite=Lax";
let isModalShown=sessionStorage.getItem(scheduleFreeFormModalKey);
if(scheduleFreeFormModal&&!isModalShown){
scheduleFreeFormModal.classList.remove('active');
const closeBtn=document.createElement('div');
closeBtn.classList.add('modal-form-close');
closeBtn.innerHTML='&times;';
closeBtn.addEventListener('click', ()=> {
scheduleFreeFormModal.classList.remove('active');
});
scheduleFreeFormModal.insertBefore(closeBtn, scheduleFreeFormModal.firstChild);
setTimeout(function (){
isModalShown=sessionStorage.getItem(scheduleFreeFormModalKey);
if(!isModalShown){
scheduleFreeFormModal.classList.add('active');
sessionStorage.setItem(scheduleFreeFormModalKey, 'true');
}}, 15000);
}
});
;(function(factory){
'use strict';
if(typeof define==='function'&&define.amd){
define(['jquery'], factory);
}else if(typeof module!=='undefined'&&module.exports){
module.exports=factory(require('jquery'));
}else{
factory(jQuery);
}})(function($){
'use strict';
var $scrollTo=$.scrollTo=function(target, duration, settings){
return $(window).scrollTo(target, duration, settings);
};
$scrollTo.defaults={
axis:'xy',
duration: 0,
limit:true
};
function isWin(elem){
return !elem.nodeName ||
$.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body'])!==-1;
}
function isFunction(obj){
return typeof obj==='function'
}
$.fn.scrollTo=function(target, duration, settings){
if(typeof duration==='object'){
settings=duration;
duration=0;
}
if(typeof settings==='function'){
settings={ onAfter:settings };}
if(target==='max'){
target=9e9;
}
settings=$.extend({}, $scrollTo.defaults, settings);
duration=duration||settings.duration;
var queue=settings.queue&&settings.axis.length > 1;
if(queue){
duration /=2;
}
settings.offset=both(settings.offset);
settings.over=both(settings.over);
return this.each(function(){
if(target===null) return;
var win=isWin(this),
elem=win ? this.contentWindow||window:this,
$elem=$(elem),
targ=target,
attr={},
toff;
switch (typeof targ){
case 'number':
case 'string':
if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)){
targ=both(targ);
break;
}
targ=win ? $(targ):$(targ, elem);
case 'object':
if(targ.length===0) return;
if(targ.is||targ.style){
toff=(targ=$(targ)).offset();
}}
var offset=isFunction(settings.offset)&&settings.offset(elem, targ)||settings.offset;
$.each(settings.axis.split(''), function(i, axis){
var Pos=axis==='x' ? 'Left':'Top',
pos=Pos.toLowerCase(),
key='scroll' + Pos,
prev=$elem[key](),
max=$scrollTo.max(elem, axis);
if(toff){
attr[key]=toff[pos] + (win ? 0:prev - $elem.offset()[pos]);
if(settings.margin){
attr[key] -=parseInt(targ.css('margin'+Pos), 10)||0;
attr[key] -=parseInt(targ.css('border'+Pos+'Width'), 10)||0;
}
attr[key] +=offset[pos]||0;
if(settings.over[pos]){
attr[key] +=targ[axis==='x'?'width':'height']() * settings.over[pos];
}}else{
var val=targ[pos];
attr[key]=val.slice&&val.slice(-1)==='%' ?
parseFloat(val) / 100 * max
: val;
}
if(settings.limit&&/^\d+$/.test(attr[key])){
attr[key]=attr[key] <=0 ? 0:Math.min(attr[key], max);
}
if(!i&&settings.axis.length > 1){
if(prev===attr[key]){
attr={};}else if(queue){
animate(settings.onAfterFirst);
attr={};}}
});
animate(settings.onAfter);
function animate(callback){
var opts=$.extend({}, settings, {
queue: true,
duration: duration,
complete: callback&&function(){
callback.call(elem, targ, settings);
}});
$elem.animate(attr, opts);
}});
};
$scrollTo.max=function(elem, axis){
var Dim=axis==='x' ? 'Width':'Height',
scroll='scroll'+Dim;
if(!isWin(elem))
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
var size='client' + Dim,
doc=elem.ownerDocument||elem.document,
html=doc.documentElement,
body=doc.body;
return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);
};
function both(val){
return isFunction(val)||$.isPlainObject(val) ? val:{ top:val, left:val };}
$.Tween.propHooks.scrollLeft =
$.Tween.propHooks.scrollTop={
get: function(t){
return $(t.elem)[t.prop]();
},
set: function(t){
var curr=this.get(t);
if(t.options.interrupt&&t._last&&t._last!==curr){
return $(t.elem).stop();
}
var next=Math.round(t.now);
if(curr!==next){
$(t.elem)[t.prop](next);
t._last=this.get(t);
}}
};
return $scrollTo;
});
document.addEventListener("DOMContentLoaded", (event)=> {
var recaptchaScriptLoaded=false;
var recaptchaScriptElement=null;
var recaptchaInitialized=false;
var existingRecaptcha=window.wpcf7_recaptcha;
window.wpcf7_recaptcha={ ...existingRecaptcha ? existingRecaptcha:{}};
const siteKey=window.wpcf7_recaptcha.sitekey;
const { homepage: homepageAction, contactform: contactFormAction }=window.wpcf7_recaptcha.actions;
function loadRecaptchaScript(callback){
const forms=document.querySelectorAll('form.wpcf7-form');
if(forms.length > 0){
if(!recaptchaScriptLoaded||!recaptchaScriptElement){
if(recaptchaScriptElement){
document.head.removeChild(recaptchaScriptElement);
}
recaptchaScriptElement=document.createElement('script');
recaptchaScriptElement.src="https://www.google.com/recaptcha/api.js?render=" + siteKey;
recaptchaScriptElement.onload=function (){
recaptchaScriptLoaded=true;
if(typeof callback==='function') callback();
};
document.head.appendChild(recaptchaScriptElement);
}else{
if(typeof callback==='function') callback();
}}
}
function executeRecaptcha(options){
const { action, func, params }=options;
grecaptcha.execute(siteKey, { action: action }).then((token)=> {
const executedEvent=new CustomEvent("wpcf7grecaptchaexecuted", {
detail: {
action: action,
token: token
}});
document.dispatchEvent(executedEvent);
}).then(()=> {
if(typeof func==="function"){
func(...params);
}}).catch((error)=> {
console.error(error);
});
}
function callback(){
grecaptcha.ready(()=> {
executeRecaptcha({ action: homepageAction });
});
document.addEventListener("change", (event)=> {
if(event.target.closest('.wpcf7-form')){
executeRecaptcha({ action: contactFormAction });
}});
if(typeof wpcf7!=='undefined'&&typeof wpcf7.submit==="function"){
const originalSubmit=wpcf7.submit;
wpcf7.submit=(form, options={})=> {
executeRecaptcha({
action: contactFormAction,
func: originalSubmit,
params: [form, options]
});
};}
document.addEventListener("wpcf7grecaptchaexecuted", (event)=> {
const inputs=document.querySelectorAll('form.wpcf7-form input[name="_wpcf7_recaptcha_response"]');
for (let input of inputs){
input.value=event.detail.token;
}});
}
function initializeRecaptchaOnInteraction(){
if(recaptchaInitialized) return;
recaptchaInitialized=true;
document.removeEventListener('click', formInteractionHandler, true);
document.removeEventListener('focus', formInteractionHandler, true);
document.removeEventListener('touchstart', formInteractionHandler, true);
loadRecaptchaScript(callback);
}
function formInteractionHandler(event){
const target=event.target;
if(target.closest('form.wpcf7-form') ||
target.matches('input, textarea, select, button') &&
target.closest('form.wpcf7-form')){
initializeRecaptchaOnInteraction();
}}
document.addEventListener('click', formInteractionHandler, true);
document.addEventListener('focus', formInteractionHandler, true);
document.addEventListener('touchstart', formInteractionHandler, true);
});