var cboss = {
    cfg: {
        FacebookPixelCode: '',
        GoogleAnalyticsCode: '',
        GoogleTagManagerCode:'',
        LinkedinPartnerId:'',
        HubSpotTrackingCode:'',
        GoogleAnalyticsAnonymizedOnly: false,
        LogEnabled: true,
        CookieBossBaseUrl:'',      
        ContrastColor: '',
        Domain:'',
        ShowConsentButtonCss: '',
        ShowButtonImageHtml: '',
        ShowButtonAriaLabel: '',
        GtagAdStorageLevel:'',
        GtagAnalyticsStorageLevel: '',
        GtagAdPersonalisationLevel: '',
        GtagAdUserDataLevel: '',
        LogBannerClose: false,
        DefaultLanguange:''
    },
    bootstrapedCategories: [],   
    needBootstrap: function (cat) {
        if (this.bootstrapedCategories.indexOf(cat) != -1) {
            return false;
        } else {
            if (this.hasConsentFor(cat)) {
                this.bootstrapedCategories.push(cat);
                this.log('bootstrapping ' + cat);
                return true;
            }
            else {
                return false;
            }
        }
    },
    categories: ['tech', 'func', 'mktg'],
    checkAll: function () { cboss.categories.forEach(function (c) { document.getElementById("cboss_preference_" + c).checked = true; }); },   
    injectHtml: function (html) {
        document.body.insertAdjacentHTML('beforeend', html);
    },
    log: function (txt) {
        if (cboss.cfg.LogEnabled) {
            console.log(txt);
        }
    },
    loadscript: function (src, callback) {
        var script = document.createElement('script');
        document.head.appendChild(script);
        script.type = 'text/javascript';
        script.src = src;
        script.onload = callback;
    },
    applyConsentOptions: function () {       
        this.log('**** apply consent options ****');
        var gaAnonymizeIp = cboss.cfg.GoogleAnalyticsAnonymizedOnly || !cboss.hasConsentFor('mktg');
        if (this.needBootstrap('tech')) {                     

            if (cboss.cfg.GoogleAnalyticsCode != '') {
                this.log('init gtag with aip=' + gaAnonymizeIp);
                var parthis = this;
                cboss.loadscript('https://www.googletagmanager.com/gtag/js?id=' + cboss.cfg.GoogleAnalyticsCode, function () {

                    parthis.log('gtag loaded. setting anonymize_ip:' + gaAnonymizeIp);
                    gtag('js', new Date());
                    gtag('config', cboss.cfg.GoogleAnalyticsCode,
                        {
                            'anonymize_ip': gaAnonymizeIp
                        });
                });
            }
        }
        else {
            if (cboss.cfg.GoogleAnalyticsCode != '') {
                this.log('setting gtag with aip=' + gaAnonymizeIp);
                gtag('config', cboss.cfg.GoogleAnalyticsCode, { 'anonymize_ip': gaAnonymizeIp });
            }
          
        }      

        if (this.needBootstrap('mktg')) {
            if (cboss.cfg.FacebookPixelCode != '') {
                this.log('loading and init facebook pixel');
                !function (f, b, e, v, n, t, s) {
                    if (f.fbq) return; n = f.fbq = function () {
                        n.callMethod ?
                            n.callMethod.apply(n, arguments) : n.queue.push(arguments)
                    };
                    if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0';
                    n.queue = []; t = b.createElement(e); t.async = !0;
                    t.src = v; s = b.getElementsByTagName(e)[0];
                    s.parentNode.insertBefore(t, s)
                }(window, document, 'script',
                    'https://connect.facebook.net/en_US/fbevents.js');
                fbq('init', this.cfg.FacebookPixelCode);
                fbq('track', 'PageView');
            }
            if (cboss.cfg.HubSpotTrackingCode != '') {
                this.log('loading and init HubSpot tracking code');
                this.loadscript('https://js.hs-scripts.com/' + cboss.cfg.HubSpotTrackingCode + '.js');
            }

            if (cboss.cfg.LinkedinPartnerId != '') {
                (function () {
                    var s = document.getElementsByTagName("script")[0];
                    var b = document.createElement("script");
                    b.type = "text/javascript"; b.async = true;
                    b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
                    s.parentNode.insertBefore(b, s);
                })();
            }
        }

        var gtag_options = {};
        if (cboss.cfg.GtagAdStorageLevel != '') {
            gtag_options["ad_storage"] = this.hasConsentFor(cboss.cfg.GtagAdStorageLevel) ? "granted" : "denied";
        }
        if (cboss.cfg.GtagAnalyticsStorageLevel != '') {
            gtag_options["analytics_storage"] = this.hasConsentFor(cboss.cfg.GtagAnalyticsStorageLevel) ? "granted" : "denied";
        }
        if (cboss.cfg.GtagAdPersonalisationLevel != '') {
            gtag_options["ad_personalization"] = this.hasConsentFor(cboss.cfg.GtagAdPersonalisationLevel) ? "granted" : "denied";
        }
        if (cboss.cfg.GtagAdUserDataLevel != '') {
            gtag_options["ad_user_data"] = this.hasConsentFor(cboss.cfg.GtagAdUserDataLevel) ? "granted" : "denied";
        }
        if (JSON.stringify( gtag_options).length > 3) {
            this.log('updating gtag consent: ' + JSON.stringify(gtag_options));
            try {
                gtag('consent', 'update', gtag_options);
            }
            catch (err) {
                console.log('error: ' + err);
            }
        }

    },
    get: function(url, callback) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                callback(xmlhttp.responseText);
            }
        }
        xmlhttp.open("GET", url, true);
        xmlhttp.send();
    },
    injectButton: function (visible) {
        cboss.injectHtml('<button  aria-label="' + cboss.cfg.ShowButtonAriaLabel + '"  class="cboss_buttonshowbanner" style="display:' +
            (visible?'block':'none') + ';" onclick="cboss.showBanner();" type="button">' + cboss.cfg.ShowButtonImageHtml + '</button>'
            + '<style type="text/css">.cboss_buttonshowbanner svg { fill:#fff;} ' + cboss.cfg.ShowConsentButtonCss + ' .cboss_banner_preferences_group input:checked ~ .checkmark {background-color:'
            + cboss.cfg.ContrastColor + '} .cboss_contrastbgcolor{background-color:'
            + cboss.cfg.ContrastColor + '!important;} .cboss_contrastcolor{color:'
            + cboss.cfg.ContrastColor + '!important;} .cboss_banner_preferences_group input ~ .checkmark,  .cboss_contrastbordercolor{border-color:'
            + cboss.cfg.ContrastColor + '!important;}</style>');
    },
    showBanner: function () {
        if (document.getElementById("cboss_banner_container")) {
            document.getElementsByClassName("cboss_buttonshowbanner")[0].style = "display:none;";
            document.getElementById("cboss_banner_container").style = "display:block;";
        }
        else {
            cboss.get(cboss.cfg.CookieBossBaseUrl + 'services/banner.cshtml?domain=' + cboss.cfg.Domain,
                function (html) {
                    cboss.injectHtml(html);
                    cboss.categories.forEach(function (c) {
                        document.getElementById("cboss_preference_" + c).checked = cboss.hasConsentFor(c);
                    });
                    document.getElementsByClassName("cboss_buttonshowbanner")[0].style = "display:none;";
                    var linkToggle = document.querySelectorAll('.cboss_js-toggle');
                    for (i = 0; i < linkToggle.length; i++) {
                        linkToggle[i].addEventListener('click', function (event) {
                            event.preventDefault();
                            var container = document.getElementById(this.dataset.container);
                            if (!container.classList.contains('active')) {
                                container.classList.add('active');
                                container.style.height = 'auto';
                                var height = container.clientHeight + 'px';
                                container.style.height = '0px';
                                setTimeout(function () {
                                    container.style.height = height;
                                }, 0);
                            } else {
                                container.style.height = '0px';
                                container.addEventListener('transitionend', function () {
                                    container.classList.remove('active');
                                }, {
                                    once: true
                                });
                            }
                        });
                    }
                });
        }
    },
    getConsentInfo: function () {
        var json = this.getCookieOrDefault('cbossconsentinfo', '{}');
        //this.log(json);
        return JSON.parse(json);
    },
    getTrackConsentUrl: function () {
        var url = cboss.cfg.CookieBossBaseUrl + 'js/' + cboss.cfg.Domain + '/trackconsent.js?ts=' + (new Date).getTime();
        var cci = this.getConsentInfo();
        if (cci["id"]) {
            url = url + "&id=" + cci["id"];
        }
        return url;
    },
    confirmAll: function () { this.checkAll(); this.confirmSelected(); },
    confirmSelected: function () {
        var url = this.getTrackConsentUrl();
        cboss.categories.forEach(function (c) {
            url = url + ("&" + c + '=') + (document.getElementById("cboss_preference_" + c).checked ? 1 : 0);
        });
       
        cboss.loadScript(url,  function () {
            cboss.hideBanner();
            cboss.applyConsentOptions();
        });
    },
    hideBanner: function (log) {
        if (this.cfg.LogBannerClose && log) {
            cboss.loadScript(this.getTrackConsentUrl() + "&command=hidebanner");
        }
        else {
            document.getElementById("cboss_banner_container").style = "display:none;";
            document.getElementsByClassName("cboss_buttonshowbanner")[0].style = "display:block;";
            document.getElementById('cboss_banner_container').classList.remove('cboss_expanded');
        }
    },
    loadScript: function (url, callback, charset) {       
        var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
        var script = document.createElement("script");
        script.src = url;
        script.async = true;
        script.charset = charset || "utf-8";		
        script.onload = script.onreadystatechange = function () {        		
            if (!script.readyState || /loaded|complete/.test(script.readyState)) {
                script.parentNode.removeChild(script);
                script.onload = script.onreadystatechange = null;
                script = null;
                if (callback && typeof callback == "function") {
                    callback();
                }
            }
        }
        head.append(script);

    },
    setCookie: function (name,value, expiredate, path, domain, secure) {
        var isSecure = "https:" === window.location.protocol;
        secure && (isSecure = secure);
        var cookieDef = name + "=" + value + (expiredate ? ";expires=" + expiredate.toGMTString() : "")
            + (path ? ";path=" + path : "") + (domain ? ";domain=" + domain : "") + (isSecure ? ";secure" : "");
        document.cookie = cookieDef
    },
    getCookieOrDefault: function (cname,_default) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return _default;
    },
    hasConsentFor: function (cat) {
        if (cat == 'tech') {
            return true;
        }
        return this.getConsentInfo()[cat] == "1" ? true : false;
    },
    showMoreInfo: function () {
        document.getElementById('cboss_banner_container').classList.add('cboss_expanded');
    }
}

cboss.cfg={
  "Version": "1",
  "ContrastColor": "#FA440F",
  "Domain": "k-rev.com",
  "LogBannerClose": false,
  "ShowConsentButtonCss": ".cboss_buttonshowbanner{border-radius:100%; z-index:2147483647; background-color:#FA440F; border:none; position:fixed; bottom:40px; left:40px; width:64px; height:64px; display:block;} @media(max-width:767px){ .cboss_buttonshowbanner{ left:24px; bottom:24px; width:44px; height:44px; }} ",
  "EmbedCode": "",
  "ShowButtonImageHtml": "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"100%\" viewBox=\"-4 -4 32 32\" width=\"100%\" fill=\"currentColor\" aria-label=\"Privacy Icon\" role=\"img\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"></path><path d=\"M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39s-4.66 1.97-4.66 4.39c0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94s3.08 1.32 3.08 2.94c0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.79 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z\"></path></svg>",
  "ShowButtonAriaLabel": "Apri",
  "CookieBossBaseUrl": "https://cookieboss.techstyle.it/",
  "UserCountry": "us",
  "LogEnabled": true,
  "BootstrapDelay": 0,
  "GoogleAnalyticsCode": "G-FDZCL4TXJX",
  "GoogleAnalyticsAnonymizedOnly": false,
  "GoogleTagManagerCode": "",
  "GtagAnalyticsStorageLevel": "func",
  "GtagAdStorageLevel": "mktg",
  "GtagAdUserDataLevel": "mktg",
  "GtagAdPersonalisationLevel": "mktg",
  "GtagCommitEvent": "button1-click",
  "FacebookPixelCode": "",
  "LinkedinPartnerId": "",
  "HubSpotTrackingCode": "",
  "DefaultLanguange": "it"
};

if (cboss.cfg.GoogleAnalyticsCode != '' || cboss.cfg.GtagAdStorageLevel != ''
    || cboss.cfg.GtagAnalyticsStorageLevel != '' || cboss.cfg.GoogleTagManagerCode != '') {
    window.dataLayer = window.dataLayer || [];
    function gtag() { dataLayer.push(arguments); }
    if (cboss.cfg.GtagAdStorageLevel != '') {
        gtag('consent', 'default', { 'ad_storage': 'denied' });        
    }
    if (cboss.cfg.GtagAnalyticsStorageLevel != '') {
        gtag('consent', 'default', { 'analytics_storage': 'denied' });
    }
    if (cboss.cfg.GoogleTagManagerCode != '') {
        (function (w, d, s, l, i) {
            w[l] = w[l] || []; w[l].push({
                'gtm.start':
                    new Date().getTime(), event: 'gtm.js'
            }); var f = d.getElementsByTagName(s)[0],
                j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
                    'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
        })(window, document, 'script', 'dataLayer', cboss.cfg.GoogleTagManagerCode);
    }
}

if (cboss.cfg.LinkedinPartnerId != '') {
    _linkedin_partner_id = cboss.cfg.LinkedinPartnerId;
    window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
    window._linkedin_data_partner_ids.push(_linkedin_partner_id);
}

cboss.applyConsentOptions();

    setTimeout(function () {
        if (!cboss.getConsentInfo()["id"]) {
            cboss.injectButton(false);
            cboss.showBanner();
        }
        else {
            cboss.injectButton(true);
        }
    }, 2500);
