(function () {var RESPONSIVE_IMG_RE = /^(.*?)(?:normal|100|400|800|1200|1600|2000)_([a-zA-Z0-9_\-]+\.(?:jpg|jpeg|png|webp))(\?.*)?$/i;var RESPONSIVE_IMG_IN_ATTR_RE = /(?:normal|100|400|800|1200|1600|2000)_[a-zA-Z0-9_\-]+\.(?:jpg|jpeg|png|webp)/i;var SIZE_WIDTHS_ARR = ['100', '400', '800', '1200', '1600', '2000'];var VIDEO_SRC_RE = /^(.*)\.(?:mp4|webm|mov)(?:\?.*)?$/i;var resize_observer_obj = null;function buildSrcsetTxt(prefix_txt, name_txt, query_txt) {var parts_arr = [];for (var i = 0; i < SIZE_WIDTHS_ARR.length; i++) {var size_txt = SIZE_WIDTHS_ARR[i];parts_arr.push(prefix_txt + size_txt + '_' + name_txt + query_txt + ' ' + size_txt + 'w');} return parts_arr.join(', ');} function isCdnResponsiveImg(img) {if (!(img instanceof HTMLImageElement)) return false;var src_txt = img.getAttribute('src') || '';if (RESPONSIVE_IMG_RE.test(src_txt)) return true;var srcset_txt = img.getAttribute('srcset') || '';return RESPONSIVE_IMG_IN_ATTR_RE.test(srcset_txt);} function updateSizesToRenderedWidth(img) {var width_num = Math.round(img.getBoundingClientRect().width);if (width_num <= 0) return;var sizes_txt = width_num + 'px';if (img.getAttribute('sizes') !== sizes_txt) {img.setAttribute('sizes', sizes_txt);}} function processImg(img) {if (!(img instanceof HTMLImageElement)) return;if (!img.hasAttribute('srcset')) {var match_arr = (img.getAttribute('src') || '').match(RESPONSIVE_IMG_RE);if (!match_arr) return;var prefix_txt = match_arr[1];var name_txt = match_arr[2];var query_txt = match_arr[3] || '';img.setAttribute('srcset', buildSrcsetTxt(prefix_txt, name_txt, query_txt));img.setAttribute('src', prefix_txt + '800_' + name_txt + query_txt);} else if (!isCdnResponsiveImg(img)) {return;} img.setAttribute('data-sizes-auto', '1');updateSizesToRenderedWidth(img);if (resize_observer_obj) {resize_observer_obj.observe(img);}} function videoPlayingSrcTxt(video) {var src_txt = video.getAttribute('src') || '';if (!src_txt) {var source_el = video.querySelector('source[src]');src_txt = source_el ? (source_el.getAttribute('src') || '') : '';} return src_txt.trim();} function processVideo(video) {if (!(video instanceof HTMLVideoElement)) return;var poster_txt = (video.getAttribute('poster') || '').trim();if (poster_txt && video.getAttribute('data-poster-auto') !== '1') return;var src_txt = videoPlayingSrcTxt(video);if (!src_txt || video.getAttribute('data-poster-src') === src_txt) return;video.setAttribute('data-poster-src', src_txt);var match_arr = src_txt.match(VIDEO_SRC_RE);if (!match_arr) return;var thumb_url_txt = match_arr[1] + '-thumbnail.jpg';var probe_img = new Image();probe_img.onload = function () {if (videoPlayingSrcTxt(video) !== src_txt) return;video.setAttribute('poster', thumb_url_txt);video.setAttribute('data-poster-auto', '1');};probe_img.src = thumb_url_txt;} function processSubtree(node) {if (node instanceof HTMLImageElement) {processImg(node);return;} if (node instanceof HTMLVideoElement) {processVideo(node);return;} if (node && node.tagName === 'SOURCE' && node.parentNode) {processVideo(node.parentNode);return;} if (node && typeof node.querySelectorAll === 'function') {var imgs = node.querySelectorAll('img');for (var i = 0; i < imgs.length; i++) processImg(imgs[i]);var videos = node.querySelectorAll('video');for (var v = 0; v < videos.length; v++) processVideo(videos[v]);}} function start() {if (typeof ResizeObserver === 'function') {resize_observer_obj = new ResizeObserver(function (entries) {for (var i = 0; i < entries.length; i++) {updateSizesToRenderedWidth(entries[i].target);}});} processSubtree(document.body);new MutationObserver(function (mutations) {for (var i = 0; i < mutations.length; i++) {var mutation = mutations[i];if (mutation.type === 'attributes') {var target_el = mutation.target;if (target_el && target_el.tagName === 'SOURCE' && target_el.parentNode) {target_el = target_el.parentNode;} processVideo(target_el);continue;} var added = mutation.addedNodes;for (var j = 0; j < added.length; j++) processSubtree(added[j]);}}).observe(document.documentElement, {childList: true,subtree: true,attributes: true,attributeFilter: ['src']});if (!resize_observer_obj) {window.addEventListener('resize', function () {var imgs = document.querySelectorAll('img[data-sizes-auto="1"]');for (var i = 0; i < imgs.length; i++) updateSizesToRenderedWidth(imgs[i]);});}} window.appBuilderProcessResponsiveImg = processImg;if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', start, { once: true });} else {start();}})(); function appBuilderBasePathTxt() {if (typeof APP_CONFIG !== 'undefined' && APP_CONFIG.appBuilderBasePathTxt) {return APP_CONFIG.appBuilderBasePathTxt;} if (typeof window !== 'undefined' && window.APP_BUILDER_BASE_PATH) {return window.APP_BUILDER_BASE_PATH;} return '';} (function () {if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', freeAppBannerInitialize);} else {freeAppBannerInitialize();} function isOnboardingTemplatePreviewBoo() {try {return new URLSearchParams(window.location.search).get('onboarding') === '1';} catch (error) {return false;}} function isBannerClosed() {return document.cookie.indexOf('hide_app_banner_boo=1') !== -1;} function setBannerClosedCookie() {var secure_attr_txt = (location.protocol === 'https:') ? '; Secure' : '';document.cookie = 'hide_app_banner_boo=1; Max-Age=86400; Path=/; SameSite=Lax' + secure_attr_txt;} function freeAppBannerInitialize() {var banner_el = document.getElementById('showSmallAdOnScroll');if (!banner_el) return;var html_el = document.documentElement;if (isOnboardingTemplatePreviewBoo() || isBannerClosed()) {banner_el.parentNode && banner_el.parentNode.removeChild(banner_el);html_el.classList.remove('s123-ads-banner-active');html_el.classList.remove('s123-ads-banner-small');return;} var abuse_button_el = banner_el.querySelector('.s123-ads-banner-abuse-link');if (abuse_button_el) {abuse_button_el.addEventListener('click', function () {openReportAbusePopup();});} var close_button_el = banner_el.querySelector('.s123-ads-banner-close-link');if (close_button_el) {close_button_el.addEventListener('click', function () {closeBannerWithAnimation(banner_el, html_el);});} if (banner_el.classList.contains('static')) {html_el.classList.add('s123-ads-banner-active');} else {isSmallAds(html_el);var banner_height = banner_el.offsetHeight;bannerHandler();window.addEventListener('scroll', bannerHandler, { passive: true });function bannerHandler() {var offset = (html_el.classList.contains('inside_page') || html_el.classList.contains('rich_page')) ? 0 : 50;if (window.scrollY >= offset) {html_el.classList.add('s123-ads-banner-active');banner_el.style.bottom = '0';} else {html_el.classList.remove('s123-ads-banner-active');banner_el.style.bottom = (-1 * banner_height) + 'px';}}}} function closeBannerWithAnimation(banner_el, html_el) {setBannerClosedCookie();var banner_height = banner_el.offsetHeight || 64;var cleaned_up = false;function cleanup() {if (cleaned_up) return;cleaned_up = true;banner_el.removeEventListener('transitionend', onTransitionEnd);banner_el.parentNode && banner_el.parentNode.removeChild(banner_el);html_el.classList.remove('s123-ads-banner-active');html_el.classList.remove('s123-ads-banner-small');} function onTransitionEnd(event) {if (event.propertyName === 'bottom') cleanup();} banner_el.addEventListener('transitionend', onTransitionEnd);setTimeout(cleanup, 450);banner_el.offsetHeight;banner_el.style.bottom = '-' + banner_height + 'px';} function isSmallAds(html_el) {if (!html_el.classList.contains('in-management')) return;var is_small_boo = screen.availHeight <= 660 && screen.availWidth >= 768;if (is_small_boo) {html_el.classList.add('s123-ads-banner-small');} else {html_el.classList.remove('s123-ads-banner-small');}} function openReportAbusePopup() {if (document.getElementById('freeAppBannerReportOverlay')) return;var html = '';html += '
';html += '
';html += '';html += '
';html += '

'+translations.reportAbusePopup.reportAbuseTitle+'

';html += '

'+translations.reportAbusePopup.reportAbuseExp+'

';html += '
';html += '';html += '';html += '
';html += '
';html += '';html += '';html += '
';html += '
';html += '';html += '';html += '
';html += '
';html += '';html += '';html += '
';html += '';html += '
';html += '
';var wrapper_el = document.createElement('div');wrapper_el.innerHTML = html;var overlay_el = wrapper_el.firstChild;document.body.appendChild(overlay_el);var form_el = overlay_el.querySelector('.free-app-banner-report-form');var thanks_el = overlay_el.querySelector('.free-app-banner-report-thanks');var error_el = overlay_el.querySelector('.free-app-banner-report-error');var submit_el = form_el.querySelector('.free-app-banner-report-submit');if (window.AppBuilderRecaptcha && typeof window.AppBuilderRecaptcha.attach === 'function') {window.AppBuilderRecaptcha.attach(form_el);} var recap_inputs_arr = form_el.querySelectorAll('input, textarea, select');for (var i = 0; i < recap_inputs_arr.length; i++) {recap_inputs_arr[i].addEventListener('focus', function () {if (window.AppBuilderRecaptcha && typeof window.AppBuilderRecaptcha.showBadge === 'function') {window.AppBuilderRecaptcha.showBadge();}});recap_inputs_arr[i].addEventListener('focusout', function () {if (window.AppBuilderRecaptcha && typeof window.AppBuilderRecaptcha.hideBadge === 'function') {window.AppBuilderRecaptcha.hideBadge();}});} function closePopup() {if (overlay_el.parentNode) overlay_el.parentNode.removeChild(overlay_el);if (window.AppBuilderRecaptcha && typeof window.AppBuilderRecaptcha.hideBadge === 'function') {window.AppBuilderRecaptcha.hideBadge();}} overlay_el.addEventListener('click', function (event) {if (event.target === overlay_el) closePopup();});overlay_el.querySelector('.free-app-banner-report-close').addEventListener('click', closePopup);overlay_el.querySelector('.free-app-banner-report-close-btn').addEventListener('click', closePopup);form_el.addEventListener('submit', function (event) {event.preventDefault();error_el.style.display = 'none';error_el.textContent = '';var details_input_el = form_el.querySelector('[name="reportDetailsTXT"]');var report_details_txt = details_input_el ? details_input_el.value : '';if (!report_details_txt || report_details_txt.replace(/^\s+|\s+$/g, '').length === 0) {error_el.textContent = translations.jqueryValidMsgRequire;error_el.style.display = 'block';return false;} submit_el.disabled = true;var token_promise_obj = (window.AppBuilderRecaptcha && typeof window.AppBuilderRecaptcha.getToken === 'function') ? window.AppBuilderRecaptcha.getToken(form_el) : Promise.resolve('');token_promise_obj.then(function () {fetch(appBuilderBasePathTxt() + '/classes/freeAppBanner/reportAbusePopupO.php', {method: 'POST',body: new FormData(form_el),credentials: 'same-origin'}).then(function (response) {if (!response.ok) throw new Error('Network error');form_el.style.display = 'none';thanks_el.style.display = 'block';submit_el.disabled = false;if (window.AppBuilderRecaptcha && typeof window.AppBuilderRecaptcha.hideBadge === 'function') {window.AppBuilderRecaptcha.hideBadge();}}).catch(function () {error_el.textContent = translations.error_body;error_el.style.display = 'block';submit_el.disabled = false;});});return false;});}})(); (function () {var SITE_KEY_TXT = '6Lck3r0ZAAAAAOFc__oZANv72nZ3K29O-qsOIYPp';var ACTION_TXT = 'users_forms_submit';var INSTANCE_KEY = '__appBuilderRecap';var BADGE_SHOW_CLASS = 'app-builder-recap-show';var BADGE_STYLE_ID = 'app-builder-recap-style';var SCRIPT_URL_TXT = 'https://www.google.com/recaptcha/enterprise.js?render=' + SITE_KEY_TXT; var is_form_focused_boo = false;var badge_hold_count_num = 0;var badge_observer_obj = null;function forEachBadge(callback_fun) {var nodes_arr = document.querySelectorAll('.grecaptcha-badge');for (var i = 0; i < nodes_arr.length; i++) {callback_fun(nodes_arr[i]);}} function ensureBadgeStyles() {if (document.getElementById(BADGE_STYLE_ID)) return;if (!document.head) return;var style_el = document.createElement('style');style_el.id = BADGE_STYLE_ID;style_el.textContent = '.grecaptcha-badge { visibility: hidden !important; opacity: 0 !important; pointer-events: none !important; transition: opacity 0.2s ease; }' +'.grecaptcha-badge.' + BADGE_SHOW_CLASS + ' { visibility: visible !important; opacity: 1 !important; pointer-events: auto !important; }';document.head.appendChild(style_el);} ensureBadgeStyles();function applyBadgeState() {var show_badge_boo = is_form_focused_boo || badge_hold_count_num > 0;forEachBadge(function (badge_el) {if (show_badge_boo) {badge_el.classList.add(BADGE_SHOW_CLASS);} else {badge_el.classList.remove(BADGE_SHOW_CLASS);}});} function holdBadgeForTokenFetch() {badge_hold_count_num += 1;applyBadgeState();} function releaseBadgeHold() {if (badge_hold_count_num > 0) {badge_hold_count_num -= 1;} applyBadgeState();} function watchForBadgeOnce() {if (badge_observer_obj) return;if (typeof MutationObserver === 'undefined') return;if (document.querySelector('.grecaptcha-badge') !== null) {applyBadgeState();return;} badge_observer_obj = new MutationObserver(function () {if (document.querySelector('.grecaptcha-badge') === null) return;applyBadgeState();badge_observer_obj.disconnect();badge_observer_obj = null;});badge_observer_obj.observe(document.body, { childList: true, subtree: true });} function isActiveMode() {return true;} function loadRecaptchaScriptTag(url_txt, on_done_fun, on_fail_fun) {var script_el = document.createElement('script');script_el.src = url_txt;script_el.async = true;script_el.onload = function () { on_done_fun(); };script_el.onerror = function () { on_fail_fun(); };(document.head || document.documentElement).appendChild(script_el);} function loadRecaptchaScript() {if (window.__appBuilderRecaptchaLoadPromise) {watchForBadgeOnce();return window.__appBuilderRecaptchaLoadPromise;} watchForBadgeOnce();window.__appBuilderRecaptchaLoadPromise = new Promise(function (resolve, reject) {loadRecaptchaScriptTag(SCRIPT_URL_TXT,function () {if (typeof grecaptcha !== 'undefined' && grecaptcha.enterprise) {grecaptcha.enterprise.ready(function () { resolve(); });} else {window.__appBuilderRecaptchaLoadPromise = null;reject(new Error('grecaptcha unavailable after script load'));}},function () {window.__appBuilderRecaptchaLoadPromise = null;reject(new Error('failed to load recaptcha enterprise.js'));});});return window.__appBuilderRecaptchaLoadPromise;} function attachIfNeeded(formEl) {if (!formEl || formEl[INSTANCE_KEY]) return formEl ? formEl[INSTANCE_KEY] : null;var instance_obj = { isActive: isActiveMode() };formEl[INSTANCE_KEY] = instance_obj;var inputs_arr = formEl.querySelectorAll('input, textarea, select');var focus_handler_fun = function () {is_form_focused_boo = true;applyBadgeState();loadRecaptchaScript() .then(applyBadgeState) .catch(function () { });};var focusout_handler_fun = function () {is_form_focused_boo = false;applyBadgeState();};for (var i = 0; i < inputs_arr.length; i++) {inputs_arr[i].addEventListener('focus', focus_handler_fun);inputs_arr[i].addEventListener('focusout', focusout_handler_fun);} return instance_obj;} function attachAll() {var forms_arr = document.querySelectorAll('form');for (var i = 0; i < forms_arr.length; i++) {attachIfNeeded(forms_arr[i]);}} if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', attachAll);} else {attachAll();} if (window.jQuery) {window.jQuery(document).on('s123.page.ready', function () {attachAll();});} function resolveFormElement(formEl) {if (!formEl) return null;if (formEl.nodeType === 1) return formEl;if (formEl.jquery && typeof formEl.get === 'function') return formEl.get(0) || null;return null;} function getToken(formEl) {return new Promise(function (resolve) {var domEl = resolveFormElement(formEl);var instance_obj = attachIfNeeded(domEl);var is_formless_boo = !instance_obj;if (is_formless_boo) {holdBadgeForTokenFetch();} var resolved_boo = false;function safeResolve(value_txt) {if (resolved_boo) return;resolved_boo = true;if (is_formless_boo) {releaseBadgeHold();} resolve(typeof value_txt === 'string' ? value_txt : '');} var timeout_id = setTimeout(function () {safeResolve('');}, 5000);loadRecaptchaScript() .then(function () {grecaptcha.enterprise .execute(SITE_KEY_TXT, { action: ACTION_TXT }) .then(function (token_txt) {clearTimeout(timeout_id);if (domEl) {var token_input_el = domEl.querySelector('input[name="recaptchaToken"]');if (token_input_el) token_input_el.value = token_txt || '';} safeResolve(token_txt || '');}) .catch(function () {clearTimeout(timeout_id);safeResolve('');});}) .catch(function () {clearTimeout(timeout_id);safeResolve('');});});} window.AppBuilderRecaptcha = {getToken: getToken,attach: function (formEl) {return attachIfNeeded(resolveFormElement(formEl));},showBadge: function () {is_form_focused_boo = true;applyBadgeState();loadRecaptchaScript() .then(applyBadgeState) .catch(function () { });},hideBadge: function () {is_form_focused_boo = false;applyBadgeState();}};})(); (function (global) {'use strict';function getSessionId() {var storage_key_txt = 'app_cart_session';var session_id_txt = '';try {session_id_txt = global.localStorage ? (global.localStorage.getItem(storage_key_txt) || '') : '';} catch (e) {session_id_txt = '';} if (!session_id_txt) {session_id_txt = 'app-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);try {if (global.localStorage) {global.localStorage.setItem(storage_key_txt, session_id_txt);}} catch (e) {}} return session_id_txt;} function getPageLanguage() {var language_txt = '';try {language_txt = (global.document && global.document.documentElement && global.document.documentElement.lang) ? String(global.document.documentElement.lang).trim() : '';} catch (e) {language_txt = '';} return language_txt;} var endpoint_txt = (typeof window !== 'undefined' && window.APP_BUILDER_BASE_PATH ? window.APP_BUILDER_BASE_PATH : '') + '/app_data_api.php';function getEndpointUrl() {if (global.IsManagment == 2 && global.APP_PROJECT_ID) {return endpoint_txt + '?wu=' + encodeURIComponent(global.APP_PROJECT_ID);} return endpoint_txt;} function getPreviewUrlPrefixTxt() {if (global.IsManagment != 2) {return '';} try {var path_txt = (global.location && global.location.pathname) ? String(global.location.pathname) : '';var match_arr = path_txt.match(/^(\/\.preview-[a-f0-9]{32}(?:\/v\d+)?(?:\/\.l\/[^\/]+)?)/i);if (match_arr && match_arr[1]) {return match_arr[1];}} catch (e) {} if (global.APP_PROJECT_ID) {return '/.preview-' + String(global.APP_PROJECT_ID);} return '';} function stripPreviewPrefixFromUrlPathTxt(url_txt) {url_txt = url_txt == null ? '' : String(url_txt).trim();if (!url_txt || /^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(url_txt)) { return url_txt;} var stripped_txt = url_txt.replace(/^\/\.preview-[a-f0-9]{32}(?:\/v\d+)?(?:\/\.l\/[^\/]+)?/i, '');if (!stripped_txt) {stripped_txt = '/';} if (stripped_txt.charAt(0) !== '/' && stripped_txt.charAt(0) !== '?') {stripped_txt = '/' + stripped_txt;} return stripped_txt;} function searchResultHrefFromUrlTxt(url_txt) {url_txt = url_txt == null ? '' : String(url_txt).trim();if (!url_txt || /^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(url_txt)) { return url_txt;} var path_and_query_txt = stripPreviewPrefixFromUrlPathTxt(url_txt);var q_idx_num = path_and_query_txt.indexOf('?');var query_txt = '';if (q_idx_num !== -1) {query_txt = path_and_query_txt.slice(q_idx_num);path_and_query_txt = path_and_query_txt.slice(0, q_idx_num);} path_and_query_txt = path_and_query_txt.replace(/^\/+/, '');if (!path_and_query_txt && !query_txt) {return 'index.html';} return path_and_query_txt + query_txt;} function prepareSearchResultItemVisitorHrefs(item_obj) {if (!item_obj || typeof item_obj !== 'object') {return item_obj;} var source_url_txt = item_obj.page_url_txt || item_obj.url || item_obj.url_txt || '';source_url_txt = String(source_url_txt).trim();if (!source_url_txt) {return item_obj;} var href_txt = searchResultHrefFromUrlTxt(source_url_txt);item_obj.page_url_txt = stripPreviewPrefixFromUrlPathTxt(source_url_txt);item_obj.href_txt = href_txt;item_obj.url = href_txt;if (item_obj.url_txt != null) {item_obj.url_txt = href_txt;} return item_obj;} function applyPreviewPrefixToUrlTxt(url_txt, prefix_txt) {url_txt = url_txt == null ? '' : String(url_txt).trim();prefix_txt = prefix_txt == null ? '' : String(prefix_txt).replace(/\/$/, '');if (!url_txt || !prefix_txt) {return url_txt;} if (/^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(url_txt)) { return url_txt;} var path_and_query_txt = url_txt.replace(/^\/\.preview-[a-f0-9]{32}(?:\/v\d+)?(?:\/\.l\/[^\/]+)?/i, '');if (!path_and_query_txt) {path_and_query_txt = '/';} if (path_and_query_txt.charAt(0) !== '/' && path_and_query_txt.charAt(0) !== '?') {path_and_query_txt = '/' + path_and_query_txt;} return prefix_txt + path_and_query_txt;} function applyPreviewPrefixToResultItem(item_obj, prefix_txt) {if (!item_obj || typeof item_obj !== 'object' || !prefix_txt) {return item_obj;} if (item_obj.page_url_txt) {item_obj.page_url_txt = applyPreviewPrefixToUrlTxt(item_obj.page_url_txt, prefix_txt);} if (item_obj.url_txt) {item_obj.url_txt = applyPreviewPrefixToUrlTxt(item_obj.url_txt, prefix_txt);} if (item_obj.url) {item_obj.url = applyPreviewPrefixToUrlTxt(item_obj.url, prefix_txt);} return item_obj;} function normalizeSearchResultItem(item_obj) {if (!item_obj || typeof item_obj !== 'object') {return item_obj;} prepareSearchResultItemVisitorHrefs(item_obj);if (!item_obj.href && item_obj.href_txt) {item_obj.href = item_obj.href_txt;} if (!item_obj.description && item_obj.snippet) {item_obj.description = item_obj.snippet;} if ((item_obj.title == null || item_obj.title === '') && item_obj.title_txt) {item_obj.title = item_obj.title_txt;} if ((item_obj.title_txt == null || item_obj.title_txt === '') && item_obj.title) {item_obj.title_txt = item_obj.title;} if (!item_obj.group_label && item_obj.group_label_txt) {item_obj.group_label = item_obj.group_label_txt;} if (item_obj.title === 'undefined') {item_obj.title = '';} if (item_obj.title_txt === 'undefined') {item_obj.title_txt = item_obj.title || '';} return item_obj;} function normalizeSearchApiResponse(response_obj) {if (!response_obj || typeof response_obj !== 'object') {return response_obj;} var i_num;if (response_obj.results && response_obj.results.length) {for (i_num = 0; i_num < response_obj.results.length; i_num++) {normalizeSearchResultItem(response_obj.results[i_num]);}} if (response_obj.groups && response_obj.groups.length) {var g_num;for (g_num = 0; g_num < response_obj.groups.length; g_num++) {var group_obj = response_obj.groups[g_num];if (!group_obj || typeof group_obj !== 'object') {continue;} if (!group_obj.items && group_obj.results && group_obj.results.length) {group_obj.items = group_obj.results;} else if (group_obj.items && !group_obj.results) {group_obj.results = group_obj.items;} if (!group_obj.label && group_obj.label_txt) {group_obj.label = group_obj.label_txt;} else if (!group_obj.label_txt && group_obj.label) {group_obj.label_txt = group_obj.label;} if (group_obj.label === 'undefined') {group_obj.label = group_obj.label_txt && group_obj.label_txt !== 'undefined' ? group_obj.label_txt : '';} if (group_obj.label_txt === 'undefined') {group_obj.label_txt = group_obj.label || '';} if (!group_obj.key && group_obj.key_txt) {group_obj.key = group_obj.key_txt;} else if (!group_obj.key_txt && group_obj.key) {group_obj.key_txt = group_obj.key;} if (!group_obj.name && group_obj.label) {group_obj.name = group_obj.label;} var list_arr = group_obj.results || group_obj.items;if (list_arr && list_arr.length) {for (i_num = 0; i_num < list_arr.length; i_num++) {normalizeSearchResultItem(list_arr[i_num]);}}}} return response_obj;} function prepareSearchVisitorHrefsOnResponse(response_obj) {if (!response_obj || typeof response_obj !== 'object') {return response_obj;} var i_num;if (response_obj.results && response_obj.results.length) {for (i_num = 0; i_num < response_obj.results.length; i_num++) {prepareSearchResultItemVisitorHrefs(response_obj.results[i_num]);}} if (response_obj.groups && response_obj.groups.length) {var g_num;for (g_num = 0; g_num < response_obj.groups.length; g_num++) {var group_obj = response_obj.groups[g_num];if (!group_obj) {continue;} var list_arr = group_obj.results || group_obj.items;if (!list_arr || !list_arr.length) {continue;} for (i_num = 0; i_num < list_arr.length; i_num++) {prepareSearchResultItemVisitorHrefs(list_arr[i_num]);}}} return response_obj;} function processSearchApiResponse(response_obj) {return normalizeSearchApiResponse(prepareSearchVisitorHrefsOnResponse(response_obj));} var server_function_endpoint_txt = (typeof window !== 'undefined' && window.APP_BUILDER_BASE_PATH ? window.APP_BUILDER_BASE_PATH : '') + '/server_functions_api.php';function getServerFunctionEndpointUrl() {if (global.IsManagment == 2 && global.APP_PROJECT_ID) {return server_function_endpoint_txt + '?wu=' + encodeURIComponent(global.APP_PROJECT_ID);} return server_function_endpoint_txt;} function readCookie(name_txt) {var match_arr = global.document.cookie.match(new RegExp('(?:^|; )' + name_txt.replace(/([.$?*|{}()[\]\\/+^])/g, '\\$1') + '=([^;]*)'));return match_arr ? match_arr[1] : '';} function writeCookie(name_txt, value_txt, days_num) {var expires_txt = '';var date_obj = new Date();date_obj.setTime(date_obj.getTime() + (days_num * 24 * 60 * 60 * 1000));expires_txt = '; expires=' + date_obj.toUTCString();global.document.cookie = name_txt + '=' + value_txt + expires_txt + '; path=/; SameSite=Lax';} function postForm(body_obj) {return fetch(getEndpointUrl(), {method: 'POST',credentials: 'same-origin',headers: { 'Content-Type': 'application/x-www-form-urlencoded' },body: new URLSearchParams(body_obj)}).then(function (r) { return r.json(); });} var services_endpoint_txt = (typeof window !== 'undefined' && window.APP_BUILDER_BASE_PATH ? window.APP_BUILDER_BASE_PATH : '') + '/services_api.php';function getServicesEndpointUrl() {if (global.IsManagment == 2 && global.APP_PROJECT_ID) {return services_endpoint_txt + '?wu=' + encodeURIComponent(global.APP_PROJECT_ID);} return services_endpoint_txt;} function postServicesForm(body_obj) {return fetch(getServicesEndpointUrl(), {method: 'POST',credentials: 'same-origin',headers: { 'Content-Type': 'application/x-www-form-urlencoded' },body: new URLSearchParams(body_obj)}).then(function (r) { return r.json(); });} function postServicesJson(body_obj) {return fetch(getServicesEndpointUrl(), {method: 'POST',credentials: 'same-origin',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(body_obj)}).then(function (r) { return r.json(); });} function postPluginsServicesForm(formEl, body_obj) {return global.AppBuilderRecaptcha.getToken(formEl).then(function (recaptcha_token_txt) {var request_body_obj = {project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',recaptchaToken: recaptcha_token_txt};Object.keys(body_obj).forEach(function (key_txt) {request_body_obj[key_txt] = body_obj[key_txt];});return postServicesForm(request_body_obj);});} function postPluginsServicesRequest(formEl, action_txt, params_obj) {return global.AppBuilderRecaptcha.getToken(formEl).then(function (recaptcha_token_txt) {var body_obj = {action: action_txt,project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',recaptchaToken: recaptcha_token_txt};var needs_json_body_boo = false;if (params_obj && typeof params_obj === 'object') {Object.keys(params_obj).forEach(function (key_txt) {if (params_obj[key_txt] == null) {return;} var value_any = params_obj[key_txt];if (typeof value_any === 'object') {needs_json_body_boo = true;} body_obj[key_txt] = value_any;});} if (needs_json_body_boo) {return postServicesJson(body_obj);} return postServicesForm(body_obj);});} function buildPresignedUploadHandlerFun(action_txt) {return function (params_obj, formEl) {var file_obj = params_obj && params_obj.file;if (!file_obj) {return Promise.resolve({ success: false, error: 'No file selected' });} var content_type_txt = file_obj.type || 'application/octet-stream';return postPluginsServicesForm(formEl, {action: action_txt,upload_step_txt: 'presign',fileName: file_obj.name,fileType: content_type_txt,fileSize: file_obj.size}).then(function (presign_obj) {if (!presign_obj || !presign_obj.success || !presign_obj.presigned_put_url || !presign_obj.tmp_key) {throw presign_obj || { success: false, error: 'Could not prepare the upload' };} return fetch(presign_obj.presigned_put_url, {method: 'PUT',headers: { 'Content-Type': content_type_txt },body: file_obj}).then(function (put_response_obj) {if (!put_response_obj.ok) {throw { success: false, error: 'Could not upload the file' };} return postPluginsServicesForm(formEl, {action: action_txt,tmp_key: presign_obj.tmp_key,fileName: file_obj.name});});}).catch(function (error_obj) {if (error_obj && typeof error_obj === 'object' && error_obj.success === false) {return error_obj;} return { success: false, error: (error_obj && error_obj.message) ? error_obj.message : 'Could not upload the file' };});};} var pluginSendRequestHandlersObj = {upload_file: buildPresignedUploadHandlerFun('upload_file'),upload_private_file: buildPresignedUploadHandlerFun('upload_private_file')};var countries_states_cache_promise_obj = null;var OrderSystem = {endpoint: endpoint_txt,post: postForm,addToCart: function (record, amount) {return postForm({action: 'add_to_cart',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),record_unique_id: record.unique_id_txt,amount: amount || 1});},getCart: function (cartType) {return postForm({action: 'get_cart',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),cartType: cartType || 207});},removeCartItem: function (cartItemId, cartType) {return postForm({action: 'remove_cart_item',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),cartItemId: cartItemId,cartType: cartType || 207});},emptyCart: function (cartType) {return postForm({action: 'empty_cart',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),cartType: cartType || 207});},updateCartItemAmount: function (cartItemId, amount, cartType) {return postForm({action: 'update_cart_item_amount',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),cartItemId: cartItemId,amount: amount,cartType: cartType || 207});},validateCoupon: function (couponCode, params) {var body_obj = {action: 'validate_coupon',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),couponCode: couponCode || '',cartType: (params && params.cartType) || 207};if (params && params.email) body_obj.email = params.email;if (params && params.countryCode) body_obj.countryCode = params.countryCode;if (params && params.stateCode) body_obj.stateCode = params.stateCode;return postForm(body_obj);},createOrder: function (params, formEl) {return global.AppBuilderRecaptcha.getToken(formEl).then(function (recaptcha_token_txt) {var body_obj = {action: 'create_order',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),recaptchaToken: recaptcha_token_txt};var language_txt = getPageLanguage();if (language_txt) body_obj.language = language_txt;if (params && params.email) body_obj.email = params.email;if (params && params.firstName) body_obj.firstName = params.firstName;if (params && params.lastName) body_obj.lastName = params.lastName;if (params && params.phone) body_obj.phone = params.phone;if (params && params.address) body_obj.address = params.address;if (params && params.city) body_obj.city = params.city;if (params && params.zip) body_obj.zip = params.zip;if (params && params.countryCode) body_obj.countryCode = params.countryCode;if (params && params.stateCode) body_obj.stateCode = params.stateCode;if (params && params.cartType) body_obj.cartType = params.cartType;if (params && params.couponCode) body_obj.couponCode = params.couponCode;return postForm(body_obj);});},checkout: function (params, formEl) {return OrderSystem.createOrder(params, formEl).then(function (r) {if (r.success && r.paymentUrl) global.location.href = r.paymentUrl;return r;});},submitProductOrder: function (record_unique_id, fields, extra) {return global.AppBuilderRecaptcha.getToken(extra && extra.formEl).then(function (recaptcha_token_txt) {var body_obj = {action: 'submit_product_order',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',sessionID: getSessionId(),record_unique_id: record_unique_id,fields: JSON.stringify(fields || []),recaptchaToken: recaptcha_token_txt};var language_txt = getPageLanguage();if (language_txt) body_obj.language = language_txt;if (extra) {['email', 'firstName', 'lastName', 'phone', 'address', 'city', 'zip', 'amount', 'cartType', 'countryCode', 'stateCode'].forEach(function (k) {if (extra[k] != null) body_obj[k] = extra[k];});} return postForm(body_obj).then(function (r) {if (r.success && r.paymentUrl) global.location.href = r.paymentUrl;return r;});});},updateOrderBuyer: function (orderID, params) {var body_obj = {action: 'update_order_buyer',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',orderID: orderID};if (params && params.email) body_obj.email = params.email;if (params && params.firstName) body_obj.firstName = params.firstName;if (params && params.lastName) body_obj.lastName = params.lastName;if (params && params.phone) body_obj.phone = params.phone;if (params && params.address) body_obj.address = params.address;if (params && params.city) body_obj.city = params.city;if (params && params.zip) body_obj.zip = params.zip;return postForm(body_obj);},getTaxConfig: function () {return global.APP_TAX || { productsTax: '', regions: [], countryOptions: [] };},hasTax: function () {return (OrderSystem.getTaxConfig().countryOptions || []).length > 0;},getTaxCountries: function () {return (OrderSystem.getTaxConfig().countryOptions || []).map(function (c_obj) {return { code: c_obj.code, name: c_obj.name, requiresState: !!c_obj.requiresState };});},getTaxStates: function (country_code_txt) {var found_obj = (OrderSystem.getTaxConfig().countryOptions || []).filter(function (c_obj) {return c_obj.code === country_code_txt;})[0];return found_obj && found_obj.states ? found_obj.states : [];},getCountriesStates: function () {if (!countries_states_cache_promise_obj) {countries_states_cache_promise_obj = postForm({action: 'get_countries_states',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',}).then(function (response_obj) {if (!response_obj.success) {countries_states_cache_promise_obj = null;} return response_obj;});} return countries_states_cache_promise_obj;},getCountryStates: function (country_code_txt) {return OrderSystem.getCountriesStates().then(function (response_obj) {if (!response_obj.success) {return response_obj;} var country_row_obj = null;(response_obj.countries || []).forEach(function (country_obj) {if (country_obj.code === country_code_txt) {country_row_obj = country_obj;}});return {success: true,countryCode: country_code_txt,stateLabel: country_row_obj ? country_row_obj.stateLabel : '',states: country_row_obj ? (country_row_obj.states || []) : [],};});}};var CurrencySystem = {changedPriceIDS: [],getCurrencies: function () {return global.APP_CURRENCIES || {};},isEnabled: function () {var cfg_obj = CurrencySystem.getCurrencies();return !!cfg_obj.isActive && !!cfg_obj.currencies && Object.keys(cfg_obj.currencies).length > 1;},baseCode: function () {var currencies_obj = CurrencySystem.getCurrencies().currencies || {};var base_txt = '';Object.keys(currencies_obj).forEach(function (code_txt) {if (currencies_obj[code_txt] && currencies_obj[code_txt].isDefault) base_txt = code_txt;});return base_txt;},getList: function () {var currencies_obj = CurrencySystem.getCurrencies().currencies || {};var base_txt = CurrencySystem.baseCode();var out_arr = [];if (base_txt && currencies_obj[base_txt]) out_arr.push(currencies_obj[base_txt]);Object.keys(currencies_obj).forEach(function (code_txt) {if (code_txt !== base_txt) out_arr.push(currencies_obj[code_txt]);});return out_arr;},byCode: function (code_txt) {var found_obj = null;CurrencySystem.getList().forEach(function (c_obj) { if (c_obj.code === code_txt) found_obj = c_obj; });return found_obj;},cookieName: function () {return (global.APP_PROJECT_ID != null ? global.APP_PROJECT_ID : '') + '-multi-currencies';},getSelected: function () {var base_txt = CurrencySystem.baseCode();if (!CurrencySystem.isEnabled()) return base_txt;var raw_txt = readCookie(CurrencySystem.cookieName());if (!raw_txt) return base_txt;try {var obj = JSON.parse(decodeURIComponent(raw_txt));return (obj && obj.currency) ? obj.currency : base_txt;} catch (e) {return base_txt;}},rate: function (code_txt) {var c_obj = CurrencySystem.byCode(code_txt || CurrencySystem.getSelected());return c_obj ? (Number(c_obj.rate) || 1) : 1;},convert: function (amount_num, code_txt) {return Number(amount_num) * CurrencySystem.rate(code_txt);},format: function (amount_num, code_txt) {var code_used_txt = code_txt || CurrencySystem.getSelected();var c_obj = CurrencySystem.byCode(code_used_txt) || CurrencySystem.byCode(CurrencySystem.baseCode()) || {};var temp_el = global.document.createElement('span');temp_el.innerHTML = c_obj.symbol || '';var symbol_txt = temp_el.textContent || '';var price_txt = CurrencySystem.convert(amount_num, code_used_txt).toFixed(2);return c_obj.symbolFirst ? (symbol_txt + price_txt) : (price_txt + ' ' + symbol_txt);},refreshPrices: function (root_el) {var scope_el = root_el || global.document;var nodes_list = scope_el.querySelectorAll('[data-mc-price]');CurrencySystem.changedPriceIDS = [];Array.prototype.forEach.call(nodes_list, function (el) {var base_amount_num = parseFloat(el.getAttribute('data-mc-price'));if (isNaN(base_amount_num)) return;el.textContent = CurrencySystem.format(base_amount_num);var price_id_txt = el.getAttribute('data-mc-id');if (price_id_txt) CurrencySystem.changedPriceIDS.push(price_id_txt);});},change: function (selectedCurrency, callbackFunction) {if (!CurrencySystem.isEnabled()) return;var base_txt = CurrencySystem.baseCode();var cookie_name_txt = CurrencySystem.cookieName();if (!selectedCurrency || selectedCurrency === base_txt) {writeCookie(cookie_name_txt, '', -1);} else {var c_obj = CurrencySystem.byCode(selectedCurrency);if (!c_obj) return;var value_txt = JSON.stringify({ currency: c_obj.code, rate: Number(c_obj.rate) || 1, data: c_obj });writeCookie(cookie_name_txt, encodeURIComponent(value_txt), 30);} CurrencySystem.refreshPrices();global.dispatchEvent(new CustomEvent('appbuilder:currencychange', { detail: { code: selectedCurrency || base_txt } }));if (typeof callbackFunction === 'function') callbackFunction(selectedCurrency || base_txt);},onChange: function (callbackFunction) {global.addEventListener('appbuilder:currencychange', function (e) {callbackFunction(e && e.detail ? e.detail.code : null);});},init: function (root_el) {CurrencySystem.refreshPrices(root_el || global.document);return CurrencySystem.getSelected();}};var MessagesSystem = {endpoint: endpoint_txt,submit: function (fields_arr, formEl) {return global.AppBuilderRecaptcha.getToken(formEl).then(function (recaptcha_token_txt) {return postForm({action: 'form_submit',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',fields: JSON.stringify(fields_arr || []),recaptchaToken: recaptcha_token_txt});});}};var LoginSystem = {sendCode: function (email, formEl) {return global.AppBuilderRecaptcha.getToken(formEl).then(function (recaptcha_token_txt) {return postForm({action: 'send_login_code',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',email: email,recaptchaToken: recaptcha_token_txt});});},verifyCode: function (email, code) {return postForm({action: 'verify_login_code',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',email: email,code: code});},checkSession: function (session_token) {return postForm({action: 'check_session',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',session_token: session_token});},logout: function (session_token) {return postForm({action: 'logout',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',session_token: session_token});}};function generateRecordKeyTxt(namespace) {var prefix_txt = String(namespace == null ? '' : namespace).replace(/[^a-zA-Z0-9]/g, '').toLowerCase() || 'rec';var random_txt = '';if (global.crypto && typeof global.crypto.getRandomValues === 'function') {var bytes_arr = new Uint8Array(8);global.crypto.getRandomValues(bytes_arr);for (var i_num = 0; i_num < bytes_arr.length; i_num++) {random_txt += ('0' + bytes_arr[i_num].toString(16)).slice(-2);}} else {while (random_txt.length < 16) {random_txt += Math.random().toString(16).slice(2);} random_txt = random_txt.slice(0, 16);} return prefix_txt.slice(0, 24) + '-' + random_txt;} function parseJsonObjectFun(value) {if (value && typeof value === 'object' && !Array.isArray(value)) {return value;} if (typeof value !== 'string' || value === '') {return {};} try {var parsed_obj = JSON.parse(value);return (parsed_obj && typeof parsed_obj === 'object' && !Array.isArray(parsed_obj)) ? parsed_obj : {};} catch (parse_err) {return {};}} var DataSystem = {generateKey: function (namespace) {return generateRecordKeyTxt(namespace);},create: function (namespace, data, user_id) {return DataSystem.set(namespace, generateRecordKeyTxt(namespace), data, user_id);},set: function (namespace, key, data, user_id) {var key_txt = String(key == null ? '' : key).trim() || generateRecordKeyTxt(namespace);var body_obj = {action: 'set',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',namespace: namespace,key: key_txt,data: typeof data === 'string' ? data : JSON.stringify(data)};if (user_id != null) body_obj.user_id = user_id;return postForm(body_obj).then(function (response_obj) {if (response_obj && typeof response_obj === 'object' && !response_obj.key_txt) {response_obj.key_txt = key_txt;} return response_obj;});},openRecord: function (namespace, key, data) {var namespace_txt = String(namespace == null ? '' : namespace).trim();var key_txt = String(key == null ? '' : key).trim();if (!namespace_txt || !key_txt) {return;} var data_obj = parseJsonObjectFun(data);try {var url_obj = new URL(global.location.href);url_obj.searchParams.set('app_ns', namespace_txt);url_obj.searchParams.set('app_key', key_txt);if (global.history && typeof global.history.pushState === 'function') {global.history.pushState({}, '', url_obj.toString());}} catch (url_err) {} DataSystem.dispatchRecordDeepLink(namespace_txt, key_txt, data_obj, '', '');},get: function (namespace, key, user_id) {var body_obj = {action: 'get',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',namespace: namespace,key: key};if (user_id != null) body_obj.user_id = user_id;return postForm(body_obj);},delete: function (namespace, key, user_id) {var body_obj = {action: 'delete',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',namespace: namespace,key: key};if (user_id != null) body_obj.user_id = user_id;return postForm(body_obj);},list: function (namespace, params) {var body_obj = {action: 'list',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',namespace: namespace};if (params) {if (params.user_id != null) body_obj.user_id = params.user_id;if (params.page != null) body_obj.page = params.page;if (params.limit != null) body_obj.limit = params.limit;if (params.order_by != null) body_obj.order_by = params.order_by;if (params.order_dir != null) body_obj.order_dir = params.order_dir;} return postForm(body_obj);},search: function (query_txt, namespaces_arr, limit_num) {return DataSystem.dataSearch(namespaces_arr, query_txt, limit_num);},dataSearch: function (namespaces_arr, query_txt, limit_num) {var body_obj = {action: 'data_search',project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : '',q: query_txt};if (namespaces_arr != null) {body_obj.namespaces = typeof namespaces_arr === 'string' ? namespaces_arr : JSON.stringify(namespaces_arr);} if (limit_num != null) {body_obj.limit = limit_num;} return postForm(body_obj).then(processSearchApiResponse);},appSearch: function (type_txt, query_txt, options_obj) {if (type_txt !== 'full' && type_txt !== 'pages') {return Promise.resolve(processSearchApiResponse({ success: false, error: 'appSearch type must be "full" or "pages"' }));} var search_endpoint_txt = (typeof window !== 'undefined' && window.APP_BUILDER_BASE_PATH ? window.APP_BUILDER_BASE_PATH : '') + '/handlers/search.php';if (global.IsManagment == 2 && global.APP_PROJECT_ID) {search_endpoint_txt += (search_endpoint_txt.indexOf('?') === -1 ? '?' : '&') + 'wu=' + encodeURIComponent(global.APP_PROJECT_ID);} var mode_txt = type_txt;query_txt = typeof query_txt === 'string' ? query_txt : '';options_obj = (options_obj && typeof options_obj === 'object') ? options_obj : {};var limit_num = options_obj.limit != null ? options_obj.limit : null;var body_obj = {project_unique_id: global.APP_PROJECT_ID,q: query_txt,mode_txt: mode_txt};if (limit_num != null) {body_obj.limit = limit_num;} ['include_pages', 'exclude_pages', 'include_namespaces', 'exclude_namespaces'].forEach(function (filter_key_txt) {if (Array.isArray(options_obj[filter_key_txt])) {body_obj[filter_key_txt] = JSON.stringify(options_obj[filter_key_txt]);}});if (global.IsManagment == 2) {body_obj.is_preview = '1';} return fetch(search_endpoint_txt, {method: 'POST',headers: { 'Content-Type': 'application/x-www-form-urlencoded' },body: new URLSearchParams(body_obj)}).then(function (r) { return r.json(); }).then(processSearchApiResponse);},dispatchRecordDeepLink: function (namespace_txt, key_txt, data_obj, unique_id_txt, page_url_txt) {var detail_obj = {namespace_txt: namespace_txt,key_txt: key_txt,data: parseJsonObjectFun(data_obj),unique_id_txt: unique_id_txt || '',page_url_txt: page_url_txt || ''};var deep_link_evt_obj = null;try {deep_link_evt_obj = new CustomEvent('appbuilder:record-deep-link', {detail: detail_obj,cancelable: true});global.dispatchEvent(deep_link_evt_obj);} catch (evt_err) {} var doc_obj = global.document;if (!doc_obj) {return detail_obj;} if (deep_link_evt_obj && deep_link_evt_obj.defaultPrevented) {return detail_obj;} var selector_txt = '[data-app-record-key="' + key_txt.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"]';var target_el = doc_obj.querySelector(selector_txt);if (!target_el) {target_el = doc_obj.querySelector('[data-record-key="' + key_txt.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"]');} if (target_el) {if (typeof target_el.scrollIntoView === 'function') {target_el.scrollIntoView({ behavior: 'smooth', block: 'center' });} target_el.classList.add('appbuilder-record-highlight');return detail_obj;} var has_list_markers_boo = !!(doc_obj.querySelector('[data-app-record-key]') || doc_obj.querySelector('[data-record-key]'));if (has_list_markers_boo) {showRecordDeepLinkPanel(detail_obj);} return detail_obj;},handleRecordDeepLink: function () {var params_obj;try {params_obj = new URLSearchParams(global.location && global.location.search ? global.location.search : '');} catch (e) {return Promise.resolve(null);} var namespace_txt = params_obj.get('app_ns') || params_obj.get('ns') || '';var key_txt = params_obj.get('app_key') || params_obj.get('key') || '';namespace_txt = String(namespace_txt).trim();key_txt = String(key_txt).trim();if (!namespace_txt || !key_txt || typeof DataSystem.get !== 'function') {return Promise.resolve(null);} return DataSystem.get(namespace_txt, key_txt).then(function (response_obj) {if (!response_obj || !response_obj.success || !response_obj.exists) {return null;} return DataSystem.dispatchRecordDeepLink(namespace_txt,key_txt,parseJsonObjectFun(response_obj.data_json),response_obj.unique_id_txt || '',response_obj.page_url_txt || '');}).catch(function () {return null;});}};function escapeHtmlTxt(value_txt) {return String(value_txt == null ? '' : value_txt) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"');} function pickRecordTitleTxt(data_obj) {if (!data_obj || typeof data_obj !== 'object') {return '';} var title_keys_arr = ['name', 'title', 'label', 'headline', 'product_name', 'name_txt', 'title_txt', 'label_txt'];var i_num;for (i_num = 0; i_num < title_keys_arr.length; i_num++) {var candidate_txt = data_obj[title_keys_arr[i_num]];if (typeof candidate_txt === 'string' && candidate_txt.trim() !== '') {return candidate_txt.trim();}} return '';} function showRecordDeepLinkPanel(detail_obj) {var doc_obj = global.document;if (!doc_obj || !doc_obj.body) {return;} if (doc_obj.getElementById('appbuilder-record-deep-link-panel')) {return;} var title_txt = pickRecordTitleTxt(detail_obj.data);if (!title_txt) {return;} var image_txt = '';if (detail_obj.data) {if (typeof detail_obj.data.image === 'string') {image_txt = detail_obj.data.image;} else if (typeof detail_obj.data.photo === 'string') {image_txt = detail_obj.data.photo;}} var snippet_txt = '';if (detail_obj.data) {if (typeof detail_obj.data.description === 'string') {snippet_txt = detail_obj.data.description;} else if (typeof detail_obj.data.desc === 'string') {snippet_txt = detail_obj.data.desc;}} if (snippet_txt.length > 180) {snippet_txt = snippet_txt.slice(0, 177) + '...';} var panel_el = doc_obj.createElement('div');panel_el.id = 'appbuilder-record-deep-link-panel';panel_el.setAttribute('role', 'dialog');panel_el.setAttribute('aria-label', title_txt);panel_el.style.cssText = 'position:fixed;z-index:99999;left:50%;bottom:1.5rem;transform:translateX(-50%);width:min(28rem,calc(100% - 2rem));background:#fff;color:#111;border:1px solid rgba(0,0,0,.12);border-radius:1rem;box-shadow:0 12px 40px rgba(0,0,0,.18);padding:1rem 1.1rem;font-family:system-ui,sans-serif;';var html_txt = '
';if (image_txt) {html_txt += '';} html_txt += '
';html_txt += '
' + escapeHtmlTxt(title_txt) + '
';if (snippet_txt) {html_txt += '
' + escapeHtmlTxt(snippet_txt) + '
';} html_txt += '
';html_txt += '';html_txt += '
';panel_el.innerHTML = html_txt;var close_btn_el = panel_el.querySelector('button');if (close_btn_el) {close_btn_el.addEventListener('click', function () {if (panel_el.parentNode) {panel_el.parentNode.removeChild(panel_el);}});} doc_obj.body.appendChild(panel_el);} var ServerFunction = {call: function (function_name_txt, payload_arr) {return fetch(getServerFunctionEndpointUrl(), {method: 'POST',headers: { 'Content-Type': 'application/x-www-form-urlencoded' },body: new URLSearchParams({action: 'call',function_name_txt: function_name_txt,payload_json_txt: JSON.stringify(payload_arr || {})})}).then(function (r) { return r.json(); }).then(function (response) {if (!response || !response.success) {throw new Error((response && response.error) ? response.error : 'Server function failed');} return response.data;});}};var RealtimeSystem = (function () {var ably_sdk_promise_obj = null;var ably_client_obj = null;var session_token_txt = '';var session_id_txt = '';var website_id_num = 0;var channels_arr = [];var connected_channels_key_txt = '';var connect_in_flight_promise_obj = null;var connect_in_flight_key_txt = '';var on_message_fun = null;var renew_failed_boo = false;var renew_timer_obj = null;var renew_lead_seconds_num = 30;var max_publish_payload_bytes_num = 4096;var publish_count_num = 0;var payload_bytes_sum_num = 0;var meter_flush_timer_obj = null;var meter_flush_in_flight_boo = false;var meter_flush_seconds_num = 60;function normalizeConnectChannelsArr(channels_list_arr) {var raw_arr = Array.isArray(channels_list_arr) ? channels_list_arr : [];var suffixes_arr = [];var i_num;var suffix_txt;for (i_num = 0; i_num < raw_arr.length; i_num++) {suffix_txt = String(raw_arr[i_num] || '').replace(/[^a-zA-Z0-9._-]/g, '');if (suffix_txt !== '' && suffixes_arr.indexOf(suffix_txt) === -1) {suffixes_arr.push(suffix_txt);}} if (!suffixes_arr.length) {suffixes_arr.push('activities');} return suffixes_arr;} function loadAblySdkFun() {if (global.Ably && global.Ably.Realtime) {return Promise.resolve(global.Ably);} if (ably_sdk_promise_obj) {return ably_sdk_promise_obj;} ably_sdk_promise_obj = new Promise(function (resolve, reject) {var script_el = global.document.createElement('script');script_el.src = 'https://cdn.ably.com/lib/ably.min-2.js'; script_el.async = true;script_el.onload = function () {if (global.Ably && global.Ably.Realtime) {resolve(global.Ably);} else {reject(new Error('Ably SDK failed to load'));}};script_el.onerror = function () {reject(new Error('Ably SDK failed to load'));};global.document.head.appendChild(script_el);});return ably_sdk_promise_obj;} function snapshotPublishMeterArr() {return {publish_count_num: publish_count_num,payload_bytes_sum_num: payload_bytes_sum_num};} function resetPublishMeterFun() {publish_count_num = 0;payload_bytes_sum_num = 0;} function restorePublishMeterFun(meter_arr) {if (!meter_arr) {return;} publish_count_num += parseInt(meter_arr.publish_count_num, 10) || 0;payload_bytes_sum_num += parseInt(meter_arr.payload_bytes_sum_num, 10) || 0;} function appendPublishMeterToBodyFun(body_obj, meter_arr) {body_obj.publish_count_num = meter_arr && meter_arr.publish_count_num ? meter_arr.publish_count_num : 0;body_obj.payload_bytes_sum_num = meter_arr && meter_arr.payload_bytes_sum_num ? meter_arr.payload_bytes_sum_num : 0;return body_obj;} function postAblyRenewRequestFun() {var meter_arr = snapshotPublishMeterArr();resetPublishMeterFun();var body_obj = {action: 'ably_realtime',operation_txt: 'renew_token',session_token_txt: session_token_txt,project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : ''};appendPublishMeterToBodyFun(body_obj, meter_arr);return postServicesJson(body_obj).then(function (renew_obj) {if (renew_obj && renew_obj.success) {return renew_obj;} restorePublishMeterFun(meter_arr);return renew_obj;}).catch(function (renew_err) {restorePublishMeterFun(meter_arr);throw renew_err;});} function stopOnMeterChargeFailureFun(flush_obj) {var error_code_txt = flush_obj && flush_obj.error_code ? String(flush_obj.error_code) : '';if (error_code_txt !== 'insufficient_credits' && error_code_txt !== 'invalid_session') {return false;} renew_failed_boo = true;RealtimeSystem.disconnect();return true;} function postFlushMeterFun() {if (!session_token_txt || meter_flush_in_flight_boo || publish_count_num <= 0) {return Promise.resolve(null);} meter_flush_in_flight_boo = true;var meter_arr = snapshotPublishMeterArr();resetPublishMeterFun();var body_obj = {action: 'ably_realtime',operation_txt: 'flush_meter',session_token_txt: session_token_txt,project_unique_id: global.APP_PROJECT_ID,wu: global.IsManagment == 2 ? global.APP_PROJECT_ID : ''};appendPublishMeterToBodyFun(body_obj, meter_arr);return postServicesJson(body_obj).then(function (flush_obj) {meter_flush_in_flight_boo = false;if (flush_obj && flush_obj.success) {return flush_obj;} if (stopOnMeterChargeFailureFun(flush_obj)) {return flush_obj;} restorePublishMeterFun(meter_arr);return flush_obj;}).catch(function (flush_err) {meter_flush_in_flight_boo = false;restorePublishMeterFun(meter_arr);throw flush_err;});} function clearMeterFlushTimerFun() {if (meter_flush_timer_obj) {global.clearInterval(meter_flush_timer_obj);meter_flush_timer_obj = null;}} function scheduleMeterFlushFun() {clearMeterFlushTimerFun();meter_flush_timer_obj = global.setInterval(function () {if (renew_failed_boo || !session_token_txt) {return;} postFlushMeterFun().catch(function () { });}, meter_flush_seconds_num * 1000);} function sendSessionEndBeaconFun() {if (!session_token_txt || !global.navigator || typeof global.navigator.sendBeacon !== 'function') {return;} try {var meter_arr = snapshotPublishMeterArr();resetPublishMeterFun();var fd_obj = new FormData();fd_obj.append('action', 'ably_realtime');fd_obj.append('operation_txt', 'session_end');fd_obj.append('session_token_txt', session_token_txt);fd_obj.append('project_unique_id', global.APP_PROJECT_ID || '');fd_obj.append('publish_count_num', String(meter_arr.publish_count_num));fd_obj.append('payload_bytes_sum_num', String(meter_arr.payload_bytes_sum_num));global.navigator.sendBeacon(getServicesEndpointUrl(), fd_obj);} catch (e) {}} function clearRenewTimerFun() {if (renew_timer_obj) {global.clearTimeout(renew_timer_obj);renew_timer_obj = null;}} function scheduleRenewFun(expires_at_num) {clearRenewTimerFun();var expires_ms_num = (parseInt(expires_at_num, 10) || 0) * 1000;if (!expires_ms_num) {return;} var delay_ms_num = expires_ms_num - Date.now() - (renew_lead_seconds_num * 1000);if (delay_ms_num < 1000) {delay_ms_num = 1000;} renew_timer_obj = global.setTimeout(function () {renew_timer_obj = null;if (renew_failed_boo || !ably_client_obj || !ably_client_obj.auth) {return;} try {var authorize_obj = ably_client_obj.auth.authorize();if (authorize_obj && typeof authorize_obj.catch === 'function') {authorize_obj.catch(function () {});}} catch (e) {}}, delay_ms_num);} function requestFreshSessionFun() {return PluginsSystem.sendRequest('ably_realtime', {operation_txt: 'get_token',session_token_txt: session_token_txt,channels_arr: channels_arr}).then(function (token_response_obj) {if (!token_response_obj || !token_response_obj.success || !token_response_obj.token_txt) {var err_txt = (token_response_obj && token_response_obj.error) ? token_response_obj.error : 'Could not reconnect to realtime';throw new Error(err_txt);} var resumed_session_id_txt = token_response_obj.session_id_txt || '';if (session_id_txt && resumed_session_id_txt && resumed_session_id_txt !== session_id_txt) {throw new Error('Could not reconnect to realtime');} session_token_txt = token_response_obj.session_token_txt || '';if (resumed_session_id_txt) {session_id_txt = resumed_session_id_txt;} return token_response_obj;});} function attachPagehideHandlerFun() {if (global.__ably_pagehide_bound_boo) {return;} global.__ably_pagehide_bound_boo = true;global.addEventListener('pagehide', function () {sendSessionEndBeaconFun();});if (global.document) {global.document.addEventListener('visibilitychange', function () {if (global.document.hidden) {postFlushMeterFun().catch(function () { });}});}} function waitUntilAblyConnectedFun(client_obj) {if (!client_obj || !client_obj.connection) {return Promise.reject(new Error('Could not connect to realtime'));} if (client_obj.connection.state === 'connected') {return Promise.resolve();} return new Promise(function (resolve, reject) {var settled_boo = false;function finishFun(err_obj) {if (settled_boo) {return;} settled_boo = true;client_obj.connection.off('connected', onConnectedFun);client_obj.connection.off('failed', onFailedFun);client_obj.connection.off('closed', onFailedFun);if (err_obj) {reject(err_obj);} else {resolve();}} function onConnectedFun() {finishFun(null);} function onFailedFun(state_change_obj) {var reason_obj = state_change_obj && state_change_obj.reason ? state_change_obj.reason : new Error('Could not connect to realtime');finishFun(reason_obj);} client_obj.connection.once('connected', onConnectedFun);client_obj.connection.once('failed', onFailedFun);client_obj.connection.once('closed', onFailedFun);});} function waitUntilChannelsAttachedFun(channel_objs_arr) {var attach_promises_arr = [];var i_num;var channel_obj;for (i_num = 0; i_num < channel_objs_arr.length; i_num++) {channel_obj = channel_objs_arr[i_num];if (!channel_obj || channel_obj.state === 'attached') {continue;} if (typeof channel_obj.attach === 'function') {attach_promises_arr.push(Promise.resolve(channel_obj.attach()));}} return Promise.all(attach_promises_arr);} function isRealtimeClientReadyBoo() {return !!(session_token_txt && ably_client_obj && website_id_num > 0);} function publishWhenReadyFun(channel_suffix_txt, event_name_txt, payload_obj) {if (isRealtimeClientReadyBoo()) {return publishOnLiveClientFun(channel_suffix_txt, event_name_txt, payload_obj);} if (connect_in_flight_promise_obj) {return connect_in_flight_promise_obj.then(function () {return publishWhenReadyFun(channel_suffix_txt, event_name_txt, payload_obj);}, function () {return { success: false, error_code: 'not_connected' };});} return Promise.resolve({ success: false, error_code: 'not_connected' });} function publishOnLiveClientFun(channel_suffix_txt, event_name_txt, payload_obj) {var suffix_txt = String(channel_suffix_txt || '').replace(/[^a-zA-Z0-9._-]/g, '');var event_txt = String(event_name_txt || '');if (!suffix_txt || !event_txt) {return Promise.reject(new Error('channel_txt and event_name_txt are required'));} if (channels_arr.indexOf(suffix_txt) === -1) {var channel_err_obj = new Error('Invalid channel');channel_err_obj.error_code = 'invalid_channel';return Promise.reject(channel_err_obj);} if (!isRealtimeClientReadyBoo()) {return Promise.resolve({ success: false, error_code: 'not_connected' });} var payload_json_txt = JSON.stringify(payload_obj || {});if (payload_json_txt.length > max_publish_payload_bytes_num) {return Promise.reject(new Error('Publish payload is too large'));} var channel_name_txt = 'site:' + website_id_num + ':' + suffix_txt;var channel_obj = ably_client_obj.channels.get(channel_name_txt);return Promise.resolve(channel_obj.publish(event_txt, payload_obj || {})).then(function () {publish_count_num += 1;payload_bytes_sum_num += payload_json_txt.length;return { success: true };});} return {connect: function (channels_list_arr, message_fun) {if (!global.APP_PROJECT_ID) {return Promise.reject(new Error('Project ID is missing'));} var requested_channels_arr = normalizeConnectChannelsArr(channels_list_arr);var requested_key_txt = requested_channels_arr.slice().sort().join(',');on_message_fun = typeof message_fun === 'function' ? message_fun : null;if (connect_in_flight_promise_obj && connect_in_flight_key_txt === requested_key_txt) {return connect_in_flight_promise_obj;} if (ably_client_obj && session_token_txt && connected_channels_key_txt === requested_key_txt && ably_client_obj.connection && ably_client_obj.connection.state === 'connected') {return Promise.resolve(ably_client_obj);} postFlushMeterFun().catch(function () { });channels_arr = requested_channels_arr;connected_channels_key_txt = '';session_id_txt = '';renew_failed_boo = false;clearRenewTimerFun();clearMeterFlushTimerFun();attachPagehideHandlerFun();var connect_params_obj = {operation_txt: 'get_token',channels_arr: channels_arr};if (session_token_txt) {connect_params_obj.session_token_txt = session_token_txt;} var handshake_promise_obj = PluginsSystem.sendRequest('ably_realtime', connect_params_obj).then(function (token_response_obj) {if (!token_response_obj || !token_response_obj.success || !token_response_obj.token_txt) {var err_txt = (token_response_obj && token_response_obj.error) ? token_response_obj.error : 'Could not connect to realtime';throw new Error(err_txt);} session_token_txt = token_response_obj.session_token_txt || '';session_id_txt = token_response_obj.session_id_txt || '';website_id_num = parseInt(token_response_obj.website_id_num, 10) || 0;var subscribe_suffixes_arr = channels_arr;return loadAblySdkFun().then(function () {if (ably_client_obj) {try {ably_client_obj.close();} catch (e) {}} ably_client_obj = new global.Ably.Realtime({token: token_response_obj.token_txt,echoMessages: false,authCallback: function (tokenParams, callback) {if (renew_failed_boo || !session_token_txt) {callback(new Error('Realtime renewal stopped'), null);return;} postAblyRenewRequestFun().then(function (renew_obj) {if (renew_obj && renew_obj.success && renew_obj.token_txt) {scheduleRenewFun(renew_obj.expires_at_num);callback(null, renew_obj.token_txt);return;} if (renew_obj && renew_obj.error_code === 'invalid_session') {return requestFreshSessionFun().then(function (fresh_obj) {scheduleRenewFun(fresh_obj.expires_at_num);callback(null, fresh_obj.token_txt);});} renew_failed_boo = true;var renew_err_txt = (renew_obj && renew_obj.error) ? renew_obj.error : 'Renewal failed';callback(new Error(renew_err_txt), null);}).catch(function (renew_err) {renew_failed_boo = true;callback(renew_err, null);});}});var attached_channels_arr = [];subscribe_suffixes_arr.forEach(function (suffix_txt) {var channel_name_txt = 'site:' + website_id_num + ':' + String(suffix_txt || '').replace(/[^a-zA-Z0-9._-]/g, '');if (!channel_name_txt || channel_name_txt.slice(-1) === ':' || website_id_num <= 0) {return;} var channel_obj = ably_client_obj.channels.get(channel_name_txt);attached_channels_arr.push(channel_obj);channel_obj.subscribe(function (message_obj) {if (on_message_fun) {on_message_fun(message_obj.name, message_obj.data, channel_name_txt);}});});return waitUntilAblyConnectedFun(ably_client_obj).then(function () {return waitUntilChannelsAttachedFun(attached_channels_arr);}).then(function () {scheduleRenewFun(token_response_obj.expires_at_num);scheduleMeterFlushFun();return ably_client_obj;}).catch(function (connect_err) {try {ably_client_obj.close();} catch (e) {} ably_client_obj = null;throw connect_err;});});});function releaseInFlightFun() {if (connect_in_flight_promise_obj === tracked_promise_obj) {connect_in_flight_promise_obj = null;connect_in_flight_key_txt = '';}} var tracked_promise_obj = handshake_promise_obj.then(function (client_obj) {releaseInFlightFun();connected_channels_key_txt = requested_key_txt;return client_obj;}, function (connect_err) {releaseInFlightFun();connected_channels_key_txt = '';throw connect_err;});connect_in_flight_promise_obj = tracked_promise_obj;connect_in_flight_key_txt = requested_key_txt;return tracked_promise_obj;},publish: function (channel_suffix_txt, event_name_txt, payload_obj) {return publishWhenReadyFun(channel_suffix_txt, event_name_txt, payload_obj);},disconnect: function () {sendSessionEndBeaconFun();clearRenewTimerFun();clearMeterFlushTimerFun();session_token_txt = '';session_id_txt = '';connected_channels_key_txt = '';connect_in_flight_promise_obj = null;connect_in_flight_key_txt = '';renew_failed_boo = true;if (ably_client_obj) {try {ably_client_obj.close();} catch (e) {} ably_client_obj = null;}}};})();var PluginsSystem = {sendRequest: function (action_txt, params_obj, formEl) {return pluginSendRequestHandlersObj[action_txt] ? pluginSendRequestHandlersObj[action_txt](params_obj, formEl) : postPluginsServicesRequest(formEl, action_txt, params_obj);},sendEmail: function (params_obj, formEl) {return this.sendRequest('send_email', params_obj, formEl);},uploadFile: function (file_obj, formEl) {return this.sendRequest('upload_file', { file: file_obj }, formEl);},};global.getSessionId = getSessionId;global.OrderSystem = OrderSystem;global.CurrencySystem = CurrencySystem;global.MessagesSystem = MessagesSystem;global.LoginSystem = LoginSystem;global.DataSystem = DataSystem;global.ServerFunction = ServerFunction;global.PluginsSystem = PluginsSystem;if (global.APP_BUILDER_ABLY_REALTIME_ENABLED) {global.RealtimeSystem = RealtimeSystem;} if (global.document) {function bootstrapPlatformOnLoadFun() {CurrencySystem.init();DataSystem.handleRecordDeepLink();} if (global.document.readyState === 'loading') {global.document.addEventListener('DOMContentLoaded', bootstrapPlatformOnLoadFun);} else {bootstrapPlatformOnLoadFun();}}})(window);