(function (){
'use strict';
var cfg=window.susaninLeadsConfig||{};
var UTM_KEY='sf_utm_first';
var LANDING_KEY='sf_landing';
var SENT_ATTR='data-susanin-lead-sent';
var CONSENT_MARK='data-sf-consent-unified';
function consentLabelHtml(){
var personal=cfg.personalUrl||'/personal/';
var privacy=cfg.privacyUrl||'/confident_p/';
return 'Я соглашаюсь на обработку моих персональных данных в соответствии с <a href="' + privacy + '" target="_blank" rel="noopener noreferrer">Политикой конфиденциальности</a> и <a href="' + personal + '" target="_blank" rel="noopener noreferrer">Согласием на обработку данных</a>.';
}
function privacyLinks(){
return consentLabelHtml();
}
function unifyConsentCheckboxes(form){
if(!form||form.getAttribute(CONSENT_MARK)==='1') return;
var groups=form.querySelectorAll('.t-input-group_cb, .t-input-group[data-field-type="cb"]');
var primary=null;
var secondary=[];
var i;
for (i=0; i < groups.length; i++){
var group=groups[i];
var input=group.querySelector('input[type="checkbox"]');
if(!input) continue;
var fieldName=(group.getAttribute('data-field-name')||input.name||'').toLowerCase();
var isSecondary=fieldName==='checkbox_2'
|| fieldName==='confident_p'
|| fieldName.indexOf('confident')===0
|| /политик[аои].*конфиденциал/i.test(group.textContent||'');
if(isSecondary){
secondary.push(group);
}else if(!primary){
primary=group;
}else{
secondary.push(group);
}}
if(!primary){
var naked=form.querySelectorAll('input[type="checkbox"][name="Checkbox"], input[type="checkbox"][name="consent"],' +
'input[type="checkbox"][name="Checkbox_2"], input[type="checkbox"][name="confident_p"]'
);
if(naked.length >=2){
primary=naked[0].closest('.t-input-group, label, .t-input-block')||naked[0].parentNode;
for (i=1; i < naked.length; i++){
var wrap=naked[i].closest('.t-input-group, label, .t-input-block')||naked[i].parentNode;
if(wrap&&wrap!==primary) secondary.push(wrap);
}}
}
for (i=0; i < secondary.length; i++){
if(secondary[i]&&secondary[i].parentNode){
secondary[i].parentNode.removeChild(secondary[i]);
}}
var cb=form.querySelector('input[type="checkbox"][name="consent"], input[type="checkbox"][name="Checkbox"],' +
'input[type="checkbox"][data-tilda-req="1"]'
);
if(cb){
cb.checked=false;
cb.removeAttribute('checked');
cb.setAttribute('required', 'required');
cb.setAttribute('aria-required', 'true');
if(!cb.getAttribute('data-tilda-req')) cb.setAttribute('data-tilda-req', '1');
if(!cb.name) cb.name='Checkbox';
if(!cb.value) cb.value='yes';
var labelSpan=null;
var label=cb.closest('label');
if(label){
var spans=label.querySelectorAll('span');
for (i=0; i < spans.length; i++){
if(!spans[i].classList.contains('t-checkbox__indicator')){
labelSpan=spans[i];
}}
}
if(labelSpan){
labelSpan.innerHTML=consentLabelHtml();
}else if(label){
var ind=label.querySelector('.t-checkbox__indicator');
var text=document.createElement('span');
text.innerHTML=consentLabelHtml();
if(ind&&ind.nextSibling) label.insertBefore(text, ind.nextSibling);
else label.appendChild(text);
}}
form.setAttribute(CONSENT_MARK, '1');
}
function getCookie(name){
var m=document.cookie.match(new RegExp('(?:^|;)' + name.replace(/([.$?*|{}()[\]\\/+^])/g, '\\$1') + '=([^;]*)'));
return m ? decodeURIComponent(m[1]):'';
}
function readParams(){
var out={};
try {
var sp=new URLSearchParams(window.location.search);
sp.forEach(function (v, k){ out[k]=v; });
} catch (e){  }
return out;
}
function captureLanding(){
try {
if(!window.sessionStorage.getItem(LANDING_KEY)){
window.sessionStorage.setItem(LANDING_KEY, window.location.pathname||'/');
}
return window.sessionStorage.getItem(LANDING_KEY)||window.location.pathname||'/';
} catch (e){
return window.location.pathname||'/';
}}
function captureUtm(){
var params=readParams();
var keys=['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'yclid', 'ymclid', 'gclid'];
var found={};
var has=false;
keys.forEach(function (k){
if(params[k]){
found[k]=params[k];
has=true;
}});
if(has){
try {
window.sessionStorage.setItem(UTM_KEY, JSON.stringify(found));
window.localStorage.setItem(UTM_KEY, JSON.stringify(found));
} catch (e){  }
return found;
}
try {
var raw=window.sessionStorage.getItem(UTM_KEY)||window.localStorage.getItem(UTM_KEY);
if(raw) return JSON.parse(raw)||{};} catch (e2){  }
return {};}
function collectCalltouchSessionId(){
var modId=cfg.calltouchModId||'ouqgc5ng';
try {
if(typeof window.ct==='function'){
var params=window.ct('calltracking_params', modId);
if(params&&params.sessionId){
return String(params.sessionId);
}}
} catch (e){  }
var cookieSid=getCookie('_ct_session_id')||getCookie('ct_session_id')||'';
if(cookieSid) return String(cookieSid);
return '';
}
function collectMetrika(done){
var utm=captureUtm();
var data={
counter_id: cfg.metrikaId||'',
_ym_uid: getCookie('_ym_uid'),
_ym_d: getCookie('_ym_d'),
yclid: utm.yclid||getCookie('yclid')||'',
ymclid: utm.ymclid||getCookie('ymclid')||'',
gclid: utm.gclid||'',
utm_source: utm.utm_source||'',
utm_medium: utm.utm_medium||'',
utm_campaign: utm.utm_campaign||'',
utm_content: utm.utm_content||'',
utm_term: utm.utm_term||'',
client_id: '',
calltouch_session_id: collectCalltouchSessionId()
};
var counterId=parseInt(cfg.metrikaId, 10)||0;
if(counterId&&typeof window.ym==='function'){
var finished=false;
var finish=function (cid){
if(finished) return;
finished=true;
if(cid) data.client_id=String(cid);
if(!data.calltouch_session_id){
data.calltouch_session_id=collectCalltouchSessionId();
}
done(data);
};
try {
window.ym(counterId, 'getClientID', function (cid){
finish(cid);
});
setTimeout(function (){ finish(data._ym_uid); }, 400);
return;
} catch (e){  }}
data.client_id=data._ym_uid||'';
done(data);
}
function formFields(form){
var fields={};
var els=form.querySelectorAll('input, textarea, select');
for (var i=0; i < els.length; i++){
var el=els[i];
var name=el.name||el.id;
if(!name) continue;
if(el.type==='password'||(el.type==='hidden'&&/nonce|formservices|hp_|website/i.test(name))) continue;
if(el.type==='checkbox'||el.type==='radio'){
if(el.checked) fields[name]=el.value||'yes';
continue;
}
fields[name]=el.value;
}
return fields;
}
function pickName(fields, form){
return fields.Name||fields.name||fields.nm||(form.querySelector('[name="Name"],[name="name"]')||{}).value||'';
}
function pickPhone(fields, form){
var raw=fields.Phone||fields.phone||fields.ph||'';
var el=form.querySelector('[name="Phone"],[name="phone"],[type="tel"]');
if(!raw){
raw=el ? el.value:'';
}
if(el&&el.hasAttribute('data-phone-inside')){
var fieldGroup=el.closest('.sf-phone-field');
var codeEl=fieldGroup ? fieldGroup.querySelector('.sf-phone-field__code'):null;
var code=codeEl ? codeEl.textContent:'+7';
var digits=digitsPhone(raw);
return code + digits;
}
var digits=digitsPhone(raw);
if(digits.length===10) return '+7' + digits;
if(digits.length===11&&(digits.charAt(0)==='7'||digits.charAt(0)==='8')){
return '+7' + digits.slice(1);
}
if(raw&&String(raw).indexOf('+')===0) return raw;
return raw;
}
function hasConsent(form, fields){
if(fields.Checkbox||fields.consent) return true;
var cb=form.querySelector('[name="consent"],[name="Checkbox"],input[type="checkbox"][data-tilda-req="1"]');
if(cb&&cb.type==='checkbox') return !!cb.checked;
return false;
}
function requireConsentOrBlock(form, e){
ensureConsentCheckbox(form);
var fields=formFields(form);
if(hasConsent(form, fields)) return true;
if(e){
e.preventDefault();
e.stopPropagation();
if(typeof e.stopImmediatePropagation==='function') e.stopImmediatePropagation();
}
var err=form.querySelector('[data-lead-error], .t-input-error, .js-errorbox-all');
var msg='Нужно согласие на обработку персональных данных';
if(err&&err.hasAttribute&&err.hasAttribute('data-lead-error')){
err.textContent=msg;
err.hidden=false;
}else{
alert(msg);
}
var cb=form.querySelector('[name="consent"],[name="Checkbox"]');
if(cb&&typeof cb.focus==='function'){
try { cb.focus(); } catch (err2){  }}
return false;
}
function ensureConsentCheckbox(form){
unifyConsentCheckboxes(form);
if(form.querySelector('[name="consent"],[name="Checkbox"]')){
var existing=form.querySelector('[name="consent"],[name="Checkbox"]');
if(existing&&existing.type==='checkbox'){
existing.setAttribute('required', 'required');
existing.setAttribute('aria-required', 'true');
if(!existing.getAttribute('data-tilda-req')) existing.setAttribute('data-tilda-req', '1');
}
return;
}
var wrap=document.createElement('div');
wrap.className='t-input-group t-input-group_cb sf-consent-injected';
wrap.innerHTML='<label class="t-checkbox__control t-checkbox__control_flex" style="display:flex;gap:10px;align-items:flex-start;margin:10px 0;font-size:13px;line-height:1.4;">' +
'<input type="checkbox" name="Checkbox" value="yes" required data-tilda-req="1" aria-required="true" />' +
'<span>' + consentLabelHtml() + '</span></label>';
var box=form.querySelector('.t-form__inputsbox, .t-form__inputsbox-horizontal, .sf-lead-form')||form;
var submit=form.querySelector('.t-form__submit, [type="submit"]');
if(submit&&submit.parentNode){
submit.parentNode.insertBefore(wrap, submit);
}else{
box.appendChild(wrap);
}
form.setAttribute(CONSENT_MARK, '1');
}
function resolveFormMeta(form){
var leadKey=form.getAttribute('data-susanin-lead')||'';
var id=form.id||leadKey||'';
var map={
formsfhero: { form_id: 'home_hero', form_name: 'Главная — запись на тур (hero)', service: 'Тур по клубу' },
home_hero: { form_id: 'home_hero', form_name: 'Главная — запись на тур (hero)', service: 'Тур по клубу' },
formsftour: { form_id: 'home_tour', form_name: 'Главная — тур по клубу', service: 'Тур по клубу' },
home_tour: { form_id: 'home_tour', form_name: 'Главная — тур по клубу', service: 'Тур по клубу' },
formsftest: { form_id: 'trial_popup', form_name: 'Пробное занятие — блог', service: 'Пробное занятие 990 ₽' },
trial_popup: { form_id: 'trial_popup', form_name: 'Пробное занятие — блог', service: 'Пробное занятие 990 ₽' },
trainer_single: { form_id: 'trainer_single', form_name: 'Страница тренера', service: 'Запись к тренеру' },
promotion_single: { form_id: 'promotion_single', form_name: 'Страница акции', service: 'Заявка по акции' },
program_page: { form_id: 'program_page', form_name: 'Страница программ', service: 'Целевая программа' }};
if(map[leadKey]) return map[leadKey];
if(map[id]) return map[id];
var tildaName=form.getAttribute('data-tilda-formname')||'';
if(form.classList.contains('t-form')||form.classList.contains('js-form-proccess')){
return {
form_id: 'tilda_mirror',
form_name: tildaName||(id||'Tilda-форма'),
service: tildaName||'Заявка с сайта'
};}
return {
form_id: leadKey||id||'unknown',
form_name: form.getAttribute('data-form-name')||id||'Форма',
service: form.getAttribute('data-service')||''
};}
function buildPayload(form, metrika, extra){
var fields=formFields(form);
var meta=resolveFormMeta(form);
var payload={
action: cfg.action||'susanin_submit_lead',
nonce: cfg.nonce||'',
name: pickName(fields, form),
phone: pickPhone(fields, form),
email: fields.Email||fields.email||'',
message: fields.message||fields.comment||fields.Comment||fields.Textarea||'',
service: (extra&&extra.service)||form.getAttribute('data-service')||meta.service||'',
trainer: (extra&&extra.trainer)||form.getAttribute('data-trainer')||fields.trainer||'',
trainer_id: (extra&&extra.trainer_id)||form.getAttribute('data-trainer-id')||fields.trainer_id||'',
page_url: window.location.href,
page_path: window.location.pathname,
page_title: document.title||'',
landing: captureLanding(),
form_id: meta.form_id,
form_name: meta.form_name,
referrer: document.referrer||'',
consent: hasConsent(form, fields),
utm_source: metrika.utm_source||'',
utm_medium: metrika.utm_medium||'',
utm_campaign: metrika.utm_campaign||'',
utm_content: metrika.utm_content||'',
utm_term: metrika.utm_term||'',
gclid: metrika.gclid||'',
calltouch_session_id: metrika.calltouch_session_id||collectCalltouchSessionId(),
metrika: metrika,
fields: fields,
website: '',
hp_company: (form.querySelector('[name="hp_company"]')||{}).value||''
};
return payload;
}
function showLeadToast(title, text, kind){
var existing=document.getElementById('sf-lead-toast');
if(existing) existing.parentNode.removeChild(existing);
var toast=document.createElement('div');
toast.id='sf-lead-toast';
toast.className='sf-lead-toast sf-lead-toast--' + (kind||'ok');
toast.setAttribute('role', 'status');
toast.setAttribute('aria-live', 'assertive');
toast.innerHTML =
'<div class="sf-lead-toast__card">' +
'<div class="sf-lead-toast__icon" aria-hidden="true">' + (kind==='error' ? '!':'✓') + '</div>' +
'<div class="sf-lead-toast__body">' +
'<p class="sf-lead-toast__title"></p>' +
'<p class="sf-lead-toast__text"></p>' +
'</div>' +
'<button type="button" class="sf-lead-toast__close" aria-label="Закрыть">×</button>' +
'</div>';
toast.querySelector('.sf-lead-toast__title').textContent=title||'Готово';
toast.querySelector('.sf-lead-toast__text').textContent=text||'';
document.body.appendChild(toast);
requestAnimationFrame(function (){
toast.classList.add('is-visible');
});
var close=function (){
toast.classList.remove('is-visible');
setTimeout(function (){
if(toast.parentNode) toast.parentNode.removeChild(toast);
}, 280);
};
toast.querySelector('.sf-lead-toast__close').addEventListener('click', close);
if(kind!=='error'){
setTimeout(close, 8000);
}}
function showLeadSuccess(form, message){
hideTildaFormError(form);
var msg=(message&&String(message).trim())
? String(message).trim()
: 'Спасибо! Заявка отправлена. Мы перезвоним в рабочее время и подскажем по тарифам.';
var panel=form.querySelector('[data-sf-lead-success]');
if(!panel){
panel=document.createElement('div');
panel.setAttribute('data-sf-lead-success', '1');
panel.className='sf-lead-success';
panel.setAttribute('role', 'status');
panel.setAttribute('aria-live', 'assertive');
form.insertBefore(panel, form.firstChild);
}
panel.innerHTML='<div class="sf-lead-success__icon" aria-hidden="true">✓</div>' +
'<p class="sf-lead-success__title">Заявка отправлена</p>' +
'<p class="sf-lead-success__text"></p>';
var textEl=panel.querySelector('.sf-lead-success__text');
if(textEl) textEl.textContent=msg;
panel.classList.add('is-visible');
panel.style.display='block';
panel.hidden=false;
var oldSuccess=form.querySelector('.js-successbox, .t-form__successbox, [data-lead-success]');
if(oldSuccess&&oldSuccess!==panel){
oldSuccess.style.display='none';
oldSuccess.hidden=true;
oldSuccess.setAttribute('aria-hidden', 'true');
}
form.classList.add('js-send-form-success', 'sf-lead-form--sent', 'is-sent');
var hideNodes=form.querySelectorAll('.t-form__inputsbox, .t-form__submit, .t-submit, .sf-lead-form__fields, .sf-lead-form__row, .sf-lead-form__submit, .sf-lead-form__consent, [data-lead-error], .js-errorbox-all, .t-form__errorbox-middle'
);
for (var hi=0; hi < hideNodes.length; hi++){
hideNodes[hi].style.display='none';
hideNodes[hi].setAttribute('aria-hidden', 'true');
}
var submitBtn=form.querySelector('[type="submit"]');
if(submitBtn){
submitBtn.disabled=true;
submitBtn.style.display='none';
}
showLeadToast('Заявка отправлена', msg, 'ok');
try {
panel.scrollIntoView({ behavior: 'smooth', block: 'center' });
} catch (errScroll){
try { panel.scrollIntoView(true); } catch (err2){  }}
}
function refreshLeadNonce(done){
if(!cfg.ajaxUrl){
if(done) done();
return;
}
var url=cfg.ajaxUrl + '?action=susanin_lead_nonce';
var finish=function (){ if(done) done(); };
if(window.fetch){
fetch(url, { method: 'GET', credentials: 'same-origin', headers: { 'Accept': 'application/json' }})
.then(function (r){ return r.json(); })
.then(function (j){
if(j&&j.success&&j.data&&j.data.nonce){
cfg.nonce=j.data.nonce;
window.susaninLeadsConfig=cfg;
}
finish();
})
.catch(finish);
return;
}
try {
var xhr=new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange=function (){
if(xhr.readyState!==4) return;
try {
var j=JSON.parse(xhr.responseText||'{}');
if(j&&j.success&&j.data&&j.data.nonce){
cfg.nonce=j.data.nonce;
window.susaninLeadsConfig=cfg;
}} catch (e){  }
finish();
};
xhr.send();
} catch (e2){
finish();
}}
function fireMetrikaLeadGoals(payload){
var counterId=parseInt(cfg.metrikaId, 10)||0;
if(!counterId||typeof window.ym!=='function') return;
var formId=String((payload&&payload.form_id)||'unknown').replace(/[^\w\-]+/g, '_').slice(0, 64);
var params={
form_id: formId,
form_name: (payload&&payload.form_name)||'',
service: (payload&&payload.service)||'',
page_path: (payload&&payload.page_path)||(window.location.pathname||'')
};
try {
window.ym(counterId, 'reachGoal', 'lead_submit', params);
} catch (e1){  }
if(formId&&formId!=='unknown'){
try {
window.ym(counterId, 'reachGoal', 'lead_' + formId, params);
} catch (e2){  }}
}
function postLead(payload, cb){
if(!cfg.ajaxUrl){
if(cb) cb(false, { message: 'Конфиг заявок не загружен' });
return;
}
refreshLeadNonce(function (){
payload.nonce=cfg.nonce||payload.nonce||'';
var body=JSON.stringify(payload);
var finish=function (success, data){
if(success) fireMetrikaLeadGoals(payload);
if(cb) cb(success, data||{});
};
if(window.fetch){
fetch(cfg.ajaxUrl + '?action=' + encodeURIComponent(payload.action), {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
credentials: 'same-origin',
body: body
}).then(function (r){ return r.json().then(function (j){ return { ok: r.ok, j: j };});})
.then(function (res){
var success=res.ok&&res.j&&res.j.success;
finish(success, (res.j&&res.j.data)||{});
})
.catch(function (){ finish(false, { message: 'Ошибка сети' });});
return;
}
var xhr=new XMLHttpRequest();
xhr.open('POST', cfg.ajaxUrl + '?action=' + encodeURIComponent(payload.action), true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange=function (){
if(xhr.readyState!==4) return;
var j={};
try { j=JSON.parse(xhr.responseText); } catch (e){  }
finish(!!(j&&j.success), (j&&j.data)||{});
};
xhr.send(body);
});
}
function digitsPhone(value){
return String(value||'').replace(/\D+/g, '');
}
function validateTrainer(form){
var name=(form.querySelector('[name="name"]')||{}).value||'';
var phoneEl=form.querySelector('[name="phone"]');
var phone=phoneEl ? phoneEl.value:'';
var consent=form.querySelector('[name="consent"]');
var err=form.querySelector('[data-lead-error]');
var msg='';
var digits=digitsPhone(phone);
if(!name.trim()) msg='Укажите имя';
else if(digits.length < 9) msg='Укажите корректный телефон';
else if(!consent||!consent.checked) msg='Нужно согласие на обработку данных';
if(err){
err.textContent=msg;
err.hidden = !msg;
}
return !msg;
}
function showTrainerState(form, state, message){
var success=form.querySelector('[data-lead-success]');
var err=form.querySelector('[data-lead-error]');
var btn=form.querySelector('[type="submit"]');
if(state==='loading'){
if(btn){ btn.disabled=true; btn.setAttribute('data-label', btn.textContent); btn.textContent='Отправляем…'; }
return;
}
if(btn){
btn.disabled=false;
if(btn.getAttribute('data-label')) btn.textContent=btn.getAttribute('data-label');
}
if(state==='ok'){
if(err){ err.hidden=true; }
showLeadSuccess(form, message||'Спасибо! Мы свяжемся с вами в ближайшее время.');
return;
}else if(state==='error'){
var errMsg=message||'Не удалось отправить. Попробуйте ещё раз.';
if(err){ err.hidden=false; err.textContent=errMsg; }
showLeadToast('Не удалось отправить', errMsg, 'error');
}}
function maskPhone(input){
var inside=input.hasAttribute('data-phone-inside');
var fieldGroup=input.closest('.sf-phone-field');
var chrome=fieldGroup ? fieldGroup.querySelector('.sf-phone-field__chrome'):null;
var flagEl=fieldGroup ? fieldGroup.querySelector('.sf-phone-field__flag'):null;
var codeEl=fieldGroup ? fieldGroup.querySelector('.sf-phone-field__code'):null;
if(chrome) chrome.style.display='';
if(flagEl){
flagEl.style.background='url("https://flagcdn.com/w20/ru.png") no-repeat center/cover';
}
if(codeEl){
codeEl.textContent='+7';
}
function format(value){
var digits=(value||'').replace(/\D/g, '');
if(!digits) return '';
if(inside){
if(digits.length >=11&&(digits.charAt(0)==='7'||digits.charAt(0)==='8')){
digits=digits.slice(1);
}
digits=digits.slice(0, 10);
var out='';
if(digits.length > 0) out +='(' + digits.slice(0, 3);
if(digits.length >=3) out +=')';
if(digits.length > 3) out +=' ' + digits.slice(3, 6);
if(digits.length > 6) out +='-' + digits.slice(6, 8);
if(digits.length > 8) out +='-' + digits.slice(8, 10);
return out;
}else{
if(digits.charAt(0)==='8'){
digits='7' + digits.slice(1);
}
if(digits.length > 0&&digits.charAt(0)!=='7'){
digits='7' + digits;
}
digits=digits.slice(0, 11);
var out='+7';
if(digits.length > 1) out +=' (' + digits.slice(1, 4);
if(digits.length >=4) out +=')';
if(digits.length > 4) out +=' ' + digits.slice(4, 7);
if(digits.length > 7) out +='-' + digits.slice(7, 9);
if(digits.length > 9) out +='-' + digits.slice(9, 11);
return out;
}}
input.addEventListener('input', function (){
var formatted=format(input.value);
if(formatted!==input.value){
input.value=formatted;
}});
input.addEventListener('change', function (){
var formatted=format(input.value);
if(formatted!==input.value){
input.value=formatted;
}});
input.addEventListener('focus', function (){
if(!input.value){
input.value=inside ? '(':'+7 (';
}});
input.addEventListener('keydown', function (e){
if(e.key==='Backspace'){
var val=input.value;
if(val==='('||val==='+7 ('||val==='+7'){
setTimeout(function(){
if(input.value==='('||input.value==='+7 ('||input.value==='+7'){
input.value='';
if(chrome) chrome.style.display='';
if(flagEl) flagEl.style.background='';
if(codeEl) codeEl.textContent='+7';
}}, 0);
}}
});
if(input.value){
input.value=format(input.value);
}}
function wireTrainerForm(form){
unifyConsentCheckboxes(form);
var phone=form.querySelector('[data-phone-mask], [name="phone"]');
if(phone) maskPhone(phone);
form.addEventListener('submit', function (e){
e.preventDefault();
if(!validateTrainer(form)) return;
showTrainerState(form, 'loading');
collectMetrika(function (metrika){
var payload=buildPayload(form, metrika, {
trainer: form.getAttribute('data-trainer')||'',
trainer_id: form.getAttribute('data-trainer-id')||'',
service: form.getAttribute('data-service')||(
form.getAttribute('data-susanin-lead')==='promotion_single'
? 'Заявка по акции'
: 'Запись к тренеру'
)
});
postLead(payload, function (ok, data){
if(ok) showTrainerState(form, 'ok', data&&data.message);
else showTrainerState(form, 'error', data&&data.message);
});
});
});
}
function isBrandedLeadForm(form){
var key=form.getAttribute('data-susanin-lead')||'';
return key==='trainer_single'||key==='promotion_single';
}
function disarmTildaClientValidation(form){
if(!form) return;
form.classList.remove('js-form-proccess');
form.setAttribute('novalidate', 'novalidate');
var rules=form.querySelectorAll('[data-tilda-rule]');
for (var i=0; i < rules.length; i++){
rules[i].removeAttribute('data-tilda-rule');
}
var boxes=form.querySelectorAll('.js-errorbox-all, .t-form__errorbox-wrapper');
for (var b=0; b < boxes.length; b++){
boxes[b].style.display='none';
}}
function showTildaFormError(form, msg){
var box=form.querySelector('.js-errorbox-all, .t-form__errorbox-wrapper');
var allItem=form.querySelector('.js-rule-error-all');
if(box){
box.style.display='block';
var items=box.querySelectorAll('.js-rule-error');
for (var i=0; i < items.length; i++){
items[i].style.display='none';
}
if(allItem){
allItem.style.display='list-item';
allItem.textContent=msg||'Заполните все обязательные поля';
}}else{
alert(msg||'Заполните все обязательные поля');
}}
function hideTildaFormError(form){
var box=form.querySelector('.js-errorbox-all, .t-form__errorbox-wrapper');
if(box) box.style.display='none';
}
function validateExclusiveLead(form){
var fields=formFields(form);
var name=String(pickName(fields, form)||'').trim();
var phone=pickPhone(fields, form);
var digits=digitsPhone(phone);
if(!name){
showTildaFormError(form, 'Укажите имя');
return false;
}
if(digits.length < 10){
showTildaFormError(form, 'Укажите корректный телефон');
return false;
}
if(!hasConsent(form, fields)){
showTildaFormError(form, 'Нужно согласие на обработку персональных данных');
return false;
}
hideTildaFormError(form);
return true;
}
function wireTildaBridge(form){
if(isBrandedLeadForm(form)) return;
var exclusive=form.hasAttribute('data-susanin-lead') ||
form.classList.contains('t-form') ||
form.classList.contains('js-form-proccess');
if(exclusive){
disarmTildaClientValidation(form);
}
ensureConsentCheckbox(form);
form.addEventListener('submit', function (e){
e.preventDefault();
e.stopPropagation();
if(typeof e.stopImmediatePropagation==='function') e.stopImmediatePropagation();
if(exclusive){
if(!validateExclusiveLead(form)) return;
}else{
if(!requireConsentOrBlock(form, e)) return;
var fields0=formFields(form);
var phone0=pickPhone(fields0, form);
if(digitsPhone(phone0).length < 10){
showTildaFormError(form, 'Укажите корректный телефон');
return;
}}
if(form.getAttribute(SENT_ATTR)==='1') return;
form.setAttribute(SENT_ATTR, '1');
setTimeout(function (){ form.removeAttribute(SENT_ATTR); }, 8000);
var btn=form.querySelector('[type="submit"]');
if(btn){
btn.disabled=true;
btn.setAttribute('data-label', btn.textContent);
btn.textContent='Отправляем…';
}
collectMetrika(function (metrika){
postLead(buildPayload(form, metrika), function (ok, data){
if(btn){
btn.disabled=false;
if(btn.getAttribute('data-label')) btn.textContent=btn.getAttribute('data-label');
}
if(ok){
showLeadSuccess(
form,
(data&&data.message)||'Спасибо! Заявка отправлена. Мы перезвоним в рабочее время.'
);
}else{
var errMsg=(data&&data.message)||'Не удалось отправить. Попробуйте ещё раз.';
showTildaFormError(form, errMsg);
showLeadToast('Не удалось отправить', errMsg, 'error');
}});
});
}, true);
}
function init(){
captureUtm();
captureLanding();
var branded=document.querySelectorAll('form[data-susanin-lead="trainer_single"], form[data-susanin-lead="promotion_single"]'
);
for (var i=0; i < branded.length; i++) wireTrainerForm(branded[i]);
var masked=document.querySelectorAll('[data-phone-mask]');
for (var m=0; m < masked.length; m++){
if(!masked[m].closest('form[data-susanin-lead="trainer_single"], form[data-susanin-lead="promotion_single"]')){
maskPhone(masked[m]);
}}
var tildaForms=document.querySelectorAll('form.t-form, form.js-form-proccess, form[data-formactiontype]');
for (var j=0; j < tildaForms.length; j++){
if(isBrandedLeadForm(tildaForms[j])) continue;
wireTildaBridge(tildaForms[j]);
}
var tagged=document.querySelectorAll('form[data-susanin-lead]:not([data-susanin-lead="trainer_single"]):not([data-susanin-lead="promotion_single"])'
);
for (var k=0; k < tagged.length; k++) wireTildaBridge(tagged[k]);
}
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', init);
}else{
init();
}})();