(function(w, d) { if (w.LeadrockValidator) return; function LV (config) { this.config = config; var self = this; this.init = function(data) { this.metrika = new Metrika(); this.metrika.init(); this.data = data || {}; this.data.validation = this.data.validation || {}; if (!this.data.geo || !this.data.geo.iso_code) { self.metrika.goal('no_geo_info'); } this.browser_language = w.navigator.language || w.navigator.userLanguage || ''; try { this.browser_language = this.browser_language ? this.browser_language.split('-')[0].toUpperCase(): 'EN'; } catch (e) { self.metrika.goal('no_browser_language'); this.browser_language = 'EN' } d.addEventListener('DOMContentLoaded', this.bind_forms); setInterval(this.bind_forms, 1000); } this.on_submit = function(form) { var nua = navigator.userAgent; var is_android_browser = ((nua.indexOf('Mozilla/5.0') > -1 && nua.indexOf('Android ') > -1 && nua.indexOf('AppleWebKit') > -1) && !(nua.indexOf('Chrome') > -1)); return function(event) { event.preventDefault(); var tooltips = document.querySelectorAll('[data-leadrock-tooltip]'); for (var i = 0; i < tooltips.length; i++) { tooltips[i].remove(); } if (form.getAttribute('data-is-submitting') != undefined) { return false; } self.metrika.goal('submit_button_clicked'); var name_input = form.querySelector('input[name=name]'); if (name_input && !(vi = self.validate_name(name_input)).valid) { self.tooltip(name_input, vi.msg_code); self.metrika.goal('name_invalid'); return false; } self.metrika.goal('name_valid'); var phone_input = form.querySelector('input[name=phone]'); if (phone_input && !(vi = self.validate_phone(phone_input)).valid) { self.tooltip(phone_input, vi.msg_code); self.metrika.goal('phone_invalid'); return false; } self.metrika.goal('phone_valid'); var inputs = form.querySelectorAll('input, select, textarea'); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; var attr_name = input.getAttribute('name'); if (attr_name == 'name' || attr_name == 'phone') { continue; } if (! (vi = self.validate_other(input)).valid) { self.tooltip(input, vi.msg_code); self.metrika.goal('other_invalid'); return false; } self.metrika.goal('other_valid'); } form.setAttribute('data-is-submitting', ''); self.show_loading(); self.metrika.goal('continue_submitting'); form.submit(); } }; this.validate_phone = function (input) { var value = input.value; if (self.data.validation['phone']) { return self.validate_other(input); } if (!value.length) { return { valid: false, msg_code: 'empty' } } if (value.length < 5) { return { valid: false, msg_code: 'shorter_5' } } if (value.match(/[A-Za-z]/)) { return { valid: false, msg_code: 'incorrect_data' } } return { valid: true } }; this.validate_name = function (input) { var value = input.value; if (self.data.validation['name']) { return self.validate_other(input); } if (!value.length) { return { valid: false, msg_code: 'empty' } } return { valid: true } }; this.validate_other = function (input) { var validation_arr = self.data.validation[input.getAttribute('name')]; if (validation_arr) { for (var i = 0; i < validation_arr.length; i++) { var validation = validation_arr[i]; if (!input.value.match(new RegExp(validation.regex))) { return { valid: false, msg_code: validation.msg_code || 'incorrect_data' } } } } return { valid: true } }; this.tooltip = function (input, msg_code) { var msg = ''; var msgs; var iso_code; try { iso_code = self.data.geo.iso_code; } catch (e) { iso_code = null; } if (iso_code) { msgs = self.config.geo_tooltip[iso_code]; } if (!msgs) { msgs = self.config.lang_tooltip[self.browser_language]; } if (!msgs) { msgs = self.config.geo_tooltip['US']; } if (self.data.tooltips) { var keys = Object.keys(self.data.tooltips); for (var i = 0; i < keys.length; i++) { msgs[keys[i]] = self.data.tooltips[keys[i]]; } } msg = msgs[msg_code]; var id = 'leadrock-' + Math.random().toString(36).substr(2, 17); var html = self.config.tooltip_html.replace(new RegExp('#{id}', 'g'), id); html = html.replace(new RegExp('#{text}', 'g'), msg); var elem = document.createElement('div'); d.body.appendChild(elem); elem.outerHTML = html; elem = document.getElementById(id); elem.style.top = input.getBoundingClientRect().top + w.pageYOffset - 10 + 'px'; elem.style.left = input.getBoundingClientRect().left + w.pageXOffset + 'px'; elem.style.maxWidth = input.getBoundingClientRect().width + 'px'; elem.style.top = parseInt(elem.style.top) - elem.getBoundingClientRect().height + 'px'; input.style.outline = '2px solid rgba(244, 67, 54, 0.85)'; input.style.outlineOffset = '1px'; var focusing_again = false; input.addEventListener('focus', function() { elem.remove(); if (!focusing_again) { self.metrika.goal('focusing_again'); } focusing_again = true; input.style.outline = 'none'; }) self.metrika.goal('tooltip'); }; this.show_loading = function () { var id = 'leadrock-' + Math.random().toString(36).substr(2, 17); var html = self.config.ww_html.replace(new RegExp(self.config.loader_id_replace, 'g'), id); document.body.insertAdjacentHTML( 'beforeend', html ); self.config.run_ww(id); self.metrika.goal('loading'); } this.bind_forms = function() { var forms = d.querySelectorAll('form'); for (var i = 0; i < forms.length; i++) { var form = forms[i]; if (form.getAttribute('data-listen') != undefined) { continue; } form.setAttribute('data-listen', ''); form.addEventListener('submit', self.on_submit(form)) } } this.dev_error = function (msg) { alert(msg); throw msg; } } var geo_tooltip = { US: { empty: 'Input value cannot be empty', incorrect_data: 'Input value is incorrect', shorter_5: 'Input value length cannot be shorter than 5', }, PT: { empty: 'O campo não pode estar em branco.', incorrect_data: 'Dados são incorrectos.', shorter_5: 'Não inferior a 5 caracteres.', }, IT: { empty: 'Questo campo non può essere vuoto', incorrect_data: 'I dati inseriti non sono corretti', shorter_5: 'Non meno di 5 simboli', }, ES: { empty: 'Esta seccion no puede estar vacia', incorrect_data: 'Los datos introducidos no son correctos', shorter_5: 'No menos de 5 simbolos', }, ID: { empty: 'Kolom ini harus diisi', incorrect_data: 'Data yang Anda masukkan salah', shorter_5: 'Tidak boleh kurang dari 5 karakter', }, FR: { empty: 'Ce champ ne peut pas être vide', incorrect_data: 'Les données saisies sont incorrectes', shorter_5: 'Au moins 5 caractères', }, DE: { empty: 'Dieses Feld kann nicht leer sein', incorrect_data: 'Die eingegebenen Dateien sind nicht korrekt', shorter_5: 'Nicht weniger als 5 Symbole', }, MY: { empty: 'Medan ini tidak boleh kosong', incorrect_data: 'Data yang dimasukkan adalah salah', shorter_5: 'Sekurang-kurangnya 5 aksara', }, VN: { empty: 'Ô nà y không thể bá» trống', incorrect_data: 'Thông tin đã Ä‘iá»n không hợp lệ', shorter_5: 'Không được Ãt hÆ¡n 5 ký tá»±', no_letters: 'Ô nà y không được chứa chữ cái†или “Không được nháºp chữ cái' }, HU: { empty: 'Ez a mezÅ‘ nem lehet üres.', incorrect_data: 'A bevitt adatok helytelen.', shorter_5: 'Legalább 5 karakter hosszúságú.', no_letters: 'Ez a mezÅ‘ nem tartalmazhat betűket' }, GR: { empty: 'Το πεδίο αυτό δεν μποÏεί να είναι άδειο.', incorrect_data: 'Εισήχθησαν εσφαλμÎνα δεδομÎνα.', shorter_5: 'Δεν είναι μικÏότεÏο από 5 χαÏακτήÏες.', no_letters: 'Το πεδίο αυτό δεν μποÏεί να πεÏιÎχει γÏάμματα' }, CZ: { empty: 'Toto pole nemůže být prázdné.', incorrect_data: 'Zadány nesprávné údaje.', shorter_5: 'Ne ménÄ› než 5 znaků.', no_letters: 'Toto pole nesmà obsahovat pÃsmena' }, BG: { empty: 'Това поле не може да бъде празно.', incorrect_data: 'Въведени Ñа неправилни данни.', shorter_5: 'Ðе по-малко от 5 Ñимвола.', no_letters: 'Това поле не може да Ñъдържа букви' }, PL: { empty: 'To pole nie może być puste.', incorrect_data: 'Wprowadzono nieprawidÅ‚owe dane.', shorter_5: 'Nie krótszy niż 5 znaków.', no_letters: 'To pole nie może zawierać liter' }, RO: { empty: 'Acest câmp nu poate fi gol.', incorrect_data: 'Au fost introduse date incorecte.', shorter_5: 'Nu mai puÈ›in de 5 caractere.', no_letters: 'Acest câmp nu poate conÈ›ine litere' }, MA: { empty: 'لا يمكن أن تكون قيمة الإدخال ÙØ§Ø±ØºØ©', incorrect_data: 'قيمة المدخلات غير صØÙŠØØ©', shorter_5: 'لا يمكن أن يكون طول قيمة الإدخال أقصر من 5', }, }; var lang_tooltip = { EN: { empty: 'Input value cannot be empty', incorrect_data: 'Input value is incorrect', shorter_5: 'Input value length cannot be shorter than 5', }, PT: { empty: 'O campo não pode estar em branco.', incorrect_data: 'Dados são incorrectos.', shorter_5: 'Não inferior a 5 caracteres.', }, IT: { empty: 'Questo campo non può essere vuoto', incorrect_data: 'I dati inseriti non sono corretti', shorter_5: 'Non meno di 5 simboli', }, ES: { empty: 'Esta seccion no puede estar vacia', incorrect_data: 'Los datos introducidos no son correctos', shorter_5: 'No menos de 5 simbolos', }, ID: { empty: 'Kolom ini harus diisi', incorrect_data: 'Data yang Anda masukkan salah', shorter_5: 'Tidak boleh kurang dari 5 karakter', }, FR: { empty: 'Ce champ ne peut pas être vide', incorrect_data: 'Les données saisies sont incorrectes', shorter_5: 'Au moins 5 caractères', }, DE: { empty: 'Dieses Feld kann nicht leer sein', incorrect_data: 'Die eingegebenen Dateien sind nicht korrekt', shorter_5: 'Nicht weniger als 5 Symbole', }, MS: { empty: 'Medan ini tidak boleh kosong', incorrect_data: 'Data yang dimasukkan adalah salah', shorter_5: 'Sekurang-kurangnya 5 aksara', }, }; var tooltip_html = ' \ <div id="#{id}" data-leadrock-tooltip style="box-sizing: border-box; font-family: Arial; position: absolute; background-color: rgba(244, 67, 54, 0.85); border-radius: 3px; padding: 10px 25px; color: #fff; border: 1px solid #fff; z-index: 1000000;"> \ #{text} \ </div> \ '; var ww_html = ' \ <div id="{leadrock-loader-id}"> \ <style> \ #{leadrock-loader-id} { \ background-color: #fff !important; \ box-shadow: 0 3px 10px #d5d5d5 !important; \ border-radius: 3px !important; \ width: 95% !important; \ max-width: 300px !important; \ text-align: center !important; \ padding: 30px 0 !important; \ position: fixed !important; \ z-index: 1000000 !important; \ top: 0; \ left: 0; \ } \ #{leadrock-loader-id} img { \ vertical-align: middle !important; \ animation: {leadrock-loader-id}-leadrock-waiting-loader 1.2s linear infinite !important; \ } \ @keyframes {leadrock-loader-id}-leadrock-waiting-loader { \ 0% { \ transform: rotate(0deg); \ } \ 100% { \ transform: rotate(360deg); \ } \ } \ </style> \ <img \ src="data:image/png;base64,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" alt=""> \ </div> \ '; function run_ww(id) { var viewport_width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); var viewport_height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); var w = document.getElementById(id); w.style.top = (viewport_height - w.clientHeight) / 2 + 'px'; w.style.left = (viewport_width - w.clientWidth) / 2 + 'px'; } w.LeadrockValidator = new LV({ geo_tooltip: geo_tooltip, lang_tooltip: lang_tooltip, tooltip_html: tooltip_html, ww_html: ww_html, run_ww: run_ww, loader_id_replace: '{leadrock-loader-id}' }); function Metrika() { this.init = function () { try { (function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter50027818 = new Ya.Metrika2({ id:50027818, clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = "https://mc.yandex.ru/metrika/tag.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks2"); } catch (e) { console.log('metrika is not available here'); } } this.goal = function (name) { try { w.yaCounter50027818.reachGoal(name); } catch (e) { console.log('cant send goal info') } } } })(window, document);