1$(document).ready(function() { 2 // --- ХелпеÑÑ Ð¸Ð½ÑегÑаÑии Ñ Yandex SmartCaptcha (модÑÐ»Ñ skyweb24) --- 3 // ÐодÑÐ»Ñ skyweb24 ÑендеÑÐ¸Ñ Ð²Ð¸Ð´Ð¶ÐµÑ ÐºÐ°Ð¿Ñи один Ñаз и не ÑбÑаÑÑÐ²Ð°ÐµÑ Ñвой 4 // одноÑазовÑй Ñокен. ÐбоÑаÑиваем smartCaptcha.render, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ id 5 // виджеÑа Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ конÑейнеÑа и обновлÑÑÑ Ñокен поÑле каждой попÑÑки оÑпÑавки. 6 (function () { 7 function wrapRender() { 8 if (window.smartCaptcha && !window.smartCaptcha.__skyWrapped) { 9 var origRender = window.smartCaptcha.render; 10 window.smartCaptcha.render = function (container) { 11 var id = origRender.apply(this, arguments); 12 try { 13 var el = (typeof container === 'string') ? document.getElementById(container) : container; 14 if (el) el.setAttribute('data-sky-widget-id', id); 15 } catch (e) {} 16 return id; 17 }; 18 window.smartCaptcha.__skyWrapped = true; 19 return true; 20 } 21 return false; 22 } 23 // smartCaptcha подгÑÑжаеÑÑÑ Ð°ÑÐ¸Ð½Ñ Ñонно ÑеÑез captcha.js - ждÑм его в Ñикле. 24 if (!wrapRender()) { 25 var timer = setInterval(function () { if (wrapRender()) clearInterval(timer); }, 50); 26 setTimeout(function () { clearInterval(timer); }, 15000); 27 } 28 })(); 29 30 // ÐбновлÑÐµÑ Ð²Ð¸Ð´Ð¶ÐµÑ SmartCaptcha внÑÑÑи ÑоÑмÑ, ÑÑÐ¾Ð±Ñ ÑледÑÑÑÐ°Ñ Ð¾ÑпÑавка полÑÑила 31 // Ñвежий (одноÑазовÑй) Ñокен. Ðа ÑоÑÐ¼Ð°Ñ Ð±ÐµÐ· капÑи ниÑего не делаеÑ. 32 function resetFormCaptcha(form) { 33 if (!window.smartCaptcha) return; 34 var container = form.querySelector('.captchaYandexClass'); 35 if (!container) return; 36 var widgetId = container.getAttribute('data-sky-widget-id'); 37 try { 38 if (widgetId !== null) { 39 window.smartCaptcha.reset(widgetId); 40 } else { 41 window.smartCaptcha.reset(); 42 } 43 } catch (e) {} 44 } 45 46 $('.form').on('submit', function(e) { 47 e.preventDefault(); 48 var form = $(this)[0]; 49 // ÐаÑÑлка Ð¾Ñ Ð¿Ð¾Ð²ÑоÑной оÑпÑавки: пока запÑÐ¾Ñ Ð² полÑÑе, новÑе ÑабмиÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑем 50 // (инаÑе вÑоÑой ÑйдÑÑ Ñ Ñже иÑполÑзованнÑм Ñокеном капÑи и ÑеÑÐ²ÐµÑ Ð·Ð°Ð²Ð¸ÑнеÑ). 51 if (form.dataset.submitting === '1') { return false; } 52 53 if($(form).hasClass('form-kp-small-business')) { 54 $(form).find('[data-computers]').val($('#cslider-1').val()); 55 $(form).find('[data-servers]').val($('#cslider-2').val()); 56 $(form).find('[data-rate_economical]').val($('#cslider-1-price-1').html()+" â½/меÑ"); 57 $(form).find('[data-rate_partner]').val($('#cslider-1-price-2').html()+" â½/меÑ"); 58 $(form).find('[data-rate_unlimited]').val($('#cslider-1-price-3').html()+" â½/меÑ"); 59 } 60 if($(form).hasClass('form-kp-retail-business')) { 61 let shops = $('#cslider-3').val(); 62 $(form).find('[data-shops]').val(shops); 63 64 t2 = Math.round(.75 * shops); 65 t1 = Math.round(1600 * t2); 66 67 $(form).find('[data-rate_monthly]').val(t1); 68 $(form).find('[data-departure_monthly]').val(t2.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ") + " â½"); 69 } 70 71 $(form).find('[data-url]').val(window.location.href); 72 // ÐалидиÑÑем на клиенÑе ÐРоÑпÑавки. ÐнаÑе Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ð°Ñ Ð¿ÐµÑÐ²Ð°Ñ Ð¿Ð¾Ð¿ÑÑка 73 // (напÑимеÑ, не оÑмеÑÐµÐ½Ñ ÑекбокÑÑ ÑоглаÑий) вÑÑ Ñавно ÑÑ Ð¾Ð´Ð¸Ñ Ð½Ð° ÑеÑÐ²ÐµÑ Ð¸ 74 // ÑÐ¶Ð¸Ð³Ð°ÐµÑ Ð¾Ð´Ð½Ð¾ÑазовÑй Ñокен SmartCaptcha, поÑле Ñего ÑоÑÐ¼Ñ Ð½ÐµÐ»ÑÐ·Ñ Ð¾ÑпÑавиÑÑ 75 // до пеÑезагÑÑзки ÑÑÑаниÑÑ. getErrors() заодно показÑÐ²Ð°ÐµÑ Ð¾Ñибки по полÑм. 76 var hasErrors = formValidate.getErrors(form) > 0; 77 // ÐапÑа (модÑÐ»Ñ skyweb24) должна бÑÑÑ Ð¿Ñойдена. ÐÑли оÑпÑавиÑÑ Ñ Ð¿ÑÑÑÑм 78 // smart-token, ÑеÑÐ²ÐµÑ Ð²Ð¸ÑÐ½ÐµÑ Ð¸ кнопка заÑÑÑÐµÐ²Ð°ÐµÑ Ð½Ð° "ÐÐ´ÐµÑ Ð¾ÑпÑавка...". 79 var captchaBox = form.querySelector('.captchaYandexClass'); 80 if (captchaBox) { 81 var holder = captchaBox.parentElement; 82 var smartToken = form.querySelector('input[name="smart-token"]'); 83 if (!smartToken || !smartToken.value) { 84 if (holder && !holder.querySelector('.form__captcha-error')) { 85 holder.insertAdjacentHTML('beforeend', '<div class="form__error form__c
85aptcha-error">ÐодÑвеÑдиÑе, ÑÑо Ð²Ñ Ð½Ðµ ÑобоÑ</div>'); 86 } 87 hasErrors = true; 88 } else if (holder) { 89 var prevErr = holder.querySelector('.form__captcha-error'); 90 if (prevErr) prevErr.remove(); 91 } 92 } 93 if (hasErrors) { 94 return false; 95 } 96 let formData = new FormData(form); 97 if($(form).data("customresult") && $(form).data("customresult") !== "0") { 98 formData.append('customresult', $(form).data("customresult")); 99 } 100 101 let ajaxUrl = 'ajax.php'; 102 if(location.pathname.indexOf('/uslugi/') === 0) { 103 ajaxUrl = '/uslugi/ajax.php'; 104 } 105 if(location.pathname.indexOf('/info/') === 0) { 106 ajaxUrl = '/info/ajax.php'; 107 } 108 if(location.pathname.indexOf('/feedback/') === 0) { 109 ajaxUrl = '/feedback/ajax.php'; 110 } 111 if(location.pathname.indexOf('/promo/') === 0) { 112 ajaxUrl = '/promo/ajax.php'; 113 } 114 115 let buttonText = $(form).find('.form__submit button').text(); 116 form.dataset.submitting = '1'; 117 $(form).find('.form__submit button').prop('disabled', true); 118 $(form).find('.form__submit button').text('ÐÐ´ÐµÑ Ð¾ÑпÑавка...'); 119 $.ajax({ 120 type: 'POST', 121 url: ajaxUrl, 122 dataType: 'text', 123 contentType: false, 124 processData: false, 125 data: formData, 126 // ТаймаÑÑ, ÑÑÐ¾Ð±Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° не завиÑла навÑегда, еÑли ÑеÑÐ²ÐµÑ Ð½Ðµ оÑвеÑÐ°ÐµÑ 127 // (напÑимеÑ, Ñокен капÑи пÑоÑÑÑ Ð¸ пÑовеÑка на ÑеÑвеÑе виÑнеÑ). 128 timeout: 30000, 129 success: function (response) { 130 if(response.indexOf('success') >= 0){ 131 form.reset(); 132 $(form) 133 .find('input[type=file]') 134 .siblings('label') 135 .html('ÐÑикÑепиÑÑ Ñайл'); 136 137 138 switch($(form).attr('id')) { 139 case "callback":ym(23183956,'reachGoal','obratni_zvonok');break; 140 case "offer":ym(23183956,'reachGoal','zaprosit_kp');break; 141 case "consult":ym(23183956,'reachGoal','poluchit_konsultaciu');break; 142 case "main-request-form":ym(23183956,'reachGoal','forma_na_glavnoi');break; 143 case "feedback-form-footer":ym(23183956,'reachGoal','obratnaia_svyaz_niz_stranicy');break; 144 case "65":ym(23183956,'reachGoal','polni_it_audit_niz_stranicy');break; 145 case "subscribe": 146 if(location.pathname.indexOf('/info/articles/optimizatsiya-it-infrastruktury-poluchite-chek-list-dlya-povysheniya-effektivnosti/') === 0) { 147 ym(23183956,'reachGoal','send_chek_list'); 148 } 149 break; 150 default: 151 ym(23183956,'reachGoal','poluchit_kp_niz_stranicy'); 152 } 153 154 if($(form).hasClass('panel-multiform__form')) { 155 $(form).removeClass('form-visible'); 156 let responseHtml = JSON.parse(response); 157 $('.panel-multiform__result').html(responseHtml[1]); 158 $('.panel-multiform__result').addClass('form-visible'); 159 } else { 160 let resultDiv = $(form).parents('.section-request').find('.section-request__result'); 161 if(resultDiv) { 162 $(form).parents('.section-request').find('.request').remove(); 163 let responseHtml = JSON.parse(response); 164 $(resultDiv).html(responseHtml[1]); 165 } 166 } 167 } else { 168 // СеÑÐ²ÐµÑ Ð¾Ñклонил оÑпÑÐ°Ð²ÐºÑ (напÑимеÑ, капÑа/ÑоглаÑие). Токен 169 // SmartCaptcha одноÑазовÑй и ÑолÑко ÑÑо изÑаÑÑ Ð¾Ð´Ð¾Ð²Ð°Ð½ - обновлÑем 170 // Ð²Ð¸Ð´Ð¶ÐµÑ Ð¿ÐµÑед ÑледÑÑÑей попÑÑкой, инаÑе ÐºÐ°Ð¶Ð´Ð°Ñ Ð¿Ð¾Ð²ÑоÑÐ½Ð°Ñ Ð¾ÑпÑавка 171 // бÑÐ´ÐµÑ Ð¿Ð°Ð´Ð°ÑÑ Ð½Ð° пÑовеÑке капÑи. 172 resetFormCaptcha(form); 173 $(form).find('.form__submit button').prop('disabled', false); 174 $(form).find('.form__submit button').text(buttonText); 175 return false;
176 } 177 }, 178 error: function (err) { 179 // Ðе оÑÑавлÑем ÐºÐ½Ð¾Ð¿ÐºÑ Ð½Ð°Ð²Ñегда в ÑоÑÑоÑнии "ÐÐ´ÐµÑ Ð¾ÑпÑавка...": 180 // ÑазблокиÑÑем ÐµÑ Ð¸ обновлÑем капÑÑ, ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло повÑоÑиÑÑ 181 // оÑпÑÐ°Ð²ÐºÑ Ð±ÐµÐ· пеÑезагÑÑзки ÑÑÑаниÑÑ. 182 resetFormCaptcha(form); 183 $(form).find('.form__submit button').prop('disabled', false); 184 $(form).find('.form__submit button').text(buttonText); 185 }, 186 complete: function () { 187 // Снимаем заÑÑÐ»ÐºÑ Ð² лÑбом иÑÑ Ð¾Ð´Ðµ (ÑÑÐ¿ÐµÑ / оÑибка / ÑаймаÑÑ). 188 form.dataset.submitting = ''; 189 } 190 }); 191 }); 192 193 194 $('.set-form-service-name').click(function(){ 195 $('input[data-service_name]').val('('+$(this).data('service_name')+')'); 196 }); 197 198 let formValidate = { 199 getErrors(form) { 200 let error = 0; 201 let formRequiredItems = form.querySelectorAll("*[data-required]"); 202 if (formRequiredItems.length) formRequiredItems.forEach((formRequiredItem => { 203 if ((null !== formRequiredItem.offsetParent || "SELECT" === formRequiredItem.tagName) && !formRequiredItem.disabled) error += this.validateInput(formRequiredItem); 204 })); 205 return error; 206 }, 207 validateInput(formRequiredItem) { 208 let error = 0; 209 if ("email" === formRequiredItem.dataset.required) { 210 formRequiredItem.value = formRequiredItem.value.replace(" ", ""); 211 if (this.emailTest(formRequiredItem)) { 212 this.addError(formRequiredItem); 213 error++; 214 } else this.removeError(formRequiredItem); 215 } else if ("checkbox" === formRequiredItem.type && !formRequiredItem.checked) { 216 this.addError(formRequiredItem); 217 error++; 218 } else if (!formRequiredItem.value.trim()) { 219 this.addError(formRequiredItem); 220 error++; 221 } else this.removeError(formRequiredItem); 222 return error; 223 }, 224 addError(formRequiredItem) { 225 formRequiredItem.classList.add("_form-error"); 226 formRequiredItem.parentElement.classList.add("_form-error"); 227 let inputError = formRequiredItem.parentElement.querySelector(".form__error"); 228 if (inputError) formRequiredItem.parentElement.removeChild(inputError); 229 if (formRequiredItem.dataset.error) formRequiredItem.parentElement.insertAdjacentHTML("beforeend", `<div class="form__error">${formRequiredItem.dataset.error}</div>`); 230 }, 231 removeError(formRequiredItem) { 232 formRequiredItem.classList.remove("_form-error"); 233 formRequiredItem.parentElement.classList.remove("_form-error"); 234 if (formRequiredItem.parentElement.querySelector(".form__error")) formRequiredItem.parentElement.removeChild(formRequiredItem.parentElement.querySelector(".form__error")); 235 }, 236 formClean(form) { 237 form.reset(); 238 setTimeout((() => { 239 let inputs = form.querySelectorAll("input,textarea"); 240 for (let index = 0; index < inputs.length; index++) { 241 const el = inputs[index]; 242 el.parentElement.classList.remove("_form-focus"); 243 el.classList.remove("_form-focus"); 244 formValidate.removeError(el); 245 } 246 let checkboxes = form.querySelectorAll(".checkbox__input"); 247 if (checkboxes.length > 0) for (let index = 0; index < checkboxes.length; index++) { 248 const checkbox = checkboxes[index]; 249 checkbox.checked = false; 250 } 251 if (flsModules.select) { 252 let selects = form.querySelectorAll(".select"); 253 if (selects.length) for (let index = 0; index < selects.length; index++) { 254 const select = selects[index].querySelector("select"); 255 flsModules.select.selectBuild(select); 256 } 257 } 258 }), 0); 259 }, 260 emailTest(formRequiredItem) { 261 return !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,8})+$/.test(formRequiredItem.value); 262 } 263 }; 264 function showMoreButton() { 265 $('.show-more-button').click( (e) => { 266 267 $.ajax({url: window.location.origin + window.location.pathname + '?AJAXLOAD=Y&PAGEN_1=' + ($(e.target).data('page') + 1)}) 268 .done(function (response) { 269 if (response) { 270 $(e.target).parents('.show-more').replaceWith(response); 271 showMoreButton(); 272 } 273 }); 274 }); 275 } 276 showMoreButton(); 277 278 if($('.calc-to-multiform').length) { 279 280 $('.calc-to-multiform .tariffs__button').click( (e) => { 281 let parent = $(e.target).parents('.tariffs__item'), 282 name = $(parent).find('.tariffs__hdr-name').html(), 283 price = $(parent).find('.tariffs__hdr-price').data('num'); 284 285 let text = `ТаÑÐ¸Ñ ${name} ${price} â½/Ð¼ÐµÑ 286ÐолиÑеÑÑво ÑизиÑеÑÐºÐ¸Ñ ÑеÑвеÑов Windows ${$('#cslider-server-1-count').val()} 287ÐолиÑеÑÑво виÑÑÑалÑнÑÑ ÑеÑвеÑов Windows ${$('#cslider-server-2-count').val()} 288ÐолиÑеÑÑво ÑизиÑеÑÐºÐ¸Ñ ÑеÑвеÑов Unix/Linux ${$('#cslider-server-3-count').val()} 289ÐолиÑеÑÑво виÑÑÑалÑнÑÑ ÑеÑвеÑов Unix/Linux ${$('#cslider-server-4-count').val()}`; 290 291 $('#offer textarea').html(text); 292 }); 293 } 294 295 if($('.calc-to-multiform-static').length) { 296 297 $('.calc-to-multiform-static .tariffs__button').click( (e) => { 298 let parent = $(e.target).parents('.tariffs__item'), 299 name = $(parent).find('.tariffs__hdr-name').html() 300 .replace(/<br\s*\/?>/gi, "\n") 301 .replace(/<\/?[^>]+(>|$)/g, ""), 302 price = $(parent).find('.tariffs__hdr-price').html(); 303 304 let text = ''; 305 if(name) 306 text+= `ÐолÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð´Ð»Ñ "${name}"`; 307 if(price) 308 text+= ` ${price} â½/меÑ`; 309 310 311 $('#offer textarea').html(text); 312 }); 313 } 314 315 if($('.section-calc').length || $('.section-cost-examples').length) { 316 $('.scroll-to-form').click( (e) => { 317 $([document.documentElement, document.body]).animate({ 318 scrollTop: $('.'+$(e.target).data('form')).parents('.section-request').offset().top 319 }, 1000); 320 }); 321 } 322 323 $('body').append('<div id="scroll-up-arrow"></div>'); 324 $(window).scroll(function () { 325 if ($(this).scrollTop() > 150) { 326 $('#scroll-up-arrow').fadeIn(); 327 } else { 328 $('#scroll-up-arrow').fadeOut(); 329 } 330 }); 331 if ($(window).scrollTop() > 150) { 332 $('#scroll-up-arrow').fadeIn(); 333 } else { 334 $('#scroll-up-arrow').fadeOut(); 335 } 336 $('#scroll-up-arrow').click(function () { 337 $('body,html').animate({ 338 scrollTop: 0 339 }, 400); 340 return false;
341 }); 342 $(document).on("click", ".call-multiform[data-formid='subscribe']", function () { 343 let formTitle = $(this).data("formtitle"); 344 let customResult = $(this).data("customresult"); 345 if(formTitle) { 346 $('#subscribe h2').text(formTitle); 347 } else { 348 $('#subscribe h2').text('ÐодпиÑка на новоÑÑи'); 349 } 350 let form = $('#subscribe')[0]; 351 if(customResult) { 352 $(form).attr("data-customresult", customResult); 353 } else { 354 $(form).attr("data-customresult", 0); 355 } 356 357 }); 358}); 359 360 361// Ð¡Ð¾Ñ ÑанÑем UTM меÑки в cookie 362function setUTMCookies() { 363 const queryString = window.location.search; 364 const urlParams = new URLSearchParams(queryString); 365 const utmParams = {}; 366 367 for (const [paramName, paramValue] of urlParams.entries()) { 368 if (paramName.startsWith('utm_')) { 369 // УÑÑанавливаем на ÑÑÑки 370 document.cookie = `${paramName}=${paramValue}; expires=${new Date(Date.now() + 1 * 24 * 3600 * 1000).toUTCString()}; path=/`;
371 utmParams[paramName] = paramValue; 372 } 373 } 374 375 return utmParams; 376} 377 378const utmParams = setUTMCookies();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.