<script src="https://app.getreview.io/tags/SKmZT27MoQkACFY5/sdk.js" async></script>
<script type="text/javascript">
!function(){function t(t,e){return function(){window.carrotquestasync.push(t,arguments)}}if("undefined"==typeof carrotquest){var e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://cdn.carrotquest.app/api.min.js",document.getElementsByTagName("head")[0].appendChild(e),window.carrotquest={},window.carrotquestasync=[],carrotquest.settings={};for(var n=["connect","track","identify","auth","onReady","addCallback","removeCallback","trackMessageInteraction"],a=0;a<n.length;a++)carrotquest[n[a]]=t(n[a])}}(),carrotquest.connect("56226-ac1ead40bee4ceadd6f4715ba8");
</script>
<script type="text/javascript">
var _tmr = window._tmr || (window._tmr = []);
_tmr.push({id: "3585438", type: "pageView", start: (new Date()).getTime()});
(function (d, w, id) {
  if (d.getElementById(id)) return;
  var ts = d.createElement("script"); ts.type = "text/javascript"; ts.async = true; ts.id = id;
  ts.src = "https://top-fwz1.mail.ru/js/code.js";
  var f = function () {var s = d.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ts, s);};
  if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); }
})(document, window, "tmr-code");
</script>
<script type="text/javascript">!function(){var t=document.createElement("script");t.type="text/javascript",t.async=!0,t.src='https://vk.com/js/api/openapi.js?173',t.onload=function(){VK.Retargeting.Init("VK-RTRG-1919861-9Kn3h"),VK.Retargeting.Hit()},document.head.appendChild(t)}();</script>
<script type="text/javascript" >
   (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
   m[i].l=1*new Date();
   for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
   k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
   (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

ym(64881682, 'init', {webvisor:true, clickmap:true, ecommerce:"dataLayer", referrer: document.referrer, url: location.href, accurateTrackBounce:true, trackLinks:true});
</script>
<script>
        (function (w, d, n, c) {
            w.CalltouchDataObject = n;
            w[n] = function () {
                w[n]["callbacks"].push(arguments)
            };
            if (!w[n]["callbacks"]) {
                w[n]["callbacks"] = []
            }
            w[n]["loaded"] = false;
            if (typeof c !== "object") {
                c = [c]
            }
            w[n]["counters"] = c;
            for (var i = 0; i < c.length; i += 1) {
                p(c[i])
            }

            function p(cId) {
                var a = d.getElementsByTagName("script")[0],
                    s = d.createElement("script"),
                    i = function () {
                        a.parentNode.insertBefore(s, a)
                    },
                    m = typeof Array.prototype.find === 'function',
                    n = m ? "init-min.js" : "init.js";
                s.async = true;
                s.src = "https://mod.calltouch.ru/" + n + "?id=" + cId;
                if (w.opera == "[object Opera]") {
                    d.addEventListener("DOMContentLoaded", i, false)
                } else {
                    i()
                }
            }
        })(window, document, "ct", "zmfbx1dz");
    </script>
<script type="text/javascript">
            (function (m, e, t, r, i, k, a) {
                m[i] = m[i] || function () {
                    (m[i].a = m[i].a || []).push(arguments)
                };
                m[i].l = 1 * new Date();
                k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a)
            })

            (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");

            ym("64881682", "init", {
                clickmap: true,
                trackLinks: true,
                accurateTrackBounce: true,
                webvisor: true,
                ecommerce: "dataLayer",
                params: {
                    __ym: {
                        "ymCmsPlugin": {
                            "cms": "wordpress",
                            "cmsVersion":"6.9",
                            "pluginVersion": "1.2.2",
                            "ymCmsRip": "2273214572"
                        }
                    }
                }
            });
        </script>
<script type="text/javascript">
function ct_cq_integration() { 

carrotquest.addCallback('user_replied', function(data) {
    console.log('carrotquest: user_replied');
    if (!window.ct_snd_flag_goal){ window.ct_snd_flag_goal = 1; ct('goal','cq_conversation'); }
});


Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){for(var t=this;t;){if(t.matches(e))return t;t=t.parentElement}return null});var ct_get_val=function(form,selector){if(!!form.querySelector(selector)){return form.querySelector(selector).value;}else{return '';}}
 
var send_ct_carrotquest = function(sub, data) {
    if (!window.ct_send_flag){ window.ct_send_flag = 1
        var fio = ''; var phone = ''; var email = '';
        if (!!data.fio){fio = data.fio;} if (!!data.phone){phone = data.phone;} if (!!data.email){email = data.email;}
        var ct_site_id = '69291';
        var ct_data = { fio: fio, phoneNumber: phone, email: email, subject: sub, sessionId: window.call_value };
        var request = window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();
        var post_data = Object.keys(ct_data).reduce(function(a, k) {if(!!ct_data[k]){a.push(k + '=' + encodeURIComponent(ct_data[k]));}return a}, []).join('&');
        var url = 'https://api.calltouch.ru/calls-service/RestAPI/'+ct_site_id+'/requests/orders/register/';
        if (!window.ct_snd_flag){
            window.ct_snd_flag = 1; setTimeout(function(){ window.ct_snd_flag = 0; }, 20000);
            request.open("POST", url, true); request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); request.send(post_data);
        }
    }
};
 
carrotquest.addCallback('messenger_opened', function(e) { console.log(e);
    var iframe_chat = document.querySelector('#carrot-messenger-frame'); var iframe_chat_document;
    if (iframe_chat){
        console.log('#carrot-messenger-frame (chat) detected!');
        var iframe_chat_window = iframe_chat.contentWindow;
        iframe_chat_document = iframe_chat.contentDocument || iframe_chat_window.document;
    }
    var iframe_popup = document.querySelector('#carrot-popup-frame'); var iframe_popup_document;
    if (iframe_popup){
        var iframe_popup_window = iframe_popup.contentWindow;
        iframe_popup_document = iframe_popup.contentDocument || iframe_popup_window.document;
    }
    var events = ['mousedown','touchstart']; events.forEach(function(ev){
        if (!!iframe_chat_document){
            iframe_chat_document.addEventListener(ev, function(e) {
                if (e.target.closest('#carrotquest-messenger-innerreply-submit') || e.target.closest('#carrotquest-messenger-autoreply-request-ok') || e.target.closest('[type="submit"]')) {
                    console.log('click detected!');
                    var ct_data = {}; var cq_form = e.target.closest('#carrotquest-messenger');
                    ct_data.fio = ct_get_val(cq_form,'input[name="name"]');
                    ct_data.phone = ct_get_val(cq_form,'input[name="phone"],input[placeholder*="телефон"],input[type="tel"]');
                    ct_data.email = ct_get_val(cq_form,'input[name="email"],input[placeholder*="mail"],input[type="email"],input[placeholder*="почт"]');
                    ct_data.requestUrl = location.href;
                    if (!!ct_data.phone || !!ct_data.email){send_ct_carrotquest('Посетитель оставил контакты в Carrotquest',ct_data);}
                    console.log('ct click: ',e.target,'ct_data: ',ct_data);
                }
                if (e.target.closest('button[id*="block-popup-button"]')) {
                    var ct_data = {}; var cq_form = e.target.closest('#carrotquest-messenger');
                    ct_data.fio = ct_get_val(cq_form,'input[data-prop="$name"]');
                    ct_data.phone = ct_get_val(cq_form,'input[data-prop="$phone"]');
                    ct_data.email = ct_get_val(cq_form,'input[data-prop="$email"],input[placeholder*="почт"]');
                    ct_data.requestUrl = location.href;
                    if (!!ct_data.phone || !!ct_data.email){send_ct_carrotquest('Заявка из формы Carrotquest',ct_data);}
                    console.log('ct click: ',e.target,'ct_data: ',ct_data);
                }
            });
        }
        if (iframe_popup_document){
            iframe_popup_document.addEventListener(ev, function(e) {
                if (e.target.closest('button[id*="block-popup-button"]')) {
                    var ct_data = {}; var cq_form = e.target.closest('#carrotquest-messenger');
                    ct_data.fio = ct_get_val(cq_form,'input[data-prop="$name"]');
                    ct_data.phone = ct_get_val(cq_form,'input[data-prop="$phone"]');
                    ct_data.email = ct_get_val(cq_form,'input[data-prop="$email"]');
                    ct_data.requestUrl = location.href;
                    if (!!ct_data.phone || !!ct_data.email){send_ct_carrotquest('Заявка из popup-формы Carrotquest',ct_data);}
                    console.log('ct click: ',e.target,'ct_data: ',ct_data);
                }
            });
        }
    });
});
};

setTimeout(function(){ ct_cq_integration(); }, 5000);
</script>