(function ($){
$(document).ready(function (){
let currencySymbol="$";
let decimalPlaces=2;
function formatString(digits, pattern){
let formatted="";
let index=0;
for (let char of pattern){
if(char==="#"){
if(index < digits.length){
formatted +=digits[index++];
}else{
break;
}}else{
formatted +=char;
}}
return formatted;
}
function stripCNPJ(value){
var s=String(value).toUpperCase().replace(/[^A-Z0-9]/g, "");
if(s.length <=12) return s;
return s.slice(0, 12) + s.slice(12).replace(/\D/g, "").slice(0, 2);
}
function formatMoneyInput(value, type, prefix, input){
let decimalSeparator=type==="C" ? ".":",";
let thousandSeparator=type==="C" ? ",":".";
let rawDigits=value.replace(/\D/g, "");
decimalPlaces=2;
if(input!==""){
decimalPlaces=Number(input.dataset.decimalPlaces);
}
if(rawDigits.length===0){
return `${prefix}0${decimalSeparator}${"0".repeat(decimalPlaces)}`;
}
while (rawDigits.length < decimalPlaces + 1){
rawDigits="0" + rawDigits;
}
let cents=rawDigits.slice(-decimalPlaces);
let wholeNumber =
rawDigits.slice(0, -decimalPlaces).replace(/^0+/, "")||"0";
wholeNumber=wholeNumber.replace(/\B(?=(\d{3})+(?!\d))/g,
thousandSeparator
);
return `${prefix}${wholeNumber}${decimalSeparator}${cents}`;
}
function handleMoneyInput(event){
let input=event.target;
let oldValue=input.value;
let oldCursorPos=input.selectionStart;
let moneyPrefix=input.dataset.moneymaskPrefix;
let moneymaskFormat=input.dataset.moneymaskFormat;
let type=moneymaskFormat==="dot" ? "D":"C";
let newValue='';
if(input.value!='$0,00'){
newValue=formatMoneyInput(input.value, type, moneyPrefix, input);
}else{
newValue="";
}
if(input.value===newValue) return;
input.value=newValue;
let newCursorPos=oldCursorPos + (newValue.length - oldValue.length);
setCaretPosition(input, newCursorPos);
}
$(document).on("focus", ".mask-moneyc", function (){
let moneymaskFormat=$(this)[0].dataset.moneymaskFormat;
let type=moneymaskFormat==="dot" ? "D":"C";
let decimalSeparator=type==="C" ? ".":",";
let baseFormat=`${currencySymbol}0${decimalSeparator}${"0".repeat(decimalPlaces
)}`;
if($(this).val().trim()===""){
$(this).val(baseFormat);
}});
$(document).on("blur", ".mask-moneyc", function (){
let moneymaskFormat=$(this)[0].dataset.moneymaskFormat;
let type=moneymaskFormat==="dot" ? "D":"C";
let decimalSeparator=type==="C" ? ".":",";
let baseFormat=`${currencySymbol}0${decimalSeparator}${"0".repeat(decimalPlaces
)}`;
let val=$(this).val().trim();
let numericValue=val
.replace(new RegExp(`[^0-9${decimalSeparator}]`, "g"), "")
.replace(decimalSeparator, ".");
if(parseFloat(numericValue)===0||val===baseFormat){
$(this).val("");
}});
function formatCreditCard(digits, formatType){
let cardType=detectCardType(digits);
if(cardType==="American Express"){
digits=digits.slice(0, 15);
return formatType==="space"
? formatString(digits, "#### ###### #####")
: formatString(digits, "####-######-#####");
}else{
digits=digits.slice(0, 16);
return formatType==="space"
? formatString(digits, "#### #### #### ####")
: formatString(digits, "####-####-####-####");
}}
const cardLogos={
Visa: fmeData.pluginUrl + "assets/svg-icons/visa-logo.svg",
MasterCard: fmeData.pluginUrl + "assets/svg-icons/mastercard-logo.svg",
"American Express": fmeData.pluginUrl + "assets/svg-icons/amex-logo.svg",
Discover: fmeData.pluginUrl + "assets/svg-icons/discover-logo.svg",
JCB: fmeData.pluginUrl + "assets/svg-icons/jcb-logo.svg",
"Diners Club": fmeData.pluginUrl + "assets/svg-icons/cc-logo.svg",
Maestro: fmeData.pluginUrl + "assets/svg-icons/maestro-logo.svg",
UnionPay: fmeData.pluginUrl + "assets/svg-icons/cc-logo.svg",
RuPay: fmeData.pluginUrl + "assets/svg-icons/repay-logo.svg",
Unknown: fmeData.pluginUrl + "assets/svg-icons/cc-logo.svg",
};
function detectCardType(number){
const cleaned=number.replace(/\D/g, "");
const cardPatterns={
Visa: /^4/,
MasterCard: /^5[1-5]/,
"American Express": /^3[47]/,
Discover: /^6(?:011|5)/,
JCB: /^(?:2131|1800|35)/,
"Diners Club": /^3(?:0[0-5]|[689])/,
UnionPay: /^(62|81)/,
RuPay: /^(60|65|81|82|508)/,
Maestro: /^(50|5[6-9]|6[0-9])/,
};
for (let card in cardPatterns){
if(cardPatterns[card].test(cleaned)){
return card;
}}
return "Unknown";
}
function updateCardLogo(inputSelector){
let input=$(inputSelector);
let logo=input.siblings(".card-logo");
let cardNumber=input.val().replace(/\D/g, "");
if(cardNumber===""){
logo.hide();
}else{
let cardType=detectCardType(cardNumber);
if(cardType in cardLogos){
logo.attr("src", cardLogos[cardType]).show();
}else{
logo.hide();
}}
}
const formatFunctions={
".mask-cnpj": (digits)=> formatString(digits, "##.###.###/####-##"),
".mask-cpf": (digits)=> formatString(digits, "###.###.###-##"),
".mask-cep": (digits)=> formatString(digits, "#####-###"),
".mask-phus": (digits)=> formatString(digits, "(###) ###-####"),
".mask-ph8": (digits)=> formatString(digits, "####-####"),
".mask-ddd8": (digits)=> formatString(digits, "(##) ####-####"),
".mask-ddd9": (digits)=> formatString(digits, "(##) #####-####"),
".mask-dmy": (digits)=> formatString(digits, "##/##/####"),
".mask-mdy": (digits)=> formatString(digits, "##/##/####"),
".mask-hms": (digits)=> formatString(digits, "##:##:##"),
".mask-hm": (digits)=> formatString(digits, "##:##"),
".mask-dmyhm": (digits)=> formatString(digits, "##/##/#### ##:##"),
".mask-mdyhm": (digits)=> formatString(digits, "##/##/#### ##:##"),
".mask-my": (digits)=> formatString(digits, "##/####"),
".mask-ccs": (digits)=> formatCreditCard(digits, "space"),
".mask-cch": (digits)=> formatCreditCard(digits, "hyphen"),
".mask-ccmy": (digits)=> formatString(digits, "##/##"),
".mask-ccmyy": (digits)=> formatString(digits, "##/####"),
".mask-moneyc": (digits)=> formatMoneyInput(digits, "C", "$", ""),
".mask-moneyd": (digits)=> formatMoneyInput(digits, "D", "$", ""),
".mask-ipv4": (digits)=> formatString(digits, "###.###.###.###"),
};
Object.entries(formatFunctions).forEach(([selector, formatFunction])=> {
$(document).on("input focus", selector, function (event){
var input=this;
var oldCaret=getCaretPosition(input);
if($(input).hasClass("mask-moneyc") ||
$(input).hasClass("mask-moneyd")
){
let type=$(input).hasClass("mask-moneyc") ? "C":"D";
handleMoneyInput(event);
return;
}
var isCnpj=$(input).hasClass("mask-cnpj");
var rawDigits=isCnpj ? stripCNPJ(input.value):input.value.replace(/\D/g, "");
var digitIndex=getDigitIndexFromCaret(input.value, oldCaret, isCnpj);
var newVal=formatFunction(rawDigits);
var newCaret=mapDigitIndexToCaret(newVal, digitIndex, isCnpj);
if(newVal!='('){
input.value=newVal;
}else{
input.value="";
}
setCaretPosition(input, newCaret||0);
if($(input).hasClass("mask-ccs")||$(input).hasClass("mask-cch")){
updateCardLogo(input);
}});
});
function getCaretPosition(input){
return input.selectionStart;
}
function getDigitIndexFromCaret(formattedStr, caretPos, alphanumeric){
var count=0;
var pattern=alphanumeric ? /[A-Za-z0-9]/:/\d/;
for (var i=0; i < caretPos; i++){
if(pattern.test(formattedStr.charAt(i))){
count++;
}}
return count;
}
function mapDigitIndexToCaret(formattedStr, digitIndex, alphanumeric){
var count=0;
var pattern=alphanumeric ? /[A-Za-z0-9]/:/\d/;
for (var i=0; i < formattedStr.length; i++){
if(pattern.test(formattedStr.charAt(i))){
if(count===digitIndex){
return i;
}
count++;
}}
return formattedStr.length;
}
function setCaretPosition(elem, pos){
if(elem.setSelectionRange){
elem.focus();
elem.setSelectionRange(pos, pos);
}else if(elem.createTextRange){
var range=elem.createTextRange();
range.collapse(true);
range.moveEnd("character", pos);
range.moveStart("character", pos);
range.select();
}}
$(document).on("keydown", "input", function (e){
if(e.key==="Backspace"){
var input=this;
if($(input).hasClass("mask-moneyc") ||
$(input).hasClass("mask-moneyd")
){
let decimalSeparator=$(input).hasClass("mask-moneyc") ? ".":",";
let baseFormat=`${currencySymbol}0${decimalSeparator}${"0".repeat(decimalPlaces
)}`;
if(input.value===baseFormat){
e.preventDefault();
return;
}
handleMoneyInput(e);
return;
}
if(input.selectionStart!==input.selectionEnd){
e.preventDefault();
input.value="";
setCaretPosition(input, 0);
return;
}
var caretPos=getCaretPosition(input);
var isCnpj=$(input).hasClass("mask-cnpj");
var digitIndex=getDigitIndexFromCaret(input.value, caretPos, isCnpj);
if(digitIndex===0) return;
var rawDigits=isCnpj ? stripCNPJ(input.value):input.value.replace(/\D/g, "");
var newDigits =
rawDigits.slice(0, digitIndex - 1) + rawDigits.slice(digitIndex);
let matchedClass=Object.keys(formatFunctions).find((cls)=>
$(input).hasClass(cls.substring(1))
);
if(matchedClass){
var formatted=formatFunctions[matchedClass](newDigits);
input.value=formatted;
var newCaretPos=mapDigitIndexToCaret(formatted, digitIndex - 1, isCnpj);
setCaretPosition(input, newCaretPos);
}}
});
function validateInput(
selector,
errorClass,
validationFunction,
errorMessage
){
$(document).on("blur", selector, function (){
var input=$(this);
if(input.hasClass("hide-fme-mask-input")){
return;
}
var val=input.val();
var errorElement=input
.closest(".elementor-field-group")
.find("." + errorClass);
if(val.length===1&&!/\d/.test(val)){
input.val("");
errorElement.hide().text("");
return;
}
if(val!==""&&!validationFunction(val)){
errorElement
.text(errorMessage)
.css("display", "flex")
.hide()
.fadeIn(200);
}else{
errorElement.fadeOut(100, function (){
$(this).css("display", "none");
});
}});
$(document).on("input", selector, function (){
var input=$(this);
nextbtnVisibility(errorClass, input, validationFunction);
var errorElement=input
.closest(".elementor-field-group")
.find("." + errorClass);
if(errorElement.is(":visible")){
var val=input.val();
if(validationFunction(val)){
errorElement.fadeOut(100, function (){
$(this).css("display", "none");
});
}}
});
}
const validations={
".mask-cnpj": {
errorClass: "error-cnpj",
validate: isValidCNPJ,
msg: fmeData.errorMessages["mask-cnpj"],
},
".mask-cpf": {
errorClass: "error-cpf",
validate: isValidCPF,
msg: fmeData.errorMessages["mask-cpf"],
},
".mask-cep": {
errorClass: "error-cep",
validate: isValidCEP,
msg: fmeData.errorMessages["mask-cep"],
},
".mask-phus": {
errorClass: "error-phus",
validate: isValidPhoneUSA,
msg: fmeData.errorMessages["mask-phus"],
},
".mask-ph8": {
errorClass: "error-ph8",
validate: isValidPhone8,
msg: fmeData.errorMessages["mask-ph8"],
},
".mask-ddd8": {
errorClass: "error-ddd8",
validate: isValidPhoneDDD8,
msg: fmeData.errorMessages["mask-ddd8"],
},
".mask-ddd9": {
errorClass: "error-ddd9",
validate: isValidPhoneDDD9,
msg: fmeData.errorMessages["mask-ddd9"],
},
".mask-dmy": {
errorClass: "error-dmy",
validate: isValidDateDMY,
msg: fmeData.errorMessages["mask-dmy"],
},
".mask-mdy": {
errorClass: "error-mdy",
validate: isValidDateMDY,
msg: fmeData.errorMessages["mask-mdy"],
},
".mask-hms": {
errorClass: "error-hms",
validate: isValidTimeHMS,
msg: fmeData.errorMessages["mask-hms"],
},
".mask-hm": {
errorClass: "error-hm",
validate: isValidTimeHM,
msg: fmeData.errorMessages["mask-hm"],
},
".mask-dmyhm": {
errorClass: "error-dmyhm",
validate: isValidDateDMYHM,
msg: fmeData.errorMessages["mask-dmyhm"],
},
".mask-mdyhm": {
errorClass: "error-mdyhm",
validate: isValidDateMDYHM,
msg: fmeData.errorMessages["mask-mdyhm"],
},
".mask-my": {
errorClass: "error-my",
validate: isValidDateMY,
msg: fmeData.errorMessages["mask-my"],
},
".mask-ccs": {
errorClass: "error-ccs",
validate: isValidCreditCard,
msg: fmeData.errorMessages["mask-ccs"],
},
".mask-cch": {
errorClass: "error-cch",
validate: isValidCreditCard,
msg: fmeData.errorMessages["mask-cch"],
},
".mask-ccmy": {
errorClass: "error-ccmy",
validate: isValidExpiryMMYY,
msg: fmeData.errorMessages["mask-ccmy"],
},
".mask-ccmyy": {
errorClass: "error-ccmyy",
validate: isValidExpiryMMYYYY,
msg: fmeData.errorMessages["mask-ccmyy"],
},
".mask-ipv4": {
errorClass: "error-ipv4",
validate: isValidIPv4,
msg: fmeData.errorMessages["mask-ipv4"],
},
};
for (const [selector, { errorClass, validate, msg }] of Object.entries(validations
)){
validateInput(selector, errorClass, validate, msg);
}
function isValidPhoneUSA(phoneStr){
return /^\(\d{3}\) \d{3}-\d{4}$/.test(phoneStr);
}
function isValidPhone8(phoneStr){
return /^\d{4}-\d{4}$/.test(phoneStr);
}
function isValidPhoneDDD8(phoneStr){
return /^\(\d{2}\) \d{4}-\d{4}$/.test(phoneStr);
}
function isValidPhoneDDD9(phoneStr){
return /^\(\d{2}\) 9\d{4}-\d{4}$/.test(phoneStr);
}
function isValidDateTime(value, format){
let regexPattern;
let expectedParts;
switch (format){
case "DMY":
regexPattern=/^(\d{2})\/(\d{2})\/(\d{4})$/;
expectedParts=["day", "month", "year"];
break;
case "MDY":
regexPattern=/^(\d{2})\/(\d{2})\/(\d{4})$/;
expectedParts=["month", "day", "year"];
break;
case "HMS":
regexPattern=/^(\d{2}):(\d{2}):(\d{2})$/;
expectedParts=["hour", "minute", "second"];
break;
case "HM":
regexPattern=/^(\d{2}):(\d{2})$/;
expectedParts=["hour", "minute"];
break;
case "DMY-HM":
regexPattern=/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2})$/;
expectedParts=["day", "month", "year", "hour", "minute"];
break;
case "MDY-HM":
regexPattern=/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2})$/;
expectedParts=["month", "day", "year", "hour", "minute"];
break;
case "MY":
regexPattern=/^(\d{2})\/(\d{4})$/;
expectedParts=["month", "year"];
break;
default:
return false;
}
let match=value.match(regexPattern);
if(!match) return false;
let parts={};
expectedParts.forEach((part, index)=> {
parts[part]=parseInt(match[index + 1], 10);
});
if(parts.year&&(parts.year < 1500||parts.year > 3000)) return false;
if(parts.month&&(parts.month < 1||parts.month > 12)) return false;
if(parts.day){
let daysInMonth=new Date(parts.year, parts.month, 0).getDate();
if(parts.day < 1||parts.day > daysInMonth) return false;
}
if(parts.hour&&(parts.hour < 0||parts.hour >=24)) return false;
if(parts.minute&&(parts.minute < 0||parts.minute >=60))
return false;
if(parts.second&&(parts.second < 0||parts.second >=60))
return false;
return true;
}
function isValidExpiryDate(value, format){
let regexPattern =
format==="MM/YY" ? /^(\d{2})\/(\d{2})$/:/^(\d{2})\/(\d{4})$/;
let match=value.match(regexPattern);
if(!match) return false;
let month=parseInt(match[1], 10);
let year=parseInt(match[2], 10);
let currentYear=new Date().getFullYear();
let currentMonth=new Date().getMonth() + 1;
if(format==="MM/YY"){
year +=2000;
}
if(month < 1||month > 12) return false;
if(year < currentYear ||
(year===currentYear&&month < currentMonth)
){
return false;
}
return true;
}
function isValidDateDMY(dateStr){
return isValidDateTime(dateStr, "DMY");
}
function isValidDateMDY(dateStr){
return isValidDateTime(dateStr, "MDY");
}
function isValidTimeHMS(timeStr){
return isValidDateTime(timeStr, "HMS");
}
function isValidTimeHM(timeStr){
return isValidDateTime(timeStr, "HM");
}
function isValidDateDMYHM(dateTimeStr){
return isValidDateTime(dateTimeStr, "DMY-HM");
}
function isValidDateMDYHM(dateTimeStr){
return isValidDateTime(dateTimeStr, "MDY-HM");
}
function isValidDateMY(dateStr){
return isValidDateTime(dateStr, "MY");
}
function isValidExpiryMMYY(dateStr){
return isValidExpiryDate(dateStr, "MM/YY");
}
function isValidExpiryMMYYYY(dateStr){
return isValidExpiryDate(dateStr, "MM/YYYY");
}
function isValidCreditCard(cardNumber){
const cleaned=cardNumber.replace(/\D/g, "");
if(cleaned.length < 15||cleaned.length > 16) return false;
let sum=0;
let shouldDouble=false;
for (let i=cleaned.length - 1; i >=0; i--){
let digit=parseInt(cleaned.charAt(i), 10);
if(shouldDouble){
digit *=2;
if(digit > 9) digit -=9;
}
sum +=digit;
shouldDouble = !shouldDouble;
}
return sum % 10===0;
}
function isValidCNPJ(cnpj){
cnpj=cnpj.toUpperCase().replace(/[.\-\/]/g, '');
if(!/^[A-Z0-9]{12}\d{2}$/.test(cnpj)) return false;
if(/^(.)\1{13}$/.test(cnpj)) return false;
let calcCheckDigit=(cnpj, length)=> {
let weights =
length===12
? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
: [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
let sum=0;
for (let i=0; i < weights.length; i++){
sum +=(cnpj.charCodeAt(i) - 48) * weights[i];
}
let remainder=sum % 11;
return remainder < 2 ? 0:11 - remainder;
};
let firstCheck=calcCheckDigit(cnpj, 12);
let secondCheck=calcCheckDigit(cnpj.slice(0, 12) + firstCheck, 13);
return firstCheck===parseInt(cnpj.charAt(12), 10)&&secondCheck===parseInt(cnpj.charAt(13), 10);
}
function isValidCPF(cpf){
cpf=cpf.replace(/\D/g, "");
if(cpf.length!==11) return false;
if(/^(\d)\1+$/.test(cpf)) return false;
let calculateDigit=(cpf, length)=> {
let sum=0;
for (let i=0; i < length; i++){
sum +=parseInt(cpf.charAt(i)) * (length + 1 - i);
}
let result=(sum * 10) % 11;
return result===10 ? 0:result;
};
let firstDigit=calculateDigit(cpf, 9);
let secondDigit=calculateDigit(cpf, 10);
return (
firstDigit===parseInt(cpf.charAt(9)) &&
secondDigit===parseInt(cpf.charAt(10))
);
}
function isValidCEP(cep){
return /^\d{5}-\d{3}$/.test(cep);
}
function isValidIPv4(ip){
const ipv4Pattern=/^(?:\d{1,3}\.){3}\d{1,3}$/;
if(!ipv4Pattern.test(ip)) return false;
const octets=ip.split(".");
return octets.every((octet)=> {
let num=parseInt(octet, 10);
return num >=0&&num <=255;
});
}
let maskErrorArr={};
let nextBtnOriginalClicks={};
let recaptchaEvent={};
let submitBtnEvent={};
const nextbtnVisibility=(errorClass, input, validationFunction)=> {
const closesWidget=input.closest(".elementor-widget-form");
const widgetId=closesWidget.data('id');
const inuptId=input.attr('id');
const fieldStep=input.closest(".elementor-field-type-step");
const form=input.closest(".elementor-form");
const currectStepFields=form.find(".elementor-form-fields-wrapper.elementor-labels-above").children("div:not(.elementor-hidden)").find('input, textarea, select');
const submtBtnTag=form.find("button[type='submit']");
if(!closesWidget.length||!fieldStep.length){
return;
}
const nextBtn=fieldStep.find(".e-form__buttons__wrapper__button[data-direction='next']");
if((nextBtn.length==0&&submtBtnTag.length > 0)&&(submtBtnTag.length==0&&nextBtn.length==0)){
return;
}
let val=input.val();
if(val.length===1&&!/\d/.test(val)){
val='';
}
if(val!==""&&!validationFunction(val)){
if(closesWidget.length > 0){
if(!maskErrorArr[widgetId]){
maskErrorArr[widgetId]=[];
}
if(!maskErrorArr[widgetId].includes(inuptId)){
maskErrorArr[widgetId].push(inuptId);
}}
if(!nextBtnOriginalClicks[widgetId]||!nextBtnOriginalClicks[widgetId].length){
if(nextBtn.length > 0){
const origninalClicks=jQuery._data(nextBtn[0], "events");
if(origninalClicks&&(!nextBtnOriginalClicks[widgetId]||!nextBtnOriginalClicks[widgetId].length===0)){
nextBtnOriginalClicks[widgetId]=origninalClicks&&origninalClicks.click ? origninalClicks.click.map(h=> h.handler):[];
}}
}}else{
if(maskErrorArr[widgetId]&&maskErrorArr[widgetId].includes(inuptId)){
maskErrorArr[widgetId]=maskErrorArr[widgetId].filter(item=> item!==inuptId);
}}
if(maskErrorArr[widgetId]&&maskErrorArr[widgetId].length > 0){
if(nextBtn.length > 0){
const origninalClicks=jQuery._data(nextBtn[0], "events");
if(origninalClicks&&(!nextBtnOriginalClicks[widgetId]||!nextBtnOriginalClicks[widgetId].length)){
nextBtnOriginalClicks[widgetId]=origninalClicks&&origninalClicks.click ? origninalClicks.click.map(h=> h.handler):[];
}
if(nextBtnOriginalClicks[widgetId]&&nextBtnOriginalClicks[widgetId].length > 0){
nextBtn.off("click");
}}
}else{
if(recaptchaEvent[widgetId]){
submtBtnTag.on("click", recaptchaEvent[widgetId]);
}
if(submitBtnEvent[widgetId]){
form.on("submit", submitBtnEvent[widgetId]);
}
if(nextBtnOriginalClicks[widgetId]&&nextBtnOriginalClicks[widgetId].length > 0){
let isfieldsValid=true
for (let i=0; i < currectStepFields.length; i++){
if(currectStepFields[i].checkValidity()==false){
isfieldsValid=false;
break;
}}
if(isfieldsValid){
if(nextBtn.length > 0){
nextBtn.off("click");
nextBtnOriginalClicks[widgetId].forEach(fn=> {
nextBtn.one("click", fn);
});
}}
}}
}
$(document).on("mousedown", ".e-form__buttons__wrapper__button[data-direction='next']", function(e){
const form=$(this).closest(".elementor-form");
const mask_error_div=form.find(".elementor-form-fields-wrapper.elementor-labels-above").children("div:not(.elementor-hidden)").find('div.mask-error');
const closesWidget=$(this).closest(".elementor-widget-form");
const widgetId=closesWidget.data('id');
let mask_error=false;
for(let i=0; i<mask_error_div.length; i++){
if(mask_error_div[i].value!=""&&mask_error_div[i].style.display=='flex'){
mask_error=true;
break;
}}
if(maskErrorArr[widgetId]&&!maskErrorArr[widgetId].length > 0&&!mask_error){
if(nextBtnOriginalClicks[widgetId]&&nextBtnOriginalClicks[widgetId].length > 0){
$(this).off("click");
nextBtnOriginalClicks[widgetId].forEach(fn=> {
$(this).one("click", fn);
});
}}
})
$(document).on("click", ".e-form__buttons__wrapper__button[data-direction='previous']", function(e){
const form=$(this).closest(".elementor-form");
const closesWidget=form.closest(".elementor-widget-form");
const widgetId=closesWidget.data('id');
maskErrorArr[widgetId]=[];
const currectStepFields=form.find(".elementor-form-fields-wrapper.elementor-labels-above").children("div:not(.elementor-hidden)")
const nextBtn=currectStepFields.find(".e-form__buttons__wrapper__button[data-direction='next']");
if(nextBtnOriginalClicks[widgetId]&&nextBtnOriginalClicks[widgetId].length > 0){
nextBtn.off("click");
nextBtnOriginalClicks[widgetId].forEach(fn=> {
nextBtn.one("click", fn);
});
}})
$(document).on("mousedown", ".elementor-field-type-submit", function (e){
var $submitBtn=$(this);
var $form=$submitBtn.closest("form");
const closesWidget=$form.closest(".elementor-widget-form");
const widgetId=closesWidget.data('id');
const currectStepFields=$form.find(".elementor-form-fields-wrapper.elementor-labels-above").children("div:not(.elementor-hidden)")
const previousBtn=currectStepFields.find(".e-form__buttons__wrapper__button[data-direction='previous']");
const inputMaskFields=currectStepFields.find("input.fme-mask-input");
if(previousBtn&&previousBtn.length&&inputMaskFields&&inputMaskFields.length&&maskErrorArr[widgetId]&&maskErrorArr[widgetId].length){
var $subBtnTag=$submitBtn.find("button");
var $form=$submitBtn.closest("form");
const origninalclick=jQuery._data($subBtnTag[0], "events");
if(origninalclick&&origninalclick.click){
origninalclick.click.forEach((ele)=> {
if(ele.handler.toString().trim().includes("onV3FormSubmit")){
if(!recaptchaEvent[widgetId]){
recaptchaEvent[widgetId]=ele.handler;
}}
})
}
const origninalSubmit=jQuery._data($form[0], "events");
if(origninalSubmit&&origninalSubmit.submit){
origninalSubmit.submit.forEach((ele)=> {
if(ele.handler.toString().trim().includes("resetForm")){
if(!submitBtnEvent[widgetId]){
submitBtnEvent[widgetId]=ele.handler;
}}
})
}
if(submitBtnEvent[widgetId]){
$form.off("submit", submitBtnEvent[widgetId]);
}
if(recaptchaEvent[widgetId]){
$subBtnTag.off("click", recaptchaEvent[widgetId]);
}}
})
$(document).on("click", ".elementor-field-type-submit", function (e){
var $submitBtn=$(this);
if($submitBtn.find('button').hasClass('cfkef-prevent-submit')||$submitBtn.find('button').hasClass('confirmation-pending')
){
return
}
var $form=$submitBtn.closest("form");
const closesWidget=$form.closest(".elementor-widget-form");
const widgetId=closesWidget.data('id');
const submtBtnTag=$form.find("button[type='submit']");
if($submitBtn.data("clicked")){
e.preventDefault();
return;
}
$submitBtn.data("clicked", true);
$form.find("input").trigger("blur");
$form[0].classList.add("elementor-form-waiting");
setTimeout(()=> {
let hasVisibleMaskError=false;
const $errors=$form.find(".mask-error").filter(function (){
return $(this).text().trim()!==""&&$(this).css("display")=="flex";
});
if($errors.length > 0){
hasVisibleMaskError=true;
const $firstError=$errors.first();
$("html, body").animate({
scrollTop: $firstError.offset().top - 200
}, 300);
}
const $emptyRequiredMasked=$form.find("input[required]").filter(function (){
if(!$(this).hasClass('hide-fme-mask-input')){
const val=$(this).val().trim();
const isVisible=$(this).css("display")=="flex";
return (val===""||/^[\s_\-\(\)\.:/]+$/.test(val));
}});
if($emptyRequiredMasked.length > 0){
hasVisibleMaskError=true;
const $firstEmpty=$emptyRequiredMasked.first();
$("html, body").animate({
scrollTop: $firstEmpty.offset().top - 200
}, 300);
$firstEmpty.focus();
}
if(hasVisibleMaskError){
$submitBtn.data("clicked", false);
e.preventDefault();
return;
}
if(!hasVisibleMaskError){
if(recaptchaEvent[widgetId]){
submtBtnTag.on("click", recaptchaEvent[widgetId]);
submtBtnTag.trigger("click");
}
if(submitBtnEvent[widgetId]){
$form.on("submit", submitBtnEvent[widgetId]);
submtBtnTag.trigger("click");
}
$form[0].classList.remove("elementor-form-waiting");
$submitBtn.data("clicked", false);
if(!recaptchaEvent[widgetId]){
let error_messages=$form.find('.elementor-form-fields-wrapper').find('.elementor-message');
if(error_messages&&error_messages.length==0){
$form[0].requestSubmit();
}}
}}, 500);
});
});
})(jQuery);