(function() {
  var lt = window.lt;
  lt.d = document;
  lt.w = window;

  if(lt._v) return;

  lt._v = '1.3';
  lt.__config__ = {
    server: {
      u: '//u.ltrck.com.br/u',
      pv: '//r.ltrck.com.br/pv',
      lz: '//r.ltrck.com.br/lz',
      sync: '//r.ltrck.com.br/sync',
      tag: '//tag.ltrck.com.br/',
      cpl: '//r.ltrck.com.br/cpl',
      e: '//u.ltrck.com.br/e',
      lgpd: '//r.ltrck.com.br/lgpd'
    },
    campaign_fields: [
      'gcm', 'gag', 'gac', 'gne',
      'fcm', 'fag', 'fac', 'fne',
      'tcm', 'tag', 'tac', 'tne'
    ],
    click_ids: [
      'fbclid', 'gclid', 'ttclid'
    ],
    lgpd_accepted: false,
    iframe: false
  };
  lt.accs = [];


  lt.__init__ = function(){
    this.dom = this.__get_TLD();
    this.ltuid = this.__get_cookie('_ltuid');
    if(this.pvid) return;
    this.pvid = new Date().getTime();
    this.__url_params__ = this.__get_params();
    this.__cpls_status = {};
    this.__check_session_changed();

    var c = this._c.slice();

    this._c.push = function(arr) {
      lt.__proc_cmd(arr[0], arr[1]);
    };

    for(var x=0; x<c.length;x++){
      lt.__proc_cmd(c[x][0], c[x][1]);
    }
  };

  lt.__proc_cmd = function(k, v){
    if(k=='init') {
      var acc = lt.b62.decode(v.split("-")[0]);
      if(this.accs.indexOf(acc)>=0) return;
      this.accs.push(acc);


      if(this.ltuid) {
        this.__register_pv(acc);
        this.__check_inputs(acc);
        this.__check_cookieless_urls(true);
        this.__process_conversion_api({})
      }
      else
        this.__create_user_id();
    }
    else if(k=='event'){
      this.__register_event(v);
    }
    else if(k=='iframe'){
      this.__config__.iframe = v;
    }
  };

  lt.__create_user_id = function(){
    var params = "?";
    params += "new=1";
    params += '&v='+this._v;
    this.__include(this.__config__.server.u + params);

  };

  lt.set_user = function(user_id){
    this.__set_cookie('_ltuid', user_id);
    this.ltuid = user_id;
    for(var x=0;x<this.accs.length; x++){
      this.__register_pv(this.accs[x]);
      this.__check_inputs(this.accs[x]);
      this.__check_cookieless_urls(true);
      this.__process_conversion_api({})
    }
  };

  lt.get_cookieless_code = function(){
    if(!this.ltuid) return null;
    return "lt"+this.ltuid+"k"+"_lt"+this.pvid+"p";
  };


  lt.__get_current_campaign = function(){
    var cc = this.__url_params__['utm_campaign'];
    if(!cc) cc = this.__url_params__['ltk_gcm'];
    if(!cc) cc = this.__url_params__['ltk_fcm'];
    return btoa(cc || '');
  };

  lt.__check_session_changed = function(){
    let cookie = this.__get_cookie('_ltusession');

    var current_campaign = this.__get_current_campaign();
    var session_campaign = current_campaign;

    var current_time = new Date().getTime();
    var session_time = current_time;
    this.session_id = 1;

    if(cookie){
      cookie = cookie.split("_");
      if(cookie.length!=3) return;
      session_time = parseInt(cookie[0]);
      session_campaign = cookie[1];
      this.session_id = parseInt(cookie[2]);
    }

    var diff_seconds = (current_time - session_time) / 1000.0;

    if(diff_seconds>(60*30)){
      this.session_id += 1;
    } else if(current_campaign && current_campaign!=session_campaign){
      this.session_id += 1;
    }
    cookie = current_time+'_'+current_campaign+'_'+this.session_id;
    this.__set_cookie('_ltusession', cookie);
  };
  

  lt.__register_pv = function(accid){
    var x = 0, campaign_field, click_id;
    var params = '?acc='+accid;
    if(this.__config__.iframe) {
        params += '&url='+encodeURIComponent(document.referrer);
        params += '&iframe=1';
    }
    else {
      if(document.referrer)
        params += '&ref='+encodeURIComponent(document.referrer);
      if(document.URL)
        params += '&url='+encodeURIComponent(document.URL);
    }

    params += '&ltuid='+this.ltuid;
    params += '&pvid='+this.pvid;
    params += '&ssid='+this.session_id;
    for(x=0;x<this.__config__.campaign_fields.length; x++) {
      campaign_field = this.__config__.campaign_fields[x];
    if(lt.get_param('ltk_'+campaign_field))
      params += '&'+campaign_field+'='+lt.get_param('ltk_'+campaign_field)
    }

    for(x=0;x<this.__config__.click_ids.length; x++) {
      click_id = this.__config__.click_ids[x];
    if(lt.get_param(click_id))
      params += '&'+click_id+'='+lt.get_param(click_id)
    }

    params += '&v='+this._v;
    this.__include(this.__config__.server.pv + params);
    
    
    this.__register_lz(accid);
  };

  lt.__register_event = function(event) {
    var r;
    if(typeof event === "object") r = event;
    else r = {'event': event};

    for(var x=0; x<this.accs.length;x++) {
      var params = '?acc='+this.accs[x];
      params += '&ltuid='+this.ltuid;
      params += '&v='+this._v;
      params += '&pvid='+this.pvid;
      params += '&event=' +  encodeURIComponent(JSON.stringify(r));
      this.__include(this.__config__.server.e + params);
    }
  };

  lt.__register_lz = function(accid){
    if(!lt._c.lzcode) return;
    var params = '?acc='+accid;
    params += '&pvid='+this.pvid;
    params += '&ltuid='+this.ltuid;
    params += '&lzid='+lt._c.lzcode[1];
    params += '&lzgrp='+lt._c.lzcode[0];
    params += '&v='+this._v;
    this.__include(this.__config__.server.lz + params);

  };

  lt.__do_input_sync = function(email, accid){
    var params = '?acc='+accid;
    params += '&mail='+encodeURIComponent(email);
    params += '&ltuid='+this.ltuid;
    params += '&pvid='+this.pvid;
    params += '&formid=-1';
    params += '&v='+this._v;
    this.__include(this.__config__.server.sync + params);
  };

  lt.__check_inputs = function(accid){
    var input_email;
     document.querySelectorAll("input[name*=email i],input[type*=email i],input[data-type*=email i]").forEach(function(input_email) {
      input_email.ltk_binded = input_email.ltk_binded || [];
      if(input_email.ltk_binded.indexOf(accid)>=0) return;
      input_email.ltk_binded.push(accid);
      if(input_email.value)
          lt.__do_input_sync(input_email.value, accid)
      input_email.addEventListener('change', function() {
          lt.__do_input_sync(input_email.value, accid)
      })
    })

    window.setTimeout(function(){
      window.lt.__check_inputs(accid);
    },200);
  };

  lt.__check_cookieless_urls = function(ncall){
    if(ncall && this.__config__.cer) return;
    this.__config__.cer = true;

    function proc_urls(qry_search, trck_param){
    	document.querySelectorAll("a[href*='"+qry_search+"' i]").forEach(function(a){
    	  var egc = window.lt.get_cookieless_code();
    	  if(!egc) return;
    	  if(a.ltk_binded) return;
    	  a.ltk_binded = true;
    	  var url = new URL(a.href);
    	  var hpltu = url.searchParams.get(trck_param);
    	  if(!hpltu) hpltu = window.lt.get_cookieless_code();
    	  else if(hpltu.indexOf(egc) < 0) hpltu+= '_'+egc;
    	  url.searchParams.set(trck_param, hpltu);
    	  a.href = url.toString()
    	})
    }


    window.setTimeout(function(){
      window.lt.__check_cookieless_urls();
    },200);
  };



  lt.__release_form = function(form_id){
    // TODO: remove it
    // ATENTION: back-end callback xD
    return;
  }

  lt.__get_TLD = function (){
    var tld, parts, parcial = "",
        x, date, result, val, coknm;
    coknm = 'ltTLD';
    date = new Date();
    val = date.getTime();
    tld = window.localStorage.getItem(coknm);
    if (tld) return tld;
    parts = window.location.hostname.split(".");
    for (x = parts.length - 1; x > 0; x--) {
        parcial = "." + parts[x] + parcial;
        date.setTime(date.getTime() + 5 * 1000);
        document.cookie = coknm + '=' + val + ';expires=' + (date.toGMTString()) + ';domain=' + parcial;
        result = this.__get_cookie(coknm);
        if (result == val) {
          window.localStorage.setItem(coknm, parcial);
          date = new Date();
          document.cookie = coknm + '=' + val + ';expires=' + (date.toGMTString()) + ';domain=' + parcial;
          return parcial;
        }
    }
    return '.' + window.location.hostname;
  };

  lt.__set_cookie = function(name, value, ttl){
    var d = new Date();
    if (ttl != ttl || !ttl) ttl = 365 * 24 * 60;
    d.setTime(d.getTime() + (ttl * 60 * 1000));
    var ttl = d.toGMTString();
    this.d.cookie = name + "=" + value + ";expires=" + ttl + ";path=/;domain=" + this.dom;
  };

  lt.__get_cookie = function(name) {
      var start = this.d.cookie.indexOf(name + "=");
      var len = start + name.length + 1;
      if ((!start) && (name != this.d.cookie.substring(0, name.length))) return "";
      if (start == -1) return "";
      var end = this.d.cookie.indexOf(";", len);
      if (end == -1) end = this.d.cookie.length;
      return unescape(this.d.cookie.substring(len, end));
  };

  lt.__include = function(src, callback) {
      var c = this.d.createElement("script");
      c.type = "text/javascript";
      c.src = src;
      if(callback) c.onload = callback;
      var p = this.d.getElementsByTagName('script')[0];
      p.parentNode.insertBefore(c, p);
  };

  lt.__get_params = function() {
    var params = {};
    var prmstr = window.location.search.substr(1);
    var prmarr = prmstr.split("&");
    for ( var i = 0; i < prmarr.length; i++) {
        var tmparr = prmarr[i].split("=");
        params[tmparr[0]] = tmparr[1];
    }
    return params;
  };

  lt.get_param = function(k) {
    return this.__url_params__[k];
  };

  lt.b62 = {
    charset: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
      .split(''),
    encode: integer => {
      if (integer === 0) {
        return 0;
      }
      let s = [];
      while (integer > 0) {
        s = [lt.b62.charset[integer % 62], ...s];
        integer = Math.floor(integer / 62);
      }
      return s.join('');
    },
    decode: function(chars){
      var q, r_chars = chars.split('').reverse();
      var r = 0;
      for(q=0; q < r_chars.length; q++) {
        r += (lt.b62.charset.indexOf(r_chars[q]) * (62**q));
      }
      return r;
    }
  };

  lt.__config_lgpd_consent = function(consent){
    if(this.__get_cookie('_ltgpdc')) return;
    var div = document.createElement('div')
    div.innerHTML = consent.el;
    document.body.appendChild(div);
  };

  lt.__accept_lgpd_consent = function(){
    this.__set_cookie('_ltgpdc', 1);
    this.__do_lgpd_accept();
    document.querySelector("#__ltk_lgpd_consent").style.display="none";
  };

  lt.__config_lgpd_pages = function(lgpd_pages) {
    var pages, x =0;
    for(x=0; x<lgpd_pages.length; x++){
      pages = lgpd_pages[x];
      if(window.location.href.indexOf(pages.landingpage_url) >= 0){
        return lt.__bind_lgpd_forms(pages.term);
      }
    }
  };

  lt.__do_lgpd_accept = function(){
    for(var x=0;x<this.accs.length; x++){
      var params = '?acc='+this.accs[x];
      params += '&ltuid='+this.ltuid;
      params += '&pvid='+this.pvid;
      params += '&v='+this._v;
      this.__include(this.__config__.server.lgpd + params);
    }
  };

  lt.__bind_lgpd_forms = function(term) {
    var e_parent, btn, cur_parent= 0, max_search_parent = 5;
    document.querySelectorAll("input[name*=email i],input[type*=email i]").forEach(function(input_email) {

      e_parent = input_email.parentElement;

      while(cur_parent < max_search_parent){
        if(!e_parent) break;
        btn = e_parent.querySelector("input[type*=submit i], button[type*=submit i]");
        if(btn) {
          lt.__insert_lgpd_term(btn, term);
          break;
        }
        e_parent = e_parent.parentElement;
        cur_parent++;
      }

    });
    window.setTimeout(function(){ window.lt.__bind_lgpd_forms(term); }, 1500);
  };

  lt.__insert_lgpd_term = function(btn, term) {
    var cur_el, e_parent, form, cur_parent= 0, max_search_parent = 7;

    if(btn.ltk_lgpd_binded) return;
    btn.ltk_lgpd_binded = '1';


    cur_el = btn.parentElement.querySelector("._ltk_lgpd_term_div")
    if(cur_el)cur_el.remove();

    btn.insertAdjacentHTML('beforebegin', term)

    btn.parentElement.querySelectorAll("._ltk_lgpd_term_div a").forEach(function(term_div_a){
      term_div_a.addEventListener('click', function(e) {
        e.stopPropagation();
      });
    });

    btn.parentElement.querySelectorAll("._ltk_lgpd_term_div").forEach(function(term_div){
      term_div.addEventListener('click', function(e) {
        e.preventDefault();
        window.lt.__proccess_click_lgpd(e.target.parentElement.parentElement);
      })
    });

    e_parent = btn.parentElement;
    while(cur_parent < max_search_parent) {
      if(!e_parent) return;
      form = e_parent.querySelector("form")
      if(form) {
        form.noValidate = false;
        btn.parentElement.querySelector("._ltk_lgpd_term_div")._ltk_btn = btn;
        return;
      }
      e_parent = e_parent.parentElement;
      cur_parent++;
    }
  };

  lt.__proccess_click_lgpd = function(el){
    if(lt.__config__.lgpd_accepted) {
      if(el && el._ltk_btn)
        el._ltk_btn.click();
      return;
    }

    document.querySelectorAll("._ltk_lgpd_term_div").forEach(function(term_div){
      term_div.querySelector("div > div .check").innerHTML = "&#10003";
      term_div.querySelector("div > div").style.border = "1px solid #01cc33";
      term_div.querySelector("input").value = "1"
    });
    lt.__config__.lgpd_accepted=true;
    if(el && el._ltk_btn)
      el._ltk_btn.click();
  };

  lt.__process_conversion_api = function(params){
    if(params.external_id)
      this.__trigger_pixels_events('LTK_UID', params.external_id)

    if(params.ltk_30s)
      this.__process_stay_in_page(30 * 1000, 'LTK_30S', params.ltk_30s)

    if(params.ltk_60s)
      this.__process_stay_in_page(60 * 1000, 'LTK_60S', params.ltk_60s)

  };


  lt.__process_stay_in_page = function(sleep, event_slug, params){

    window.setTimeout(function(){
      window.lt.__trigger_pixels_events(event_slug, params)
    }, sleep);
  };

  lt.__trigger_pixels_events = function(event_slug, params){
    var that = this;
    // bem inteligente esses codigo mesmo xD
    if(params.faceads && params.faceads.active){
      try {
        window.fbq(
          'trackCustom', event_slug, {
            external_id: that.ltuid
          },{
            eventID: event_slug+'_event'
          }
        );
      } catch(e){}
    }

    if(params.ttads && params.ttads.active){
      try {
        window.ttq.track(
          event_slug, {
            user_data: {
                external_id: that.ltuid
            },
            value: 0,
            currency: 'BRL'
        });
      } catch(e){}
    }

    if(params.gads && params.gads.active){
      try {
        window.gtag('event', 'conversion', {
          'send_to': params.gads.value,
          'user_id': that.ltuid
        });
      } catch(e){}
    }
  };


  lt.__init__();
})();
