<<<<<<< HEAD {"version":3,"file":"apbct-public-bundle.min.js","sources":["apbct-public-bundle.js"],"sourcesContent":["/**\n * Base class\n */\nclass ApbctCore {\n ajax_parameters = {};\n restParameters = {};\n\n selector = null;\n elements = [];\n\n // Event properties\n eventCallback;\n eventSelector;\n event;\n\n /**\n * Default constructor\n * @param {string} selector\n */\n constructor(selector) {\n this.select(selector);\n }\n\n /**\n * Get elements by CSS selector\n *\n * @param {string} selector\n * @return {*}\n */\n select(selector) {\n if (selector instanceof HTMLCollection) {\n this.selector = null;\n this.elements = [];\n this.elements = Array.prototype.slice.call(selector);\n } else if ( typeof selector === 'object' ) {\n this.selector = null;\n this.elements = [];\n this.elements[0] = selector;\n } else if ( typeof selector === 'string' ) {\n this.selector = selector;\n this.elements = Array.prototype.slice.call(document.querySelectorAll(selector));\n // this.elements = document.querySelectorAll(selector)[0];\n } else {\n this.deselect();\n }\n\n return this;\n }\n\n /**\n * @param {object|string} elemToAdd\n */\n addElement(elemToAdd) {\n if ( typeof elemToAdd === 'object' ) {\n this.elements.push(elemToAdd);\n } else if ( typeof elemToAdd === 'string' ) {\n this.selector = elemToAdd;\n this.elements = Array.prototype.slice.call(document.querySelectorAll(elemToAdd));\n } else {\n this.deselect();\n }\n }\n\n /**\n * @param {object} elem\n */\n push(elem) {\n this.elements.push(elem);\n }\n\n /**\n * reduce\n */\n reduce() {\n this.elements = this.elements.slice(0, -1);\n }\n\n /**\n * deselect\n */\n deselect() {\n this.elements = [];\n }\n\n /**\n * Set or get CSS for/of currently selected element\n *\n * @param {object|string} style\n * @param {boolean} getRaw\n *\n * @return {boolean|*}\n */\n css(style, getRaw) {\n getRaw = getRaw || false;\n\n // Set style\n if (typeof style === 'object') {\n const stringToCamelCase = (str) =>\n str.replace(/([-_][a-z])/g, (group) =>\n group\n .toUpperCase()\n .replace('-', '')\n .replace('_', ''),\n );\n\n // Apply multiple styles\n for (const styleName in style) {\n if (Object.hasOwn(style, styleName)) {\n const DomStyleName = stringToCamelCase(styleName);\n\n // Apply to multiple elements (currently selected)\n for (let i=0; i= 0; i-- ) {\n if ( ! this.isElem(this.elements[i], filter) ) {\n this.elements.splice(Number(i), 1);\n }\n }\n\n return this;\n }\n\n /**\n * NODES\n */\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n parent(filter) {\n this.select(this.elements[0].parentElement);\n\n if ( typeof filter !== 'undefined' && ! this.is(filter) ) {\n this.deselect();\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n parents(filter) {\n this.select(this.elements[0]);\n\n for ( ; this.elements[this.elements.length - 1].parentElement !== null; ) {\n this.push(this.elements[this.elements.length - 1].parentElement);\n }\n\n this.elements.splice(0, 1); // Deleting initial element from the set\n\n if ( typeof filter !== 'undefined' ) {\n this.filter(filter);\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n children(filter) {\n this.select(this.elements[0].children);\n\n if ( typeof filter !== 'undefined' ) {\n this.filter(filter);\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n siblings(filter) {\n let current = this.elements[0]; // Remember current to delete it later\n\n this.parent();\n this.children(filter);\n this.elements.splice(this.elements.indexOf(current), 1); // Remove current element\n\n return this;\n }\n\n /** ************ DOM MANIPULATIONS **************/\n remove() {\n for (let elem of this.elements) {\n elem.remove();\n }\n }\n\n /**\n * @param {string} content\n */\n after(content) {\n for (let elem of this.elements) {\n elem.after(content);\n }\n }\n\n /**\n * @param {string} content\n */\n append(content) {\n for (let elem of this.elements) {\n elem.append(content);\n }\n }\n\n /** ************ ANIMATION **************/\n /**\n * @param {number} time\n */\n fadeIn(time) {\n for (let elem of this.elements) {\n elem.style.opacity = 0;\n elem.style.display = 'block';\n\n let last = +new Date();\n const tick = function() {\n elem.style.opacity = +elem.style.opacity + (new Date() - last) / time;\n last = +new Date();\n\n if (+elem.style.opacity < 1) {\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n }\n };\n\n tick();\n }\n }\n\n /**\n * @param {number} time\n */\n fadeOut(time) {\n for (let elem of this.elements) {\n elem.style.opacity = 1;\n\n let last = +new Date();\n const tick = function() {\n elem.style.opacity = +elem.style.opacity - (new Date() - last) / time;\n last = +new Date();\n\n if (+elem.style.opacity > 0) {\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n } else {\n elem.style.display = 'none';\n }\n };\n\n tick();\n }\n }\n}\n\n/**\n * Hack\n *\n * Make a proxy to keep both properties and methods from:\n * - the native object and\n * - the new one from ApbctCore for selected element.\n *\n * For example:\n * apbct('#id).innerHTML = 'some';\n * apbct('#id).css({'backgorund-color': 'black'});\n */\n// apbct = new Proxy(\n// apbct,\n// {\n// get(target, prop) {\n// if (target.elements.length) {\n// return target.elements[0][prop];\n// } else {\n// return null;\n// }\n// },\n// set(target, prop, value){\n// if (target.elements.length) {\n// target.elements[0][prop] = value;\n// return true;\n// } else {\n// return false;\n// }\n// },\n// apply(target, thisArg, argArray) {\n//\n// }\n// }\n// );\n\n/**\n * @param {mixed} msg\n * @param {string} url\n */\nfunction ctProcessError(msg, url) {\n let log = {};\n if (msg && msg.message) {\n log.err = {\n 'msg': msg.message,\n 'file': !!msg.fileName ? msg.fileName : false,\n 'ln': !!msg.lineNumber ? msg.lineNumber : !!lineNo ? lineNo : false,\n 'col': !!msg.columnNumber ? msg.columnNumber : !!columnNo ? columnNo : false,\n 'stacktrace': !!msg.stack ? msg.stack : false,\n 'cause': !!url ? JSON.stringify(url) : false,\n 'errorObj': !!error ? error : false,\n };\n } else {\n log.err = {\n 'msg': msg,\n };\n\n if (!!url) {\n log.err.file = url;\n }\n }\n\n log.url = window.location.href;\n log.userAgent = window.navigator.userAgent;\n\n let ctJsErrors = 'ct_js_errors';\n let errArray = localStorage.getItem(ctJsErrors);\n if (errArray === null) errArray = '[]';\n errArray = JSON.parse(errArray);\n for (let i = 0; i < errArray.length; i++) {\n if (errArray[i].err.msg === log.err.msg) {\n return;\n }\n }\n\n errArray.push(log);\n localStorage.setItem(ct_js_errors, JSON.stringify(errArray));\n}\n\nif (Math.floor(Math.random() * 100) === 1) {\n window.onerror = function(exception, url) {\n let filterWords = ['apbct', 'ctPublic'];\n let length = filterWords.length;\n while (length--) {\n if (exception.indexOf(filterWords[length]) !== -1) {\n ctProcessError(exception, url);\n }\n }\n\n return false;\n };\n}\n\n/**\n * Enter point to ApbctCore class\n *\n * @param {array|object} params\n * @return {*}\n */\n// eslint-disable-next-line no-unused-vars, require-jsdoc\nfunction apbct(params) {\n return new ApbctCore()\n .select(params);\n}\n\n/**\n * ApbctXhr\n */\nclass ApbctXhr {\n xhr = new XMLHttpRequest();\n\n // Base parameters\n method = 'POST'; // HTTP-request type\n url = ''; // URL to send the request\n async = true;\n user = null; // HTTP-authorization username\n password = null; // HTTP-authorization password\n data = {}; // Data to send\n\n // Optional params\n button = null; // Button that should be disabled when request is performing\n spinner = null; // Spinner that should appear when request is in process\n progressbar = null; // Progress bar for the current request\n context = this; // Context\n callback = null;\n onErrorCallback = null;\n\n responseType = 'json'; // Expected data type from server\n headers = {};\n timeout = 15000; // Request timeout in milliseconds\n\n methods_to_convert_data_to_URL = [\n 'GET',\n 'HEAD',\n ];\n\n body = null;\n http_code = 0;\n status_text = '';\n\n // eslint-disable-next-line require-jsdoc\n constructor(parameters) {\n console.log('%cXHR%c started', 'color: red; font-weight: bold;', 'color: grey; font-weight: normal;');\n\n // Set class properties\n for ( let key in parameters ) {\n if ( typeof this[key] !== 'undefined' ) {\n this[key] = parameters[key];\n }\n }\n\n // Modifying DOM-elements\n this.prepare();\n\n // Modify URL with data for GET and HEAD requests\n if ( Object.keys(this.data).length ) {\n this.deleteDoubleJSONEncoding(this.data);\n this.convertData();\n }\n\n if ( ! this.url ) {\n console.log('%cXHR%c not URL provided',\n 'color: red; font-weight: bold;', 'color: grey; font-weight: normal;');\n return false;\n }\n\n // Configure the request\n this.xhr.open(this.method, this.url, this.async, this.user, this.password);\n this.setHeaders();\n\n this.xhr.responseType = this.responseType;\n this.xhr.timeout = this.timeout;\n\n /* EVENTS */\n // Monitoring status\n this.xhr.onreadystatechange = function() {\n this.onReadyStateChange();\n }.bind(this);\n\n // Run callback\n this.xhr.onload = function() {\n this.onLoad();\n }.bind(this);\n\n // On progress\n this.xhr.onprogress = function(event) {\n this.onProgress(event);\n }.bind(this);\n\n // On error\n this.xhr.onerror = function() {\n this.onError();\n }.bind(this);\n\n this.xhr.ontimeout = function() {\n this.onTimeout();\n }.bind(this);\n\n // Send the request\n this.xhr.send(this.body);\n }\n\n /**\n * prepare\n */\n prepare() {\n // Disable button\n if (this.button) {\n this.button.setAttribute('disabled', 'disabled');\n this.button.style.cursor = 'not-allowed';\n }\n\n // Enable spinner\n if (this.spinner) {\n this.spinner.style.display = 'inline';\n }\n }\n\n /**\n * complete\n */\n complete() {\n this.http_code = this.xhr.status;\n this.status_text = this.xhr.statusText;\n\n // Disable button\n if (this.button) {\n this.button.removeAttribute('disabled');\n this.button.style.cursor = 'auto';\n }\n\n // Enable spinner\n if (this.spinner) {\n this.spinner.style.display = 'none';\n }\n\n if ( this.progressbar ) {\n this.progressbar.fadeOut('slow');\n }\n }\n\n /**\n * onReadyStateChange\n */\n onReadyStateChange() {\n if (this.on_ready_state_change !== null && typeof this.on_ready_state_change === 'function') {\n this.on_ready_state_change();\n }\n }\n\n /**\n * @param {object} event\n */\n onProgress(event) {\n if (this.on_progress !== null && typeof this.on_progress === 'function') {\n this.on_progress();\n }\n }\n\n /**\n * onError\n */\n onError() {\n console.log('error');\n\n this.complete();\n this.error(\n this.http_code,\n this.status_text,\n );\n\n if (this.onErrorCallback !== null && typeof this.onErrorCallback === 'function') {\n this.onErrorCallback(this.status_text);\n }\n }\n\n /**\n * onTimeout\n */\n onTimeout() {\n this.complete();\n this.error(\n 0,\n 'timeout',\n );\n\n if (this.onErrorCallback !== null && typeof this.onErrorCallback === 'function') {\n this.onErrorCallback('Timeout');\n }\n }\n\n /**\n * @return {boolean}\n */\n onLoad() {\n this.complete();\n\n if (this.responseType === 'json' ) {\n if (this.xhr.response === null) {\n this.error(this.http_code, this.status_text, 'No response');\n return false;\n } else if ( typeof this.xhr.response.error !== 'undefined') {\n this.error(this.http_code, this.status_text, this.xhr.response.error);\n return false;\n }\n }\n\n if (this.callback !== null && typeof this.callback === 'function') {\n this.callback.call(this.context, this.xhr.response, this.data);\n }\n }\n\n /**\n * @param {number} httpCode\n * @param {string} statusText\n * @param {string} additionalMsg\n */\n error(httpCode, statusText, additionalMsg) {\n let errorString = '';\n\n if ( statusText === 'timeout' ) {\n errorString += 'Server response timeout';\n } else if ( httpCode === 200 ) {\n if ( statusText === 'parsererror' ) {\n errorString += 'Unexpected response from server. See console for details.';\n } else {\n errorString += 'Unexpected error. Status: ' + statusText + '.';\n if ( typeof additionalMsg !== 'undefined' ) {\n errorString += ' Additional error info: ' + additionalMsg;\n }\n }\n } else if (httpCode === 500) {\n errorString += 'Internal server error.';\n } else {\n errorString += 'Unexpected response code:' + httpCode;\n }\n\n this.errorOutput( errorString );\n }\n\n /**\n * @param {string} errorMsg\n */\n errorOutput(errorMsg) {\n console.log( '%c ctXHR error: %c' + errorMsg, 'color: red;', 'color: grey;' );\n }\n\n /**\n * setHeaders\n */\n setHeaders() {\n // Set headers if passed\n for ( let headerName in this.headers ) {\n if ( typeof this.headers[headerName] !== 'undefined' ) {\n this.xhr.setRequestHeader(headerName, this.headers[headerName]);\n }\n }\n }\n\n /**\n * @return {string|*}\n */\n convertData() {\n // GET, HEAD request-type\n if ( ~this.methods_to_convert_data_to_URL.indexOf( this.method ) ) {\n return this.convertDataToURL();\n\n // POST request-type\n } else {\n return this.convertDataToBody();\n }\n }\n\n /**\n * @return {string}\n */\n convertDataToURL() {\n let paramsAppendix = new URLSearchParams(this.data).toString();\n let paramsPrefix = this.url.match(/^(https?:\\/{2})?[a-z0-9.]+\\?/) ? '&' : '?';\n this.url += paramsPrefix + paramsAppendix;\n\n return this.url;\n }\n\n /**\n * @return {null}\n */\n convertDataToBody() {\n this.body = new FormData();\n for (let dataKey in this.data) {\n if (Object.hasOwn(this.data, dataKey)) {\n this.body.append(\n dataKey,\n typeof this.data[dataKey] === 'object' ?\n JSON.stringify(this.data[dataKey]) :\n this.data[dataKey],\n );\n }\n }\n\n return this.body;\n }\n\n /**\n * Recursive\n *\n * Recursively decode JSON-encoded properties\n *\n * @param {object} object\n * @return {*}\n */\n deleteDoubleJSONEncoding(object) {\n if ( typeof object === 'object') {\n for (let objectKey in object) {\n if (Object.hasOwn(object, objectKey)) {\n // Recursion\n if ( typeof object[objectKey] === 'object') {\n object[objectKey] = this.deleteDoubleJSONEncoding(object[objectKey]);\n }\n\n // Common case (out)\n if (\n typeof object[objectKey] === 'string' &&\n object[objectKey].match(/^[\\[{].*?[\\]}]$/) !== null // is like JSON\n ) {\n let parsedValue = JSON.parse(object[objectKey]);\n if ( typeof parsedValue === 'object' ) {\n object[objectKey] = parsedValue;\n }\n }\n }\n }\n }\n\n return object;\n }\n}\n// eslint-disable-next-line require-jsdoc\nclass ApbctAjax extends ApbctXhr {\n // eslint-disable-next-line require-jsdoc\n constructor(...args) {\n super(args[0]);\n }\n}\n// eslint-disable-next-line require-jsdoc\nclass ApbctRest extends ApbctXhr {\n static default_route = ctPublicFunctions._rest_url + 'cleantalk-antispam/v1/';\n route = '';\n\n // eslint-disable-next-line require-jsdoc\n constructor(...args) {\n args = args[0];\n args.url = ApbctRest.default_route + args.route;\n args.headers = {\n 'X-WP-Nonce': ctPublicFunctions._rest_nonce,\n };\n super(args);\n }\n}\n\n/**\n * @param {object|array|string} cookies\n * @param {object|array|string} value\n * @param {string|number} expires\n */\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctSetCookie( cookies, value, expires ) {\n let listOfCookieNamesToForceAlt = [\n 'ct_sfw_pass_key',\n 'ct_sfw_passed',\n 'wordpress_apbct_antibot',\n 'apbct_anticrawler_passed',\n 'apbct_antiflood_passed',\n 'apbct_email_encoder_passed',\n ];\n\n let skipAlt = false;\n\n if ( typeof cookies === 'string') {\n skipAlt = cookies === 'ct_pointer_data';\n if ( typeof value === 'string' || typeof value === 'number' ) {\n cookies = [[cookies, value, expires]];\n }\n }\n\n // Cookies disabled\n if ( ctPublicFunctions.data__cookies_type === 'none' ) {\n let forcedAltCookiesSet = [];\n cookies.forEach( function(item) {\n if (listOfCookieNamesToForceAlt.indexOf(item[0]) !== -1) {\n forcedAltCookiesSet.push(item);\n } else {\n apbctLocalStorage.set(item[0], encodeURIComponent(item[1]));\n }\n });\n // if cookies from list found use alt cookies for this selection set\n if ( forcedAltCookiesSet.length > 0 ) {\n ctSetAlternativeCookie(forcedAltCookiesSet);\n }\n\n // If problem integration forms detected use alt cookies for whole cookies set\n if ( ctPublic.force_alt_cookies && !skipAlt) {\n // do it just once\n ctSetAlternativeCookie(cookies, {forceAltCookies: true});\n } else {\n ctNoCookieAttachHiddenFieldsToForms();\n }\n\n // Using traditional cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'native' ) {\n // If problem integration forms detected use alt cookies for whole cookies set\n if ( ctPublic.force_alt_cookies && !skipAlt) {\n // do it just once\n ctSetAlternativeCookie(cookies, {forceAltCookies: true});\n }\n cookies.forEach( function(item) {\n const _expires = typeof item[2] !== 'undefined' ? 'expires=' + expires + '; ' : '';\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = ctPublicFunctions.cookiePrefix +\n item[0] +\n '=' +\n encodeURIComponent(item[1]) +\n '; ' +\n _expires +\n 'path=/; samesite=lax' +\n ctSecure;\n });\n\n // Using alternative cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'alternative' && !skipAlt ) {\n ctSetAlternativeCookie(cookies);\n }\n}\n\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctDetectForcedAltCookiesForms() {\n let ninjaFormsSign = document.querySelectorAll('#tmpl-nf-layout').length > 0;\n let elementorUltimateAddonsRegister = document.querySelectorAll('.uael-registration-form-wrapper').length > 0;\n let smartFormsSign = document.querySelectorAll('script[id*=\"smart-forms\"]').length > 0;\n let jetpackCommentsForm = document.querySelectorAll('iframe[name=\"jetpack_remote_comment\"]').length > 0;\n let cwginstockForm = document.querySelectorAll('.cwginstock-subscribe-form').length > 0;\n let userRegistrationProForm = document.querySelectorAll('div[id^=\"user-registration-form\"]').length > 0;\n let etPbDiviSubscriptionForm = document.querySelectorAll('div[class^=\"et_pb_newsletter_form\"]').length > 0;\n let fluentBookingApp = document.querySelectorAll('div[class^=\"fluent_booking_app\"]').length > 0;\n ctPublic.force_alt_cookies = smartFormsSign ||\n ninjaFormsSign ||\n jetpackCommentsForm ||\n elementorUltimateAddonsRegister ||\n cwginstockForm ||\n userRegistrationProForm ||\n etPbDiviSubscriptionForm ||\n fluentBookingApp;\n\n setTimeout(function() {\n if (!ctPublic.force_alt_cookies) {\n let bookingPress = document.querySelectorAll('main[id^=\"bookingpress_booking_form\"]').length > 0;\n ctPublic.force_alt_cookies = bookingPress;\n }\n }, 1000);\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctSetAlternativeCookie(cookies, params) {\n if (typeof (getJavascriptClientData) === 'function' ) {\n // reprocess already gained cookies data\n if (Array.isArray(cookies)) {\n cookies = getJavascriptClientData(cookies);\n }\n } else {\n console.log('APBCT ERROR: getJavascriptClientData() is not loaded');\n }\n\n try {\n cookies = JSON.parse(cookies);\n } catch (e) {\n console.log('APBCT ERROR: JSON parse error:' + e);\n return;\n }\n\n const callback = params && params.callback || null;\n const onErrorCallback = params && params.onErrorCallback || null;\n\n if ( params && params.forceAltCookies ) {\n cookies.apbct_force_alt_cookies = true;\n }\n\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n // fix for url encoded cookie apbct_pixel_url on REST route\n if (typeof cookies.apbct_pixel_url === 'string' &&\n cookies.apbct_pixel_url.indexOf('%3A') !== -1\n ) {\n cookies.apbct_pixel_url = decodeURIComponent(cookies.apbct_pixel_url);\n }\n apbct_public_sendREST(\n 'alt_sessions',\n {\n method: 'POST',\n data: {cookies: cookies},\n callback: callback,\n onErrorCallback: onErrorCallback,\n },\n );\n\n // Using AJAX request and handler\n } else if ( ctPublicFunctions.data__ajax_type === 'admin_ajax' ) {\n apbct_public_sendAJAX(\n {\n action: 'apbct_alt_session__save__AJAX',\n cookies: cookies,\n },\n {\n notJson: 1,\n callback: callback,\n onErrorCallback: onErrorCallback,\n },\n );\n }\n}\n\n/**\n * Get cookie by name\n * @param name\n * @return {string|undefined}\n */\n// eslint-disable-next-line require-jsdoc,no-unused-vars\nfunction ctGetCookie(name) {\n let matches = document.cookie.match(new RegExp(\n '(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)',\n ));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n}\n\n// eslint-disable-next-line require-jsdoc,no-unused-vars\nfunction ctDeleteCookie(cookieName) {\n // Cookies disabled\n if ( ctPublicFunctions.data__cookies_type === 'none' ) {\n return;\n\n // Using traditional cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'native' ) {\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = cookieName + '=\"\"; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; samesite=lax' + ctSecure;\n\n // Using alternative cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'alternative' ) {\n // @ToDo implement this logic\n }\n}\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_public_sendAJAX(data, params, obj) {\n // Default params\n let _params = [];\n _params['callback'] = params.callback || null;\n _params['onErrorCallback'] = params.onErrorCallback || null;\n _params['callback_context'] = params.callback_context || null;\n _params['callback_params'] = params.callback_params || null;\n _params['async'] = params.async || true;\n _params['notJson'] = params.notJson || null;\n _params['responseType']= params.notJson ? 'text' : 'json';\n _params['timeout'] = params.timeout || 15000;\n _params['obj'] = obj || null;\n _params['button'] = params.button || null;\n _params['spinner'] = params.spinner || null;\n _params['progressbar'] = params.progressbar || null;\n _params['silent'] = params.silent || null;\n _params['no_nonce'] = params.no_nonce || null;\n _params['data'] = data;\n _params['url'] = ctPublicFunctions._ajax_url;\n\n if (typeof (data) === 'string') {\n if ( ! _params['no_nonce'] ) {\n _params['data'] = _params['data'] + '&_ajax_nonce=' + ctPublicFunctions._ajax_nonce;\n }\n _params['data'] = _params['data'] + '&no_cache=' + Math.random();\n } else {\n if ( ! _params['no_nonce'] ) {\n _params['data']._ajax_nonce = ctPublicFunctions._ajax_nonce;\n }\n _params['data'].no_cache = Math.random();\n }\n\n new ApbctCore().ajax(_params);\n}\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_public_sendREST( route, params ) {\n let _params = [];\n _params['route'] = route;\n _params['callback'] = params.callback || null;\n _params['onErrorCallback'] = params.onErrorCallback || null;\n _params['data'] = params.data || [];\n _params['method'] = params.method || 'POST';\n\n new ApbctCore().rest(_params);\n}\n\n/**\n * Generate unique ID\n * @return {string}\n */\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction apbctGenerateUniqueID() {\n return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);\n}\n\nlet apbctLocalStorage = {\n get: function(key, property) {\n if ( typeof property === 'undefined' ) {\n property = 'value';\n }\n const storageValue = localStorage.getItem(key);\n if ( storageValue !== null ) {\n try {\n const json = JSON.parse(storageValue);\n if ( json.hasOwnProperty(property) ) {\n try {\n // if property can be parsed as JSON - do it\n return JSON.parse( json[property] );\n } catch (e) {\n // if not - return string of value\n return json[property].toString();\n }\n } else {\n return json;\n }\n } catch (e) {\n return storageValue;\n }\n }\n return false;\n },\n set: function(key, value, isJson = true) {\n if (isJson) {\n let objToSave = {'value': JSON.stringify(value), 'timestamp': Math.floor(new Date().getTime() / 1000)};\n localStorage.setItem(key, JSON.stringify(objToSave));\n } else {\n localStorage.setItem(key, value);\n }\n },\n isAlive: function(key, maxLifetime) {\n if ( typeof maxLifetime === 'undefined' ) {\n maxLifetime = 86400;\n }\n const keyTimestamp = this.get(key, 'timestamp');\n return keyTimestamp + maxLifetime > Math.floor(new Date().getTime() / 1000);\n },\n isSet: function(key) {\n return localStorage.getItem(key) !== null;\n },\n delete: function(key) {\n localStorage.removeItem(key);\n },\n getCleanTalkData: function() {\n let data = {};\n for (let i=0; i {\n this.data.push(Object.assign({}, this.fieldData));\n });\n }\n\n /**\n * Set listeners.\n */\n setListeners() {\n this.fields.forEach((field, i) => {\n field.addEventListener('paste', () => {\n this.data[i].isUseBuffer = true;\n });\n });\n\n this.fields.forEach((field, i) => {\n field.addEventListener('onautocomplete', () => {\n this.data[i].isAutoFill = true;\n });\n });\n\n this.fields.forEach((field, i) => {\n field.addEventListener('input', () => {\n this.data[i].countOfKey++;\n let time = + new Date();\n let currentDelta = 0;\n\n if (this.data[i].countOfKey === 1) {\n this.data[i].lastKeyTimestamp = time;\n this.data[i].firstKeyTimestamp = time;\n return;\n }\n\n currentDelta = time - this.data[i].lastKeyTimestamp;\n if (this.data[i].countOfKey === 2) {\n this.data[i].lastKeyTimestamp = time;\n this.data[i].lastDelta = currentDelta;\n return;\n }\n\n if (this.data[i].countOfKey > 2) {\n this.data[i].speedDelta += Math.abs(this.data[i].lastDelta - currentDelta);\n this.data[i].lastKeyTimestamp = time;\n this.data[i].lastDelta = currentDelta;\n }\n });\n });\n }\n}\n\n// eslint-disable-next-line camelcase\nconst ctDate = new Date();\nconst ctTimeMs = new Date().getTime();\nlet ctMouseEventTimerFlag = true; // Reading interval flag\nlet ctMouseData = [];\nlet ctMouseDataCounter = 0;\nlet ctCheckedEmails = {};\nlet ctMouseReadInterval;\nlet ctMouseWriteDataInterval;\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_attach_event_handler(elem, event, callback) {\n if (typeof window.addEventListener === 'function') elem.addEventListener(event, callback);\n else elem.attachEvent(event, callback);\n}\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_remove_event_handler(elem, event, callback) {\n if (typeof window.removeEventListener === 'function') elem.removeEventListener(event, callback);\n else elem.detachEvent(event, callback);\n}\n\n// Writing first key press timestamp\nconst ctFunctionFirstKey = function output(event) {\n let KeyTimestamp = Math.floor(new Date().getTime() / 1000);\n ctSetCookie('ct_fkp_timestamp', KeyTimestamp);\n ctKeyStopStopListening();\n};\n\n// run cron jobs\ncronFormsHandler(2000);\n\n// mouse read\nif (ctPublic.data__key_is_ok) {\n // Reading interval\n ctMouseReadInterval = setInterval(function() {\n ctMouseEventTimerFlag = true;\n }, 150);\n\n // Writting interval\n ctMouseWriteDataInterval = setInterval(function() {\n ctSetCookie('ct_pointer_data', JSON.stringify(ctMouseData));\n }, 1200);\n}\n\n// Logging mouse position each 150 ms\nconst ctFunctionMouseMove = function output(event) {\n ctSetMouseMoved();\n if (ctMouseEventTimerFlag === true) {\n ctMouseData.push([\n Math.round(event.clientY),\n Math.round(event.clientX),\n Math.round(new Date().getTime() - ctTimeMs),\n ]);\n\n ctMouseDataCounter++;\n ctMouseEventTimerFlag = false;\n if (ctMouseDataCounter >= 50) {\n ctMouseStopData();\n }\n }\n};\n\n/**\n * Do handle periodical actions.\n * @param {int} cronStartTimeout Time to go before cron start.\n */\nfunction cronFormsHandler(cronStartTimeout = 2000) {\n setTimeout(function() {\n setInterval(function() {\n restartFieldsListening();\n restartBotDetectorEventTokenAttach();\n }, 2000);\n }, cronStartTimeout);\n}\n\n/**\n * Restart event_token attachment if some forms load after document ready.\n */\nfunction restartBotDetectorEventTokenAttach() {\n // List there any new conditions, right now it works only for LatePoint forms.\n // Probably, we can remove this condition at all, because setEventTokenField()\n // checks all the forms without the field\n const doAttach = (\n document.getElementsByClassName('latepoint-form').length > 0 ||\n document.getElementsByClassName('mec-booking-form-container').length > 0\n );\n\n try {\n if ( doAttach ) {\n // get token from LS\n const token = apbctLocalStorage.get('bot_detector_event_token');\n if (typeof setEventTokenField === 'function' && token !== undefined && token.length === 64) {\n setEventTokenField(token);\n }\n // probably there we could use a new botDetectorInit if token is not found\n }\n } catch (e) {\n console.log(e.toString());\n }\n}\n\n/**\n * Stop mouse observing function\n */\nfunction ctMouseStopData() {\n apbct_remove_event_handler(document, 'mousemove', ctFunctionMouseMove);\n clearInterval(ctMouseReadInterval);\n clearInterval(ctMouseWriteDataInterval);\n}\n\n/**\n * Stop key listening function\n */\nfunction ctKeyStopStopListening() {\n apbct_remove_event_handler(document, 'mousedown', ctFunctionFirstKey);\n apbct_remove_event_handler(document, 'keydown', ctFunctionFirstKey);\n}\n\n/**\n * @param {mixed} e\n */\nfunction checkEmail(e) {\n let currentEmail = e.target.value;\n if (currentEmail && !(currentEmail in ctCheckedEmails)) {\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'check_email_before_post',\n {\n method: 'POST',\n data: {'email': currentEmail},\n callback: function(result) {\n if (result.result) {\n ctCheckedEmails[currentEmail] = {\n 'result': result.result,\n 'timestamp': Date.now() / 1000 |0,\n };\n ctSetCookie('ct_checked_emails', JSON.stringify(ctCheckedEmails));\n }\n },\n },\n );\n // Using AJAX request and handler\n } else if ( ctPublicFunctions.data__ajax_type === 'admin_ajax' ) {\n apbct_public_sendAJAX(\n {\n action: 'apbct_email_check_before_post',\n email: currentEmail,\n },\n {\n callback: function(result) {\n if (result.result) {\n ctCheckedEmails[currentEmail] = {\n 'result': result.result,\n 'timestamp': Date.now() / 1000 |0,\n };\n ctSetCookie('ct_checked_emails', JSON.stringify(ctCheckedEmails));\n }\n },\n },\n );\n }\n }\n}\n\n/**\n * @param {string} pixelUrl\n */\nfunction ctSetPixelImg(pixelUrl) {\n ctSetCookie('apbct_pixel_url', pixelUrl);\n if ( +ctPublic.pixel__enabled ) {\n if ( ! document.getElementById('apbct_pixel') ) {\n let insertedImg = document.createElement('img');\n insertedImg.setAttribute('alt', 'CleanTalk Pixel');\n insertedImg.setAttribute('title', 'CleanTalk Pixel');\n insertedImg.setAttribute('id', 'apbct_pixel');\n insertedImg.setAttribute('style', 'display: none; left: 99999px;');\n insertedImg.setAttribute('src', pixelUrl);\n apbct('body').append(insertedImg);\n }\n }\n}\n\n/**\n * @param {string} pixelUrl\n */\nfunction ctSetPixelImgFromLocalstorage(pixelUrl) {\n if ( +ctPublic.pixel__enabled ) {\n if ( ! document.getElementById('apbct_pixel') ) {\n let insertedImg = document.createElement('img');\n insertedImg.setAttribute('alt', 'CleanTalk Pixel');\n insertedImg.setAttribute('title', 'CleanTalk Pixel');\n insertedImg.setAttribute('id', 'apbct_pixel');\n insertedImg.setAttribute('style', 'display: none; left: 99999px;');\n insertedImg.setAttribute('src', decodeURIComponent(pixelUrl));\n apbct('body').append(insertedImg);\n }\n }\n}\n\n/**\n * ctGetPixelUrl\n */\nfunction ctGetPixelUrl() {\n // Check if pixel is already in localstorage and is not outdated\n let localStoragePixelUrl = apbctLocalStorage.get('apbct_pixel_url');\n if ( localStoragePixelUrl !== false ) {\n if ( ! apbctLocalStorage.isAlive('apbct_pixel_url', 3600 * 3) ) {\n apbctLocalStorage.delete('apbct_pixel_url');\n } else {\n // if so - load pixel from localstorage and draw it skipping AJAX\n ctSetPixelImgFromLocalstorage(localStoragePixelUrl);\n return;\n }\n }\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'apbct_get_pixel_url',\n {\n method: 'POST',\n callback: function(result) {\n if (result &&\n (typeof result === 'string' || result instanceof String) && result.indexOf('https') === 0) {\n // set pixel url to localstorage\n if ( ! apbctLocalStorage.get('apbct_pixel_url') ) {\n // set pixel to the storage\n apbctLocalStorage.set('apbct_pixel_url', result);\n // update pixel data in the hidden fields\n ctNoCookieAttachHiddenFieldsToForms();\n }\n // then run pixel drawing\n ctSetPixelImg(result);\n }\n },\n },\n );\n // Using AJAX request and handler\n } else {\n apbct_public_sendAJAX(\n {\n action: 'apbct_get_pixel_url',\n },\n {\n notJson: true,\n callback: function(result) {\n if (result &&\n (typeof result === 'string' || result instanceof String) && result.indexOf('https') === 0) {\n // set pixel url to localstorage\n if ( ! apbctLocalStorage.get('apbct_pixel_url') ) {\n // set pixel to the storage\n apbctLocalStorage.set('apbct_pixel_url', result);\n // update pixel data in the hidden fields\n ctNoCookieAttachHiddenFieldsToForms();\n }\n // then run pixel drawing\n ctSetPixelImg(result);\n }\n },\n },\n );\n }\n}\n\n/**\n * ctSetHasScrolled\n */\nfunction ctSetHasScrolled() {\n if ( ! apbctLocalStorage.isSet('ct_has_scrolled') || ! apbctLocalStorage.get('ct_has_scrolled') ) {\n ctSetCookie('ct_has_scrolled', 'true');\n apbctLocalStorage.set('ct_has_scrolled', true);\n }\n if (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_scrolled') === undefined\n ) {\n ctSetCookie('ct_has_scrolled', 'true');\n }\n}\n\n/**\n * ctSetMouseMoved\n */\nfunction ctSetMouseMoved() {\n if ( ! apbctLocalStorage.isSet('ct_mouse_moved') || ! apbctLocalStorage.get('ct_mouse_moved') ) {\n ctSetCookie('ct_mouse_moved', 'true');\n apbctLocalStorage.set('ct_mouse_moved', true);\n }\n if (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_mouse_moved') === undefined\n ) {\n ctSetCookie('ct_mouse_moved', 'true');\n }\n}\n\n/**\n * Restart listen fields to set ct_has_input_focused or ct_has_key_up\n */\nfunction restartFieldsListening() {\n if (!apbctLocalStorage.isSet('ct_has_input_focused') && !apbctLocalStorage.isSet('ct_has_key_up')) {\n ctStartFieldsListening();\n }\n}\n\n/**\n * init listeners for keyup and focus events\n */\nfunction ctStartFieldsListening() {\n if (\n (apbctLocalStorage.isSet('ct_has_key_up') || apbctLocalStorage.get('ct_has_key_up')) &&\n (apbctLocalStorage.isSet('ct_has_input_focused') || apbctLocalStorage.get('ct_has_input_focused')) &&\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_input_focused') !== undefined &&\n ctGetCookie('ct_has_key_up') !== undefined\n )\n ) {\n // already set\n return;\n }\n\n let forms = ctGetPageForms();\n ctPublic.handled_fields = [];\n\n if (forms.length > 0) {\n for (let i = 0; i < forms.length; i++) {\n // handle only inputs and textareas\n const handledFormFields = forms[i].querySelectorAll('input,textarea');\n for (let i = 0; i < handledFormFields.length; i++) {\n if (handledFormFields[i].type !== 'hidden') {\n // collect handled fields to remove handler in the future\n ctPublic.handled_fields.push(handledFormFields[i]);\n // do attach handlers\n apbct_attach_event_handler(handledFormFields[i], 'focus', ctFunctionHasInputFocused);\n apbct_attach_event_handler(handledFormFields[i], 'keyup', ctFunctionHasKeyUp);\n }\n }\n }\n }\n}\n\n/**\n * stop listening keyup and focus\n * @param {string} eventName\n * @param {string} functionName\n */\nfunction ctStopFieldsListening(eventName, functionName) {\n if (typeof ctPublic.handled_fields !== 'undefined' && ctPublic.handled_fields.length > 0) {\n for (let i = 0; i < ctPublic.handled_fields.length; i++) {\n apbct_remove_event_handler(ctPublic.handled_fields[i], eventName, functionName);\n }\n }\n}\n\nlet ctFunctionHasInputFocused = function output(event) {\n ctSetHasInputFocused();\n ctStopFieldsListening('focus', ctFunctionHasInputFocused);\n};\n\nlet ctFunctionHasKeyUp = function output(event) {\n ctSetHasKeyUp();\n ctStopFieldsListening('keyup', ctFunctionHasKeyUp);\n};\n\n/**\n * set ct_has_input_focused ct_has_key_up cookies on session period\n */\nfunction ctSetHasInputFocused() {\n if ( ! apbctLocalStorage.isSet('ct_has_input_focused') || ! apbctLocalStorage.get('ct_has_input_focused') ) {\n apbctLocalStorage.set('ct_has_input_focused', true);\n }\n if (\n (\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_input_focused') === undefined\n ) ||\n ctPublic.data__cookies_type === 'alternative'\n ) ||\n (\n ctPublic.data__cookies_type === 'none' &&\n (\n typeof ctPublic.force_alt_cookies !== 'undefined' ||\n (ctPublic.force_alt_cookies !== undefined && ctPublic.force_alt_cookies)\n )\n )\n ) {\n ctSetCookie('ct_has_input_focused', 'true');\n }\n}\n\n/**\n * ctSetHasKeyUp\n */\nfunction ctSetHasKeyUp() {\n if ( ! apbctLocalStorage.isSet('ct_has_key_up') || ! apbctLocalStorage.get('ct_has_key_up') ) {\n apbctLocalStorage.set('ct_has_key_up', true);\n }\n if (\n (\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_key_up') === undefined\n ) ||\n ctPublic.data__cookies_type === 'alternative'\n ) ||\n (\n ctPublic.data__cookies_type === 'none' &&\n (\n typeof ctPublic.force_alt_cookies !== 'undefined' ||\n (ctPublic.force_alt_cookies !== undefined && ctPublic.force_alt_cookies)\n )\n )\n ) {\n ctSetCookie('ct_has_key_up', 'true');\n }\n}\n\n/**\n * ctPreloadLocalStorage\n */\nfunction ctPreloadLocalStorage() {\n if (ctPublic.data__to_local_storage) {\n let data = Object.entries(ctPublic.data__to_local_storage);\n data.forEach(([key, value]) => {\n apbctLocalStorage.set(key, value);\n });\n }\n}\n\nif (ctPublic.data__key_is_ok) {\n apbct_attach_event_handler(document, 'mousemove', ctFunctionMouseMove);\n apbct_attach_event_handler(document, 'mousedown', ctFunctionFirstKey);\n apbct_attach_event_handler(document, 'keydown', ctFunctionFirstKey);\n apbct_attach_event_handler(document, 'scroll', ctSetHasScrolled);\n}\n\n/**\n * Prepare block to intercept AJAX response\n */\nfunction apbctPrepareBlockForAjaxForms() {\n // eslint-disable-next-line require-jsdoc\n function ctPrepareBlockMessage(xhr) {\n if (xhr.responseText &&\n xhr.responseText.indexOf('\"apbct') !== -1 &&\n xhr.responseText.indexOf('DOCTYPE') === -1\n ) {\n try {\n ctParseBlockMessage(JSON.parse(xhr.responseText));\n } catch (e) {\n console.log(e.toString());\n }\n }\n }\n\n if (typeof jQuery !== 'undefined') {\n // Capturing responses and output block message for unknown AJAX forms\n if (typeof jQuery(document).ajaxComplete() !== 'function') {\n jQuery(document).on('ajaxComplete', function(event, xhr, settings) {\n ctPrepareBlockMessage(xhr);\n });\n } else {\n jQuery(document).ajaxComplete( function(event, xhr, settings) {\n ctPrepareBlockMessage(xhr);\n });\n }\n }\n}\n\n/**\n * Ready function\n */\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_ready() {\n // this way calls a lot of apbct_ready(), needs to find another way\n // if (typeof jQuery !== 'undefined') {\n // jQuery(document).on('gform_page_loaded', function() {\n // apbct_ready();\n // });\n // }\n\n apbctPrepareBlockForAjaxForms();\n\n ctPreloadLocalStorage();\n\n // set session ID\n if (!apbctSessionStorage.isSet('apbct_session_id')) {\n const sessionID = apbctGenerateUniqueID();\n apbctSessionStorage.set('apbct_session_id', sessionID, false);\n apbctLocalStorage.set('apbct_page_hits', 1);\n if (document.referrer) {\n let urlReferer = new URL(document.referrer);\n if (urlReferer.host !== location.host) {\n apbctSessionStorage.set('apbct_site_referer', document.referrer, false);\n }\n }\n } else {\n apbctLocalStorage.set('apbct_page_hits', Number(apbctLocalStorage.get('apbct_page_hits')) + 1);\n }\n\n apbctWriteReferrersToSessionStorage();\n\n const cookiesType = apbctLocalStorage.get('ct_cookies_type');\n if ( ! cookiesType || cookiesType !== ctPublic.data__cookies_type ) {\n apbctLocalStorage.set('ct_cookies_type', ctPublic.data__cookies_type);\n apbctLocalStorage.delete('ct_mouse_moved');\n apbctLocalStorage.delete('ct_has_scrolled');\n }\n\n if (ctPublic.data__cookies_type !== 'alternative') {\n ctStartFieldsListening();\n // 2nd try to add listeners for delayed appears forms\n setTimeout(ctStartFieldsListening, 1000);\n }\n\n window.addEventListener('animationstart', apbctOnAnimationStart, true);\n window.addEventListener('input', apbctOnInput, true);\n document.ctTypoData = new CTTypoData();\n document.ctTypoData.gatheringFields();\n document.ctTypoData.setListeners();\n\n // Collect scrolling info\n const initCookies = [\n ['ct_ps_timestamp', Math.floor(new Date().getTime() / 1000)],\n ['ct_fkp_timestamp', '0'],\n ['ct_pointer_data', '0'],\n // eslint-disable-next-line camelcase\n ['ct_timezone', ctDate.getTimezoneOffset()/60*(-1)],\n ['ct_screen_info', apbctGetScreenInfo()],\n ['apbct_headless', navigator.webdriver],\n ];\n\n apbctLocalStorage.set('ct_ps_timestamp', Math.floor(new Date().getTime() / 1000));\n apbctLocalStorage.set('ct_fkp_timestamp', '0');\n apbctLocalStorage.set('ct_pointer_data', '0');\n // eslint-disable-next-line camelcase\n apbctLocalStorage.set('ct_timezone', ctDate.getTimezoneOffset()/60*(-1) );\n apbctLocalStorage.set('ct_screen_info', apbctGetScreenInfo());\n apbctLocalStorage.set('apbct_headless', navigator.webdriver);\n\n if ( ctPublic.data__cookies_type !== 'native' ) {\n initCookies.push(['apbct_visible_fields', '0']);\n } else {\n // Delete all visible fields cookies on load the page\n let cookiesArray = document.cookie.split(';');\n if ( cookiesArray.length !== 0 ) {\n for ( let i = 0; i < cookiesArray.length; i++ ) {\n let currentCookie = cookiesArray[i].trim();\n let cookieName = currentCookie.split('=')[0];\n if ( cookieName.indexOf('apbct_visible_fields_') === 0 ) {\n ctDeleteCookie(cookieName);\n }\n }\n }\n }\n\n if ( +ctPublic.pixel__setting ) {\n if ( +ctPublic.pixel__enabled ) {\n ctGetPixelUrl();\n } else {\n initCookies.push(['apbct_pixel_url', ctPublic.pixel__url]);\n }\n }\n\n if ( +ctPublic.data__email_check_before_post) {\n initCookies.push(['ct_checked_emails', '0']);\n apbct('input[type = \\'email\\'], #email').on('blur', checkEmail);\n }\n\n if (apbctLocalStorage.isSet('ct_checkjs')) {\n initCookies.push(['ct_checkjs', apbctLocalStorage.get('ct_checkjs')]);\n } else {\n initCookies.push(['ct_checkjs', 0]);\n }\n\n // detect integrated forms that need to be handled via alternative cookies\n ctDetectForcedAltCookiesForms();\n\n // send bot detector event token to alt cookies on problem forms\n if (typeof ctPublic.force_alt_cookies !== 'undefined' &&\n ctPublic.force_alt_cookies &&\n apbctLocalStorage.get('bot_detector_event_token') &&\n // do bot set if (ct_bot_detector_event_token) already set,\n // and it is equal to newly added from moderate (bot_detector_event_token)\n apbctLocalStorage.get('ct_bot_detector_event_token') !== apbctLocalStorage.get('bot_detector_event_token')\n ) {\n initCookies.push(['ct_bot_detector_event_token', apbctLocalStorage.get('bot_detector_event_token')]);\n }\n\n if (!ctPublic.force_alt_cookies && ctPublic.data__cookies_type == 'alternative') {\n ctPublic.force_alt_cookies = apbctLocalStorage.get('bot_detector_event_token');\n }\n\n ctSetCookie(initCookies);\n\n setTimeout(function() {\n if (\n typeof ctPublic.force_alt_cookies == 'undefined' ||\n (ctPublic.force_alt_cookies !== 'undefined' && !ctPublic.force_alt_cookies)\n ) {\n ctNoCookieAttachHiddenFieldsToForms();\n }\n\n if (\n typeof ctPublic.data__cookies_type !== 'undefined' &&\n ctPublic.data__cookies_type === 'none'\n ) {\n ctAjaxSetupAddCleanTalkDataBeforeSendAjax();\n }\n\n for (let i = 0; i < document.forms.length; i++) {\n let form = document.forms[i];\n\n // Exclusion for forms\n if (ctCheckHiddenFieldsExclusions(document.forms[i], 'visible_fields')) {\n continue;\n }\n\n // The Form has hidden field like apbct_visible_fields\n if (\n document.forms[i].elements.apbct_visible_fields !== undefined &&\n document.forms[i].elements.apbct_visible_fields.length > 0\n ) {\n continue;\n }\n\n if (form.querySelector('input[name=\"apbct_visible_fields\"]')) {\n let visibleFields = form.querySelector('input[name=\"apbct_visible_fields\"]');\n form.removeChild(visibleFields);\n }\n\n let hiddenInput = document.createElement( 'input' );\n hiddenInput.setAttribute( 'type', 'hidden' );\n hiddenInput.setAttribute( 'id', 'apbct_visible_fields_' + i );\n hiddenInput.setAttribute( 'name', 'apbct_visible_fields');\n let visibleFieldsToInput = {};\n visibleFieldsToInput[0] = apbct_collect_visible_fields(form);\n hiddenInput.value = btoa(JSON.stringify(visibleFieldsToInput));\n form.append( hiddenInput );\n\n form.onsubmit_prev = form.onsubmit;\n\n form.ctFormIndex = i;\n form.onsubmit = function(event) {\n if ( ctPublic.data__cookies_type !== 'native' && typeof event.target.ctFormIndex !== 'undefined' ) {\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(this);\n apbct_visible_fields_set_cookie( visibleFields, event.target.ctFormIndex );\n }\n\n if (ctPublic.data__cookies_type === 'none' && isFormThatNeedCatchXhr(event.target)) {\n window.XMLHttpRequest.prototype.send = function(data) {\n let noCookieData = getNoCookieData();\n noCookieData = 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData + '&';\n defaultSend.call(this, noCookieData + data);\n setTimeout(() => {\n window.XMLHttpRequest.prototype.send = defaultSend;\n }, 0);\n };\n }\n\n // Call previous submit action\n if (event.target.onsubmit_prev instanceof Function && !ctOnsubmitPrevCallExclude(event.target)) {\n setTimeout(function() {\n event.target.onsubmit_prev.call(event.target, event);\n }, 500);\n }\n };\n }\n }, 1000);\n\n // Listen clicks on encoded emails\n let encodedEmailNodes = document.querySelectorAll('[data-original-string]');\n ctPublic.encodedEmailNodes = encodedEmailNodes;\n if (encodedEmailNodes.length) {\n for (let i = 0; i < encodedEmailNodes.length; ++i) {\n if (\n encodedEmailNodes[i].parentElement.href ||\n encodedEmailNodes[i].parentElement.parentElement.href\n ) {\n // Skip listening click on hyperlinks\n continue;\n }\n encodedEmailNodes[i].addEventListener('click', ctFillDecodedEmailHandler);\n }\n }\n\n // WordPress Search form processing\n for (const _form of document.forms) {\n if (\n typeof ctPublic !== 'undefined' &&\n ctPublic.settings__forms__search_test === '1' &&\n (\n _form.getAttribute('id') === 'searchform' ||\n (_form.getAttribute('class') !== null && _form.getAttribute('class').indexOf('search-form') !== -1) ||\n (_form.getAttribute('role') !== null && _form.getAttribute('role').indexOf('search') !== -1)\n )\n ) {\n _form.apbctSearchPrevOnsubmit = _form.onsubmit;\n // this handles search forms onsubmit process\n _form.onsubmit = (e) => ctSearchFormOnSubmitHandler(e, _form);\n }\n }\n\n // Check any XMLHttpRequest connections\n apbctCatchXmlHttpRequest();\n}\n\n/**\n * Insert event_token and no_cookies_data to some ajax request\n */\nfunction apbctCatchXmlHttpRequest() {\n // 1) Check the page if it needed to catch XHR\n if ( document.querySelectorAll('div.wfu_container') !== null ) {\n const originalSend = XMLHttpRequest.prototype.send;\n XMLHttpRequest.prototype.send = function(body) {\n // 2) Check the caught request fi it needed to modify\n if (\n body &&\n typeof body === 'string' &&\n (\n body.indexOf('action=wfu_ajax_action_ask_server') !== -1\n )\n ) {\n let addidionalCleantalkData = '';\n let eventToken = localStorage.getItem('bot_detector_event_token');\n try {\n eventToken = JSON.parse(eventToken);\n } catch {\n eventToken = false;\n }\n if (\n eventToken !== null &&\n eventToken !== false &&\n eventToken.hasOwnProperty('value') &&\n eventToken.value !== ''\n ) {\n eventToken = eventToken.value;\n addidionalCleantalkData += '&' + 'data%5Bct_bot_detector_event_token%5D=' + eventToken;\n }\n\n let noCookieData = getNoCookieData();\n addidionalCleantalkData += '&' + 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData;\n\n body += addidionalCleantalkData;\n\n return originalSend.apply(this, [body]);\n }\n return originalSend.apply(this, [body]);\n };\n }\n}\n\n/**\n * Prepare jQuery.ajaxSetup to add nocookie data to the jQuery ajax request.\n * Notes:\n * - Do it just once, the ajaxSetup.beforeSend will be overwritten for any calls.\n * - Signs of forms need to be caught will be checked during ajaxSetup.settings.data process on send.\n * - Any sign of the form HTML of the caller is insignificant in this process.\n * @return {void}\n */\nfunction ctAjaxSetupAddCleanTalkDataBeforeSendAjax() {\n // jquery ajax call intercept\n let eventToken = false;\n if ( typeof jQuery !== 'undefined' ) {\n jQuery.ajaxSetup({\n beforeSend: function(xhr, settings) {\n let sourceSign = false;\n // settings data is string (important!)\n if ( typeof settings.data === 'string' ) {\n if (settings.data.indexOf('twt_cc_signup') !== -1) {\n sourceSign = 'twt_cc_signup';\n }\n\n if (settings.data.indexOf('action=mailpoet') !== -1) {\n sourceSign = 'action=mailpoet';\n }\n\n if (\n settings.data.indexOf('action=user_registration') !== -1 &&\n settings.data.indexOf('ur_frontend_form_nonce') !== -1\n ) {\n sourceSign = 'action=user_registration';\n }\n\n if (settings.data.indexOf('action=happyforms_message') !== -1) {\n sourceSign = 'action=happyforms_message';\n }\n\n if (settings.data.indexOf('action=new_activity_comment') !== -1) {\n sourceSign = 'action=new_activity_comment';\n }\n }\n if ( typeof settings.url === 'string' ) {\n if (settings.url.indexOf('wc-ajax=add_to_cart') !== -1) {\n sourceSign = 'wc-ajax=add_to_cart';\n if (localStorage.getItem('bot_detector_event_token') !== null) {\n eventToken = localStorage.getItem('bot_detector_event_token');\n try {\n eventToken = JSON.parse(eventToken);\n } catch {\n eventToken = false;\n }\n if (eventToken !== false && eventToken.hasOwnProperty('value') && eventToken.value !== '') {\n eventToken = eventToken.value;\n }\n }\n }\n }\n\n if (sourceSign) {\n let noCookieData = getNoCookieData();\n if (typeof eventToken === 'string') {\n eventToken = 'data%5Bct_bot_detector_event_token%5D=' + eventToken + '&';\n } else {\n eventToken = '';\n }\n noCookieData = 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData + '&';\n\n settings.data = noCookieData + eventToken + settings.data;\n }\n },\n });\n }\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctOnsubmitPrevCallExclude(form) {\n if (form.classList.contains('hb-booking-search-form')) {\n return true;\n }\n\n return false;\n}\n\nif (ctPublic.data__key_is_ok) {\n if (document.readyState !== 'loading') {\n apbct_ready();\n } else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', apbct_ready);\n }\n\n apbctLocalStorage.set('ct_checkjs', ctPublic.ct_checkjs_key, true );\n}\n\n/**\n * @param {SubmitEvent} e\n * @param {*} _form\n */\nfunction ctSearchFormOnSubmitHandler(e, _form) {\n try {\n // set NoCookie data if is provided\n const noCookieField = _form.querySelector('[name=\"ct_no_cookie_hidden_field\"]');\n // set honeypot data if is provided\n const honeyPotField = _form.querySelector('[id*=\"apbct__email_id__\"]');\n const botDetectorField = _form.querySelector('[name*=\"ct_bot_detector_event_token\"]');\n let hpValue = null;\n let hpEventId = null;\n\n // get honeypot field and it's value\n if (\n honeyPotField !== null &&\n honeyPotField.value !== null &&\n honeyPotField.getAttribute('apbct_event_id') !== null\n ) {\n hpValue = honeyPotField.value;\n hpEventId = honeyPotField.getAttribute('apbct_event_id');\n }\n\n if (ctPublic.data__cookies_type === 'alternative' || ctPublic.data__cookies_type === 'native') {\n if (botDetectorField !== null) {\n botDetectorField.parentNode.removeChild(botDetectorField);\n }\n }\n\n // if noCookie data or honeypot data is set, proceed handling\n if ( noCookieField !== null || honeyPotField !== null) {\n e.preventDefault();\n const callBack = () => {\n if (honeyPotField !== null) {\n honeyPotField.parentNode.removeChild(honeyPotField);\n }\n // ct_bot_detector_event_token\n if (botDetectorField !== null) {\n botDetectorField.parentNode.removeChild(botDetectorField);\n }\n if (_form.apbctSearchPrevOnsubmit instanceof Function) {\n _form.apbctSearchPrevOnsubmit();\n } else {\n const _noCookieField = _form.querySelector('[name=\"ct_no_cookie_hidden_field\"]');\n if ( _noCookieField !== null ) {\n _noCookieField.parentNode.removeChild(_noCookieField);\n }\n HTMLFormElement.prototype.submit.call(_form);\n }\n };\n\n let parsedCookies = '{}';\n\n // if noCookie data provided trim prefix and add data from base64 decoded value then\n if (noCookieField !== null) {\n parsedCookies = atob(noCookieField.value.replace('_ct_no_cookie_data_', ''));\n }\n\n const cookiesArray = JSON.parse(parsedCookies);\n\n // if honeypot data provided add the fields to the parsed data\n if ( hpValue !== null && hpEventId !== null ) {\n cookiesArray.apbct_search_form__honeypot_value = hpValue;\n cookiesArray.apbct_search_form__honeypot_id = hpEventId;\n }\n\n // if the pixel needs to be decoded\n if (\n typeof cookiesArray.apbct_pixel_url === 'string' &&\n cookiesArray.apbct_pixel_url.indexOf('%3A') !== -1\n ) {\n cookiesArray.apbct_pixel_url = decodeURIComponent(cookiesArray.apbct_pixel_url);\n }\n\n parsedCookies = JSON.stringify(cookiesArray);\n\n // if any data provided, proceed data to xhr\n if ( parsedCookies.length !== 0 ) {\n ctSetAlternativeCookie(\n parsedCookies,\n {callback: callBack, onErrorCallback: callBack, forceAltCookies: true},\n );\n } else {\n callBack();\n }\n }\n } catch (error) {\n console.warn('APBCT search form onsubmit handler error. ' + error);\n }\n}\n\n/**\n * @param {mixed} event\n */\nfunction ctFillDecodedEmailHandler(event) {\n this.removeEventListener('click', ctFillDecodedEmailHandler);\n // remember clickSource\n let clickSource = this;\n // globally remember if emails is mixed with mailto\n ctPublic.encodedEmailNodesIsMixed = false;\n // get fade\n document.body.classList.add('apbct-popup-fade');\n // popup show\n let encoderPopup = document.getElementById('apbct_popup');\n if (!encoderPopup) {\n let waitingPopup = document.createElement('div');\n waitingPopup.setAttribute('class', 'apbct-popup');\n waitingPopup.setAttribute('id', 'apbct_popup');\n let popupText = document.createElement('p');\n popupText.setAttribute('id', 'apbct_popup_text');\n popupText.style.color = 'black';\n popupText.innerText = 'Please wait while ' + ctPublic.wl_brandname + ' is decoding the email addresses.';\n waitingPopup.append(popupText);\n document.body.append(waitingPopup);\n } else {\n encoderPopup.setAttribute('style', 'display: inherit');\n document.getElementById('apbct_popup_text').innerHTML =\n 'Please wait while ' + ctPublic.wl_brandname + ' is decoding the email addresses.';\n }\n\n apbctAjaxEmailDecodeBulk(event, ctPublic.encodedEmailNodes, clickSource);\n}\n\n/**\n * @param {mixed} event\n * @param {mixed} encodedEmailNodes\n * @param {mixed} clickSource\n */\nfunction apbctAjaxEmailDecodeBulk(event, encodedEmailNodes, clickSource) {\n // collect data\n const javascriptClientData = getJavascriptClientData();\n let data = {\n event_javascript_data: javascriptClientData,\n post_url: document.location.href,\n referrer: document.referrer,\n encodedEmails: '',\n };\n let encodedEmailsCollection = {};\n for (let i = 0; i < encodedEmailNodes.length; i++) {\n // disable click for mailto\n if (typeof encodedEmailNodes[i].href !== 'undefined' && encodedEmailNodes[i].href.indexOf('mailto:') === 0) {\n event.preventDefault();\n ctPublic.encodedEmailNodesIsMixed = true;\n }\n\n // Adding a tooltip\n let apbctTooltip = document.createElement('div');\n apbctTooltip.setAttribute('class', 'apbct-tooltip');\n apbct(encodedEmailNodes[i]).append(apbctTooltip);\n\n // collect encoded email strings\n encodedEmailsCollection[i] = encodedEmailNodes[i].dataset.originalString;\n }\n\n // JSONify encoded email strings\n data.encodedEmails = JSON.stringify(encodedEmailsCollection);\n\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'apbct_decode_email',\n {\n data: data,\n method: 'POST',\n callback: function(result) {\n // set alternative cookie to skip next pages encoding\n ctSetCookie('apbct_email_encoder_passed', ctPublic.emailEncoderPassKey);\n apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource);\n },\n onErrorCallback: function(res) {\n resetEncodedNodes();\n ctShowDecodeComment(res);\n },\n },\n );\n\n // Using AJAX request and handler\n } else {\n data.action = 'apbct_decode_email';\n apbct_public_sendAJAX(\n data,\n {\n notJson: false,\n callback: function(result) {\n // set alternative cookie to skip next pages encoding\n ctSetCookie('apbct_email_encoder_passed', ctPublic.emailEncoderPassKey);\n apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource);\n },\n onErrorCallback: function(res) {\n resetEncodedNodes();\n ctShowDecodeComment(res);\n },\n },\n );\n }\n}\n\n/**\n * @param {mixed} result\n * @param {mixed} encodedEmailNodes\n * @param {mixed} clickSource\n */\nfunction apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource) {\n if (result.success && result.data[0].is_allowed === true) {\n // start process of visual decoding\n setTimeout(function() {\n for (let i = 0; i < encodedEmailNodes.length; i++) {\n // chek what is what\n let currentResultData;\n result.data.forEach((row) => {\n if (row.encoded_email === encodedEmailNodes[i].dataset.originalString) {\n currentResultData = row;\n }\n });\n // quit case on cloud block\n if (currentResultData.is_allowed === false) {\n break;\n }\n // handler for mailto\n if (\n typeof encodedEmailNodes[i].href !== 'undefined' &&\n encodedEmailNodes[i].href.indexOf('mailto:') === 0) {\n let encodedEmail = encodedEmailNodes[i].href.replace('mailto:', '');\n let baseElementContent = encodedEmailNodes[i].innerHTML;\n encodedEmailNodes[i].innerHTML =\n baseElementContent.replace(encodedEmail, currentResultData.decoded_email);\n encodedEmailNodes[i].href = 'mailto:' + currentResultData.decoded_email;\n } else {\n // fill the nodes\n ctProcessDecodedDataResult(currentResultData, encodedEmailNodes[i]);\n }\n // remove listeners\n encodedEmailNodes[i].removeEventListener('click', ctFillDecodedEmailHandler);\n }\n // popup remove\n let popup = document.getElementById('apbct_popup');\n if (popup !== null) {\n document.body.classList.remove('apbct-popup-fade');\n popup.setAttribute('style', 'display:none');\n // click on mailto if so\n if (ctPublic.encodedEmailNodesIsMixed) {\n clickSource.click();\n }\n }\n }, 3000);\n } else {\n if (result.success) {\n resetEncodedNodes();\n ctShowDecodeComment('Blocked: ' + result.data[0].comment);\n } else {\n resetEncodedNodes();\n ctShowDecodeComment('Cannot connect with CleanTalk server: ' + result.data[0].comment);\n }\n }\n}\n\n/**\n * resetEncodedNodes\n */\nfunction resetEncodedNodes() {\n if (typeof ctPublic.encodedEmailNodes !== 'undefined') {\n ctPublic.encodedEmailNodes.forEach(function(element) {\n element.addEventListener('click', ctFillDecodedEmailHandler);\n });\n }\n}\n\n/**\n * @param {mixed} commonCookies\n * @return {string}\n */\nfunction getJavascriptClientData(commonCookies = []) {\n let resultDataJson = {};\n\n resultDataJson.apbct_headless = !!ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_headless');\n resultDataJson.ct_checked_emails = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checked_emails');\n resultDataJson.ct_checkjs = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checkjs');\n resultDataJson.ct_fkp_timestamp = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_fkp_timestamp');\n resultDataJson.ct_pointer_data = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_pointer_data');\n resultDataJson.ct_ps_timestamp = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_ps_timestamp');\n resultDataJson.ct_screen_info = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_screen_info');\n resultDataJson.ct_timezone = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_timezone');\n\n // collecting data from localstorage\n const ctMouseMovedLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_mouse_moved');\n const ctHasScrolledLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_has_scrolled');\n const ctCookiesTypeLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_cookies_type');\n const apbctPageHits = apbctLocalStorage.get('apbct_page_hits');\n const apbctPrevReferer = apbctSessionStorage.get('apbct_prev_referer');\n const apbctSiteReferer = apbctSessionStorage.get('apbct_site_referer');\n const ctJsErrorsLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_js_errors');\n const ctPixelUrl = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'apbct_pixel_url');\n\n // collecting data from cookies\n const ctMouseMovedCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_mouse_moved');\n const ctHasScrolledCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_has_scrolled');\n const ctCookiesTypeCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_cookies_type');\n const ctCookiesPixelUrl = ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_pixel_url');\n\n resultDataJson.ct_mouse_moved = ctMouseMovedLocalStorage !== undefined ?\n ctMouseMovedLocalStorage : ctMouseMovedCookie;\n resultDataJson.ct_has_scrolled = ctHasScrolledLocalStorage !== undefined ?\n ctHasScrolledLocalStorage : ctHasScrolledCookie;\n resultDataJson.ct_cookies_type = ctCookiesTypeLocalStorage !== undefined ?\n ctCookiesTypeLocalStorage : ctCookiesTypeCookie;\n resultDataJson.apbct_pixel_url = ctPixelUrl !== undefined ?\n ctPixelUrl : ctCookiesPixelUrl;\n resultDataJson.apbct_page_hits = apbctPageHits;\n resultDataJson.apbct_prev_referer = apbctPrevReferer;\n resultDataJson.apbct_site_referer = apbctSiteReferer;\n resultDataJson.apbct_ct_js_errors = ctJsErrorsLocalStorage;\n\n if (!resultDataJson.apbct_pixel_url) {\n resultDataJson.apbct_pixel_url = ctPublic.pixel__url;\n }\n\n if (\n typeof (commonCookies) === 'object' &&\n commonCookies !== []\n ) {\n for (let i = 0; i < commonCookies.length; ++i) {\n if ( typeof (commonCookies[i][1]) === 'object' ) {\n // this is for handle SFW cookies\n resultDataJson[commonCookies[i][1][0]] = commonCookies[i][1][1];\n } else {\n resultDataJson[commonCookies[i][0]] = commonCookies[i][1];\n }\n }\n } else {\n console.log('APBCT JS ERROR: Collecting data type mismatch');\n }\n\n // Parse JSON properties to prevent double JSON encoding\n resultDataJson = removeDoubleJsonEncoding(resultDataJson);\n\n return JSON.stringify(resultDataJson);\n}\n\n/**\n * Recursive\n *\n * Recursively decode JSON-encoded properties\n *\n * @param {mixed} object\n * @return {*}\n */\nfunction removeDoubleJsonEncoding(object) {\n if ( typeof object === 'object') {\n // eslint-disable-next-line guard-for-in\n for (let objectKey in object) {\n // Recursion\n if ( typeof object[objectKey] === 'object') {\n object[objectKey] = removeDoubleJsonEncoding(object[objectKey]);\n }\n\n // Common case (out)\n if (\n typeof object[objectKey] === 'string' &&\n object[objectKey].match(/^[\\[{].*?[\\]}]$/) !== null // is like JSON\n ) {\n const parsedValue = JSON.parse(object[objectKey]);\n if ( typeof parsedValue === 'object' ) {\n object[objectKey] = parsedValue;\n }\n }\n }\n }\n\n return object;\n}\n\n/**\n * @param {mixed} response\n * @param {mixed} targetElement\n */\nfunction ctProcessDecodedDataResult(response, targetElement) {\n targetElement.setAttribute('title', '');\n targetElement.removeAttribute('style');\n ctFillDecodedEmail(targetElement, response.decoded_email);\n}\n\n/**\n * @param {mixed} target\n * @param {string} email\n */\nfunction ctFillDecodedEmail(target, email) {\n apbct(target).html(\n apbct(target)\n .html()\n .replace(/.+?(
)/, email + '$1'),\n );\n}\n\n/**\n * @param {string} comment\n */\nfunction ctShowDecodeComment(comment) {\n if ( ! comment ) {\n comment = 'Can not decode email. Unknown reason';\n }\n\n let popup = document.getElementById('apbct_popup');\n let popupText = document.getElementById('apbct_popup_text');\n if (popup !== null) {\n document.body.classList.remove('apbct-popup-fade');\n popupText.innerText = 'CleanTalk email decoder: ' + comment;\n setTimeout(function() {\n popup.setAttribute('style', 'display:none');\n }, 3000);\n }\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_collect_visible_fields( form ) {\n // Get only fields\n let inputs = [];\n let inputsVisible = '';\n let inputsVisibleCount = 0;\n let inputsInvisible = '';\n let inputsInvisibleCount = 0;\n let inputsWithDuplicateNames = [];\n\n for (let key in form.elements) {\n if (!isNaN(+key)) {\n inputs[key] = form.elements[key];\n }\n }\n\n // Filter fields\n inputs = inputs.filter(function(elem) {\n // Filter already added fields\n if ( inputsWithDuplicateNames.indexOf( elem.getAttribute('name') ) !== -1 ) {\n return false;\n }\n // Filter inputs with same names for type == radio\n if ( -1 !== ['radio', 'checkbox'].indexOf( elem.getAttribute('type') )) {\n inputsWithDuplicateNames.push( elem.getAttribute('name') );\n return false;\n }\n return true;\n });\n\n // Visible fields\n inputs.forEach(function(elem, i, elements) {\n // Unnecessary fields\n if (\n elem.getAttribute('type') === 'submit' || // type == submit\n elem.getAttribute('name') === null ||\n elem.getAttribute('name') === 'ct_checkjs'\n ) {\n return;\n }\n // Invisible fields\n if (\n getComputedStyle(elem).display === 'none' || // hidden\n getComputedStyle(elem).visibility === 'hidden' || // hidden\n getComputedStyle(elem).opacity === '0' || // hidden\n elem.getAttribute('type') === 'hidden' // type == hidden\n ) {\n if ( elem.classList.contains('wp-editor-area') ) {\n inputsVisible += ' ' + elem.getAttribute('name');\n inputsVisibleCount++;\n } else {\n inputsInvisible += ' ' + elem.getAttribute('name');\n inputsInvisibleCount++;\n }\n // eslint-disable-next-line brace-style\n }\n // Visible fields\n else {\n inputsVisible += ' ' + elem.getAttribute('name');\n inputsVisibleCount++;\n }\n });\n\n inputsInvisible = inputsInvisible.trim();\n inputsVisible = inputsVisible.trim();\n\n return {\n visible_fields: inputsVisible,\n visible_fields_count: inputsVisibleCount,\n invisible_fields: inputsInvisible,\n invisible_fields_count: inputsInvisibleCount,\n };\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_visible_fields_set_cookie( visibleFieldsCollection, formId ) {\n let collection = typeof visibleFieldsCollection === 'object' && visibleFieldsCollection !== null ?\n visibleFieldsCollection : {};\n\n if ( ctPublic.data__cookies_type === 'native' ) {\n // eslint-disable-next-line guard-for-in\n for ( let i in collection ) {\n if ( i > 10 ) {\n // Do not generate more than 10 cookies\n return;\n }\n let collectionIndex = formId !== undefined ? formId : i;\n ctSetCookie('apbct_visible_fields_' + collectionIndex, JSON.stringify( collection[i] ) );\n }\n } else {\n if (ctPublic.data__cookies_type === 'none') {\n ctSetCookie('apbct_visible_fields', JSON.stringify( collection[0] ) );\n } else {\n ctSetCookie('apbct_visible_fields', JSON.stringify( collection ) );\n }\n }\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc,no-unused-vars\nfunction apbct_js_keys__set_input_value(result, data, params, obj) {\n if ( document.querySelectorAll('[name^=ct_checkjs]').length > 0 ) {\n let elements = document.querySelectorAll('[name^=ct_checkjs]');\n for ( let i = 0; i < elements.length; i++ ) {\n elements[i].value = result.js_key;\n }\n }\n}\n\n/**\n * @return {string}\n */\nfunction apbctGetScreenInfo() {\n return JSON.stringify({\n fullWidth: document.documentElement.scrollWidth,\n fullHeight: Math.max(\n document.body.scrollHeight, document.documentElement.scrollHeight,\n document.body.offsetHeight, document.documentElement.offsetHeight,\n document.body.clientHeight, document.documentElement.clientHeight,\n ),\n visibleWidth: document.documentElement.clientWidth,\n visibleHeight: document.documentElement.clientHeight,\n });\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctParseBlockMessage(response) {\n if (typeof response.apbct !== 'undefined') {\n response = response.apbct;\n if (response.blocked) {\n document.dispatchEvent(\n new CustomEvent( 'apbctAjaxBockAlert', {\n bubbles: true,\n detail: {message: response.comment},\n } ),\n );\n\n // Show the result by modal\n cleantalkModal.loaded = response.comment;\n cleantalkModal.open();\n\n if (+response.stop_script === 1) {\n window.stop();\n }\n }\n }\n}\n\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctSetPixelUrlLocalstorage(ajaxPixelUrl) {\n // set pixel to the storage\n ctSetCookie('apbct_pixel_url', ajaxPixelUrl);\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctNoCookieConstructHiddenField(type) {\n let inputType = 'hidden';\n if (type === 'submit') {\n inputType = 'submit';\n }\n let field = '';\n let noCookieDataLocal = apbctLocalStorage.getCleanTalkData();\n let noCookieDataSession = apbctSessionStorage.getCleanTalkData();\n\n let noCookieDataTypo = {typo: []};\n if (document.ctTypoData && document.ctTypoData.data) {\n noCookieDataTypo = {typo: document.ctTypoData.data};\n }\n\n let noCookieData = {...noCookieDataLocal, ...noCookieDataSession, ...noCookieDataTypo};\n noCookieData = JSON.stringify(noCookieData);\n noCookieData = '_ct_no_cookie_data_' + btoa(noCookieData);\n field = document.createElement('input');\n field.setAttribute('name', 'ct_no_cookie_hidden_field');\n field.setAttribute('value', noCookieData);\n field.setAttribute('type', inputType);\n field.classList.add('apbct_special_field');\n field.classList.add('ct_no_cookie_hidden_field');\n return field;\n}\n\n/**\n * @return {boolean|*}\n */\nfunction ctGetPageForms() {\n let forms = document.forms;\n if (forms) {\n return forms;\n }\n return false;\n}\n\n/**\n * Get type of the field should be excluded. Return exclusion signs via object.\n * @param {object} form Form dom object.\n * @return {object} {'no_cookie': 1|0, 'visible_fields': 1|0}\n */\nfunction ctGetHiddenFieldExclusionsType(form) {\n // visible fields\n let result = {'no_cookie': 0, 'visible_fields': 0};\n if (\n +ctPublic.data__visible_fields_required === 0 ||\n (form.method.toString().toLowerCase() === 'get' &&\n form.querySelectorAll('.nf-form-content').length === 0 &&\n form.id !== 'twt_cc_signup') ||\n form.classList.contains('slp_search_form') || // StoreLocatorPlus form\n form.parentElement.classList.contains('mec-booking') ||\n form.action.toString().indexOf('activehosted.com') !== -1 || // Active Campaign\n (form.id && form.id === 'caspioform') || // Caspio Form\n (form.classList && form.classList.contains('tinkoffPayRow')) || // TinkoffPayForm\n (form.classList && form.classList.contains('give-form')) || // GiveWP\n (form.id && form.id === 'ult-forgot-password-form') || // ult forgot password\n (form.id && form.id.toString().indexOf('calculatedfields') !== -1) || // CalculatedFieldsForm\n (form.id && form.id.toString().indexOf('sac-form') !== -1) || // Simple Ajax Chat\n (form.id &&\n form.id.toString().indexOf('cp_tslotsbooking_pform') !== -1) || // WP Time Slots Booking Form\n (form.name &&\n form.name.toString().indexOf('cp_tslotsbooking_pform') !== -1) || // WP Time Slots Booking Form\n form.action.toString() === 'https://epayment.epymtservice.com/epay.jhtml' || // Custom form\n (form.name && form.name.toString().indexOf('tribe-bar-form') !== -1) || // The Events Calendar\n (form.id && form.id === 'ihf-login-form') || // Optima Express login\n (form.id &&\n form.id === 'subscriberForm' &&\n form.action.toString().indexOf('actionType=update') !== -1) || // Optima Express update\n (form.id && form.id === 'ihf-main-search-form') || // Optima Express search\n (form.id && form.id === 'frmCalc') || // nobletitle-calc\n form.action.toString().indexOf('property-organizer-delete-saved-search-submit') !== -1 ||\n form.querySelector('a[name=\"login\"]') !== null // digimember login form\n ) {\n result.visible_fields = 1;\n }\n\n // ajax search pro exclusion\n let ncFieldExclusionsSign = form.parentNode;\n if (\n ncFieldExclusionsSign && ncFieldExclusionsSign.classList.contains('proinput') ||\n (form.name === 'options' && form.classList.contains('asp-fss-flex'))\n ) {\n result.no_cookie = 1;\n }\n\n // woocommerce login form\n if (\n form && form.classList.contains('woocommerce-form-login')\n ) {\n result.visible_fields = 1;\n result.no_cookie = 1;\n }\n\n return result;\n}\n\n/**\n * Check if the form should be skipped from hidden field attach.\n * Return exclusion description if it is found, false otherwise.\n * @param {object} form Form dom object.\n * @param {string} hiddenFieldType Type of hidden field that needs to be checked.\n * Possible values: 'no_cookie'|'visible_fields'.\n * @return {boolean}\n */\nfunction ctCheckHiddenFieldsExclusions(form, hiddenFieldType) {\n // Ajax Search Lite\n if (Boolean(form.querySelector('fieldset.asl_sett_scroll'))) {\n return true;\n }\n if (typeof (hiddenFieldType) === 'string' &&\n ['visible_fields', 'no_cookie'].indexOf(hiddenFieldType) !== -1) {\n const exclusions = ctGetHiddenFieldExclusionsType(form);\n return exclusions[hiddenFieldType] === 1;\n }\n\n return false;\n}\n\n/**\n * ctNoCookieAttachHiddenFieldsToForms\n */\nfunction ctNoCookieAttachHiddenFieldsToForms() {\n if (ctPublic.data__cookies_type !== 'none') {\n return;\n }\n\n let forms = ctGetPageForms();\n\n if (forms) {\n for ( let i = 0; i < forms.length; i++ ) {\n // remove old sets\n let fields = forms[i].querySelectorAll('.ct_no_cookie_hidden_field');\n for ( let j = 0; j < fields.length; j++ ) {\n fields[j].outerHTML = '';\n }\n\n if ( ctCheckHiddenFieldsExclusions(document.forms[i], 'no_cookie') ) {\n continue;\n }\n\n // ignore forms with get method @todo We need to think about this\n if (document.forms[i].getAttribute('method') === null ||\n document.forms[i].getAttribute('method').toLowerCase() === 'post') {\n // add new set\n document.forms[i].append(ctNoCookieConstructHiddenField());\n } else if (typeof ctPublic !== 'undefined' &&\n ctPublic.settings__forms__search_test === '1' &&\n (\n document.forms[i].getAttribute('id') === 'searchform' ||\n (\n document.forms[i].getAttribute('class') !== null &&\n document.forms[i].getAttribute('class').indexOf('search-form') !== -1) ||\n (\n document.forms[i].getAttribute('role') !== null &&\n document.forms[i].getAttribute('role').indexOf('search') !== -1\n )\n )\n ) {\n document.forms[i].append(ctNoCookieConstructHiddenField('submit'));\n }\n }\n }\n}\n\nconst defaultFetch = window.fetch;\nconst defaultSend = XMLHttpRequest.prototype.send;\n\nif (document.readyState !== 'loading') {\n checkFormsExistForCatching();\n} else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', checkFormsExistForCatching);\n}\n\n/**\n * checkFormsExistForCatching\n */\nfunction checkFormsExistForCatching() {\n setTimeout(function() {\n if (isFormThatNeedCatch()) {\n window.fetch = function(...args) {\n if (args &&\n args[0] &&\n typeof args[0].includes === 'function' &&\n args[0].includes('/wp-json/metform/')\n ) {\n let noCookieData = getNoCookieData();\n\n if (args && args[1] && args[1].body) {\n args[1].body.append('ct_no_cookie_hidden_field', noCookieData);\n }\n }\n\n return defaultFetch.apply(window, args);\n };\n }\n }, 1000);\n}\n\n/**\n * @return {boolean}\n */\nfunction isFormThatNeedCatch() {\n const formClasses = [\n 'metform-form-content',\n ];\n let classExists = false;\n\n const forms = document.forms;\n for (let form of forms) {\n formClasses.forEach(function(classForm) {\n if (form.classList.contains(classForm)) {\n classExists = true;\n }\n });\n }\n\n return classExists;\n}\n\n/**\n * @param {HTMLElement} form\n * @return {boolean}\n */\nfunction isFormThatNeedCatchXhr(form) {\n if (document.querySelector('div.elementor-widget[title=\\'Login/Signup\\']') != null) {\n return false;\n }\n if (form && form.action && form.action.toString().indexOf('mailpoet_subscription_form') !== -1) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @return {string}\n */\nfunction getNoCookieData() {\n let noCookieDataLocal = apbctLocalStorage.getCleanTalkData();\n let noCookieDataSession = apbctSessionStorage.getCleanTalkData();\n let noCookieData = {...noCookieDataLocal, ...noCookieDataSession};\n noCookieData = JSON.stringify(noCookieData);\n\n return '_ct_no_cookie_data_' + btoa(noCookieData);\n}\n\n/**\n * Set three statements to the sessions storage: apbct_session_current_page, apbct_prev_referer.\n * @return {void}\n */\nfunction apbctWriteReferrersToSessionStorage() {\n const sessionCurrentPage = apbctSessionStorage.get('apbct_session_current_page');\n\n // set session apbct_referer\n if (sessionCurrentPage!== false && document.location.href !== sessionCurrentPage) {\n apbctSessionStorage.set('apbct_prev_referer', sessionCurrentPage, false);\n }\n\n // set session current page to know referrer\n apbctSessionStorage.set('apbct_session_current_page', document.location.href, false);\n}\n\n\n/* Cleantalk Modal object */\nlet cleantalkModal = {\n\n // Flags\n loaded: false,\n loading: false,\n opened: false,\n opening: false,\n\n // Methods\n load: function( action ) {\n if ( ! this.loaded ) {\n this.loading = true;\n let callback = function( result, data, params, obj ) {\n cleantalkModal.loading = false;\n cleantalkModal.loaded = result;\n document.dispatchEvent(\n new CustomEvent( 'cleantalkModalContentLoaded', {\n bubbles: true,\n } ),\n );\n };\n // eslint-disable-next-line camelcase\n if ( typeof apbct_admin_sendAJAX === 'function' ) {\n apbct_admin_sendAJAX( {'action': action}, {'callback': callback, 'notJson': true} );\n } else {\n apbct_public_sendAJAX( {'action': action}, {'callback': callback, 'notJson': true} );\n }\n }\n },\n\n open: function() {\n /* Cleantalk Modal CSS start */\n let renderCss = function() {\n let cssStr = '';\n // eslint-disable-next-line guard-for-in\n for ( const key in this.styles ) {\n cssStr += key + ':' + this.styles[key] + ';';\n }\n return cssStr;\n };\n let overlayCss = {\n styles: {\n 'z-index': '9999999999',\n 'position': 'fixed',\n 'top': '0',\n 'left': '0',\n 'width': '100%',\n 'height': '100%',\n 'background': 'rgba(0,0,0,0.5)',\n 'display': 'flex',\n 'justify-content': 'center',\n 'align-items': 'center',\n },\n toString: renderCss,\n };\n let innerCss = {\n styles: {\n 'position': 'relative',\n 'padding': '30px',\n 'background': '#FFF',\n 'border': '1px solid rgba(0,0,0,0.75)',\n 'border-radius': '4px',\n 'box-shadow': '7px 7px 5px 0px rgba(50,50,50,0.75)',\n },\n toString: renderCss,\n };\n let closeCss = {\n styles: {\n 'position': 'absolute',\n 'background': '#FFF',\n 'width': '20px',\n 'height': '20px',\n 'border': '2px solid rgba(0,0,0,0.75)',\n 'border-radius': '15px',\n 'cursor': 'pointer',\n 'top': '-8px',\n 'right': '-8px',\n 'box-sizing': 'content-box',\n },\n toString: renderCss,\n };\n let closeCssBefore = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(45deg)',\n },\n toString: renderCss,\n };\n let closeCssAfter = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(-45deg)',\n },\n toString: renderCss,\n };\n let bodyCss = {\n styles: {\n 'overflow': 'hidden',\n },\n toString: renderCss,\n };\n let cleantalkModalStyle = document.createElement( 'style' );\n cleantalkModalStyle.setAttribute( 'id', 'cleantalk-modal-styles' );\n cleantalkModalStyle.innerHTML = 'body.cleantalk-modal-opened{' + bodyCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-overlay{' + overlayCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close{' + closeCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:before{' + closeCssBefore + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:after{' + closeCssAfter + '}';\n document.body.append( cleantalkModalStyle );\n /* Cleantalk Modal CSS end */\n\n let overlay = document.createElement( 'div' );\n overlay.setAttribute( 'id', 'cleantalk-modal-overlay' );\n document.body.append( overlay );\n\n document.body.classList.add( 'cleantalk-modal-opened' );\n\n let inner = document.createElement( 'div' );\n inner.setAttribute( 'id', 'cleantalk-modal-inner' );\n inner.setAttribute( 'style', innerCss );\n overlay.append( inner );\n\n let close = document.createElement( 'div' );\n close.setAttribute( 'id', 'cleantalk-modal-close' );\n inner.append( close );\n\n let content = document.createElement( 'div' );\n if ( this.loaded ) {\n const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n const serviceContentRegex = /.*\\/inc/g;\n if (serviceContentRegex.test(this.loaded)) {\n content.innerHTML = this.loaded;\n } else {\n content.innerHTML = this.loaded.replace(urlRegex, '$1');\n }\n } else {\n content.innerHTML = 'Loading...';\n // @ToDo Here is hardcoded parameter. Have to get this from a 'data-' attribute.\n this.load( 'get_options_template' );\n }\n content.setAttribute( 'id', 'cleantalk-modal-content' );\n inner.append( content );\n\n this.opened = true;\n },\n\n close: function() {\n document.body.classList.remove( 'cleantalk-modal-opened' );\n document.getElementById( 'cleantalk-modal-overlay' ).remove();\n document.getElementById( 'cleantalk-modal-styles' ).remove();\n document.dispatchEvent(\n new CustomEvent( 'cleantalkModalClosed', {\n bubbles: true,\n } ),\n );\n },\n\n};\n\n/* Cleantalk Modal helpers */\ndocument.addEventListener('click', function( e ) {\n if ( e.target && (e.target.id === 'cleantalk-modal-overlay' || e.target.id === 'cleantalk-modal-close') ) {\n cleantalkModal.close();\n }\n});\ndocument.addEventListener('cleantalkModalContentLoaded', function( e ) {\n if ( cleantalkModal.opened && cleantalkModal.loaded ) {\n document.getElementById( 'cleantalk-modal-content' ).innerHTML = cleantalkModal.loaded;\n }\n});\n\n/**\n * Handle external forms\n */\nfunction ctProtectExternal() {\n for (let i = 0; i < document.forms.length; i++) {\n if (document.forms[i].cleantalk_hidden_action === undefined &&\n document.forms[i].cleantalk_hidden_method === undefined) {\n // current form\n const currentForm = document.forms[i];\n\n // skip excluded forms\n if ( formIsExclusion(currentForm)) {\n continue;\n }\n\n // Ajax checking for the integrated forms - will be changed the whole form object to make protection\n if ( isIntegratedForm(currentForm) ) {\n apbctProcessExternalForm(currentForm, i, document);\n\n // Ajax checking for the integrated forms - will be changed only submit button to make protection\n } else if (\n // MooForm 3rd party service\n currentForm.dataset.mailingListId !== undefined ||\n (typeof(currentForm.action) == 'string' && (currentForm.action.indexOf('webto.salesforce.com') !== -1))\n ) {\n apbctProcessExternalFormByFakeButton(currentForm, i, document);\n\n // Common flow - modify form's action\n } else if (\n typeof(currentForm.action) == 'string' &&\n ( currentForm.action.indexOf('http://') !== -1 ||\n currentForm.action.indexOf('https://') !== -1 )\n ) {\n let tmp = currentForm.action.split('//');\n tmp = tmp[1].split('/');\n const host = tmp[0].toLowerCase();\n\n if (host !== location.hostname.toLowerCase()) {\n const ctAction = document.createElement('input');\n ctAction.name = 'cleantalk_hidden_action';\n ctAction.value = currentForm.action;\n ctAction.type = 'hidden';\n currentForm.appendChild(ctAction);\n\n const ctMethod = document.createElement('input');\n ctMethod.name = 'cleantalk_hidden_method';\n ctMethod.value = currentForm.method;\n ctMethod.type = 'hidden';\n\n currentForm.method = 'POST';\n\n currentForm.appendChild(ctMethod);\n\n currentForm.action = document.location;\n }\n }\n }\n }\n // Trying to process external form into an iframe\n apbctProcessIframes();\n // if form is still not processed by fields listening, do it here\n ctStartFieldsListening();\n}\n\n/**\n * Exclusion forms\n * @param {HTMLElement} currentForm\n * @return {boolean}\n */\nfunction formIsExclusion(currentForm) {\n const exclusionsById = [\n 'give-form', // give form exclusion because of direct integration\n 'frmCalc', // nobletitle-calc\n 'ihf-contact-request-form',\n 'wpforms', // integration with wpforms\n ];\n\n const exclusionsByRole = [\n 'search', // search forms\n ];\n\n const exclusionsByClass = [\n 'search-form', // search forms\n 'hs-form', // integrated hubspot plugin through dynamicRenderedForms logic\n 'ihc-form-create-edit', // integrated Ultimate Membership Pro plugin through dynamicRenderedForms logic\n 'nf-form-content', // integration with Ninja Forms for js events\n 'elementor-form', // integration with elementor-form\n 'wpforms', // integration with wpforms\n ];\n\n let result = false;\n\n try {\n // mewto forms exclusion\n if (currentForm.parentElement &&\n currentForm.parentElement.classList.length > 0 &&\n currentForm.parentElement.classList[0].indexOf('mewtwo') !== -1) {\n result = true;\n }\n\n exclusionsById.forEach(function(exclusionId) {\n const formId = currentForm.getAttribute('id');\n if ( formId !== null && typeof (formId) !== 'undefined' && formId.indexOf(exclusionId) !== -1 ) {\n result = true;\n }\n });\n\n exclusionsByClass.forEach(function(exclusionClass) {\n let foundClass = '';\n if (currentForm.getAttribute('class')) {\n foundClass = currentForm.getAttribute('class');\n } else {\n foundClass = apbctGetFormClass(currentForm, exclusionClass);\n }\n const formClass = foundClass;\n if ( formClass !== null && typeof formClass !== 'undefined' && formClass.indexOf(exclusionClass) !== -1 ) {\n result = true;\n }\n });\n\n exclusionsByRole.forEach(function(exclusionRole) {\n const formRole = currentForm.getAttribute('id');\n if ( formRole !== null && typeof formRole !== 'undefined'&& formRole.indexOf(exclusionRole) !== -1 ) {\n result = true;\n }\n });\n } catch (e) {\n console.table('APBCT ERROR: formIsExclusion() - ', e);\n }\n\n return result;\n}\n\n/**\n * Gets the form class if it is not in
\n * @param {HTMLElement} currentForm\n * @param {string} exclusionClass\n * @return {string}\n */\nfunction apbctGetFormClass(currentForm, exclusionClass) {\n if (typeof(currentForm) == 'object' && currentForm.querySelector('.' + exclusionClass)) {\n return exclusionClass;\n }\n}\n\n/**\n * Handle external forms in iframes\n */\nfunction apbctProcessIframes() {\n const frames = document.getElementsByTagName('iframe');\n\n if ( frames.length > 0 ) {\n for ( let j = 0; j < frames.length; j++ ) {\n if ( frames[j].contentDocument == null ) {\n continue;\n }\n\n const iframeForms = frames[j].contentDocument.forms;\n if ( iframeForms.length === 0 ) {\n continue;\n }\n\n for ( let y = 0; y < iframeForms.length; y++ ) {\n const currentForm = iframeForms[y];\n if ( formIsExclusion(currentForm)) {\n continue;\n }\n apbctProcessExternalForm(currentForm, y, frames[j].contentDocument);\n }\n }\n }\n}\n\n/**\n * Process external forms\n * @param {HTMLElement} currentForm\n * @param {int} iterator\n * @param {HTMLElement} documentObject\n */\nfunction apbctProcessExternalForm(currentForm, iterator, documentObject) {\n const cleantalkPlaceholder = document.createElement('i');\n cleantalkPlaceholder.className = 'cleantalk_placeholder';\n cleantalkPlaceholder.style = 'display: none';\n\n currentForm.parentElement.insertBefore(cleantalkPlaceholder, currentForm);\n\n // Deleting form to prevent submit event\n const prev = currentForm.previousSibling;\n const formHtml = currentForm.outerHTML;\n const formOriginal = currentForm;\n\n // Remove the original form\n currentForm.parentElement.removeChild(currentForm);\n\n // Insert a clone\n const placeholder = document.createElement('div');\n placeholder.innerHTML = formHtml;\n prev.after(placeholder.firstElementChild);\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n\n const reUseCurrentForm = documentObject.forms[iterator];\n\n reUseCurrentForm.appendChild(forceAction);\n reUseCurrentForm.apbctPrev = prev;\n reUseCurrentForm.apbctFormOriginal = formOriginal;\n\n // mailerlite integration - disable click on submit button\n let mailerliteDetectedClass = false;\n if (reUseCurrentForm.classList !== undefined) {\n // list there all the mailerlite classes\n const mailerliteClasses = ['newsletterform', 'ml-block-form'];\n mailerliteClasses.forEach(function(mailerliteClass) {\n if (reUseCurrentForm.classList.contains(mailerliteClass)) {\n mailerliteDetectedClass = mailerliteClass;\n }\n });\n }\n if ( mailerliteDetectedClass ) {\n const mailerliteSubmitButton = documentObject.querySelector('form.' + mailerliteDetectedClass)\n .querySelector('button[type=\"submit\"]');\n if ( mailerliteSubmitButton !== undefined ) {\n mailerliteSubmitButton.addEventListener('click', function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(reUseCurrentForm);\n });\n }\n } else {\n documentObject.forms[iterator].onsubmit = function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(event.currentTarget);\n };\n }\n}\n\n/**\n * Process external forms via fake button replacing\n * @param {HTMLElement} currentForm\n * @param {int} iterator\n * @param {HTMLElement} documentObject\n */\nfunction apbctProcessExternalFormByFakeButton(currentForm, iterator, documentObject) {\n const submitButtonOriginal = currentForm.querySelector('[type=\"submit\"]');\n const onsubmitOriginal = currentForm.querySelector('[type=\"submit\"]').form.onsubmit;\n\n if ( ! submitButtonOriginal ) {\n return;\n }\n\n const parent = submitButtonOriginal.parentElement;\n const submitButtonHtml = submitButtonOriginal.outerHTML;\n\n // Remove the original submit button\n submitButtonOriginal.remove();\n\n // Insert a clone of the submit button\n const placeholder = document.createElement('div');\n placeholder.innerHTML = submitButtonHtml;\n parent.appendChild(placeholder.firstElementChild);\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n\n const reUseCurrentForm = documentObject.forms[iterator];\n\n reUseCurrentForm.appendChild(forceAction);\n reUseCurrentForm.apbctParent = parent;\n reUseCurrentForm.submitButtonOriginal = submitButtonOriginal;\n reUseCurrentForm.onsubmitOriginal = onsubmitOriginal;\n\n documentObject.forms[iterator].onsubmit = function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(event.currentTarget);\n };\n}\n\n/**\n * Process external forms\n * @param {HTMLElement} formSource\n * @param {HTMLElement} formTarget\n */\nfunction apbctReplaceInputsValuesFromOtherForm(formSource, formTarget) {\n const inputsSource = formSource.querySelectorAll('button, input, textarea, select');\n const inputsTarget = formTarget.querySelectorAll('button, input, textarea, select');\n\n inputsSource.forEach((elemSource) => {\n inputsTarget.forEach((elemTarget) => {\n if (elemSource.outerHTML === elemTarget.outerHTML) {\n if (elemTarget.type === 'checkbox' || elemTarget.type === 'radio') {\n elemTarget.checked = apbctVal(elemSource);\n } else {\n elemTarget.value = apbctVal(elemSource);\n }\n }\n });\n });\n}\n// clear protected iframes list\napbctLocalStorage.set('apbct_iframes_protected', []);\nwindow.onload = function() {\n if ( ! +ctPublic.settings__forms__check_external ) {\n return;\n }\n\n setTimeout(function() {\n ctProtectExternal();\n catchDynamicRenderedForm();\n catchNextendSocialLoginForm();\n ctProtectOutsideIframe();\n }, 2000);\n};\n\n/**\n * Protect forms placed in iframe with outside src\n */\nfunction ctProtectOutsideIframe() {\n let iframes = document.querySelectorAll('iframe');\n if (iframes.length > 0) {\n iframes.forEach(function(iframe) {\n if (iframe.src.indexOf('form.typeform.com') !== -1 ||\n iframe.src.indexOf('forms.zohopublic.com') !== -1 ||\n iframe.src.indexOf('link.surepathconnect.com') !== -1 ||\n iframe.classList.contains('hs-form-iframe') ||\n ( iframe.src.indexOf('facebook.com') !== -1 && iframe.src.indexOf('plugins/comments.php') !== -1)\n ) {\n // pass if is already protected\n if (false !== apbctLocalStorage.get('apbct_iframes_protected') &&\n apbctLocalStorage.get('apbct_iframes_protected').length > 0 &&\n typeof iframe.id !== 'undefined' &&\n apbctLocalStorage.get('apbct_iframes_protected').indexOf[iframe.id] !== -1\n ) {\n return;\n }\n ctProtectOutsideIframeHandler(iframe);\n }\n });\n }\n}\n\nlet ctProtectOutsideIframeCheck;\n/**\n * Protect forms placed in iframe with outside src handler\n * @param {HTMLElement} iframe\n */\nfunction ctProtectOutsideIframeHandler(iframe) {\n let cover = document.createElement('div');\n cover.style.width = '100%';\n cover.style.height = '100%';\n cover.style.background = 'black';\n cover.style.opacity = 0;\n cover.style.position = 'absolute';\n cover.style.top = 0;\n cover.onclick = function(e) {\n if (ctProtectOutsideIframeCheck === undefined) {\n let currentDiv = e.currentTarget;\n currentDiv.style.opacity = 0.5;\n let preloader = document.createElement('div');\n preloader.className = 'apbct-iframe-preloader';\n currentDiv.appendChild(preloader);\n let botDetectorToken = '';\n if (document.querySelector('[name*=\"ct_bot_detector_event_token\"]')) {\n botDetectorToken = document.querySelector('[name*=\"ct_bot_detector_event_token\"]').value;\n }\n\n let data = {\n 'action': 'cleantalk_outside_iframe_ajax_check',\n 'ct_no_cookie_hidden_field': getNoCookieData(),\n 'ct_bot_detector_event_token': botDetectorToken,\n };\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n ctProtectOutsideIframeCheck = true;\n if (result.apbct.blocked === false) {\n document.querySelectorAll('div.apbct-iframe-preloader').forEach(function(el) {\n el.parentNode.remove();\n });\n } else {\n document.querySelectorAll('div.apbct-iframe-preloader').forEach((el) => {\n el.parentNode.style.color = 'white';\n el.parentNode.innerHTML += result.apbct.comment;\n });\n document.querySelectorAll('div.apbct-iframe-preloader').forEach((el) => {\n el.remove();\n });\n }\n },\n },\n );\n }\n };\n iframe.parentNode.style.position = 'relative';\n iframe.parentNode.appendChild(cover);\n let iframes = apbctLocalStorage.get('apbct_iframes_protected');\n if (false === iframes) {\n iframes = [];\n }\n if (typeof iframe.id !== 'undefined') {\n iframes.push(iframe.id);\n apbctLocalStorage.set('apbct_iframes_protected', iframes);\n }\n}\n\n/**\n * Catch NSL form integration\n */\nfunction catchNextendSocialLoginForm() {\n let blockNSL = document.getElementById('nsl-custom-login-form-main');\n if (blockNSL) {\n blockBtnNextendSocialLogin(blockNSL);\n }\n}\n\n/**\n * Blocking NSL plugin buttons\n * @param {HTMLElement} blockNSL\n */\nfunction blockBtnNextendSocialLogin(blockNSL) {\n let parentBtnsNSL = blockNSL.querySelectorAll('.nsl-container-buttons a');\n let childBtnsNSL = blockNSL.querySelectorAll('a[data-plugin=\"nsl\"] .nsl-button');\n parentBtnsNSL.forEach((el) => {\n el.setAttribute('data-oauth-login-blocked', 'true');\n el.addEventListener('click', (event) => {\n event.preventDefault();\n });\n });\n childBtnsNSL.forEach((el) => {\n el.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n ctCheckAjax(el);\n });\n });\n}\n\n/**\n * Unlocking the button and clicking on it after an ajax response\n * @param {HTMLElement} childBtn\n */\nfunction allowAjaxNextendSocialLogin(childBtn) {\n childBtn.parentElement.setAttribute('data-oauth-login-blocked', 'false');\n childBtn.parentElement.click();\n}\n\n/**\n * Locking the button and entering a message after an ajax response\n * @param {HTMLElement} childBtn\n * @param {string} msg\n */\nfunction forbiddenAjaxNextendSocialLogin(childBtn, msg) {\n let parentElement = childBtn.parentElement;\n if (parentElement.getAttribute('data-oauth-login-blocked') == 'false') {\n parentElement.setAttribute('data-oauth-login-blocked', 'true');\n }\n if (!document.querySelector('.ct-forbidden-msg')) {\n let elemForMsg = document.createElement('div');\n elemForMsg.className = 'ct-forbidden-msg';\n elemForMsg.style.background = 'red';\n elemForMsg.style.color = 'white';\n elemForMsg.style.padding = '5px';\n elemForMsg.innerHTML = msg;\n parentElement.insertAdjacentElement('beforebegin', elemForMsg);\n }\n}\n\n/**\n * User verification using user data and ajax\n * @param {HTMLElement} elem\n */\nfunction ctCheckAjax(elem) {\n let data = {\n 'action': 'cleantalk_nsl_ajax_check',\n 'ct_no_cookie_hidden_field': document.getElementsByName('ct_no_cookie_hidden_field')[0].value,\n };\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n if (result.apbct.blocked === false) {\n allowAjaxNextendSocialLogin(elem);\n } else {\n forbiddenAjaxNextendSocialLogin(elem, result.apbct.comment);\n }\n },\n },\n );\n}\n\n/**\n * Checking the form integration\n * @param {HTMLElement} formObj\n * @return {boolean}\n */\nfunction isIntegratedForm(formObj) {\n const formAction = typeof(formObj.action) == 'string' ? formObj.action : '';\n const formId = formObj.getAttribute('id') !== null ? formObj.getAttribute('id') : '';\n\n if (\n formAction.indexOf('activehosted.com') !== -1 || // ActiveCampaign form\n formAction.indexOf('app.convertkit.com') !== -1 || // ConvertKit form\n ( formObj.firstChild.classList !== undefined &&\n formObj.firstChild.classList.contains('cb-form-group') ) || // Convertbox form\n formAction.indexOf('mailerlite.com') !== -1 || // Mailerlite integration\n formAction.indexOf('colcolmail.co.uk') !== -1 || // colcolmail.co.uk integration\n formAction.indexOf('paypal.com') !== -1 ||\n formAction.indexOf('infusionsoft.com') !== -1 ||\n formAction.indexOf('secure2.convio.net') !== -1 ||\n formAction.indexOf('hookb.in') !== -1 ||\n formAction.indexOf('external.url') !== -1 ||\n formAction.indexOf('tp.media') !== -1 ||\n formAction.indexOf('flodesk.com') !== -1 ||\n formAction.indexOf('sendfox.com') !== -1 ||\n formAction.indexOf('aweber.com') !== -1 ||\n formAction.indexOf('secure.payu.com') !== -1 ||\n formAction.indexOf('mautic') !== -1 || formId.indexOf('mauticform_') !== -1 ||\n formId.indexOf('ihf-contact-request-form') !== -1 ||\n formAction.indexOf('crm.zoho.com') !== -1 ||\n formId.indexOf('delivra-external-form') !== -1 ||\n formObj.hasAttribute('data-hs-cf-bound') // Hubspot integration in Elementor form\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Sending Ajax for checking form data\n * @param {HTMLElement} form\n * @param {HTMLElement} prev\n * @param {HTMLElement} formOriginal\n */\nfunction sendAjaxCheckingFormData(form) {\n // Get visible fields and set cookie\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(form);\n apbct_visible_fields_set_cookie( visibleFields );\n\n const data = {\n 'ct_bot_detector_event_token': apbctLocalStorage.get('bot_detector_event_token'),\n };\n let elems = form.elements;\n elems = Array.prototype.slice.call(elems);\n\n elems.forEach( function( elem, y ) {\n if ( elem.name === '' ) {\n data['input_' + y] = elem.value;\n } else {\n data[elem.name] = elem.value;\n }\n });\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function( result, data, params, obj ) {\n if ( result.apbct === undefined || ! +result.apbct.blocked ) {\n // MooSend integration\n if ( form.dataset.mailingListId !== undefined ) {\n let submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.remove();\n const parent = form.apbctParent;\n parent.appendChild(form.submitButtonOriginal);\n submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.click();\n return;\n }\n\n // Salesforce integration\n if (form.hasAttribute('action') &&\n (form.getAttribute('action').indexOf('webto.salesforce.com') !== -1)\n ) {\n let submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.remove();\n const parent = form.apbctParent;\n parent.appendChild(form.submitButtonOriginal);\n form.onsubmit = form.onsubmitOriginal;\n submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.click();\n return;\n }\n\n const formNew = form;\n form.parentElement.removeChild(form);\n const prev = form.apbctPrev;\n const formOriginal = form.apbctFormOriginal;\n let mauticIntegration = false;\n\n apbctReplaceInputsValuesFromOtherForm(formNew, formOriginal);\n\n // mautic forms integration\n if (formOriginal.id.indexOf('mautic') !== -1) {\n mauticIntegration = true;\n }\n\n prev.after( formOriginal );\n\n // Clear visible_fields input\n for (const el of formOriginal.querySelectorAll('input[name=\"apbct_visible_fields\"]')) {\n el.remove();\n }\n\n for (const el of formOriginal.querySelectorAll('input[value=\"cleantalk_force_ajax_check\"]')) {\n el.remove();\n }\n\n // Common click event\n let submButton = formOriginal.querySelectorAll('button[type=submit]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n if (mauticIntegration) {\n setTimeout(function() {\n ctProtectExternal();\n }, 1500);\n }\n return;\n }\n\n submButton = formOriginal.querySelectorAll('input[type=submit]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n return;\n }\n\n // ConvertKit direct integration\n submButton = formOriginal.querySelectorAll('button[data-element=\"submit\"]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n return;\n }\n\n // Paypal integration\n submButton = formOriginal.querySelectorAll('input[type=\"image\"][name=\"submit\"]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n }\n }\n if (result.apbct !== undefined && +result.apbct.blocked) {\n ctParseBlockMessage(result);\n }\n },\n });\n}\n\n/**\n * Handle dynamic rendered form\n */\nfunction catchDynamicRenderedForm() {\n const forms = document.getElementsByTagName('form');\n\n catchDynamicRenderedFormHandler(forms);\n\n const frames = document.getElementsByTagName('iframe');\n if ( frames.length > 0 ) {\n for ( let j = 0; j < frames.length; j++ ) {\n if ( frames[j].contentDocument == null ) {\n continue;\n }\n\n const iframeForms = frames[j].contentDocument.forms;\n\n if ( iframeForms.length === 0 ) {\n return;\n }\n\n catchDynamicRenderedFormHandler(iframeForms, frames[j].contentDocument);\n }\n }\n}\n\n/**\n * Process dynamic rendered form\n * @param {HTMLElements} forms\n * @param {HTMLElement} documentObject\n */\nfunction catchDynamicRenderedFormHandler(forms, documentObject = document) {\n const neededFormIds = [];\n for (const form of forms) {\n if (form.id.indexOf('hsForm') !== -1) {\n neededFormIds.push(form.id);\n }\n if (form.id.indexOf('createuser') !== -1 &&\n (form.classList !== undefined && form.classList.contains('ihc-form-create-edit'))\n ) {\n neededFormIds.push(form.id);\n }\n }\n\n for (const formId of neededFormIds) {\n const form = documentObject.getElementById(formId);\n form.apbct_external_onsubmit_prev = form.onsubmit;\n form.onsubmit = sendAjaxCheckingDynamicFormData;\n }\n}\n\n/**\n * Sending Ajax for checking form data on dynamic rendered form\n * @param {HTMLElement} form\n */\nfunction sendAjaxCheckingDynamicFormData(form) {\n form.preventDefault();\n form.stopImmediatePropagation();\n const formEvent = form;\n form = form.target;\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n form.appendChild(forceAction);\n\n // Get visible fields and set cookie\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(form);\n apbct_visible_fields_set_cookie(visibleFields);\n form.append(ctNoCookieConstructHiddenField('hidden'));\n\n const data = {};\n let elems = form.elements;\n elems = Array.prototype.slice.call(elems);\n\n elems.forEach( function( elem, y ) {\n if ( elem.name === '' ) {\n data['input_' + y] = elem.value;\n } else {\n data[elem.name] = elem.value;\n }\n });\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n if ( result.apbct === undefined || ! +result.apbct.blocked ) {\n form.onsubmit = null;\n\n // Clear service fields\n for (const el of form.querySelectorAll('input[name=\"apbct_visible_fields\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[value=\"cleantalk_force_ajax_check\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[name=\"ct_no_cookie_hidden_field\"]')) {\n el.remove();\n }\n\n // Call previous submit action\n if (form.apbct_external_onsubmit_prev instanceof Function) {\n let timerId = setTimeout(function() {\n form.apbct_external_onsubmit_prev.call(form, formEvent);\n }, 500);\n clearTimeout(timerId);\n }\n\n const submButton = form.querySelector('input[type=\"submit\"]');\n if (submButton) {\n submButton.click();\n return;\n }\n }\n\n if (result.apbct !== undefined && +result.apbct.blocked) {\n ctParseBlockMessage(result);\n }\n },\n });\n}\n\n/**\n * Implement jQuery val() function\n * @param {HTMLElement} el\n * @return {HTMLElements}\n */\nfunction apbctVal(el) {\n if (el.options && el.multiple) {\n return el.options\n .filter((option) => option.selected)\n .map((option) => option.value);\n } else if (el.type === 'checkbox' || el.type === 'radio') {\n return el.checked ? el.checked : null;\n } else {\n return el.value;\n }\n}\n\n/**\n * Check form as internal.\n * @param {int} currForm Current form.\n */\nfunction ctCheckInternal(currForm) {\n // Gathering data\n const ctData = {};\n const elems = currForm.elements;\n let key;\n\n for (key in elems) {\n if (elems[key].type !== 'submit' &&\n elems[key].value !== undefined &&\n elems[key].value !== '') {\n ctData[elems[key].name] = currForm.elements[key].value;\n }\n }\n ctData.action = 'ct_check_internal';\n\n // AJAX Request\n apbct_public_sendAJAX(\n ctData,\n {\n url: ctPublicFunctions._ajax_url,\n callback: function(data) {\n if (data.success === true) {\n currForm.origSubmit();\n } else {\n alert(data.data);\n return false;\n }\n },\n },\n );\n}\n\ndocument.addEventListener('DOMContentLoaded', function() {\n let ctCurrAction = '';\n let ctCurrForm = '';\n\n if ( ! +ctPublic.settings__forms__check_internal ) {\n return;\n }\n\n setTimeout(() => {\n for ( let i = 0; i < document.forms.length; i++ ) {\n if ( typeof(document.forms[i].action) == 'string' ) {\n ctCurrForm = document.forms[i];\n ctCurrAction = ctCurrForm.action;\n if (\n ctCurrAction.indexOf('https?://') !== null && // The protocol is obligatory\n ctCurrAction.match(ctPublic.blog_home + '.*?\\.php') !== null && // Main check\n ! ctCheckInternalIsExcludedForm(ctCurrAction) // Exclude WordPress native scripts from processing\n ) {\n const formClone = ctCurrForm.cloneNode(true);\n ctCurrForm.parentNode.replaceChild(formClone, ctCurrForm);\n\n formClone.origSubmit = ctCurrForm.submit;\n formClone.submit = null;\n\n formClone.addEventListener('submit', function(event) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n ctCheckInternal(event.target);\n return false;\n });\n }\n }\n }\n }, 500);\n});\n\n/**\n * Check by action to exclude the form checking\n * @param {string} action\n * @return {boolean}\n */\nfunction ctCheckInternalIsExcludedForm(action) {\n // An array contains forms action need to be excluded.\n const ctInternalScriptExclusions = [\n 'wp-login.php', // WordPress login page\n 'wp-comments-post.php', // WordPress Comments Form\n ];\n\n return ctInternalScriptExclusions.some((item) => {\n return action.match(new RegExp(ctPublic.blog_home + '.*' + item)) !== null;\n });\n}\n"],"names":["ApbctCore","ajax_parameters","restParameters","selector","elements","eventCallback","eventSelector","event","constructor","this","select","HTMLCollection","Array","prototype","slice","call","document","querySelectorAll","deselect","addElement","elemToAdd","push","elem","reduce","css","style","getRaw","styleName","Object","hasOwn","DomStyleName","replace","group","toUpperCase","let","i","length","computedStyle","getComputedStyle","Number","hide","prop","display","show","addClass","classList","add","className","removeClass","remove","toggleClass","toggle","ajax","ajaxParameters","ApbctAjax","rest","ApbctRest","on","args","addEventListener","onChecker","bind","target","querySelector","stopPropagation","ready","callback","change","attr","attrName","outputValue","getAttribute","propName","value","html","val","data","name","is","filter","isElem","elemToCheck","match","newlyCreatedElement","createElement","Boolean","HTMLElement","HTMLUnknownElement","indexOf","tagName","toLowerCase","isWithoutSelector","splice","parent","parentElement","parents","children","siblings","current","after","content","append","fadeIn","time","opacity","last","Date","tick","window","requestAnimationFrame","setTimeout","fadeOut","ctProcessError","msg","url","log","message","err","file","fileName","ln","lineNumber","lineNo","col","columnNumber","columnNo","stacktrace","stack","cause","JSON","stringify","errorObj","error","location","href","userAgent","navigator","errArray","localStorage","getItem","parse","setItem","ct_js_errors","apbct","params","Math","floor","random","onerror","exception","filterWords","ApbctXhr","xhr","XMLHttpRequest","method","async","user","password","button","spinner","progressbar","context","onErrorCallback","responseType","headers","timeout","methods_to_convert_data_to_URL","body","http_code","status_text","parameters","key","console","prepare","keys","deleteDoubleJSONEncoding","convertData","open","setHeaders","onreadystatechange","onReadyStateChange","onload","onLoad","onprogress","onProgress","onError","ontimeout","onTimeout","send","setAttribute","cursor","complete","status","statusText","removeAttribute","on_ready_state_change","on_progress","response","httpCode","additionalMsg","errorString","errorOutput","errorMsg","headerName","setRequestHeader","convertDataToURL","convertDataToBody","paramsAppendix","URLSearchParams","toString","paramsPrefix","dataKey","FormData","object","objectKey","parsedValue","super","default_route","ctPublicFunctions","_rest_url","route","X-WP-Nonce","_rest_nonce","ctSetCookie","cookies","expires","listOfCookieNamesToForceAlt","skipAlt","data__cookies_type","forcedAltCookiesSet","forEach","item","apbctLocalStorage","set","encodeURIComponent","ctSetAlternativeCookie","ctPublic","force_alt_cookies","forceAltCookies","ctNoCookieAttachHiddenFieldsToForms","_expires","ctSecure","protocol","cookie","cookiePrefix","ctDetectForcedAltCookiesForms","ninjaFormsSign","elementorUltimateAddonsRegister","smartFormsSign","jetpackCommentsForm","cwginstockForm","userRegistrationProForm","etPbDiviSubscriptionForm","fluentBookingApp","bookingPress","isArray","getJavascriptClientData","e","apbct_force_alt_cookies","data__ajax_type","apbct_pixel_url","decodeURIComponent","apbct_public_sendREST","apbct_public_sendAJAX","action","notJson","ctGetCookie","matches","RegExp","undefined","ctDeleteCookie","cookieName","obj","_params","callback_context","callback_params","silent","no_nonce","_ajax_url","_ajax_nonce","no_cache","apbctGenerateUniqueID","substr","get","property","storageValue","json","hasOwnProperty","isJson","objToSave","timestamp","getTime","isAlive","maxLifetime","isSet","delete","removeItem","getCleanTalkData","apbctSessionStorage","sessionStorage","apbctOnAnimationStart","animationName","apbctAutocomplete","apbctCancelAutocomplete","apbctOnInput","inputType","element","hasAttribute","CustomEvent","bubbles","cancelable","detail","dispatchEvent","CTTypoData","fieldData","isAutoFill","isUseBuffer","speedDelta","firstKeyTimestamp","lastKeyTimestamp","lastDelta","countOfKey","fields","gatheringFields","field","assign","setListeners","currentDelta","abs","ctDate","ctTimeMs","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","ctCheckedEmails","ctMouseReadInterval","ctMouseWriteDataInterval","apbct_attach_event_handler","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","ctFunctionFirstKey","ctKeyStopStopListening","ctFunctionMouseMove","cronFormsHandler","data__key_is_ok","setInterval","ctSetMouseMoved","round","clientY","clientX","ctMouseStopData","cronStartTimeout","restartFieldsListening","restartBotDetectorEventTokenAttach","token","doAttach","getElementsByClassName","setEventTokenField","clearInterval","checkEmail","currentEmail","email","result","now","ctSetPixelImg","pixelUrl","insertedImg","pixel__enabled","getElementById","ctSetPixelImgFromLocalstorage","ctGetPixelUrl","localStoragePixelUrl","String","ctSetHasScrolled","ctStartFieldsListening","forms","ctGetPageForms","handled_fields","handledFormFields","type","ctFunctionHasInputFocused","ctFunctionHasKeyUp","ctStopFieldsListening","eventName","functionName","ctSetHasInputFocused","ctSetHasKeyUp","ctPreloadLocalStorage","data__to_local_storage","entries","apbctPrepareBlockForAjaxForms","ctPrepareBlockMessage","responseText","ctParseBlockMessage","jQuery","ajaxComplete","settings","apbct_ready","sessionID","referrer","URL","host","apbctWriteReferrersToSessionStorage","cookiesType","initCookies","ctTypoData","getTimezoneOffset","apbctGetScreenInfo","webdriver","cookiesArray","split","trim","pixel__setting","pixel__url","data__email_check_before_post","ctAjaxSetupAddCleanTalkDataBeforeSendAjax","hiddenInput","visibleFieldsToInput","form","ctCheckHiddenFieldsExclusions","apbct_visible_fields","visibleFields","removeChild","apbct_collect_visible_fields","btoa","onsubmit_prev","onsubmit","ctFormIndex","apbct_visible_fields_set_cookie","isFormThatNeedCatchXhr","noCookieData","getNoCookieData","defaultSend","Function","ctOnsubmitPrevCallExclude","encodedEmailNodes","ctFillDecodedEmailHandler","_form","settings__forms__search_test","apbctSearchPrevOnsubmit","ctSearchFormOnSubmitHandler","apbctCatchXmlHttpRequest","originalSend","addidionalCleantalkData","eventToken","apply","ajaxSetup","beforeSend","sourceSign","contains","noCookieField","honeyPotField","botDetectorField","hpValue","hpEventId","parentNode","preventDefault","callBack","_noCookieField","HTMLFormElement","submit","parsedCookies","atob","apbct_search_form__honeypot_value","apbct_search_form__honeypot_id","warn","encodedEmailNodesIsMixed","popupText","encoderPopup","innerHTML","wl_brandname","waitingPopup","color","innerText","apbctAjaxEmailDecodeBulk","clickSource","event_javascript_data","post_url","encodedEmails","encodedEmailsCollection","apbctTooltip","dataset","originalString","emailEncoderPassKey","apbctEmailEncoderCallbackBulk","res","resetEncodedNodes","ctShowDecodeComment","success","is_allowed","currentResultData","row","encoded_email","encodedEmail","baseElementContent","decoded_email","ctProcessDecodedDataResult","popup","click","comment","commonCookies","resultDataJson","apbct_headless","ct_checked_emails","ct_checkjs","ct_fkp_timestamp","ct_pointer_data","ct_ps_timestamp","ct_screen_info","ct_timezone","ctMouseMovedLocalStorage","ctHasScrolledLocalStorage","ctCookiesTypeLocalStorage","apbctPageHits","apbctPrevReferer","apbctSiteReferer","ctJsErrorsLocalStorage","ctPixelUrl","ctMouseMovedCookie","ctHasScrolledCookie","ctCookiesTypeCookie","ctCookiesPixelUrl","ct_mouse_moved","ct_has_scrolled","ct_cookies_type","apbct_page_hits","apbct_prev_referer","apbct_site_referer","apbct_ct_js_errors","removeDoubleJsonEncoding","targetElement","ctFillDecodedEmail","inputs","inputsVisible","inputsVisibleCount","inputsInvisible","inputsInvisibleCount","inputsWithDuplicateNames","isNaN","visibility","visible_fields","visible_fields_count","invisible_fields","invisible_fields_count","visibleFieldsCollection","formId","collection","apbct_js_keys__set_input_value","js_key","fullWidth","documentElement","scrollWidth","fullHeight","max","scrollHeight","offsetHeight","clientHeight","visibleWidth","clientWidth","visibleHeight","blocked","cleantalkModal","loaded","stop_script","stop","ctSetPixelUrlLocalstorage","ajaxPixelUrl","ctNoCookieConstructHiddenField","noCookieDataLocal","noCookieDataSession","noCookieDataTypo","typo","ctGetHiddenFieldExclusionsType","no_cookie","ncFieldExclusionsSign","data__visible_fields_required","id","hiddenFieldType","j","outerHTML","readyState","ct_checkjs_key","defaultFetch","fetch","checkFormsExistForCatching","isFormThatNeedCatch","includes","formClasses","classExists","classForm","sessionCurrentPage","loading","opened","opening","load","apbct_admin_sendAJAX","renderCss","cssStr","styles","overlayCss","z-index","position","top","left","width","height","background","justify-content","align-items","innerCss","padding","border","border-radius","box-shadow","closeCss","right","box-sizing","closeCssBefore","transform","closeCssAfter","bodyCss","overflow","cleantalkModalStyle","overlay","inner","close","urlRegex","test","ctProtectExternal","cleantalk_hidden_action","cleantalk_hidden_method","ctMethod","currentForm","formIsExclusion","isIntegratedForm","apbctProcessExternalForm","mailingListId","apbctProcessExternalFormByFakeButton","tmp","hostname","ctAction","appendChild","apbctProcessIframes","exclusionId","exclusionClass","foundClass","formClass","apbctGetFormClass","exclusionRole","formRole","table","frames","getElementsByTagName","contentDocument","iframeForms","y","iterator","documentObject","cleantalkPlaceholder","prev","insertBefore","previousSibling","formHtml","formOriginal","placeholder","forceAction","firstElementChild","reUseCurrentForm","apbctPrev","apbctFormOriginal","mailerliteDetectedClass","mailerliteClass","mailerliteSubmitButton","sendAjaxCheckingFormData","currentTarget","submitButtonOriginal","onsubmitOriginal","submitButtonHtml","apbctParent","apbctReplaceInputsValuesFromOtherForm","formSource","formTarget","inputsSource","inputsTarget","elemSource","elemTarget","checked","apbctVal","ctProtectOutsideIframe","iframes","iframe","src","ctProtectOutsideIframeHandler","settings__forms__check_external","catchDynamicRenderedForm","catchNextendSocialLoginForm","ctProtectOutsideIframeCheck","cover","onclick","currentDiv","preloader","botDetectorToken","ct_no_cookie_hidden_field","ct_bot_detector_event_token","el","blockNSL","blockBtnNextendSocialLogin","parentBtnsNSL","childBtnsNSL","ctCheckAjax","allowAjaxNextendSocialLogin","childBtn","forbiddenAjaxNextendSocialLogin","elemForMsg","insertAdjacentElement","getElementsByName","formObj","formAction","firstChild","elems","submitButton","formNew","mauticIntegration","submButton","catchDynamicRenderedFormHandler","neededFormIds","apbct_external_onsubmit_prev","sendAjaxCheckingDynamicFormData","stopImmediatePropagation","formEvent","timerId","clearTimeout","options","multiple","option","selected","map","ctCheckInternal","currForm","ctData","alert","origSubmit","ctCheckInternalIsExcludedForm","some","blog_home","ctCurrAction","ctCurrForm","settings__forms__check_internal","formClone","cloneNode","replaceChild"],"mappings":"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"} ======= {"version":3,"file":"apbct-public-bundle.min.js","sources":["apbct-public-bundle.js"],"sourcesContent":["/**\n * Base class\n */\nclass ApbctCore {\n ajax_parameters = {};\n restParameters = {};\n\n selector = null;\n elements = [];\n\n // Event properties\n eventCallback;\n eventSelector;\n event;\n\n /**\n * Default constructor\n * @param {string} selector\n */\n constructor(selector) {\n this.select(selector);\n }\n\n /**\n * Get elements by CSS selector\n *\n * @param {string} selector\n * @return {*}\n */\n select(selector) {\n if (selector instanceof HTMLCollection) {\n this.selector = null;\n this.elements = [];\n this.elements = Array.prototype.slice.call(selector);\n } else if ( typeof selector === 'object' ) {\n this.selector = null;\n this.elements = [];\n this.elements[0] = selector;\n } else if ( typeof selector === 'string' ) {\n this.selector = selector;\n this.elements = Array.prototype.slice.call(document.querySelectorAll(selector));\n // this.elements = document.querySelectorAll(selector)[0];\n } else {\n this.deselect();\n }\n\n return this;\n }\n\n /**\n * @param {object|string} elemToAdd\n */\n addElement(elemToAdd) {\n if ( typeof elemToAdd === 'object' ) {\n this.elements.push(elemToAdd);\n } else if ( typeof elemToAdd === 'string' ) {\n this.selector = elemToAdd;\n this.elements = Array.prototype.slice.call(document.querySelectorAll(elemToAdd));\n } else {\n this.deselect();\n }\n }\n\n /**\n * @param {object} elem\n */\n push(elem) {\n this.elements.push(elem);\n }\n\n /**\n * reduce\n */\n reduce() {\n this.elements = this.elements.slice(0, -1);\n }\n\n /**\n * deselect\n */\n deselect() {\n this.elements = [];\n }\n\n /**\n * Set or get CSS for/of currently selected element\n *\n * @param {object|string} style\n * @param {boolean} getRaw\n *\n * @return {boolean|*}\n */\n css(style, getRaw) {\n getRaw = getRaw || false;\n\n // Set style\n if (typeof style === 'object') {\n const stringToCamelCase = (str) =>\n str.replace(/([-_][a-z])/g, (group) =>\n group\n .toUpperCase()\n .replace('-', '')\n .replace('_', ''),\n );\n\n // Apply multiple styles\n for (const styleName in style) {\n if (Object.hasOwn(style, styleName)) {\n const DomStyleName = stringToCamelCase(styleName);\n\n // Apply to multiple elements (currently selected)\n for (let i=0; i= 0; i-- ) {\n if ( ! this.isElem(this.elements[i], filter) ) {\n this.elements.splice(Number(i), 1);\n }\n }\n\n return this;\n }\n\n /**\n * NODES\n */\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n parent(filter) {\n this.select(this.elements[0].parentElement);\n\n if ( typeof filter !== 'undefined' && ! this.is(filter) ) {\n this.deselect();\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n parents(filter) {\n this.select(this.elements[0]);\n\n for ( ; this.elements[this.elements.length - 1].parentElement !== null; ) {\n this.push(this.elements[this.elements.length - 1].parentElement);\n }\n\n this.elements.splice(0, 1); // Deleting initial element from the set\n\n if ( typeof filter !== 'undefined' ) {\n this.filter(filter);\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n children(filter) {\n this.select(this.elements[0].children);\n\n if ( typeof filter !== 'undefined' ) {\n this.filter(filter);\n }\n\n return this;\n }\n\n /**\n * @param {mixed} filter\n * @return {ApbctCore}\n */\n siblings(filter) {\n let current = this.elements[0]; // Remember current to delete it later\n\n this.parent();\n this.children(filter);\n this.elements.splice(this.elements.indexOf(current), 1); // Remove current element\n\n return this;\n }\n\n /** ************ DOM MANIPULATIONS **************/\n remove() {\n for (let elem of this.elements) {\n elem.remove();\n }\n }\n\n /**\n * @param {string} content\n */\n after(content) {\n for (let elem of this.elements) {\n elem.after(content);\n }\n }\n\n /**\n * @param {string} content\n */\n append(content) {\n for (let elem of this.elements) {\n elem.append(content);\n }\n }\n\n /** ************ ANIMATION **************/\n /**\n * @param {number} time\n */\n fadeIn(time) {\n for (let elem of this.elements) {\n elem.style.opacity = 0;\n elem.style.display = 'block';\n\n let last = +new Date();\n const tick = function() {\n elem.style.opacity = +elem.style.opacity + (new Date() - last) / time;\n last = +new Date();\n\n if (+elem.style.opacity < 1) {\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n }\n };\n\n tick();\n }\n }\n\n /**\n * @param {number} time\n */\n fadeOut(time) {\n for (let elem of this.elements) {\n elem.style.opacity = 1;\n\n let last = +new Date();\n const tick = function() {\n elem.style.opacity = +elem.style.opacity - (new Date() - last) / time;\n last = +new Date();\n\n if (+elem.style.opacity > 0) {\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n } else {\n elem.style.display = 'none';\n }\n };\n\n tick();\n }\n }\n}\n\n/**\n * Hack\n *\n * Make a proxy to keep both properties and methods from:\n * - the native object and\n * - the new one from ApbctCore for selected element.\n *\n * For example:\n * apbct('#id).innerHTML = 'some';\n * apbct('#id).css({'backgorund-color': 'black'});\n */\n// apbct = new Proxy(\n// apbct,\n// {\n// get(target, prop) {\n// if (target.elements.length) {\n// return target.elements[0][prop];\n// } else {\n// return null;\n// }\n// },\n// set(target, prop, value){\n// if (target.elements.length) {\n// target.elements[0][prop] = value;\n// return true;\n// } else {\n// return false;\n// }\n// },\n// apply(target, thisArg, argArray) {\n//\n// }\n// }\n// );\n\n/**\n * @param {mixed} msg\n * @param {string} url\n */\nfunction ctProcessError(msg, url) {\n let log = {};\n if (msg && msg.message) {\n log.err = {\n 'msg': msg.message,\n 'file': !!msg.fileName ? msg.fileName : false,\n 'ln': !!msg.lineNumber ? msg.lineNumber : !!lineNo ? lineNo : false,\n 'col': !!msg.columnNumber ? msg.columnNumber : !!columnNo ? columnNo : false,\n 'stacktrace': !!msg.stack ? msg.stack : false,\n 'cause': !!url ? JSON.stringify(url) : false,\n 'errorObj': !!error ? error : false,\n };\n } else {\n log.err = {\n 'msg': msg,\n };\n\n if (!!url) {\n log.err.file = url;\n }\n }\n\n log.url = window.location.href;\n log.userAgent = window.navigator.userAgent;\n\n let ctJsErrors = 'ct_js_errors';\n let errArray = localStorage.getItem(ctJsErrors);\n if (errArray === null) errArray = '[]';\n errArray = JSON.parse(errArray);\n for (let i = 0; i < errArray.length; i++) {\n if (errArray[i].err.msg === log.err.msg) {\n return;\n }\n }\n\n errArray.push(log);\n localStorage.setItem(ct_js_errors, JSON.stringify(errArray));\n}\n\nif (Math.floor(Math.random() * 100) === 1) {\n window.onerror = function(exception, url) {\n let filterWords = ['apbct', 'ctPublic'];\n let length = filterWords.length;\n while (length--) {\n if (exception.indexOf(filterWords[length]) !== -1) {\n ctProcessError(exception, url);\n }\n }\n\n return false;\n };\n}\n\n/**\n * Enter point to ApbctCore class\n *\n * @param {array|object} params\n * @return {*}\n */\n// eslint-disable-next-line no-unused-vars, require-jsdoc\nfunction apbct(params) {\n return new ApbctCore()\n .select(params);\n}\n\n/**\n * ApbctXhr\n */\nclass ApbctXhr {\n xhr = new XMLHttpRequest();\n\n // Base parameters\n method = 'POST'; // HTTP-request type\n url = ''; // URL to send the request\n async = true;\n user = null; // HTTP-authorization username\n password = null; // HTTP-authorization password\n data = {}; // Data to send\n\n // Optional params\n button = null; // Button that should be disabled when request is performing\n spinner = null; // Spinner that should appear when request is in process\n progressbar = null; // Progress bar for the current request\n context = this; // Context\n callback = null;\n onErrorCallback = null;\n\n responseType = 'json'; // Expected data type from server\n headers = {};\n timeout = 15000; // Request timeout in milliseconds\n\n methods_to_convert_data_to_URL = [\n 'GET',\n 'HEAD',\n ];\n\n body = null;\n http_code = 0;\n status_text = '';\n\n // eslint-disable-next-line require-jsdoc\n constructor(parameters) {\n console.log('%cXHR%c started', 'color: red; font-weight: bold;', 'color: grey; font-weight: normal;');\n\n // Set class properties\n for ( let key in parameters ) {\n if ( typeof this[key] !== 'undefined' ) {\n this[key] = parameters[key];\n }\n }\n\n // Modifying DOM-elements\n this.prepare();\n\n // Modify URL with data for GET and HEAD requests\n if ( Object.keys(this.data).length ) {\n this.deleteDoubleJSONEncoding(this.data);\n this.convertData();\n }\n\n if ( ! this.url ) {\n console.log('%cXHR%c not URL provided',\n 'color: red; font-weight: bold;', 'color: grey; font-weight: normal;');\n return false;\n }\n\n // Configure the request\n this.xhr.open(this.method, this.url, this.async, this.user, this.password);\n this.setHeaders();\n\n this.xhr.responseType = this.responseType;\n this.xhr.timeout = this.timeout;\n\n /* EVENTS */\n // Monitoring status\n this.xhr.onreadystatechange = function() {\n this.onReadyStateChange();\n }.bind(this);\n\n // Run callback\n this.xhr.onload = function() {\n this.onLoad();\n }.bind(this);\n\n // On progress\n this.xhr.onprogress = function(event) {\n this.onProgress(event);\n }.bind(this);\n\n // On error\n this.xhr.onerror = function() {\n this.onError();\n }.bind(this);\n\n this.xhr.ontimeout = function() {\n this.onTimeout();\n }.bind(this);\n\n // Send the request\n this.xhr.send(this.body);\n }\n\n /**\n * prepare\n */\n prepare() {\n // Disable button\n if (this.button) {\n this.button.setAttribute('disabled', 'disabled');\n this.button.style.cursor = 'not-allowed';\n }\n\n // Enable spinner\n if (this.spinner) {\n this.spinner.style.display = 'inline';\n }\n }\n\n /**\n * complete\n */\n complete() {\n this.http_code = this.xhr.status;\n this.status_text = this.xhr.statusText;\n\n // Disable button\n if (this.button) {\n this.button.removeAttribute('disabled');\n this.button.style.cursor = 'auto';\n }\n\n // Enable spinner\n if (this.spinner) {\n this.spinner.style.display = 'none';\n }\n\n if ( this.progressbar ) {\n this.progressbar.fadeOut('slow');\n }\n }\n\n /**\n * onReadyStateChange\n */\n onReadyStateChange() {\n if (this.on_ready_state_change !== null && typeof this.on_ready_state_change === 'function') {\n this.on_ready_state_change();\n }\n }\n\n /**\n * @param {object} event\n */\n onProgress(event) {\n if (this.on_progress !== null && typeof this.on_progress === 'function') {\n this.on_progress();\n }\n }\n\n /**\n * onError\n */\n onError() {\n console.log('error');\n\n this.complete();\n this.error(\n this.http_code,\n this.status_text,\n );\n\n if (this.onErrorCallback !== null && typeof this.onErrorCallback === 'function') {\n this.onErrorCallback(this.status_text);\n }\n }\n\n /**\n * onTimeout\n */\n onTimeout() {\n this.complete();\n this.error(\n 0,\n 'timeout',\n );\n\n if (this.onErrorCallback !== null && typeof this.onErrorCallback === 'function') {\n this.onErrorCallback('Timeout');\n }\n }\n\n /**\n * @return {boolean}\n */\n onLoad() {\n this.complete();\n\n if (this.responseType === 'json' ) {\n if (this.xhr.response === null) {\n this.error(this.http_code, this.status_text, 'No response');\n return false;\n } else if ( typeof this.xhr.response.error !== 'undefined') {\n this.error(this.http_code, this.status_text, this.xhr.response.error);\n return false;\n }\n }\n\n if (this.callback !== null && typeof this.callback === 'function') {\n this.callback.call(this.context, this.xhr.response, this.data);\n }\n }\n\n /**\n * @param {number} httpCode\n * @param {string} statusText\n * @param {string} additionalMsg\n */\n error(httpCode, statusText, additionalMsg) {\n let errorString = '';\n\n if ( statusText === 'timeout' ) {\n errorString += 'Server response timeout';\n } else if ( httpCode === 200 ) {\n if ( statusText === 'parsererror' ) {\n errorString += 'Unexpected response from server. See console for details.';\n } else {\n errorString += 'Unexpected error. Status: ' + statusText + '.';\n if ( typeof additionalMsg !== 'undefined' ) {\n errorString += ' Additional error info: ' + additionalMsg;\n }\n }\n } else if (httpCode === 500) {\n errorString += 'Internal server error.';\n } else {\n errorString += 'Unexpected response code:' + httpCode;\n }\n\n this.errorOutput( errorString );\n }\n\n /**\n * @param {string} errorMsg\n */\n errorOutput(errorMsg) {\n console.log( '%c ctXHR error: %c' + errorMsg, 'color: red;', 'color: grey;' );\n }\n\n /**\n * setHeaders\n */\n setHeaders() {\n // Set headers if passed\n for ( let headerName in this.headers ) {\n if ( typeof this.headers[headerName] !== 'undefined' ) {\n this.xhr.setRequestHeader(headerName, this.headers[headerName]);\n }\n }\n }\n\n /**\n * @return {string|*}\n */\n convertData() {\n // GET, HEAD request-type\n if ( ~this.methods_to_convert_data_to_URL.indexOf( this.method ) ) {\n return this.convertDataToURL();\n\n // POST request-type\n } else {\n return this.convertDataToBody();\n }\n }\n\n /**\n * @return {string}\n */\n convertDataToURL() {\n let paramsAppendix = new URLSearchParams(this.data).toString();\n let paramsPrefix = this.url.match(/^(https?:\\/{2})?[a-z0-9.]+\\?/) ? '&' : '?';\n this.url += paramsPrefix + paramsAppendix;\n\n return this.url;\n }\n\n /**\n * @return {null}\n */\n convertDataToBody() {\n this.body = new FormData();\n for (let dataKey in this.data) {\n if (Object.hasOwn(this.data, dataKey)) {\n this.body.append(\n dataKey,\n typeof this.data[dataKey] === 'object' ?\n JSON.stringify(this.data[dataKey]) :\n this.data[dataKey],\n );\n }\n }\n\n return this.body;\n }\n\n /**\n * Recursive\n *\n * Recursively decode JSON-encoded properties\n *\n * @param {object} object\n * @return {*}\n */\n deleteDoubleJSONEncoding(object) {\n if ( typeof object === 'object') {\n for (let objectKey in object) {\n if (Object.hasOwn(object, objectKey)) {\n // Recursion\n if ( typeof object[objectKey] === 'object') {\n object[objectKey] = this.deleteDoubleJSONEncoding(object[objectKey]);\n }\n\n // Common case (out)\n if (\n typeof object[objectKey] === 'string' &&\n object[objectKey].match(/^[\\[{].*?[\\]}]$/) !== null // is like JSON\n ) {\n let parsedValue = JSON.parse(object[objectKey]);\n if ( typeof parsedValue === 'object' ) {\n object[objectKey] = parsedValue;\n }\n }\n }\n }\n }\n\n return object;\n }\n}\n// eslint-disable-next-line require-jsdoc\nclass ApbctAjax extends ApbctXhr {\n // eslint-disable-next-line require-jsdoc\n constructor(...args) {\n super(args[0]);\n }\n}\n// eslint-disable-next-line require-jsdoc\nclass ApbctRest extends ApbctXhr {\n static default_route = ctPublicFunctions._rest_url + 'cleantalk-antispam/v1/';\n route = '';\n\n // eslint-disable-next-line require-jsdoc\n constructor(...args) {\n args = args[0];\n args.url = ApbctRest.default_route + args.route;\n args.headers = {\n 'X-WP-Nonce': ctPublicFunctions._rest_nonce,\n };\n super(args);\n }\n}\n\n/**\n * @param {object|array|string} cookies\n * @param {object|array|string} value\n * @param {string|number} expires\n */\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctSetCookie( cookies, value, expires ) {\n let listOfCookieNamesToForceAlt = [\n 'ct_sfw_pass_key',\n 'ct_sfw_passed',\n 'wordpress_apbct_antibot',\n 'apbct_anticrawler_passed',\n 'apbct_antiflood_passed',\n 'apbct_email_encoder_passed',\n ];\n\n let skipAlt = false;\n\n if ( typeof cookies === 'string') {\n skipAlt = cookies === 'ct_pointer_data';\n if ( typeof value === 'string' || typeof value === 'number' ) {\n cookies = [[cookies, value, expires]];\n }\n }\n\n // Cookies disabled\n if ( ctPublicFunctions.data__cookies_type === 'none' ) {\n let forcedAltCookiesSet = [];\n cookies.forEach( function(item) {\n if (listOfCookieNamesToForceAlt.indexOf(item[0]) !== -1) {\n forcedAltCookiesSet.push(item);\n } else {\n apbctLocalStorage.set(item[0], encodeURIComponent(item[1]));\n }\n });\n // if cookies from list found use alt cookies for this selection set\n if ( forcedAltCookiesSet.length > 0 ) {\n ctSetAlternativeCookie(forcedAltCookiesSet);\n }\n\n // If problem integration forms detected use alt cookies for whole cookies set\n if ( ctPublic.force_alt_cookies && !skipAlt) {\n // do it just once\n ctSetAlternativeCookie(cookies, {forceAltCookies: true});\n } else {\n ctNoCookieAttachHiddenFieldsToForms();\n }\n\n // Using traditional cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'native' ) {\n // If problem integration forms detected use alt cookies for whole cookies set\n if ( ctPublic.force_alt_cookies && !skipAlt) {\n // do it just once\n ctSetAlternativeCookie(cookies, {forceAltCookies: true});\n }\n cookies.forEach( function(item) {\n const _expires = typeof item[2] !== 'undefined' ? 'expires=' + expires + '; ' : '';\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = ctPublicFunctions.cookiePrefix +\n item[0] +\n '=' +\n encodeURIComponent(item[1]) +\n '; ' +\n _expires +\n 'path=/; samesite=lax' +\n ctSecure;\n });\n\n // Using alternative cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'alternative' && !skipAlt ) {\n ctSetAlternativeCookie(cookies);\n }\n}\n\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctDetectForcedAltCookiesForms() {\n let ninjaFormsSign = document.querySelectorAll('#tmpl-nf-layout').length > 0;\n let elementorUltimateAddonsRegister = document.querySelectorAll('.uael-registration-form-wrapper').length > 0;\n let smartFormsSign = document.querySelectorAll('script[id*=\"smart-forms\"]').length > 0;\n let jetpackCommentsForm = document.querySelectorAll('iframe[name=\"jetpack_remote_comment\"]').length > 0;\n let cwginstockForm = document.querySelectorAll('.cwginstock-subscribe-form').length > 0;\n let userRegistrationProForm = document.querySelectorAll('div[id^=\"user-registration-form\"]').length > 0;\n let etPbDiviSubscriptionForm = document.querySelectorAll('div[class^=\"et_pb_newsletter_form\"]').length > 0;\n let fluentBookingApp = document.querySelectorAll('div[class^=\"fluent_booking_app\"]').length > 0;\n ctPublic.force_alt_cookies = smartFormsSign ||\n ninjaFormsSign ||\n jetpackCommentsForm ||\n elementorUltimateAddonsRegister ||\n cwginstockForm ||\n userRegistrationProForm ||\n etPbDiviSubscriptionForm ||\n fluentBookingApp;\n\n setTimeout(function() {\n if (!ctPublic.force_alt_cookies) {\n let bookingPress = document.querySelectorAll('main[id^=\"bookingpress_booking_form\"]').length > 0;\n ctPublic.force_alt_cookies = bookingPress;\n }\n }, 1000);\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctSetAlternativeCookie(cookies, params) {\n if (typeof (getJavascriptClientData) === 'function' ) {\n // reprocess already gained cookies data\n if (Array.isArray(cookies)) {\n cookies = getJavascriptClientData(cookies);\n }\n } else {\n console.log('APBCT ERROR: getJavascriptClientData() is not loaded');\n }\n\n try {\n cookies = JSON.parse(cookies);\n } catch (e) {\n console.log('APBCT ERROR: JSON parse error:' + e);\n return;\n }\n\n const callback = params && params.callback || null;\n const onErrorCallback = params && params.onErrorCallback || null;\n\n if ( params && params.forceAltCookies ) {\n cookies.apbct_force_alt_cookies = true;\n }\n\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n // fix for url encoded cookie apbct_pixel_url on REST route\n if (typeof cookies.apbct_pixel_url === 'string' &&\n cookies.apbct_pixel_url.indexOf('%3A') !== -1\n ) {\n cookies.apbct_pixel_url = decodeURIComponent(cookies.apbct_pixel_url);\n }\n apbct_public_sendREST(\n 'alt_sessions',\n {\n method: 'POST',\n data: {cookies: cookies},\n callback: callback,\n onErrorCallback: onErrorCallback,\n },\n );\n\n // Using AJAX request and handler\n } else if ( ctPublicFunctions.data__ajax_type === 'admin_ajax' ) {\n apbct_public_sendAJAX(\n {\n action: 'apbct_alt_session__save__AJAX',\n cookies: cookies,\n },\n {\n notJson: 1,\n callback: callback,\n onErrorCallback: onErrorCallback,\n },\n );\n }\n}\n\n/**\n * Get cookie by name\n * @param name\n * @return {string|undefined}\n */\n// eslint-disable-next-line require-jsdoc,no-unused-vars\nfunction ctGetCookie(name) {\n let matches = document.cookie.match(new RegExp(\n '(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)',\n ));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n}\n\n// eslint-disable-next-line require-jsdoc,no-unused-vars\nfunction ctDeleteCookie(cookieName) {\n // Cookies disabled\n if ( ctPublicFunctions.data__cookies_type === 'none' ) {\n return;\n\n // Using traditional cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'native' ) {\n let ctSecure = location.protocol === 'https:' ? '; secure' : '';\n document.cookie = cookieName + '=\"\"; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; samesite=lax' + ctSecure;\n\n // Using alternative cookies\n } else if ( ctPublicFunctions.data__cookies_type === 'alternative' ) {\n // @ToDo implement this logic\n }\n}\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_public_sendAJAX(data, params, obj) {\n // Default params\n let _params = [];\n _params['callback'] = params.callback || null;\n _params['onErrorCallback'] = params.onErrorCallback || null;\n _params['callback_context'] = params.callback_context || null;\n _params['callback_params'] = params.callback_params || null;\n _params['async'] = params.async || true;\n _params['notJson'] = params.notJson || null;\n _params['responseType']= params.notJson ? 'text' : 'json';\n _params['timeout'] = params.timeout || 15000;\n _params['obj'] = obj || null;\n _params['button'] = params.button || null;\n _params['spinner'] = params.spinner || null;\n _params['progressbar'] = params.progressbar || null;\n _params['silent'] = params.silent || null;\n _params['no_nonce'] = params.no_nonce || null;\n _params['data'] = data;\n _params['url'] = ctPublicFunctions._ajax_url;\n\n if (typeof (data) === 'string') {\n if ( ! _params['no_nonce'] ) {\n _params['data'] = _params['data'] + '&_ajax_nonce=' + ctPublicFunctions._ajax_nonce;\n }\n _params['data'] = _params['data'] + '&no_cache=' + Math.random();\n } else {\n if ( ! _params['no_nonce'] ) {\n _params['data']._ajax_nonce = ctPublicFunctions._ajax_nonce;\n }\n _params['data'].no_cache = Math.random();\n }\n\n new ApbctCore().ajax(_params);\n}\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_public_sendREST( route, params ) {\n let _params = [];\n _params['route'] = route;\n _params['callback'] = params.callback || null;\n _params['onErrorCallback'] = params.onErrorCallback || null;\n _params['data'] = params.data || [];\n _params['method'] = params.method || 'POST';\n\n new ApbctCore().rest(_params);\n}\n\n/**\n * Generate unique ID\n * @return {string}\n */\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction apbctGenerateUniqueID() {\n return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);\n}\n\nlet apbctLocalStorage = {\n get: function(key, property) {\n if ( typeof property === 'undefined' ) {\n property = 'value';\n }\n const storageValue = localStorage.getItem(key);\n if ( storageValue !== null ) {\n try {\n const json = JSON.parse(storageValue);\n if ( json.hasOwnProperty(property) ) {\n try {\n // if property can be parsed as JSON - do it\n return JSON.parse( json[property] );\n } catch (e) {\n // if not - return string of value\n return json[property].toString();\n }\n } else {\n return json;\n }\n } catch (e) {\n return storageValue;\n }\n }\n return false;\n },\n set: function(key, value, isJson = true) {\n if (isJson) {\n let objToSave = {'value': JSON.stringify(value), 'timestamp': Math.floor(new Date().getTime() / 1000)};\n localStorage.setItem(key, JSON.stringify(objToSave));\n } else {\n localStorage.setItem(key, value);\n }\n },\n isAlive: function(key, maxLifetime) {\n if ( typeof maxLifetime === 'undefined' ) {\n maxLifetime = 86400;\n }\n const keyTimestamp = this.get(key, 'timestamp');\n return keyTimestamp + maxLifetime > Math.floor(new Date().getTime() / 1000);\n },\n isSet: function(key) {\n return localStorage.getItem(key) !== null;\n },\n delete: function(key) {\n localStorage.removeItem(key);\n },\n getCleanTalkData: function() {\n let data = {};\n for (let i=0; i {\n this.data.push(Object.assign({}, this.fieldData));\n });\n }\n\n /**\n * Set listeners.\n */\n setListeners() {\n this.fields.forEach((field, i) => {\n field.addEventListener('paste', () => {\n this.data[i].isUseBuffer = true;\n });\n });\n\n this.fields.forEach((field, i) => {\n field.addEventListener('onautocomplete', () => {\n this.data[i].isAutoFill = true;\n });\n });\n\n this.fields.forEach((field, i) => {\n field.addEventListener('input', () => {\n this.data[i].countOfKey++;\n let time = + new Date();\n let currentDelta = 0;\n\n if (this.data[i].countOfKey === 1) {\n this.data[i].lastKeyTimestamp = time;\n this.data[i].firstKeyTimestamp = time;\n return;\n }\n\n currentDelta = time - this.data[i].lastKeyTimestamp;\n if (this.data[i].countOfKey === 2) {\n this.data[i].lastKeyTimestamp = time;\n this.data[i].lastDelta = currentDelta;\n return;\n }\n\n if (this.data[i].countOfKey > 2) {\n this.data[i].speedDelta += Math.abs(this.data[i].lastDelta - currentDelta);\n this.data[i].lastKeyTimestamp = time;\n this.data[i].lastDelta = currentDelta;\n }\n });\n });\n }\n}\n\n// eslint-disable-next-line camelcase\nconst ctDate = new Date();\nconst ctTimeMs = new Date().getTime();\nlet ctMouseEventTimerFlag = true; // Reading interval flag\nlet ctMouseData = [];\nlet ctMouseDataCounter = 0;\nlet ctCheckedEmails = {};\nlet ctMouseReadInterval;\nlet ctMouseWriteDataInterval;\n\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_attach_event_handler(elem, event, callback) {\n if (typeof window.addEventListener === 'function') elem.addEventListener(event, callback);\n else elem.attachEvent(event, callback);\n}\n// eslint-disable-next-line require-jsdoc,camelcase\nfunction apbct_remove_event_handler(elem, event, callback) {\n if (typeof window.removeEventListener === 'function') elem.removeEventListener(event, callback);\n else elem.detachEvent(event, callback);\n}\n\n// Writing first key press timestamp\nconst ctFunctionFirstKey = function output(event) {\n let KeyTimestamp = Math.floor(new Date().getTime() / 1000);\n ctSetCookie('ct_fkp_timestamp', KeyTimestamp);\n ctKeyStopStopListening();\n};\n\n// run cron jobs\ncronFormsHandler(2000);\n\n// mouse read\nif (ctPublic.data__key_is_ok) {\n // Reading interval\n ctMouseReadInterval = setInterval(function() {\n ctMouseEventTimerFlag = true;\n }, 150);\n\n // Writting interval\n ctMouseWriteDataInterval = setInterval(function() {\n ctSetCookie('ct_pointer_data', JSON.stringify(ctMouseData));\n }, 1200);\n}\n\n// Logging mouse position each 150 ms\nconst ctFunctionMouseMove = function output(event) {\n ctSetMouseMoved();\n if (ctMouseEventTimerFlag === true) {\n ctMouseData.push([\n Math.round(event.clientY),\n Math.round(event.clientX),\n Math.round(new Date().getTime() - ctTimeMs),\n ]);\n\n ctMouseDataCounter++;\n ctMouseEventTimerFlag = false;\n if (ctMouseDataCounter >= 50) {\n ctMouseStopData();\n }\n }\n};\n\n/**\n * Do handle periodical actions.\n * @param {int} cronStartTimeout Time to go before cron start.\n */\nfunction cronFormsHandler(cronStartTimeout = 2000) {\n setTimeout(function() {\n setInterval(function() {\n restartFieldsListening();\n restartBotDetectorEventTokenAttach();\n }, 2000);\n }, cronStartTimeout);\n}\n\n/**\n * Restart event_token attachment if some forms load after document ready.\n */\nfunction restartBotDetectorEventTokenAttach() {\n // List there any new conditions, right now it works only for LatePoint forms.\n // Probably, we can remove this condition at all, because setEventTokenField()\n // checks all the forms without the field\n const doAttach = (\n document.getElementsByClassName('latepoint-form').length > 0 ||\n document.getElementsByClassName('mec-booking-form-container').length > 0\n );\n\n try {\n if ( doAttach ) {\n // get token from LS\n const token = apbctLocalStorage.get('bot_detector_event_token');\n if (typeof setEventTokenField === 'function' && token !== undefined && token.length === 64) {\n setEventTokenField(token);\n }\n // probably there we could use a new botDetectorInit if token is not found\n }\n } catch (e) {\n console.log(e.toString());\n }\n}\n\n/**\n * Stop mouse observing function\n */\nfunction ctMouseStopData() {\n apbct_remove_event_handler(document, 'mousemove', ctFunctionMouseMove);\n clearInterval(ctMouseReadInterval);\n clearInterval(ctMouseWriteDataInterval);\n}\n\n/**\n * Stop key listening function\n */\nfunction ctKeyStopStopListening() {\n apbct_remove_event_handler(document, 'mousedown', ctFunctionFirstKey);\n apbct_remove_event_handler(document, 'keydown', ctFunctionFirstKey);\n}\n\n/**\n * @param {mixed} e\n */\nfunction checkEmail(e) {\n let currentEmail = e.target.value;\n if (currentEmail && !(currentEmail in ctCheckedEmails)) {\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'check_email_before_post',\n {\n method: 'POST',\n data: {'email': currentEmail},\n callback: function(result) {\n if (result.result) {\n ctCheckedEmails[currentEmail] = {\n 'result': result.result,\n 'timestamp': Date.now() / 1000 |0,\n };\n ctSetCookie('ct_checked_emails', JSON.stringify(ctCheckedEmails));\n }\n },\n },\n );\n // Using AJAX request and handler\n } else if ( ctPublicFunctions.data__ajax_type === 'admin_ajax' ) {\n apbct_public_sendAJAX(\n {\n action: 'apbct_email_check_before_post',\n email: currentEmail,\n },\n {\n callback: function(result) {\n if (result.result) {\n ctCheckedEmails[currentEmail] = {\n 'result': result.result,\n 'timestamp': Date.now() / 1000 |0,\n };\n ctSetCookie('ct_checked_emails', JSON.stringify(ctCheckedEmails));\n }\n },\n },\n );\n }\n }\n}\n\n/**\n * @param {string} pixelUrl\n */\nfunction ctSetPixelImg(pixelUrl) {\n ctSetCookie('apbct_pixel_url', pixelUrl);\n if ( +ctPublic.pixel__enabled ||\n (ctPublic.data__cookies_type === 'none' && document.querySelectorAll('img#apbct_pixel').length === 0) ||\n (ctPublic.data__cookies_type === 'alternative' && document.querySelectorAll('img#apbct_pixel').length === 0)\n ) {\n if ( ! document.getElementById('apbct_pixel') ) {\n let insertedImg = document.createElement('img');\n insertedImg.setAttribute('alt', 'CleanTalk Pixel');\n insertedImg.setAttribute('title', 'CleanTalk Pixel');\n insertedImg.setAttribute('id', 'apbct_pixel');\n insertedImg.setAttribute('style', 'display: none; left: 99999px;');\n insertedImg.setAttribute('src', pixelUrl);\n apbct('body').append(insertedImg);\n }\n }\n}\n\n/**\n * @param {string} pixelUrl\n */\nfunction ctSetPixelImgFromLocalstorage(pixelUrl) {\n if ( +ctPublic.pixel__enabled ||\n (ctPublic.data__cookies_type === 'none' && document.querySelectorAll('img#apbct_pixel').length === 0) ||\n (ctPublic.data__cookies_type === 'alternative' && document.querySelectorAll('img#apbct_pixel').length === 0)\n ) {\n if ( ! document.getElementById('apbct_pixel') ) {\n let insertedImg = document.createElement('img');\n insertedImg.setAttribute('alt', 'CleanTalk Pixel');\n insertedImg.setAttribute('title', 'CleanTalk Pixel');\n insertedImg.setAttribute('id', 'apbct_pixel');\n insertedImg.setAttribute('style', 'display: none; left: 99999px;');\n insertedImg.setAttribute('src', decodeURIComponent(pixelUrl));\n apbct('body').append(insertedImg);\n }\n }\n}\n\n/**\n * ctGetPixelUrl\n */\nfunction ctGetPixelUrl() {\n // Check if pixel is already in localstorage and is not outdated\n let localStoragePixelUrl = apbctLocalStorage.get('apbct_pixel_url');\n if ( localStoragePixelUrl !== false ) {\n if ( ! apbctLocalStorage.isAlive('apbct_pixel_url', 3600 * 3) ) {\n apbctLocalStorage.delete('apbct_pixel_url');\n } else {\n console.log(2);\n // if so - load pixel from localstorage and draw it skipping AJAX\n ctSetPixelImgFromLocalstorage(localStoragePixelUrl);\n return;\n }\n }\n console.log(3);\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'apbct_get_pixel_url',\n {\n method: 'POST',\n callback: function(result) {\n if (result &&\n (typeof result === 'string' || result instanceof String) && result.indexOf('https') === 0) {\n // set pixel url to localstorage\n if ( ! apbctLocalStorage.get('apbct_pixel_url') ) {\n // set pixel to the storage\n apbctLocalStorage.set('apbct_pixel_url', result);\n // update pixel data in the hidden fields\n ctNoCookieAttachHiddenFieldsToForms();\n }\n // then run pixel drawing\n ctSetPixelImg(result);\n }\n },\n },\n );\n // Using AJAX request and handler\n } else {\n apbct_public_sendAJAX(\n {\n action: 'apbct_get_pixel_url',\n },\n {\n notJson: true,\n callback: function(result) {\n if (result &&\n (typeof result === 'string' || result instanceof String) && result.indexOf('https') === 0) {\n // set pixel url to localstorage\n if ( ! apbctLocalStorage.get('apbct_pixel_url') ) {\n // set pixel to the storage\n apbctLocalStorage.set('apbct_pixel_url', result);\n // update pixel data in the hidden fields\n ctNoCookieAttachHiddenFieldsToForms();\n }\n // then run pixel drawing\n ctSetPixelImg(result);\n }\n },\n },\n );\n }\n}\n\n/**\n * ctSetHasScrolled\n */\nfunction ctSetHasScrolled() {\n if ( ! apbctLocalStorage.isSet('ct_has_scrolled') || ! apbctLocalStorage.get('ct_has_scrolled') ) {\n ctSetCookie('ct_has_scrolled', 'true');\n apbctLocalStorage.set('ct_has_scrolled', true);\n }\n if (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_scrolled') === undefined\n ) {\n ctSetCookie('ct_has_scrolled', 'true');\n }\n}\n\n/**\n * ctSetMouseMoved\n */\nfunction ctSetMouseMoved() {\n if ( ! apbctLocalStorage.isSet('ct_mouse_moved') || ! apbctLocalStorage.get('ct_mouse_moved') ) {\n ctSetCookie('ct_mouse_moved', 'true');\n apbctLocalStorage.set('ct_mouse_moved', true);\n }\n if (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_mouse_moved') === undefined\n ) {\n ctSetCookie('ct_mouse_moved', 'true');\n }\n}\n\n/**\n * Restart listen fields to set ct_has_input_focused or ct_has_key_up\n */\nfunction restartFieldsListening() {\n if (!apbctLocalStorage.isSet('ct_has_input_focused') && !apbctLocalStorage.isSet('ct_has_key_up')) {\n ctStartFieldsListening();\n }\n}\n\n/**\n * init listeners for keyup and focus events\n */\nfunction ctStartFieldsListening() {\n if (\n (apbctLocalStorage.isSet('ct_has_key_up') || apbctLocalStorage.get('ct_has_key_up')) &&\n (apbctLocalStorage.isSet('ct_has_input_focused') || apbctLocalStorage.get('ct_has_input_focused')) &&\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_input_focused') !== undefined &&\n ctGetCookie('ct_has_key_up') !== undefined\n )\n ) {\n // already set\n return;\n }\n\n let forms = ctGetPageForms();\n ctPublic.handled_fields = [];\n\n if (forms.length > 0) {\n for (let i = 0; i < forms.length; i++) {\n // handle only inputs and textareas\n const handledFormFields = forms[i].querySelectorAll('input,textarea');\n for (let i = 0; i < handledFormFields.length; i++) {\n if (handledFormFields[i].type !== 'hidden') {\n // collect handled fields to remove handler in the future\n ctPublic.handled_fields.push(handledFormFields[i]);\n // do attach handlers\n apbct_attach_event_handler(handledFormFields[i], 'focus', ctFunctionHasInputFocused);\n apbct_attach_event_handler(handledFormFields[i], 'keyup', ctFunctionHasKeyUp);\n }\n }\n }\n }\n}\n\n/**\n * stop listening keyup and focus\n * @param {string} eventName\n * @param {string} functionName\n */\nfunction ctStopFieldsListening(eventName, functionName) {\n if (typeof ctPublic.handled_fields !== 'undefined' && ctPublic.handled_fields.length > 0) {\n for (let i = 0; i < ctPublic.handled_fields.length; i++) {\n apbct_remove_event_handler(ctPublic.handled_fields[i], eventName, functionName);\n }\n }\n}\n\nlet ctFunctionHasInputFocused = function output(event) {\n ctSetHasInputFocused();\n ctStopFieldsListening('focus', ctFunctionHasInputFocused);\n};\n\nlet ctFunctionHasKeyUp = function output(event) {\n ctSetHasKeyUp();\n ctStopFieldsListening('keyup', ctFunctionHasKeyUp);\n};\n\n/**\n * set ct_has_input_focused ct_has_key_up cookies on session period\n */\nfunction ctSetHasInputFocused() {\n if ( ! apbctLocalStorage.isSet('ct_has_input_focused') || ! apbctLocalStorage.get('ct_has_input_focused') ) {\n apbctLocalStorage.set('ct_has_input_focused', true);\n }\n if (\n (\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_input_focused') === undefined\n ) ||\n ctPublic.data__cookies_type === 'alternative'\n ) ||\n (\n ctPublic.data__cookies_type === 'none' &&\n (\n typeof ctPublic.force_alt_cookies !== 'undefined' ||\n (ctPublic.force_alt_cookies !== undefined && ctPublic.force_alt_cookies)\n )\n )\n ) {\n ctSetCookie('ct_has_input_focused', 'true');\n }\n}\n\n/**\n * ctSetHasKeyUp\n */\nfunction ctSetHasKeyUp() {\n if ( ! apbctLocalStorage.isSet('ct_has_key_up') || ! apbctLocalStorage.get('ct_has_key_up') ) {\n apbctLocalStorage.set('ct_has_key_up', true);\n }\n if (\n (\n (\n ctPublic.data__cookies_type === 'native' &&\n ctGetCookie('ct_has_key_up') === undefined\n ) ||\n ctPublic.data__cookies_type === 'alternative'\n ) ||\n (\n ctPublic.data__cookies_type === 'none' &&\n (\n typeof ctPublic.force_alt_cookies !== 'undefined' ||\n (ctPublic.force_alt_cookies !== undefined && ctPublic.force_alt_cookies)\n )\n )\n ) {\n ctSetCookie('ct_has_key_up', 'true');\n }\n}\n\n/**\n * ctPreloadLocalStorage\n */\nfunction ctPreloadLocalStorage() {\n if (ctPublic.data__to_local_storage) {\n let data = Object.entries(ctPublic.data__to_local_storage);\n data.forEach(([key, value]) => {\n apbctLocalStorage.set(key, value);\n });\n }\n}\n\nif (ctPublic.data__key_is_ok) {\n apbct_attach_event_handler(document, 'mousemove', ctFunctionMouseMove);\n apbct_attach_event_handler(document, 'mousedown', ctFunctionFirstKey);\n apbct_attach_event_handler(document, 'keydown', ctFunctionFirstKey);\n apbct_attach_event_handler(document, 'scroll', ctSetHasScrolled);\n}\n\n/**\n * Prepare block to intercept AJAX response\n */\nfunction apbctPrepareBlockForAjaxForms() {\n // eslint-disable-next-line require-jsdoc\n function ctPrepareBlockMessage(xhr) {\n if (xhr.responseText &&\n xhr.responseText.indexOf('\"apbct') !== -1 &&\n xhr.responseText.indexOf('DOCTYPE') === -1\n ) {\n try {\n ctParseBlockMessage(JSON.parse(xhr.responseText));\n } catch (e) {\n console.log(e.toString());\n }\n }\n }\n\n if (typeof jQuery !== 'undefined') {\n // Capturing responses and output block message for unknown AJAX forms\n if (typeof jQuery(document).ajaxComplete() !== 'function') {\n jQuery(document).on('ajaxComplete', function(event, xhr, settings) {\n ctPrepareBlockMessage(xhr);\n });\n } else {\n jQuery(document).ajaxComplete( function(event, xhr, settings) {\n ctPrepareBlockMessage(xhr);\n });\n }\n }\n}\n\n/**\n * Ready function\n */\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_ready() {\n // this way calls a lot of apbct_ready(), needs to find another way\n // if (typeof jQuery !== 'undefined') {\n // jQuery(document).on('gform_page_loaded', function() {\n // apbct_ready();\n // });\n // }\n\n apbctPrepareBlockForAjaxForms();\n\n ctPreloadLocalStorage();\n\n // set session ID\n if (!apbctSessionStorage.isSet('apbct_session_id')) {\n const sessionID = apbctGenerateUniqueID();\n apbctSessionStorage.set('apbct_session_id', sessionID, false);\n apbctLocalStorage.set('apbct_page_hits', 1);\n if (document.referrer) {\n let urlReferer = new URL(document.referrer);\n if (urlReferer.host !== location.host) {\n apbctSessionStorage.set('apbct_site_referer', document.referrer, false);\n }\n }\n } else {\n apbctLocalStorage.set('apbct_page_hits', Number(apbctLocalStorage.get('apbct_page_hits')) + 1);\n }\n\n apbctWriteReferrersToSessionStorage();\n\n const cookiesType = apbctLocalStorage.get('ct_cookies_type');\n if ( ! cookiesType || cookiesType !== ctPublic.data__cookies_type ) {\n apbctLocalStorage.set('ct_cookies_type', ctPublic.data__cookies_type);\n apbctLocalStorage.delete('ct_mouse_moved');\n apbctLocalStorage.delete('ct_has_scrolled');\n }\n\n if (ctPublic.data__cookies_type !== 'alternative') {\n ctStartFieldsListening();\n // 2nd try to add listeners for delayed appears forms\n setTimeout(ctStartFieldsListening, 1000);\n }\n\n window.addEventListener('animationstart', apbctOnAnimationStart, true);\n window.addEventListener('input', apbctOnInput, true);\n document.ctTypoData = new CTTypoData();\n document.ctTypoData.gatheringFields();\n document.ctTypoData.setListeners();\n\n // Collect scrolling info\n const initCookies = [\n ['ct_ps_timestamp', Math.floor(new Date().getTime() / 1000)],\n ['ct_fkp_timestamp', '0'],\n ['ct_pointer_data', '0'],\n // eslint-disable-next-line camelcase\n ['ct_timezone', ctDate.getTimezoneOffset()/60*(-1)],\n ['ct_screen_info', apbctGetScreenInfo()],\n ['apbct_headless', navigator.webdriver],\n ];\n\n apbctLocalStorage.set('ct_ps_timestamp', Math.floor(new Date().getTime() / 1000));\n apbctLocalStorage.set('ct_fkp_timestamp', '0');\n apbctLocalStorage.set('ct_pointer_data', '0');\n // eslint-disable-next-line camelcase\n apbctLocalStorage.set('ct_timezone', ctDate.getTimezoneOffset()/60*(-1) );\n apbctLocalStorage.set('ct_screen_info', apbctGetScreenInfo());\n apbctLocalStorage.set('apbct_headless', navigator.webdriver);\n\n if ( ctPublic.data__cookies_type !== 'native' ) {\n initCookies.push(['apbct_visible_fields', '0']);\n } else {\n // Delete all visible fields cookies on load the page\n let cookiesArray = document.cookie.split(';');\n if ( cookiesArray.length !== 0 ) {\n for ( let i = 0; i < cookiesArray.length; i++ ) {\n let currentCookie = cookiesArray[i].trim();\n let cookieName = currentCookie.split('=')[0];\n if ( cookieName.indexOf('apbct_visible_fields_') === 0 ) {\n ctDeleteCookie(cookieName);\n }\n }\n }\n }\n\n if ( +ctPublic.pixel__setting ) {\n if ( +ctPublic.pixel__enabled ||\n (ctPublic.data__cookies_type === 'none' && document.querySelectorAll('img#apbct_pixel').length === 0) ||\n (ctPublic.data__cookies_type === 'alternative' && document.querySelectorAll('img#apbct_pixel').length === 0)\n ) {\n console.log(1);\n ctGetPixelUrl();\n } else {\n initCookies.push(['apbct_pixel_url', ctPublic.pixel__url]);\n }\n }\n\n if ( +ctPublic.data__email_check_before_post) {\n initCookies.push(['ct_checked_emails', '0']);\n apbct('input[type = \\'email\\'], #email').on('blur', checkEmail);\n }\n\n if (apbctLocalStorage.isSet('ct_checkjs')) {\n initCookies.push(['ct_checkjs', apbctLocalStorage.get('ct_checkjs')]);\n } else {\n initCookies.push(['ct_checkjs', 0]);\n }\n\n // detect integrated forms that need to be handled via alternative cookies\n ctDetectForcedAltCookiesForms();\n\n // send bot detector event token to alt cookies on problem forms\n if (typeof ctPublic.force_alt_cookies !== 'undefined' &&\n ctPublic.force_alt_cookies &&\n apbctLocalStorage.get('bot_detector_event_token') &&\n // do bot set if (ct_bot_detector_event_token) already set,\n // and it is equal to newly added from moderate (bot_detector_event_token)\n apbctLocalStorage.get('ct_bot_detector_event_token') !== apbctLocalStorage.get('bot_detector_event_token')\n ) {\n initCookies.push(['ct_bot_detector_event_token', apbctLocalStorage.get('bot_detector_event_token')]);\n }\n\n if (!ctPublic.force_alt_cookies && ctPublic.data__cookies_type == 'alternative') {\n ctPublic.force_alt_cookies = apbctLocalStorage.get('bot_detector_event_token');\n }\n\n ctSetCookie(initCookies);\n\n setTimeout(function() {\n if (\n typeof ctPublic.force_alt_cookies == 'undefined' ||\n (ctPublic.force_alt_cookies !== 'undefined' && !ctPublic.force_alt_cookies)\n ) {\n ctNoCookieAttachHiddenFieldsToForms();\n }\n\n if (\n typeof ctPublic.data__cookies_type !== 'undefined' &&\n ctPublic.data__cookies_type === 'none'\n ) {\n ctAjaxSetupAddCleanTalkDataBeforeSendAjax();\n }\n\n for (let i = 0; i < document.forms.length; i++) {\n let form = document.forms[i];\n\n // Exclusion for forms\n if (ctCheckHiddenFieldsExclusions(document.forms[i], 'visible_fields')) {\n continue;\n }\n\n // The Form has hidden field like apbct_visible_fields\n if (\n document.forms[i].elements.apbct_visible_fields !== undefined &&\n document.forms[i].elements.apbct_visible_fields.length > 0\n ) {\n continue;\n }\n\n if (form.querySelector('input[name=\"apbct_visible_fields\"]')) {\n let visibleFields = form.querySelector('input[name=\"apbct_visible_fields\"]');\n form.removeChild(visibleFields);\n }\n\n let hiddenInput = document.createElement( 'input' );\n hiddenInput.setAttribute( 'type', 'hidden' );\n hiddenInput.setAttribute( 'id', 'apbct_visible_fields_' + i );\n hiddenInput.setAttribute( 'name', 'apbct_visible_fields');\n let visibleFieldsToInput = {};\n visibleFieldsToInput[0] = apbct_collect_visible_fields(form);\n hiddenInput.value = btoa(JSON.stringify(visibleFieldsToInput));\n form.append( hiddenInput );\n\n form.onsubmit_prev = form.onsubmit;\n\n form.ctFormIndex = i;\n form.onsubmit = function(event) {\n if ( ctPublic.data__cookies_type !== 'native' && typeof event.target.ctFormIndex !== 'undefined' ) {\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(this);\n apbct_visible_fields_set_cookie( visibleFields, event.target.ctFormIndex );\n }\n\n if (ctPublic.data__cookies_type === 'none' && isFormThatNeedCatchXhr(event.target)) {\n window.XMLHttpRequest.prototype.send = function(data) {\n let noCookieData = getNoCookieData();\n noCookieData = 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData + '&';\n defaultSend.call(this, noCookieData + data);\n setTimeout(() => {\n window.XMLHttpRequest.prototype.send = defaultSend;\n }, 0);\n };\n }\n\n // Call previous submit action\n if (event.target.onsubmit_prev instanceof Function && !ctOnsubmitPrevCallExclude(event.target)) {\n setTimeout(function() {\n event.target.onsubmit_prev.call(event.target, event);\n }, 500);\n }\n };\n }\n }, 1000);\n\n // Listen clicks on encoded emails\n let encodedEmailNodes = document.querySelectorAll('[data-original-string]');\n ctPublic.encodedEmailNodes = encodedEmailNodes;\n if (encodedEmailNodes.length) {\n for (let i = 0; i < encodedEmailNodes.length; ++i) {\n if (\n encodedEmailNodes[i].parentElement.href ||\n encodedEmailNodes[i].parentElement.parentElement.href\n ) {\n // Skip listening click on hyperlinks\n continue;\n }\n encodedEmailNodes[i].addEventListener('click', ctFillDecodedEmailHandler);\n }\n }\n\n // WordPress Search form processing\n for (const _form of document.forms) {\n if (\n typeof ctPublic !== 'undefined' &&\n ctPublic.settings__forms__search_test === '1' &&\n (\n _form.getAttribute('id') === 'searchform' ||\n (_form.getAttribute('class') !== null && _form.getAttribute('class').indexOf('search-form') !== -1) ||\n (_form.getAttribute('role') !== null && _form.getAttribute('role').indexOf('search') !== -1)\n )\n ) {\n _form.apbctSearchPrevOnsubmit = _form.onsubmit;\n // this handles search forms onsubmit process\n _form.onsubmit = (e) => ctSearchFormOnSubmitHandler(e, _form);\n }\n }\n}\n\n/**\n * Prepare jQuery.ajaxSetup to add nocookie data to the jQuery ajax request.\n * Notes:\n * - Do it just once, the ajaxSetup.beforeSend will be overwritten for any calls.\n * - Signs of forms need to be caught will be checked during ajaxSetup.settings.data process on send.\n * - Any sign of the form HTML of the caller is insignificant in this process.\n * @return {void}\n */\nfunction ctAjaxSetupAddCleanTalkDataBeforeSendAjax() {\n // jquery ajax call intercept\n let eventToken = false;\n if ( typeof jQuery !== 'undefined' ) {\n jQuery.ajaxSetup({\n beforeSend: function(xhr, settings) {\n let sourceSign = false;\n // settings data is string (important!)\n if ( typeof settings.data === 'string' ) {\n if (settings.data.indexOf('twt_cc_signup') !== -1) {\n sourceSign = 'twt_cc_signup';\n }\n\n if (settings.data.indexOf('action=mailpoet') !== -1) {\n sourceSign = 'action=mailpoet';\n }\n\n if (\n settings.data.indexOf('action=user_registration') !== -1 &&\n settings.data.indexOf('ur_frontend_form_nonce') !== -1\n ) {\n sourceSign = 'action=user_registration';\n }\n\n if (settings.data.indexOf('action=happyforms_message') !== -1) {\n sourceSign = 'action=happyforms_message';\n }\n\n if (settings.data.indexOf('action=new_activity_comment') !== -1) {\n sourceSign = 'action=new_activity_comment';\n }\n }\n if ( typeof settings.url === 'string' ) {\n if (settings.url.indexOf('wc-ajax=add_to_cart') !== -1) {\n sourceSign = 'wc-ajax=add_to_cart';\n if (localStorage.getItem('bot_detector_event_token') !== null) {\n eventToken = localStorage.getItem('bot_detector_event_token');\n try {\n eventToken = JSON.parse(eventToken);\n } catch {\n eventToken = false;\n }\n if (eventToken !== false && eventToken.hasOwnProperty('value') && eventToken.value !== '') {\n eventToken = eventToken.value;\n }\n }\n }\n }\n\n if (sourceSign) {\n let noCookieData = getNoCookieData();\n if (typeof eventToken === 'string') {\n eventToken = 'data%5Bct_bot_detector_event_token%5D=' + eventToken + '&';\n } else {\n eventToken = '';\n }\n noCookieData = 'data%5Bct_no_cookie_hidden_field%5D=' + noCookieData + '&';\n\n settings.data = noCookieData + eventToken + settings.data;\n }\n },\n });\n }\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctOnsubmitPrevCallExclude(form) {\n if (form.classList.contains('hb-booking-search-form')) {\n return true;\n }\n\n return false;\n}\n\nif (ctPublic.data__key_is_ok) {\n if (document.readyState !== 'loading') {\n apbct_ready();\n } else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', apbct_ready);\n }\n\n apbctLocalStorage.set('ct_checkjs', ctPublic.ct_checkjs_key, true );\n}\n\n/**\n * @param {SubmitEvent} e\n * @param {*} _form\n */\nfunction ctSearchFormOnSubmitHandler(e, _form) {\n try {\n // set NoCookie data if is provided\n const noCookieField = _form.querySelector('[name=\"ct_no_cookie_hidden_field\"]');\n // set honeypot data if is provided\n const honeyPotField = _form.querySelector('[id*=\"apbct__email_id__\"]');\n const botDetectorField = _form.querySelector('[name*=\"ct_bot_detector_event_token\"]');\n let hpValue = null;\n let hpEventId = null;\n\n // get honeypot field and it's value\n if (\n honeyPotField !== null &&\n honeyPotField.value !== null &&\n honeyPotField.getAttribute('apbct_event_id') !== null\n ) {\n hpValue = honeyPotField.value;\n hpEventId = honeyPotField.getAttribute('apbct_event_id');\n }\n\n if (ctPublic.data__cookies_type === 'alternative' || ctPublic.data__cookies_type === 'native') {\n if (botDetectorField !== null) {\n botDetectorField.parentNode.removeChild(botDetectorField);\n }\n }\n\n // if noCookie data or honeypot data is set, proceed handling\n if ( noCookieField !== null || honeyPotField !== null) {\n e.preventDefault();\n const callBack = () => {\n if (honeyPotField !== null) {\n honeyPotField.parentNode.removeChild(honeyPotField);\n }\n // ct_bot_detector_event_token\n if (botDetectorField !== null) {\n botDetectorField.parentNode.removeChild(botDetectorField);\n }\n if (_form.apbctSearchPrevOnsubmit instanceof Function) {\n _form.apbctSearchPrevOnsubmit();\n } else {\n const _noCookieField = _form.querySelector('[name=\"ct_no_cookie_hidden_field\"]');\n if ( _noCookieField !== null ) {\n _noCookieField.parentNode.removeChild(_noCookieField);\n }\n HTMLFormElement.prototype.submit.call(_form);\n }\n };\n\n let parsedCookies = '{}';\n\n // if noCookie data provided trim prefix and add data from base64 decoded value then\n if (noCookieField !== null) {\n parsedCookies = atob(noCookieField.value.replace('_ct_no_cookie_data_', ''));\n }\n\n const cookiesArray = JSON.parse(parsedCookies);\n\n // if honeypot data provided add the fields to the parsed data\n if ( hpValue !== null && hpEventId !== null ) {\n cookiesArray.apbct_search_form__honeypot_value = hpValue;\n cookiesArray.apbct_search_form__honeypot_id = hpEventId;\n }\n\n // if the pixel needs to be decoded\n if (\n typeof cookiesArray.apbct_pixel_url === 'string' &&\n cookiesArray.apbct_pixel_url.indexOf('%3A') !== -1\n ) {\n cookiesArray.apbct_pixel_url = decodeURIComponent(cookiesArray.apbct_pixel_url);\n }\n\n parsedCookies = JSON.stringify(cookiesArray);\n\n // if any data provided, proceed data to xhr\n if ( parsedCookies.length !== 0 ) {\n ctSetAlternativeCookie(\n parsedCookies,\n {callback: callBack, onErrorCallback: callBack, forceAltCookies: true},\n );\n } else {\n callBack();\n }\n }\n } catch (error) {\n console.warn('APBCT search form onsubmit handler error. ' + error);\n }\n}\n\n/**\n * @param {mixed} event\n */\nfunction ctFillDecodedEmailHandler(event) {\n this.removeEventListener('click', ctFillDecodedEmailHandler);\n // remember clickSource\n let clickSource = this;\n // globally remember if emails is mixed with mailto\n ctPublic.encodedEmailNodesIsMixed = false;\n // get fade\n document.body.classList.add('apbct-popup-fade');\n // popup show\n let encoderPopup = document.getElementById('apbct_popup');\n if (!encoderPopup) {\n let waitingPopup = document.createElement('div');\n waitingPopup.setAttribute('class', 'apbct-popup');\n waitingPopup.setAttribute('id', 'apbct_popup');\n let popupText = document.createElement('p');\n popupText.setAttribute('id', 'apbct_popup_text');\n popupText.style.color = 'black';\n popupText.innerText = 'Please wait while ' + ctPublic.wl_brandname + ' is decoding the email addresses.';\n waitingPopup.append(popupText);\n document.body.append(waitingPopup);\n } else {\n encoderPopup.setAttribute('style', 'display: inherit');\n document.getElementById('apbct_popup_text').innerHTML =\n 'Please wait while ' + ctPublic.wl_brandname + ' is decoding the email addresses.';\n }\n\n apbctAjaxEmailDecodeBulk(event, ctPublic.encodedEmailNodes, clickSource);\n}\n\n/**\n * @param {mixed} event\n * @param {mixed} encodedEmailNodes\n * @param {mixed} clickSource\n */\nfunction apbctAjaxEmailDecodeBulk(event, encodedEmailNodes, clickSource) {\n // collect data\n const javascriptClientData = getJavascriptClientData();\n let data = {\n event_javascript_data: javascriptClientData,\n post_url: document.location.href,\n referrer: document.referrer,\n encodedEmails: '',\n };\n let encodedEmailsCollection = {};\n for (let i = 0; i < encodedEmailNodes.length; i++) {\n // disable click for mailto\n if (typeof encodedEmailNodes[i].href !== 'undefined' && encodedEmailNodes[i].href.indexOf('mailto:') === 0) {\n event.preventDefault();\n ctPublic.encodedEmailNodesIsMixed = true;\n }\n\n // Adding a tooltip\n let apbctTooltip = document.createElement('div');\n apbctTooltip.setAttribute('class', 'apbct-tooltip');\n apbct(encodedEmailNodes[i]).append(apbctTooltip);\n\n // collect encoded email strings\n encodedEmailsCollection[i] = encodedEmailNodes[i].dataset.originalString;\n }\n\n // JSONify encoded email strings\n data.encodedEmails = JSON.stringify(encodedEmailsCollection);\n\n // Using REST API handler\n if ( ctPublicFunctions.data__ajax_type === 'rest' ) {\n apbct_public_sendREST(\n 'apbct_decode_email',\n {\n data: data,\n method: 'POST',\n callback: function(result) {\n // set alternative cookie to skip next pages encoding\n ctSetCookie('apbct_email_encoder_passed', ctPublic.emailEncoderPassKey);\n apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource);\n },\n onErrorCallback: function(res) {\n resetEncodedNodes();\n ctShowDecodeComment(res);\n },\n },\n );\n\n // Using AJAX request and handler\n } else {\n data.action = 'apbct_decode_email';\n apbct_public_sendAJAX(\n data,\n {\n notJson: false,\n callback: function(result) {\n // set alternative cookie to skip next pages encoding\n ctSetCookie('apbct_email_encoder_passed', ctPublic.emailEncoderPassKey);\n apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource);\n },\n onErrorCallback: function(res) {\n resetEncodedNodes();\n ctShowDecodeComment(res);\n },\n },\n );\n }\n}\n\n/**\n * @param {mixed} result\n * @param {mixed} encodedEmailNodes\n * @param {mixed} clickSource\n */\nfunction apbctEmailEncoderCallbackBulk(result, encodedEmailNodes, clickSource) {\n if (result.success && result.data[0].is_allowed === true) {\n // start process of visual decoding\n setTimeout(function() {\n for (let i = 0; i < encodedEmailNodes.length; i++) {\n // chek what is what\n let currentResultData;\n result.data.forEach((row) => {\n if (row.encoded_email === encodedEmailNodes[i].dataset.originalString) {\n currentResultData = row;\n }\n });\n // quit case on cloud block\n if (currentResultData.is_allowed === false) {\n break;\n }\n // handler for mailto\n if (\n typeof encodedEmailNodes[i].href !== 'undefined' &&\n encodedEmailNodes[i].href.indexOf('mailto:') === 0) {\n let encodedEmail = encodedEmailNodes[i].href.replace('mailto:', '');\n let baseElementContent = encodedEmailNodes[i].innerHTML;\n encodedEmailNodes[i].innerHTML =\n baseElementContent.replace(encodedEmail, currentResultData.decoded_email);\n encodedEmailNodes[i].href = 'mailto:' + currentResultData.decoded_email;\n } else {\n // fill the nodes\n ctProcessDecodedDataResult(currentResultData, encodedEmailNodes[i]);\n }\n // remove listeners\n encodedEmailNodes[i].removeEventListener('click', ctFillDecodedEmailHandler);\n }\n // popup remove\n let popup = document.getElementById('apbct_popup');\n if (popup !== null) {\n document.body.classList.remove('apbct-popup-fade');\n popup.setAttribute('style', 'display:none');\n // click on mailto if so\n if (ctPublic.encodedEmailNodesIsMixed) {\n clickSource.click();\n }\n }\n }, 3000);\n } else {\n if (result.success) {\n resetEncodedNodes();\n ctShowDecodeComment('Blocked: ' + result.data[0].comment);\n } else {\n resetEncodedNodes();\n ctShowDecodeComment('Cannot connect with CleanTalk server: ' + result.data[0].comment);\n }\n }\n}\n\n/**\n * resetEncodedNodes\n */\nfunction resetEncodedNodes() {\n if (typeof ctPublic.encodedEmailNodes !== 'undefined') {\n ctPublic.encodedEmailNodes.forEach(function(element) {\n element.addEventListener('click', ctFillDecodedEmailHandler);\n });\n }\n}\n\n/**\n * @param {mixed} commonCookies\n * @return {string}\n */\nfunction getJavascriptClientData(commonCookies = []) {\n let resultDataJson = {};\n\n resultDataJson.apbct_headless = !!ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_headless');\n resultDataJson.ct_checked_emails = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checked_emails');\n resultDataJson.ct_checkjs = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_checkjs');\n resultDataJson.ct_fkp_timestamp = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_fkp_timestamp');\n resultDataJson.ct_pointer_data = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_pointer_data');\n resultDataJson.ct_ps_timestamp = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_ps_timestamp');\n resultDataJson.ct_screen_info = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_screen_info');\n resultDataJson.ct_timezone = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_timezone');\n\n // collecting data from localstorage\n const ctMouseMovedLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_mouse_moved');\n const ctHasScrolledLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_has_scrolled');\n const ctCookiesTypeLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_cookies_type');\n const apbctPageHits = apbctLocalStorage.get('apbct_page_hits');\n const apbctPrevReferer = apbctSessionStorage.get('apbct_prev_referer');\n const apbctSiteReferer = apbctSessionStorage.get('apbct_site_referer');\n const ctJsErrorsLocalStorage = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'ct_js_errors');\n const ctPixelUrl = apbctLocalStorage.get(ctPublicFunctions.cookiePrefix + 'apbct_pixel_url');\n\n // collecting data from cookies\n const ctMouseMovedCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_mouse_moved');\n const ctHasScrolledCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_has_scrolled');\n const ctCookiesTypeCookie = ctGetCookie(ctPublicFunctions.cookiePrefix + 'ct_cookies_type');\n const ctCookiesPixelUrl = ctGetCookie(ctPublicFunctions.cookiePrefix + 'apbct_pixel_url');\n\n resultDataJson.ct_mouse_moved = ctMouseMovedLocalStorage !== undefined ?\n ctMouseMovedLocalStorage : ctMouseMovedCookie;\n resultDataJson.ct_has_scrolled = ctHasScrolledLocalStorage !== undefined ?\n ctHasScrolledLocalStorage : ctHasScrolledCookie;\n resultDataJson.ct_cookies_type = ctCookiesTypeLocalStorage !== undefined ?\n ctCookiesTypeLocalStorage : ctCookiesTypeCookie;\n resultDataJson.apbct_pixel_url = ctPixelUrl !== undefined ?\n ctPixelUrl : ctCookiesPixelUrl;\n resultDataJson.apbct_page_hits = apbctPageHits;\n resultDataJson.apbct_prev_referer = apbctPrevReferer;\n resultDataJson.apbct_site_referer = apbctSiteReferer;\n resultDataJson.apbct_ct_js_errors = ctJsErrorsLocalStorage;\n\n if (!resultDataJson.apbct_pixel_url) {\n resultDataJson.apbct_pixel_url = ctPublic.pixel__url;\n }\n\n if (\n typeof (commonCookies) === 'object' &&\n commonCookies !== []\n ) {\n for (let i = 0; i < commonCookies.length; ++i) {\n if ( typeof (commonCookies[i][1]) === 'object' ) {\n // this is for handle SFW cookies\n resultDataJson[commonCookies[i][1][0]] = commonCookies[i][1][1];\n } else {\n resultDataJson[commonCookies[i][0]] = commonCookies[i][1];\n }\n }\n } else {\n console.log('APBCT JS ERROR: Collecting data type mismatch');\n }\n\n // Parse JSON properties to prevent double JSON encoding\n resultDataJson = removeDoubleJsonEncoding(resultDataJson);\n\n return JSON.stringify(resultDataJson);\n}\n\n/**\n * Recursive\n *\n * Recursively decode JSON-encoded properties\n *\n * @param {mixed} object\n * @return {*}\n */\nfunction removeDoubleJsonEncoding(object) {\n if ( typeof object === 'object') {\n // eslint-disable-next-line guard-for-in\n for (let objectKey in object) {\n // Recursion\n if ( typeof object[objectKey] === 'object') {\n object[objectKey] = removeDoubleJsonEncoding(object[objectKey]);\n }\n\n // Common case (out)\n if (\n typeof object[objectKey] === 'string' &&\n object[objectKey].match(/^[\\[{].*?[\\]}]$/) !== null // is like JSON\n ) {\n const parsedValue = JSON.parse(object[objectKey]);\n if ( typeof parsedValue === 'object' ) {\n object[objectKey] = parsedValue;\n }\n }\n }\n }\n\n return object;\n}\n\n/**\n * @param {mixed} response\n * @param {mixed} targetElement\n */\nfunction ctProcessDecodedDataResult(response, targetElement) {\n targetElement.setAttribute('title', '');\n targetElement.removeAttribute('style');\n ctFillDecodedEmail(targetElement, response.decoded_email);\n}\n\n/**\n * @param {mixed} target\n * @param {string} email\n */\nfunction ctFillDecodedEmail(target, email) {\n apbct(target).html(\n apbct(target)\n .html()\n .replace(/.+?(
)/, email + '$1'),\n );\n}\n\n/**\n * @param {string} comment\n */\nfunction ctShowDecodeComment(comment) {\n if ( ! comment ) {\n comment = 'Can not decode email. Unknown reason';\n }\n\n let popup = document.getElementById('apbct_popup');\n let popupText = document.getElementById('apbct_popup_text');\n if (popup !== null) {\n document.body.classList.remove('apbct-popup-fade');\n popupText.innerText = 'CleanTalk email decoder: ' + comment;\n setTimeout(function() {\n popup.setAttribute('style', 'display:none');\n }, 3000);\n }\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_collect_visible_fields( form ) {\n // Get only fields\n let inputs = [];\n let inputsVisible = '';\n let inputsVisibleCount = 0;\n let inputsInvisible = '';\n let inputsInvisibleCount = 0;\n let inputsWithDuplicateNames = [];\n\n for (let key in form.elements) {\n if (!isNaN(+key)) {\n inputs[key] = form.elements[key];\n }\n }\n\n // Filter fields\n inputs = inputs.filter(function(elem) {\n // Filter already added fields\n if ( inputsWithDuplicateNames.indexOf( elem.getAttribute('name') ) !== -1 ) {\n return false;\n }\n // Filter inputs with same names for type == radio\n if ( -1 !== ['radio', 'checkbox'].indexOf( elem.getAttribute('type') )) {\n inputsWithDuplicateNames.push( elem.getAttribute('name') );\n return false;\n }\n return true;\n });\n\n // Visible fields\n inputs.forEach(function(elem, i, elements) {\n // Unnecessary fields\n if (\n elem.getAttribute('type') === 'submit' || // type == submit\n elem.getAttribute('name') === null ||\n elem.getAttribute('name') === 'ct_checkjs'\n ) {\n return;\n }\n // Invisible fields\n if (\n getComputedStyle(elem).display === 'none' || // hidden\n getComputedStyle(elem).visibility === 'hidden' || // hidden\n getComputedStyle(elem).opacity === '0' || // hidden\n elem.getAttribute('type') === 'hidden' // type == hidden\n ) {\n if ( elem.classList.contains('wp-editor-area') ) {\n inputsVisible += ' ' + elem.getAttribute('name');\n inputsVisibleCount++;\n } else {\n inputsInvisible += ' ' + elem.getAttribute('name');\n inputsInvisibleCount++;\n }\n // eslint-disable-next-line brace-style\n }\n // Visible fields\n else {\n inputsVisible += ' ' + elem.getAttribute('name');\n inputsVisibleCount++;\n }\n });\n\n inputsInvisible = inputsInvisible.trim();\n inputsVisible = inputsVisible.trim();\n\n return {\n visible_fields: inputsVisible,\n visible_fields_count: inputsVisibleCount,\n invisible_fields: inputsInvisible,\n invisible_fields_count: inputsInvisibleCount,\n };\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc\nfunction apbct_visible_fields_set_cookie( visibleFieldsCollection, formId ) {\n let collection = typeof visibleFieldsCollection === 'object' && visibleFieldsCollection !== null ?\n visibleFieldsCollection : {};\n\n if ( ctPublic.data__cookies_type === 'native' ) {\n // eslint-disable-next-line guard-for-in\n for ( let i in collection ) {\n if ( i > 10 ) {\n // Do not generate more than 10 cookies\n return;\n }\n let collectionIndex = formId !== undefined ? formId : i;\n ctSetCookie('apbct_visible_fields_' + collectionIndex, JSON.stringify( collection[i] ) );\n }\n } else {\n if (ctPublic.data__cookies_type === 'none') {\n ctSetCookie('apbct_visible_fields', JSON.stringify( collection[0] ) );\n } else {\n ctSetCookie('apbct_visible_fields', JSON.stringify( collection ) );\n }\n }\n}\n\n// eslint-disable-next-line camelcase,require-jsdoc,no-unused-vars\nfunction apbct_js_keys__set_input_value(result, data, params, obj) {\n if ( document.querySelectorAll('[name^=ct_checkjs]').length > 0 ) {\n let elements = document.querySelectorAll('[name^=ct_checkjs]');\n for ( let i = 0; i < elements.length; i++ ) {\n elements[i].value = result.js_key;\n }\n }\n}\n\n/**\n * @return {string}\n */\nfunction apbctGetScreenInfo() {\n return JSON.stringify({\n fullWidth: document.documentElement.scrollWidth,\n fullHeight: Math.max(\n document.body.scrollHeight, document.documentElement.scrollHeight,\n document.body.offsetHeight, document.documentElement.offsetHeight,\n document.body.clientHeight, document.documentElement.clientHeight,\n ),\n visibleWidth: document.documentElement.clientWidth,\n visibleHeight: document.documentElement.clientHeight,\n });\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctParseBlockMessage(response) {\n if (typeof response.apbct !== 'undefined') {\n response = response.apbct;\n if (response.blocked) {\n document.dispatchEvent(\n new CustomEvent( 'apbctAjaxBockAlert', {\n bubbles: true,\n detail: {message: response.comment},\n } ),\n );\n\n // Show the result by modal\n cleantalkModal.loaded = response.comment;\n cleantalkModal.open();\n\n if (+response.stop_script === 1) {\n window.stop();\n }\n }\n }\n}\n\n// eslint-disable-next-line no-unused-vars,require-jsdoc\nfunction ctSetPixelUrlLocalstorage(ajaxPixelUrl) {\n // set pixel to the storage\n ctSetCookie('apbct_pixel_url', ajaxPixelUrl);\n}\n\n// eslint-disable-next-line require-jsdoc\nfunction ctNoCookieConstructHiddenField(type) {\n let inputType = 'hidden';\n if (type === 'submit') {\n inputType = 'submit';\n }\n let field = '';\n let noCookieDataLocal = apbctLocalStorage.getCleanTalkData();\n let noCookieDataSession = apbctSessionStorage.getCleanTalkData();\n\n let noCookieDataTypo = {typo: []};\n if (document.ctTypoData && document.ctTypoData.data) {\n noCookieDataTypo = {typo: document.ctTypoData.data};\n }\n\n let noCookieData = {...noCookieDataLocal, ...noCookieDataSession, ...noCookieDataTypo};\n noCookieData = JSON.stringify(noCookieData);\n noCookieData = '_ct_no_cookie_data_' + btoa(noCookieData);\n field = document.createElement('input');\n field.setAttribute('name', 'ct_no_cookie_hidden_field');\n field.setAttribute('value', noCookieData);\n field.setAttribute('type', inputType);\n field.classList.add('apbct_special_field');\n field.classList.add('ct_no_cookie_hidden_field');\n return field;\n}\n\n/**\n * @return {boolean|*}\n */\nfunction ctGetPageForms() {\n let forms = document.forms;\n if (forms) {\n return forms;\n }\n return false;\n}\n\n/**\n * Get type of the field should be excluded. Return exclusion signs via object.\n * @param {object} form Form dom object.\n * @return {object} {'no_cookie': 1|0, 'visible_fields': 1|0}\n */\nfunction ctGetHiddenFieldExclusionsType(form) {\n // visible fields\n let result = {'no_cookie': 0, 'visible_fields': 0};\n if (\n +ctPublic.data__visible_fields_required === 0 ||\n (form.method.toString().toLowerCase() === 'get' &&\n form.querySelectorAll('.nf-form-content').length === 0 &&\n form.id !== 'twt_cc_signup') ||\n form.classList.contains('slp_search_form') || // StoreLocatorPlus form\n form.parentElement.classList.contains('mec-booking') ||\n form.action.toString().indexOf('activehosted.com') !== -1 || // Active Campaign\n (form.id && form.id === 'caspioform') || // Caspio Form\n (form.classList && form.classList.contains('tinkoffPayRow')) || // TinkoffPayForm\n (form.classList && form.classList.contains('give-form')) || // GiveWP\n (form.id && form.id === 'ult-forgot-password-form') || // ult forgot password\n (form.id && form.id.toString().indexOf('calculatedfields') !== -1) || // CalculatedFieldsForm\n (form.id && form.id.toString().indexOf('sac-form') !== -1) || // Simple Ajax Chat\n (form.id &&\n form.id.toString().indexOf('cp_tslotsbooking_pform') !== -1) || // WP Time Slots Booking Form\n (form.name &&\n form.name.toString().indexOf('cp_tslotsbooking_pform') !== -1) || // WP Time Slots Booking Form\n form.action.toString() === 'https://epayment.epymtservice.com/epay.jhtml' || // Custom form\n (form.name && form.name.toString().indexOf('tribe-bar-form') !== -1) || // The Events Calendar\n (form.id && form.id === 'ihf-login-form') || // Optima Express login\n (form.id &&\n form.id === 'subscriberForm' &&\n form.action.toString().indexOf('actionType=update') !== -1) || // Optima Express update\n (form.id && form.id === 'ihf-main-search-form') || // Optima Express search\n (form.id && form.id === 'frmCalc') || // nobletitle-calc\n form.action.toString().indexOf('property-organizer-delete-saved-search-submit') !== -1 ||\n form.querySelector('a[name=\"login\"]') !== null // digimember login form\n ) {\n result.visible_fields = 1;\n }\n\n // ajax search pro exclusion\n let ncFieldExclusionsSign = form.parentNode;\n if (\n ncFieldExclusionsSign && ncFieldExclusionsSign.classList.contains('proinput') ||\n (form.name === 'options' && form.classList.contains('asp-fss-flex'))\n ) {\n result.no_cookie = 1;\n }\n\n // woocommerce login form\n if (\n form && form.classList.contains('woocommerce-form-login')\n ) {\n result.visible_fields = 1;\n result.no_cookie = 1;\n }\n\n return result;\n}\n\n/**\n * Check if the form should be skipped from hidden field attach.\n * Return exclusion description if it is found, false otherwise.\n * @param {object} form Form dom object.\n * @param {string} hiddenFieldType Type of hidden field that needs to be checked.\n * Possible values: 'no_cookie'|'visible_fields'.\n * @return {boolean}\n */\nfunction ctCheckHiddenFieldsExclusions(form, hiddenFieldType) {\n // Ajax Search Lite\n if (Boolean(form.querySelector('fieldset.asl_sett_scroll'))) {\n return true;\n }\n if (typeof (hiddenFieldType) === 'string' &&\n ['visible_fields', 'no_cookie'].indexOf(hiddenFieldType) !== -1) {\n const exclusions = ctGetHiddenFieldExclusionsType(form);\n return exclusions[hiddenFieldType] === 1;\n }\n\n return false;\n}\n\n/**\n * ctNoCookieAttachHiddenFieldsToForms\n */\nfunction ctNoCookieAttachHiddenFieldsToForms() {\n if (ctPublic.data__cookies_type !== 'none') {\n return;\n }\n\n let forms = ctGetPageForms();\n\n if (forms) {\n for ( let i = 0; i < forms.length; i++ ) {\n // remove old sets\n let fields = forms[i].querySelectorAll('.ct_no_cookie_hidden_field');\n for ( let j = 0; j < fields.length; j++ ) {\n fields[j].outerHTML = '';\n }\n\n if ( ctCheckHiddenFieldsExclusions(document.forms[i], 'no_cookie') ) {\n continue;\n }\n\n // ignore forms with get method @todo We need to think about this\n if (document.forms[i].getAttribute('method') === null ||\n document.forms[i].getAttribute('method').toLowerCase() === 'post') {\n // add new set\n document.forms[i].append(ctNoCookieConstructHiddenField());\n } else if (typeof ctPublic !== 'undefined' &&\n ctPublic.settings__forms__search_test === '1' &&\n (\n document.forms[i].getAttribute('id') === 'searchform' ||\n (\n document.forms[i].getAttribute('class') !== null &&\n document.forms[i].getAttribute('class').indexOf('search-form') !== -1) ||\n (\n document.forms[i].getAttribute('role') !== null &&\n document.forms[i].getAttribute('role').indexOf('search') !== -1\n )\n )\n ) {\n document.forms[i].append(ctNoCookieConstructHiddenField('submit'));\n }\n }\n }\n}\n\nconst defaultFetch = window.fetch;\nconst defaultSend = XMLHttpRequest.prototype.send;\n\nif (document.readyState !== 'loading') {\n checkFormsExistForCatching();\n} else {\n apbct_attach_event_handler(document, 'DOMContentLoaded', checkFormsExistForCatching);\n}\n\n/**\n * checkFormsExistForCatching\n */\nfunction checkFormsExistForCatching() {\n setTimeout(function() {\n if (isFormThatNeedCatch()) {\n window.fetch = function(...args) {\n if (args &&\n args[0] &&\n typeof args[0].includes === 'function' &&\n args[0].includes('/wp-json/metform/')\n ) {\n let noCookieData = getNoCookieData();\n\n if (args && args[1] && args[1].body) {\n args[1].body.append('ct_no_cookie_hidden_field', noCookieData);\n }\n }\n\n return defaultFetch.apply(window, args);\n };\n }\n }, 1000);\n}\n\n/**\n * @return {boolean}\n */\nfunction isFormThatNeedCatch() {\n const formClasses = [\n 'metform-form-content',\n ];\n let classExists = false;\n\n const forms = document.forms;\n for (let form of forms) {\n formClasses.forEach(function(classForm) {\n if (form.classList.contains(classForm)) {\n classExists = true;\n }\n });\n }\n\n return classExists;\n}\n\n/**\n * @param {HTMLElement} form\n * @return {boolean}\n */\nfunction isFormThatNeedCatchXhr(form) {\n if (document.querySelector('div.elementor-widget[title=\\'Login/Signup\\']') != null) {\n return false;\n }\n if (form && form.action && form.action.toString().indexOf('mailpoet_subscription_form') !== -1) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @return {string}\n */\nfunction getNoCookieData() {\n let noCookieDataLocal = apbctLocalStorage.getCleanTalkData();\n let noCookieDataSession = apbctSessionStorage.getCleanTalkData();\n let noCookieData = {...noCookieDataLocal, ...noCookieDataSession};\n noCookieData = JSON.stringify(noCookieData);\n\n return '_ct_no_cookie_data_' + btoa(noCookieData);\n}\n\n/**\n * Set three statements to the sessions storage: apbct_session_current_page, apbct_prev_referer.\n * @return {void}\n */\nfunction apbctWriteReferrersToSessionStorage() {\n const sessionCurrentPage = apbctSessionStorage.get('apbct_session_current_page');\n\n // set session apbct_referer\n if (sessionCurrentPage!== false && document.location.href !== sessionCurrentPage) {\n apbctSessionStorage.set('apbct_prev_referer', sessionCurrentPage, false);\n }\n\n // set session current page to know referrer\n apbctSessionStorage.set('apbct_session_current_page', document.location.href, false);\n}\n\n\n/* Cleantalk Modal object */\nlet cleantalkModal = {\n\n // Flags\n loaded: false,\n loading: false,\n opened: false,\n opening: false,\n\n // Methods\n load: function( action ) {\n if ( ! this.loaded ) {\n this.loading = true;\n let callback = function( result, data, params, obj ) {\n cleantalkModal.loading = false;\n cleantalkModal.loaded = result;\n document.dispatchEvent(\n new CustomEvent( 'cleantalkModalContentLoaded', {\n bubbles: true,\n } ),\n );\n };\n // eslint-disable-next-line camelcase\n if ( typeof apbct_admin_sendAJAX === 'function' ) {\n apbct_admin_sendAJAX( {'action': action}, {'callback': callback, 'notJson': true} );\n } else {\n apbct_public_sendAJAX( {'action': action}, {'callback': callback, 'notJson': true} );\n }\n }\n },\n\n open: function() {\n /* Cleantalk Modal CSS start */\n let renderCss = function() {\n let cssStr = '';\n // eslint-disable-next-line guard-for-in\n for ( const key in this.styles ) {\n cssStr += key + ':' + this.styles[key] + ';';\n }\n return cssStr;\n };\n let overlayCss = {\n styles: {\n 'z-index': '9999999999',\n 'position': 'fixed',\n 'top': '0',\n 'left': '0',\n 'width': '100%',\n 'height': '100%',\n 'background': 'rgba(0,0,0,0.5)',\n 'display': 'flex',\n 'justify-content': 'center',\n 'align-items': 'center',\n },\n toString: renderCss,\n };\n let innerCss = {\n styles: {\n 'position': 'relative',\n 'padding': '30px',\n 'background': '#FFF',\n 'border': '1px solid rgba(0,0,0,0.75)',\n 'border-radius': '4px',\n 'box-shadow': '7px 7px 5px 0px rgba(50,50,50,0.75)',\n },\n toString: renderCss,\n };\n let closeCss = {\n styles: {\n 'position': 'absolute',\n 'background': '#FFF',\n 'width': '20px',\n 'height': '20px',\n 'border': '2px solid rgba(0,0,0,0.75)',\n 'border-radius': '15px',\n 'cursor': 'pointer',\n 'top': '-8px',\n 'right': '-8px',\n 'box-sizing': 'content-box',\n },\n toString: renderCss,\n };\n let closeCssBefore = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(45deg)',\n },\n toString: renderCss,\n };\n let closeCssAfter = {\n styles: {\n 'content': '\"\"',\n 'display': 'block',\n 'position': 'absolute',\n 'background': '#000',\n 'border-radius': '1px',\n 'width': '2px',\n 'height': '16px',\n 'top': '2px',\n 'left': '9px',\n 'transform': 'rotate(-45deg)',\n },\n toString: renderCss,\n };\n let bodyCss = {\n styles: {\n 'overflow': 'hidden',\n },\n toString: renderCss,\n };\n let cleantalkModalStyle = document.createElement( 'style' );\n cleantalkModalStyle.setAttribute( 'id', 'cleantalk-modal-styles' );\n cleantalkModalStyle.innerHTML = 'body.cleantalk-modal-opened{' + bodyCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-overlay{' + overlayCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close{' + closeCss + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:before{' + closeCssBefore + '}';\n cleantalkModalStyle.innerHTML += '#cleantalk-modal-close:after{' + closeCssAfter + '}';\n document.body.append( cleantalkModalStyle );\n /* Cleantalk Modal CSS end */\n\n let overlay = document.createElement( 'div' );\n overlay.setAttribute( 'id', 'cleantalk-modal-overlay' );\n document.body.append( overlay );\n\n document.body.classList.add( 'cleantalk-modal-opened' );\n\n let inner = document.createElement( 'div' );\n inner.setAttribute( 'id', 'cleantalk-modal-inner' );\n inner.setAttribute( 'style', innerCss );\n overlay.append( inner );\n\n let close = document.createElement( 'div' );\n close.setAttribute( 'id', 'cleantalk-modal-close' );\n inner.append( close );\n\n let content = document.createElement( 'div' );\n if ( this.loaded ) {\n const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n const serviceContentRegex = /.*\\/inc/g;\n if (serviceContentRegex.test(this.loaded)) {\n content.innerHTML = this.loaded;\n } else {\n content.innerHTML = this.loaded.replace(urlRegex, '$1');\n }\n } else {\n content.innerHTML = 'Loading...';\n // @ToDo Here is hardcoded parameter. Have to get this from a 'data-' attribute.\n this.load( 'get_options_template' );\n }\n content.setAttribute( 'id', 'cleantalk-modal-content' );\n inner.append( content );\n\n this.opened = true;\n },\n\n close: function() {\n document.body.classList.remove( 'cleantalk-modal-opened' );\n document.getElementById( 'cleantalk-modal-overlay' ).remove();\n document.getElementById( 'cleantalk-modal-styles' ).remove();\n document.dispatchEvent(\n new CustomEvent( 'cleantalkModalClosed', {\n bubbles: true,\n } ),\n );\n },\n\n};\n\n/* Cleantalk Modal helpers */\ndocument.addEventListener('click', function( e ) {\n if ( e.target && (e.target.id === 'cleantalk-modal-overlay' || e.target.id === 'cleantalk-modal-close') ) {\n cleantalkModal.close();\n }\n});\ndocument.addEventListener('cleantalkModalContentLoaded', function( e ) {\n if ( cleantalkModal.opened && cleantalkModal.loaded ) {\n document.getElementById( 'cleantalk-modal-content' ).innerHTML = cleantalkModal.loaded;\n }\n});\n\n/**\n * Handle external forms\n */\nfunction ctProtectExternal() {\n for (let i = 0; i < document.forms.length; i++) {\n if (document.forms[i].cleantalk_hidden_action === undefined &&\n document.forms[i].cleantalk_hidden_method === undefined) {\n // current form\n const currentForm = document.forms[i];\n\n // skip excluded forms\n if ( formIsExclusion(currentForm)) {\n continue;\n }\n\n // Ajax checking for the integrated forms - will be changed the whole form object to make protection\n if ( isIntegratedForm(currentForm) ) {\n apbctProcessExternalForm(currentForm, i, document);\n\n // Ajax checking for the integrated forms - will be changed only submit button to make protection\n } else if (\n // MooForm 3rd party service\n currentForm.dataset.mailingListId !== undefined ||\n (typeof(currentForm.action) == 'string' && (currentForm.action.indexOf('webto.salesforce.com') !== -1))\n ) {\n apbctProcessExternalFormByFakeButton(currentForm, i, document);\n\n // Common flow - modify form's action\n } else if (\n typeof(currentForm.action) == 'string' &&\n ( currentForm.action.indexOf('http://') !== -1 ||\n currentForm.action.indexOf('https://') !== -1 )\n ) {\n let tmp = currentForm.action.split('//');\n tmp = tmp[1].split('/');\n const host = tmp[0].toLowerCase();\n\n if (host !== location.hostname.toLowerCase()) {\n const ctAction = document.createElement('input');\n ctAction.name = 'cleantalk_hidden_action';\n ctAction.value = currentForm.action;\n ctAction.type = 'hidden';\n currentForm.appendChild(ctAction);\n\n const ctMethod = document.createElement('input');\n ctMethod.name = 'cleantalk_hidden_method';\n ctMethod.value = currentForm.method;\n ctMethod.type = 'hidden';\n\n currentForm.method = 'POST';\n\n currentForm.appendChild(ctMethod);\n\n currentForm.action = document.location;\n }\n }\n }\n }\n // Trying to process external form into an iframe\n apbctProcessIframes();\n // if form is still not processed by fields listening, do it here\n ctStartFieldsListening();\n}\n\n/**\n * Exclusion forms\n * @param {HTMLElement} currentForm\n * @return {boolean}\n */\nfunction formIsExclusion(currentForm) {\n const exclusionsById = [\n 'give-form', // give form exclusion because of direct integration\n 'frmCalc', // nobletitle-calc\n 'ihf-contact-request-form',\n 'wpforms', // integration with wpforms\n ];\n\n const exclusionsByRole = [\n 'search', // search forms\n ];\n\n const exclusionsByClass = [\n 'search-form', // search forms\n 'hs-form', // integrated hubspot plugin through dynamicRenderedForms logic\n 'ihc-form-create-edit', // integrated Ultimate Membership Pro plugin through dynamicRenderedForms logic\n 'nf-form-content', // integration with Ninja Forms for js events\n 'elementor-form', // integration with elementor-form\n 'wpforms', // integration with wpforms\n ];\n\n let result = false;\n\n try {\n // mewto forms exclusion\n if (currentForm.parentElement &&\n currentForm.parentElement.classList.length > 0 &&\n currentForm.parentElement.classList[0].indexOf('mewtwo') !== -1) {\n result = true;\n }\n\n exclusionsById.forEach(function(exclusionId) {\n const formId = currentForm.getAttribute('id');\n if ( formId !== null && typeof (formId) !== 'undefined' && formId.indexOf(exclusionId) !== -1 ) {\n result = true;\n }\n });\n\n exclusionsByClass.forEach(function(exclusionClass) {\n let foundClass = '';\n if (currentForm.getAttribute('class')) {\n foundClass = currentForm.getAttribute('class');\n } else {\n foundClass = apbctGetFormClass(currentForm, exclusionClass);\n }\n const formClass = foundClass;\n if ( formClass !== null && typeof formClass !== 'undefined' && formClass.indexOf(exclusionClass) !== -1 ) {\n result = true;\n }\n });\n\n exclusionsByRole.forEach(function(exclusionRole) {\n const formRole = currentForm.getAttribute('id');\n if ( formRole !== null && typeof formRole !== 'undefined'&& formRole.indexOf(exclusionRole) !== -1 ) {\n result = true;\n }\n });\n } catch (e) {\n console.table('APBCT ERROR: formIsExclusion() - ', e);\n }\n\n return result;\n}\n\n/**\n * Gets the form class if it is not in \n * @param {HTMLElement} currentForm\n * @param {string} exclusionClass\n * @return {string}\n */\nfunction apbctGetFormClass(currentForm, exclusionClass) {\n if (typeof(currentForm) == 'object' && currentForm.querySelector('.' + exclusionClass)) {\n return exclusionClass;\n }\n}\n\n/**\n * Handle external forms in iframes\n */\nfunction apbctProcessIframes() {\n const frames = document.getElementsByTagName('iframe');\n\n if ( frames.length > 0 ) {\n for ( let j = 0; j < frames.length; j++ ) {\n if ( frames[j].contentDocument == null ) {\n continue;\n }\n\n const iframeForms = frames[j].contentDocument.forms;\n if ( iframeForms.length === 0 ) {\n continue;\n }\n\n for ( let y = 0; y < iframeForms.length; y++ ) {\n const currentForm = iframeForms[y];\n if ( formIsExclusion(currentForm)) {\n continue;\n }\n apbctProcessExternalForm(currentForm, y, frames[j].contentDocument);\n }\n }\n }\n}\n\n/**\n * Process external forms\n * @param {HTMLElement} currentForm\n * @param {int} iterator\n * @param {HTMLElement} documentObject\n */\nfunction apbctProcessExternalForm(currentForm, iterator, documentObject) {\n const cleantalkPlaceholder = document.createElement('i');\n cleantalkPlaceholder.className = 'cleantalk_placeholder';\n cleantalkPlaceholder.style = 'display: none';\n\n currentForm.parentElement.insertBefore(cleantalkPlaceholder, currentForm);\n\n // Deleting form to prevent submit event\n const prev = currentForm.previousSibling;\n const formHtml = currentForm.outerHTML;\n const formOriginal = currentForm;\n\n // Remove the original form\n currentForm.parentElement.removeChild(currentForm);\n\n // Insert a clone\n const placeholder = document.createElement('div');\n placeholder.innerHTML = formHtml;\n prev.after(placeholder.firstElementChild);\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n\n const reUseCurrentForm = documentObject.forms[iterator];\n\n reUseCurrentForm.appendChild(forceAction);\n reUseCurrentForm.apbctPrev = prev;\n reUseCurrentForm.apbctFormOriginal = formOriginal;\n\n // mailerlite integration - disable click on submit button\n let mailerliteDetectedClass = false;\n if (reUseCurrentForm.classList !== undefined) {\n // list there all the mailerlite classes\n const mailerliteClasses = ['newsletterform', 'ml-block-form'];\n mailerliteClasses.forEach(function(mailerliteClass) {\n if (reUseCurrentForm.classList.contains(mailerliteClass)) {\n mailerliteDetectedClass = mailerliteClass;\n }\n });\n }\n if ( mailerliteDetectedClass ) {\n const mailerliteSubmitButton = documentObject.querySelector('form.' + mailerliteDetectedClass)\n .querySelector('button[type=\"submit\"]');\n if ( mailerliteSubmitButton !== undefined ) {\n mailerliteSubmitButton.addEventListener('click', function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(reUseCurrentForm);\n });\n }\n } else {\n documentObject.forms[iterator].onsubmit = function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(event.currentTarget);\n };\n }\n}\n\n/**\n * Process external forms via fake button replacing\n * @param {HTMLElement} currentForm\n * @param {int} iterator\n * @param {HTMLElement} documentObject\n */\nfunction apbctProcessExternalFormByFakeButton(currentForm, iterator, documentObject) {\n const submitButtonOriginal = currentForm.querySelector('[type=\"submit\"]');\n const onsubmitOriginal = currentForm.querySelector('[type=\"submit\"]').form.onsubmit;\n\n if ( ! submitButtonOriginal ) {\n return;\n }\n\n const parent = submitButtonOriginal.parentElement;\n const submitButtonHtml = submitButtonOriginal.outerHTML;\n\n // Remove the original submit button\n submitButtonOriginal.remove();\n\n // Insert a clone of the submit button\n const placeholder = document.createElement('div');\n placeholder.innerHTML = submitButtonHtml;\n parent.appendChild(placeholder.firstElementChild);\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n\n const reUseCurrentForm = documentObject.forms[iterator];\n\n reUseCurrentForm.appendChild(forceAction);\n reUseCurrentForm.apbctParent = parent;\n reUseCurrentForm.submitButtonOriginal = submitButtonOriginal;\n reUseCurrentForm.onsubmitOriginal = onsubmitOriginal;\n\n documentObject.forms[iterator].onsubmit = function(event) {\n event.preventDefault();\n sendAjaxCheckingFormData(event.currentTarget);\n };\n}\n\n/**\n * Process external forms\n * @param {HTMLElement} formSource\n * @param {HTMLElement} formTarget\n */\nfunction apbctReplaceInputsValuesFromOtherForm(formSource, formTarget) {\n const inputsSource = formSource.querySelectorAll('button, input, textarea, select');\n const inputsTarget = formTarget.querySelectorAll('button, input, textarea, select');\n\n inputsSource.forEach((elemSource) => {\n inputsTarget.forEach((elemTarget) => {\n if (elemSource.outerHTML === elemTarget.outerHTML) {\n if (elemTarget.type === 'checkbox' || elemTarget.type === 'radio') {\n elemTarget.checked = apbctVal(elemSource);\n } else {\n elemTarget.value = apbctVal(elemSource);\n }\n }\n });\n });\n}\n// clear protected iframes list\napbctLocalStorage.set('apbct_iframes_protected', []);\nwindow.onload = function() {\n if ( ! +ctPublic.settings__forms__check_external ) {\n return;\n }\n\n setTimeout(function() {\n ctProtectExternal();\n catchDynamicRenderedForm();\n catchNextendSocialLoginForm();\n ctProtectOutsideIframe();\n }, 2000);\n};\n\n/**\n * Protect forms placed in iframe with outside src\n */\nfunction ctProtectOutsideIframe() {\n let iframes = document.querySelectorAll('iframe');\n if (iframes.length > 0) {\n iframes.forEach(function(iframe) {\n if (iframe.src.indexOf('form.typeform.com') !== -1 ||\n iframe.src.indexOf('forms.zohopublic.com') !== -1 ||\n iframe.src.indexOf('link.surepathconnect.com') !== -1 ||\n iframe.classList.contains('hs-form-iframe') ||\n ( iframe.src.indexOf('facebook.com') !== -1 && iframe.src.indexOf('plugins/comments.php') !== -1)\n ) {\n // pass if is already protected\n if (false !== apbctLocalStorage.get('apbct_iframes_protected') &&\n apbctLocalStorage.get('apbct_iframes_protected').length > 0 &&\n typeof iframe.id !== 'undefined' &&\n apbctLocalStorage.get('apbct_iframes_protected').indexOf[iframe.id] !== -1\n ) {\n return;\n }\n ctProtectOutsideIframeHandler(iframe);\n }\n });\n }\n}\n\nlet ctProtectOutsideIframeCheck;\n/**\n * Protect forms placed in iframe with outside src handler\n * @param {HTMLElement} iframe\n */\nfunction ctProtectOutsideIframeHandler(iframe) {\n let cover = document.createElement('div');\n cover.style.width = '100%';\n cover.style.height = '100%';\n cover.style.background = 'black';\n cover.style.opacity = 0;\n cover.style.position = 'absolute';\n cover.style.top = 0;\n cover.onclick = function(e) {\n if (ctProtectOutsideIframeCheck === undefined) {\n let currentDiv = e.currentTarget;\n currentDiv.style.opacity = 0.5;\n let preloader = document.createElement('div');\n preloader.className = 'apbct-iframe-preloader';\n currentDiv.appendChild(preloader);\n let botDetectorToken = '';\n if (document.querySelector('[name*=\"ct_bot_detector_event_token\"]')) {\n botDetectorToken = document.querySelector('[name*=\"ct_bot_detector_event_token\"]').value;\n }\n\n let data = {\n 'action': 'cleantalk_outside_iframe_ajax_check',\n 'ct_no_cookie_hidden_field': getNoCookieData(),\n 'ct_bot_detector_event_token': botDetectorToken,\n };\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n ctProtectOutsideIframeCheck = true;\n if (result.apbct.blocked === false) {\n document.querySelectorAll('div.apbct-iframe-preloader').forEach(function(el) {\n el.parentNode.remove();\n });\n } else {\n document.querySelectorAll('div.apbct-iframe-preloader').forEach((el) => {\n el.parentNode.style.color = 'white';\n el.parentNode.innerHTML += result.apbct.comment;\n });\n document.querySelectorAll('div.apbct-iframe-preloader').forEach((el) => {\n el.remove();\n });\n }\n },\n },\n );\n }\n };\n iframe.parentNode.style.position = 'relative';\n iframe.parentNode.appendChild(cover);\n let iframes = apbctLocalStorage.get('apbct_iframes_protected');\n if (false === iframes) {\n iframes = [];\n }\n if (typeof iframe.id !== 'undefined') {\n iframes.push(iframe.id);\n apbctLocalStorage.set('apbct_iframes_protected', iframes);\n }\n}\n\n/**\n * Catch NSL form integration\n */\nfunction catchNextendSocialLoginForm() {\n let blockNSL = document.getElementById('nsl-custom-login-form-main');\n if (blockNSL) {\n blockBtnNextendSocialLogin(blockNSL);\n }\n}\n\n/**\n * Blocking NSL plugin buttons\n * @param {HTMLElement} blockNSL\n */\nfunction blockBtnNextendSocialLogin(blockNSL) {\n let parentBtnsNSL = blockNSL.querySelectorAll('.nsl-container-buttons a');\n let childBtnsNSL = blockNSL.querySelectorAll('a[data-plugin=\"nsl\"] .nsl-button');\n parentBtnsNSL.forEach((el) => {\n el.setAttribute('data-oauth-login-blocked', 'true');\n el.addEventListener('click', (event) => {\n event.preventDefault();\n });\n });\n childBtnsNSL.forEach((el) => {\n el.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n ctCheckAjax(el);\n });\n });\n}\n\n/**\n * Unlocking the button and clicking on it after an ajax response\n * @param {HTMLElement} childBtn\n */\nfunction allowAjaxNextendSocialLogin(childBtn) {\n childBtn.parentElement.setAttribute('data-oauth-login-blocked', 'false');\n childBtn.parentElement.click();\n}\n\n/**\n * Locking the button and entering a message after an ajax response\n * @param {HTMLElement} childBtn\n * @param {string} msg\n */\nfunction forbiddenAjaxNextendSocialLogin(childBtn, msg) {\n let parentElement = childBtn.parentElement;\n if (parentElement.getAttribute('data-oauth-login-blocked') == 'false') {\n parentElement.setAttribute('data-oauth-login-blocked', 'true');\n }\n if (!document.querySelector('.ct-forbidden-msg')) {\n let elemForMsg = document.createElement('div');\n elemForMsg.className = 'ct-forbidden-msg';\n elemForMsg.style.background = 'red';\n elemForMsg.style.color = 'white';\n elemForMsg.style.padding = '5px';\n elemForMsg.innerHTML = msg;\n parentElement.insertAdjacentElement('beforebegin', elemForMsg);\n }\n}\n\n/**\n * User verification using user data and ajax\n * @param {HTMLElement} elem\n */\nfunction ctCheckAjax(elem) {\n let data = {\n 'action': 'cleantalk_nsl_ajax_check',\n 'ct_no_cookie_hidden_field': document.getElementsByName('ct_no_cookie_hidden_field')[0].value,\n };\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n if (result.apbct.blocked === false) {\n allowAjaxNextendSocialLogin(elem);\n } else {\n forbiddenAjaxNextendSocialLogin(elem, result.apbct.comment);\n }\n },\n },\n );\n}\n\n/**\n * Checking the form integration\n * @param {HTMLElement} formObj\n * @return {boolean}\n */\nfunction isIntegratedForm(formObj) {\n const formAction = typeof(formObj.action) == 'string' ? formObj.action : '';\n const formId = formObj.getAttribute('id') !== null ? formObj.getAttribute('id') : '';\n\n if (\n formAction.indexOf('activehosted.com') !== -1 || // ActiveCampaign form\n formAction.indexOf('app.convertkit.com') !== -1 || // ConvertKit form\n ( formObj.firstChild.classList !== undefined &&\n formObj.firstChild.classList.contains('cb-form-group') ) || // Convertbox form\n formAction.indexOf('mailerlite.com') !== -1 || // Mailerlite integration\n formAction.indexOf('colcolmail.co.uk') !== -1 || // colcolmail.co.uk integration\n formAction.indexOf('paypal.com') !== -1 ||\n formAction.indexOf('infusionsoft.com') !== -1 ||\n formAction.indexOf('secure2.convio.net') !== -1 ||\n formAction.indexOf('hookb.in') !== -1 ||\n formAction.indexOf('external.url') !== -1 ||\n formAction.indexOf('tp.media') !== -1 ||\n formAction.indexOf('flodesk.com') !== -1 ||\n formAction.indexOf('sendfox.com') !== -1 ||\n formAction.indexOf('aweber.com') !== -1 ||\n formAction.indexOf('secure.payu.com') !== -1 ||\n formAction.indexOf('mautic') !== -1 || formId.indexOf('mauticform_') !== -1 ||\n formId.indexOf('ihf-contact-request-form') !== -1 ||\n formAction.indexOf('crm.zoho.com') !== -1 ||\n formId.indexOf('delivra-external-form') !== -1 ||\n formObj.hasAttribute('data-hs-cf-bound') // Hubspot integration in Elementor form\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Sending Ajax for checking form data\n * @param {HTMLElement} form\n * @param {HTMLElement} prev\n * @param {HTMLElement} formOriginal\n */\nfunction sendAjaxCheckingFormData(form) {\n // Get visible fields and set cookie\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(form);\n apbct_visible_fields_set_cookie( visibleFields );\n\n const data = {\n 'ct_bot_detector_event_token': apbctLocalStorage.get('bot_detector_event_token'),\n };\n let elems = form.elements;\n elems = Array.prototype.slice.call(elems);\n\n elems.forEach( function( elem, y ) {\n if ( elem.name === '' ) {\n data['input_' + y] = elem.value;\n } else {\n data[elem.name] = elem.value;\n }\n });\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function( result, data, params, obj ) {\n if ( result.apbct === undefined || ! +result.apbct.blocked ) {\n // MooSend integration\n if ( form.dataset.mailingListId !== undefined ) {\n let submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.remove();\n const parent = form.apbctParent;\n parent.appendChild(form.submitButtonOriginal);\n submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.click();\n return;\n }\n\n // Salesforce integration\n if (form.hasAttribute('action') &&\n (form.getAttribute('action').indexOf('webto.salesforce.com') !== -1)\n ) {\n let submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.remove();\n const parent = form.apbctParent;\n parent.appendChild(form.submitButtonOriginal);\n form.onsubmit = form.onsubmitOriginal;\n submitButton = form.querySelector('[type=\"submit\"]');\n submitButton.click();\n return;\n }\n\n const formNew = form;\n form.parentElement.removeChild(form);\n const prev = form.apbctPrev;\n const formOriginal = form.apbctFormOriginal;\n let mauticIntegration = false;\n\n apbctReplaceInputsValuesFromOtherForm(formNew, formOriginal);\n\n // mautic forms integration\n if (formOriginal.id.indexOf('mautic') !== -1) {\n mauticIntegration = true;\n }\n\n prev.after( formOriginal );\n\n // Clear visible_fields input\n for (const el of formOriginal.querySelectorAll('input[name=\"apbct_visible_fields\"]')) {\n el.remove();\n }\n\n for (const el of formOriginal.querySelectorAll('input[value=\"cleantalk_force_ajax_check\"]')) {\n el.remove();\n }\n\n // Common click event\n let submButton = formOriginal.querySelectorAll('button[type=submit]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n if (mauticIntegration) {\n setTimeout(function() {\n ctProtectExternal();\n }, 1500);\n }\n return;\n }\n\n submButton = formOriginal.querySelectorAll('input[type=submit]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n return;\n }\n\n // ConvertKit direct integration\n submButton = formOriginal.querySelectorAll('button[data-element=\"submit\"]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n return;\n }\n\n // Paypal integration\n submButton = formOriginal.querySelectorAll('input[type=\"image\"][name=\"submit\"]');\n if ( submButton.length !== 0 ) {\n submButton[0].click();\n }\n }\n if (result.apbct !== undefined && +result.apbct.blocked) {\n ctParseBlockMessage(result);\n }\n },\n });\n}\n\n/**\n * Handle dynamic rendered form\n */\nfunction catchDynamicRenderedForm() {\n const forms = document.getElementsByTagName('form');\n\n catchDynamicRenderedFormHandler(forms);\n\n const frames = document.getElementsByTagName('iframe');\n if ( frames.length > 0 ) {\n for ( let j = 0; j < frames.length; j++ ) {\n if ( frames[j].contentDocument == null ) {\n continue;\n }\n\n const iframeForms = frames[j].contentDocument.forms;\n\n if ( iframeForms.length === 0 ) {\n return;\n }\n\n catchDynamicRenderedFormHandler(iframeForms, frames[j].contentDocument);\n }\n }\n}\n\n/**\n * Process dynamic rendered form\n * @param {HTMLElements} forms\n * @param {HTMLElement} documentObject\n */\nfunction catchDynamicRenderedFormHandler(forms, documentObject = document) {\n const neededFormIds = [];\n for (const form of forms) {\n if (form.id.indexOf('hsForm') !== -1) {\n neededFormIds.push(form.id);\n }\n if (form.id.indexOf('createuser') !== -1 &&\n (form.classList !== undefined && form.classList.contains('ihc-form-create-edit'))\n ) {\n neededFormIds.push(form.id);\n }\n }\n\n for (const formId of neededFormIds) {\n const form = documentObject.getElementById(formId);\n form.apbct_external_onsubmit_prev = form.onsubmit;\n form.onsubmit = sendAjaxCheckingDynamicFormData;\n }\n}\n\n/**\n * Sending Ajax for checking form data on dynamic rendered form\n * @param {HTMLElement} form\n */\nfunction sendAjaxCheckingDynamicFormData(form) {\n form.preventDefault();\n form.stopImmediatePropagation();\n const formEvent = form;\n form = form.target;\n\n const forceAction = document.createElement('input');\n forceAction.name = 'action';\n forceAction.value = 'cleantalk_force_ajax_check';\n forceAction.type = 'hidden';\n form.appendChild(forceAction);\n\n // Get visible fields and set cookie\n const visibleFields = {};\n visibleFields[0] = apbct_collect_visible_fields(form);\n apbct_visible_fields_set_cookie(visibleFields);\n form.append(ctNoCookieConstructHiddenField('hidden'));\n\n const data = {};\n let elems = form.elements;\n elems = Array.prototype.slice.call(elems);\n\n elems.forEach( function( elem, y ) {\n if ( elem.name === '' ) {\n data['input_' + y] = elem.value;\n } else {\n data[elem.name] = elem.value;\n }\n });\n\n apbct_public_sendAJAX(\n data,\n {\n async: false,\n callback: function(result) {\n if ( result.apbct === undefined || ! +result.apbct.blocked ) {\n form.onsubmit = null;\n\n // Clear service fields\n for (const el of form.querySelectorAll('input[name=\"apbct_visible_fields\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[value=\"cleantalk_force_ajax_check\"]')) {\n el.remove();\n }\n for (const el of form.querySelectorAll('input[name=\"ct_no_cookie_hidden_field\"]')) {\n el.remove();\n }\n\n // Call previous submit action\n if (form.apbct_external_onsubmit_prev instanceof Function) {\n let timerId = setTimeout(function() {\n form.apbct_external_onsubmit_prev.call(form, formEvent);\n }, 500);\n clearTimeout(timerId);\n }\n\n const submButton = form.querySelector('input[type=\"submit\"]');\n if (submButton) {\n submButton.click();\n return;\n }\n }\n\n if (result.apbct !== undefined && +result.apbct.blocked) {\n ctParseBlockMessage(result);\n }\n },\n });\n}\n\n/**\n * Implement jQuery val() function\n * @param {HTMLElement} el\n * @return {HTMLElements}\n */\nfunction apbctVal(el) {\n if (el.options && el.multiple) {\n return el.options\n .filter((option) => option.selected)\n .map((option) => option.value);\n } else if (el.type === 'checkbox' || el.type === 'radio') {\n return el.checked ? el.checked : null;\n } else {\n return el.value;\n }\n}\n\n/**\n * Check form as internal.\n * @param {int} currForm Current form.\n */\nfunction ctCheckInternal(currForm) {\n // Gathering data\n const ctData = {};\n const elems = currForm.elements;\n let key;\n\n for (key in elems) {\n if (elems[key].type !== 'submit' &&\n elems[key].value !== undefined &&\n elems[key].value !== '') {\n ctData[elems[key].name] = currForm.elements[key].value;\n }\n }\n ctData.action = 'ct_check_internal';\n\n // AJAX Request\n apbct_public_sendAJAX(\n ctData,\n {\n url: ctPublicFunctions._ajax_url,\n callback: function(data) {\n if (data.success === true) {\n currForm.origSubmit();\n } else {\n alert(data.data);\n return false;\n }\n },\n },\n );\n}\n\ndocument.addEventListener('DOMContentLoaded', function() {\n let ctCurrAction = '';\n let ctCurrForm = '';\n\n if ( ! +ctPublic.settings__forms__check_internal ) {\n return;\n }\n\n setTimeout(() => {\n for ( let i = 0; i < document.forms.length; i++ ) {\n if ( typeof(document.forms[i].action) == 'string' ) {\n ctCurrForm = document.forms[i];\n ctCurrAction = ctCurrForm.action;\n if (\n ctCurrAction.indexOf('https?://') !== null && // The protocol is obligatory\n ctCurrAction.match(ctPublic.blog_home + '.*?\\.php') !== null && // Main check\n ! ctCheckInternalIsExcludedForm(ctCurrAction) // Exclude WordPress native scripts from processing\n ) {\n const formClone = ctCurrForm.cloneNode(true);\n ctCurrForm.parentNode.replaceChild(formClone, ctCurrForm);\n\n formClone.origSubmit = ctCurrForm.submit;\n formClone.submit = null;\n\n formClone.addEventListener('submit', function(event) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n ctCheckInternal(event.target);\n return false;\n });\n }\n }\n }\n }, 500);\n});\n\n/**\n * Check by action to exclude the form checking\n * @param {string} action\n * @return {boolean}\n */\nfunction ctCheckInternalIsExcludedForm(action) {\n // An array contains forms action need to be excluded.\n const ctInternalScriptExclusions = [\n 'wp-login.php', // WordPress login page\n 'wp-comments-post.php', // WordPress Comments Form\n ];\n\n return ctInternalScriptExclusions.some((item) => {\n return action.match(new RegExp(ctPublic.blog_home + '.*' + item)) !== null;\n });\n}\n"],"names":["ApbctCore","ajax_parameters","restParameters","selector","elements","eventCallback","eventSelector","event","constructor","this","select","HTMLCollection","Array","prototype","slice","call","document","querySelectorAll","deselect","addElement","elemToAdd","push","elem","reduce","css","style","getRaw","styleName","Object","hasOwn","DomStyleName","replace","group","toUpperCase","let","i","length","computedStyle","getComputedStyle","Number","hide","prop","display","show","addClass","classList","add","className","removeClass","remove","toggleClass","toggle","ajax","ajaxParameters","ApbctAjax","rest","ApbctRest","on","args","addEventListener","onChecker","bind","target","querySelector","stopPropagation","ready","callback","change","attr","attrName","outputValue","getAttribute","propName","value","html","val","data","name","is","filter","isElem","elemToCheck","match","newlyCreatedElement","createElement","Boolean","HTMLElement","HTMLUnknownElement","indexOf","tagName","toLowerCase","isWithoutSelector","splice","parent","parentElement","parents","children","siblings","current","after","content","append","fadeIn","time","opacity","last","Date","tick","window","requestAnimationFrame","setTimeout","fadeOut","ctProcessError","msg","url","log","message","err","file","fileName","ln","lineNumber","lineNo","col","columnNumber","columnNo","stacktrace","stack","cause","JSON","stringify","errorObj","error","location","href","userAgent","navigator","errArray","localStorage","getItem","parse","setItem","ct_js_errors","apbct","params","Math","floor","random","onerror","exception","filterWords","ApbctXhr","xhr","XMLHttpRequest","method","async","user","password","button","spinner","progressbar","context","onErrorCallback","responseType","headers","timeout","methods_to_convert_data_to_URL","body","http_code","status_text","parameters","key","console","prepare","keys","deleteDoubleJSONEncoding","convertData","open","setHeaders","onreadystatechange","onReadyStateChange","onload","onLoad","onprogress","onProgress","onError","ontimeout","onTimeout","send","setAttribute","cursor","complete","status","statusText","removeAttribute","on_ready_state_change","on_progress","response","httpCode","additionalMsg","errorString","errorOutput","errorMsg","headerName","setRequestHeader","convertDataToURL","convertDataToBody","paramsAppendix","URLSearchParams","toString","paramsPrefix","dataKey","FormData","object","objectKey","parsedValue","super","default_route","ctPublicFunctions","_rest_url","route","X-WP-Nonce","_rest_nonce","ctSetCookie","cookies","expires","listOfCookieNamesToForceAlt","skipAlt","data__cookies_type","forcedAltCookiesSet","forEach","item","apbctLocalStorage","set","encodeURIComponent","ctSetAlternativeCookie","ctPublic","force_alt_cookies","forceAltCookies","ctNoCookieAttachHiddenFieldsToForms","_expires","ctSecure","protocol","cookie","cookiePrefix","ctDetectForcedAltCookiesForms","ninjaFormsSign","elementorUltimateAddonsRegister","smartFormsSign","jetpackCommentsForm","cwginstockForm","userRegistrationProForm","etPbDiviSubscriptionForm","fluentBookingApp","bookingPress","isArray","getJavascriptClientData","e","apbct_force_alt_cookies","data__ajax_type","apbct_pixel_url","decodeURIComponent","apbct_public_sendREST","apbct_public_sendAJAX","action","notJson","ctGetCookie","matches","RegExp","undefined","ctDeleteCookie","cookieName","obj","_params","callback_context","callback_params","silent","no_nonce","_ajax_url","_ajax_nonce","no_cache","apbctGenerateUniqueID","substr","get","property","storageValue","json","hasOwnProperty","isJson","objToSave","timestamp","getTime","isAlive","maxLifetime","isSet","delete","removeItem","getCleanTalkData","apbctSessionStorage","sessionStorage","apbctOnAnimationStart","animationName","apbctAutocomplete","apbctCancelAutocomplete","apbctOnInput","inputType","element","hasAttribute","CustomEvent","bubbles","cancelable","detail","dispatchEvent","CTTypoData","fieldData","isAutoFill","isUseBuffer","speedDelta","firstKeyTimestamp","lastKeyTimestamp","lastDelta","countOfKey","fields","gatheringFields","field","assign","setListeners","currentDelta","abs","ctDate","ctTimeMs","ctMouseEventTimerFlag","ctMouseData","ctMouseDataCounter","ctCheckedEmails","ctMouseReadInterval","ctMouseWriteDataInterval","apbct_attach_event_handler","attachEvent","apbct_remove_event_handler","removeEventListener","detachEvent","ctFunctionFirstKey","ctKeyStopStopListening","ctFunctionMouseMove","cronFormsHandler","data__key_is_ok","setInterval","ctSetMouseMoved","round","clientY","clientX","ctMouseStopData","cronStartTimeout","restartFieldsListening","restartBotDetectorEventTokenAttach","token","doAttach","getElementsByClassName","setEventTokenField","clearInterval","checkEmail","currentEmail","email","result","now","ctSetPixelImg","pixelUrl","insertedImg","pixel__enabled","getElementById","ctSetPixelImgFromLocalstorage","ctGetPixelUrl","localStoragePixelUrl","String","ctSetHasScrolled","ctStartFieldsListening","forms","ctGetPageForms","handled_fields","handledFormFields","type","ctFunctionHasInputFocused","ctFunctionHasKeyUp","ctStopFieldsListening","eventName","functionName","ctSetHasInputFocused","ctSetHasKeyUp","ctPreloadLocalStorage","data__to_local_storage","entries","apbctPrepareBlockForAjaxForms","ctPrepareBlockMessage","responseText","ctParseBlockMessage","jQuery","ajaxComplete","settings","apbct_ready","sessionID","referrer","URL","host","apbctWriteReferrersToSessionStorage","cookiesType","initCookies","ctTypoData","getTimezoneOffset","apbctGetScreenInfo","webdriver","cookiesArray","split","trim","pixel__setting","pixel__url","data__email_check_before_post","ctAjaxSetupAddCleanTalkDataBeforeSendAjax","hiddenInput","visibleFieldsToInput","form","ctCheckHiddenFieldsExclusions","apbct_visible_fields","visibleFields","removeChild","apbct_collect_visible_fields","btoa","onsubmit_prev","onsubmit","ctFormIndex","apbct_visible_fields_set_cookie","isFormThatNeedCatchXhr","noCookieData","getNoCookieData","defaultSend","Function","ctOnsubmitPrevCallExclude","encodedEmailNodes","ctFillDecodedEmailHandler","_form","settings__forms__search_test","apbctSearchPrevOnsubmit","ctSearchFormOnSubmitHandler","eventToken","ajaxSetup","beforeSend","sourceSign","contains","noCookieField","honeyPotField","botDetectorField","hpValue","hpEventId","parentNode","preventDefault","callBack","_noCookieField","HTMLFormElement","submit","parsedCookies","atob","apbct_search_form__honeypot_value","apbct_search_form__honeypot_id","warn","encodedEmailNodesIsMixed","popupText","encoderPopup","innerHTML","wl_brandname","waitingPopup","color","innerText","apbctAjaxEmailDecodeBulk","clickSource","event_javascript_data","post_url","encodedEmails","encodedEmailsCollection","apbctTooltip","dataset","originalString","emailEncoderPassKey","apbctEmailEncoderCallbackBulk","res","resetEncodedNodes","ctShowDecodeComment","success","is_allowed","currentResultData","row","encoded_email","encodedEmail","baseElementContent","decoded_email","ctProcessDecodedDataResult","popup","click","comment","commonCookies","resultDataJson","apbct_headless","ct_checked_emails","ct_checkjs","ct_fkp_timestamp","ct_pointer_data","ct_ps_timestamp","ct_screen_info","ct_timezone","ctMouseMovedLocalStorage","ctHasScrolledLocalStorage","ctCookiesTypeLocalStorage","apbctPageHits","apbctPrevReferer","apbctSiteReferer","ctJsErrorsLocalStorage","ctPixelUrl","ctMouseMovedCookie","ctHasScrolledCookie","ctCookiesTypeCookie","ctCookiesPixelUrl","ct_mouse_moved","ct_has_scrolled","ct_cookies_type","apbct_page_hits","apbct_prev_referer","apbct_site_referer","apbct_ct_js_errors","removeDoubleJsonEncoding","targetElement","ctFillDecodedEmail","inputs","inputsVisible","inputsVisibleCount","inputsInvisible","inputsInvisibleCount","inputsWithDuplicateNames","isNaN","visibility","visible_fields","visible_fields_count","invisible_fields","invisible_fields_count","visibleFieldsCollection","formId","collection","apbct_js_keys__set_input_value","js_key","fullWidth","documentElement","scrollWidth","fullHeight","max","scrollHeight","offsetHeight","clientHeight","visibleWidth","clientWidth","visibleHeight","blocked","cleantalkModal","loaded","stop_script","stop","ctSetPixelUrlLocalstorage","ajaxPixelUrl","ctNoCookieConstructHiddenField","noCookieDataLocal","noCookieDataSession","noCookieDataTypo","typo","ctGetHiddenFieldExclusionsType","no_cookie","ncFieldExclusionsSign","data__visible_fields_required","id","hiddenFieldType","j","outerHTML","readyState","ct_checkjs_key","defaultFetch","fetch","checkFormsExistForCatching","isFormThatNeedCatch","includes","apply","formClasses","classExists","classForm","sessionCurrentPage","loading","opened","opening","load","apbct_admin_sendAJAX","renderCss","cssStr","styles","overlayCss","z-index","position","top","left","width","height","background","justify-content","align-items","innerCss","padding","border","border-radius","box-shadow","closeCss","right","box-sizing","closeCssBefore","transform","closeCssAfter","bodyCss","overflow","cleantalkModalStyle","overlay","inner","close","urlRegex","test","ctProtectExternal","cleantalk_hidden_action","cleantalk_hidden_method","ctMethod","currentForm","formIsExclusion","isIntegratedForm","apbctProcessExternalForm","mailingListId","apbctProcessExternalFormByFakeButton","tmp","hostname","ctAction","appendChild","apbctProcessIframes","exclusionId","exclusionClass","foundClass","formClass","apbctGetFormClass","exclusionRole","formRole","table","frames","getElementsByTagName","contentDocument","iframeForms","y","iterator","documentObject","cleantalkPlaceholder","prev","insertBefore","previousSibling","formHtml","formOriginal","placeholder","forceAction","firstElementChild","reUseCurrentForm","apbctPrev","apbctFormOriginal","mailerliteDetectedClass","mailerliteClass","mailerliteSubmitButton","sendAjaxCheckingFormData","currentTarget","submitButtonOriginal","onsubmitOriginal","submitButtonHtml","apbctParent","apbctReplaceInputsValuesFromOtherForm","formSource","formTarget","inputsSource","inputsTarget","elemSource","elemTarget","checked","apbctVal","ctProtectOutsideIframe","iframes","iframe","src","ctProtectOutsideIframeHandler","settings__forms__check_external","catchDynamicRenderedForm","catchNextendSocialLoginForm","ctProtectOutsideIframeCheck","cover","onclick","currentDiv","preloader","botDetectorToken","ct_no_cookie_hidden_field","ct_bot_detector_event_token","el","blockNSL","blockBtnNextendSocialLogin","parentBtnsNSL","childBtnsNSL","ctCheckAjax","allowAjaxNextendSocialLogin","childBtn","forbiddenAjaxNextendSocialLogin","elemForMsg","insertAdjacentElement","getElementsByName","formObj","formAction","firstChild","elems","submitButton","formNew","mauticIntegration","submButton","catchDynamicRenderedFormHandler","neededFormIds","apbct_external_onsubmit_prev","sendAjaxCheckingDynamicFormData","stopImmediatePropagation","formEvent","timerId","clearTimeout","options","multiple","option","selected","map","ctCheckInternal","currForm","ctData","alert","origSubmit","ctCheckInternalIsExcludedForm","some","blog_home","ctCurrAction","ctCurrForm","settings__forms__check_internal","formClone","cloneNode","replaceChild"],"mappings":"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"} >>>>>>> fix