 (function () {
  // For randomized testing
  document.cookie = "_pc_random="+Math.floor(Math.random()*10)+"; path=/;"
  //ESP Integration Code
  window.PianoESPConfig = {
    id: 34
  };
  tp = window["tp"] || [];
  window.PianoCookieDomain = '.full-count.jp';
  tp.push(["setUseTinypassAccounts", false]);
  tp.push(["setUsePianoIdUserProvider", true ]);
  tp.push(["setSandbox", false]);
  tp.push(["setEndpoint", 'https://buy-ap.piano.io/api/v3']);
  tp.push(["setPianoIdUrl", 'https://auth.full-count.jp']);
  tp.push(["setEspEndpoint", 'https://api-esp-ap.piano.io']);
  /* Piano DMP Content */
  tp.push(["setCxenseSiteId", '1128462988470963950']);
  //Avoiding ITP restrictions
  //tp.push(["setCloudflareWorkerUrl","/piano"]);
  tp.push(['setCookieDomain', window.PianoCookieDomain]);
  if (typeof window.localStorage !== 'undefined') {
    // localStorageに保存されたcookieが有り、cookie上には存在しない場合に__utp cookieを書き込む
    try {
      var __utp = localStorage.getItem('__utp');
      if (__utp && document.cookie.indexOf(__utp) === -1) {
        document.cookie = '__utp=' + __utp + '; Path=/; Domain=' + window.PianoCookieDomain + '; SameSite=Lax;';
      }
    } catch (e) {}
  }
  /* Checkout related */
  /**
   * Event properties
   *
   * chargeAmount - amount of purchase
   * chargeCurrency
   * uid
   * email
   * expires
   * rid
   * startedAt
   * termConversionId
   * termId
   * promotionId
   * token_list
   * cookie_domain
   * user_token
   *
   */
  function onCheckoutComplete(data) {
    /* チェックアウト完了の3秒後に完了画面を自動的に閉じる */
    setTimeout(function () {
      tp.offer.close();
      location.reload();
    }, 3000);
  }

  function onCheckoutExternalEvent() {
  }

  function onCheckoutClose(event) {
    /* Default behavior is to refresh the page on successful checkout */
    if (event && event.state == "checkoutCompleted") {
      location.reload();
    }
  }

  function onCheckoutCancel() {
  }

  function onCheckoutError() {
  }

  function onCheckoutSubmitPayment() {
  }

  /* Meter callback */
  function onMeterExpired() {

  }

  /* Meter callback */
  function onMeterActive() {

  }

  /* Callback executed when a user must login */
  function onLoginRequired() {
    // this is a reference implementation only
    // your own custom login/registration implementation would
    // need to return the tinypass-compatible userRef inside the callback

    // mysite.showLoginRegistration(function (tinypassUserRef)
    // tp.push(["setUserRef", tinypassUserRef]); // tp.offer.startCheckout(params); // }
    // this will prevent the tinypass error screen from displaying

    return false;
  }

  function addToMailingList() {
    (function (isDash, espid, mlid, fieldid) {
      tp.pianoId.loadExtendedUser({
        extendedUserLoaded: function (data) {
        var added2ml = false;
          if (data.custom_field_values && Array.isArray(data.custom_field_values)) {
            var customFields = data.custom_field_values.reduce(function (a, c) {
              a[c.field_name] = c.value.indexOf("[") == 0 ? JSON.parse(c.value) : c.value;
              return a;
            }, {});
            if (customFields[fieldid] == "true") {
              (function (e, c, d, a) {
                if (c && d && Array.isArray(a) && 0 < a.length) {
                  var b = new XMLHttpRequest;
                  b.open("POST", (e ? "//api-esp-ap.piano.io" : "//sandbox-api-esp.piano.io") + "/tracker/lucid/sub/" + String(c));
                  b.setRequestHeader("Content-type", "application/json");
                    b.onload = () => {
                    location.reload();
                    };
                  b.send(JSON.stringify({email: d, sqids: a}))
                    added2ml = true;
                }
              })(isDash, espid, tp.pianoId.getUser().email, [mlid]);
            }
          }
            if (!added2ml) { location.reload(); }
        },
        formName: "RegistrationFields"
      });
    })(true, 100, 486, "newsletter");
    /* (dashboard?, siteid, mlid, custom_field_id(checkbox only)) */    
}

  /* Callback executed after a tinypassAccounts login */
  function onLoginSuccess(data) {
    //DMPへ登録完了イベント送信
    if (data && data.registration && window.cX && cX.library) {
      var cp = {id_source: data.source, id_event: (data.registration ? "registration" : "login")};
      var args = window.cxj_dmp_params || {};
      if (data.params && data.params.sub && window.cx_args && window.cx_args.prefix) {
        args.identities = [{type: cx_args.prefix, id: data.params.sub}];
      }
      cX.sendEvent("pianoid", cp, args);
    }
    if (typeof window.localStorage !== 'undefined') {
      try {
        window.localStorage.setItem('__utp', tp.pianoId.getToken());
      } catch (e) {
      }
    }
    else if (location.search.indexOf('verification_code=') === -1 && typeof data.source !== 'undefined' && data.source !== 'OFFER' && !tp.pianoId.getUser().email_confirmation_required) {
      location.reload();
    }
    if (data && window.cX && cX.library) {
      var cp = { id_event: (data.registration ? "registration" : "login") };
      var args = window.cxj_dmp_params || {};
      if (data.params && data.params.sub && window.cx_args && window.cx_args.prefix) {
        args.identities = [{ type: cx_args.prefix, id: data.params.sub }];
      }
      cX.sendEvent("pianoid", cp, args);
    }
    tp.api.callApi('/access/list', {}, function (data) {
      if (typeof data.data != "undefined") {
        // Loop through all possible access objects
        for (var i in data.data) {
          // Was access granted?
          if (data.data[i].granted) {
            // All good, user just logged in, we can close the offer
            tp.offer.close();
            // Additionally we can refresh the page
            location.reload();
          }
        }
      }
    });
    /* ソーシャルログインによる新規登録時にニュースレター登録関数を呼び出す */
    if (data.registration && data.user.ls !== 'ID') {
      addToMailingList(false);
    }  
  }
  /* ダブルオプトイン完了時にページリロード / ダブルオプトインコード入力モーダルを入力せずにクローズしたらログアウト */
  window.addEventListener("message",function(event) {
    if (event.data) {
      try {
        var data = JSON.parse(event.data);
        if (data.event === "successDOI") {
          addToMailingList();
        }
      } catch(e) {}
    }
  });
  
  /* Callback executed after an experience executed successfully */
  function onExperienceExecute(event) {
    if (typeof localStorage === "object" && typeof localStorage.setItem === "function") {
      if(typeof event === "object" && "user" in event && "uid" in event.user && event.user.uid && event.user.uid != "anon"){
        localStorage.setItem("piano-uid",event.user.uid);
      }
    }
    /* LINEソーシャルログイン対応 */
    const user = tp.pianoId.getUser();
    const ua = navigator.userAgent.toLowerCase();
    const isSmartphone = /iphone|ipod|android.*mobile|windows phone|blackberry|bb10|symbian/i.test(ua);
    if (user && user.ls === 'LINE' && isSmartphone) {
      /* 登録直後（10秒以内）だったらニュースレター登録処理　*/
      tp.api.callApi('/anon/user/get',{},function(data) {
        if (data.user.create_date > (data.ts - 60)) {
          addToMailingList(false);
        }
      });
      /* localStorageの値を見てチェックアウト起動 */
      const params = localStorage.getItem('__pn_co');
      console.log(params);
      if (params) {
        try {
          const object = JSON.parse(params);
          tp.offer.startCheckout(object);
        } catch(e) {console.log(e);}
      }
    }
  }

  /* Callback executed if experience execution has been failed */
  function onExperienceExecutionFailed(event) {
  }

  /* Callback executed if external checkout has been completed successfully */
  function onExternalCheckoutComplete(event) {
    /* Default behavior is to refresh the page on successful checkout */
    location.reload();
  }

  tp.push(["addHandler", "checkoutCustomEvent", function(event){
    switch (event.eventName){
      case 'login':
        tp.pianoId.show({
          displayMode: 'modal',
          screen :'register'
        })
        break;
      case 'top':
        tp.pianoId.show({
          displayMode: 'modal',
          screen :'login',
          disableSignUp: true
        })
        break;
    }
    /* LINEソーシャルログイン対応（クリックされたプランをlocalStorageにセット） */
    if (event.eventName.startsWith('offer-subscribe-')) {
      try {
        const termId = event.params.termid;
        const params = JSON.parse(event.params.params);
        params['termId'] = termId;
        localStorage.setItem('__pn_co', JSON.stringify(params));
      } catch(e) { console.log(e); }
    }
  }]);

  // サブスクオファーでのダブルオプトイン確認を回避（暫定処置）
  tp.push(["addHandler", "showOffer", function(termDetails, iframeId){
    tp.api.callApi("/email/confirmation/check", {}, function(response){
      try {
        if (!response.data) {
          tp.pianoId.logout();
        }
      } catch(e) { console.log(e); }
    });
  }]);

  tp.push(["setAid", 'qZXTGT4dpj']);
  tp.push(["setEndpoint", 'https://buy-ap.piano.io/api/v3']);
  tp.push(["setUseTinypassAccounts", false ]);
  tp.push(["setUsePianoIdUserProvider", true ]);

  /* checkout related events */
  tp.push(["addHandler", "checkoutComplete", onCheckoutComplete]);
  /* LINEソーシャルログイン対応（チェックアウト開始後にlocalStorageの値を削除） */
  tp.push( [ "addHandler", "startCheckout", function () {
    localStorage.removeItem('__pn_co');
  }]);
  tp.push(["addHandler", "checkoutClose", onCheckoutClose]);
  tp.push(["addHandler", "checkoutCustomEvent", onCheckoutExternalEvent]);
  tp.push(["addHandler", "checkoutCancel", onCheckoutCancel]);
  tp.push(["addHandler", "checkoutError", onCheckoutError]);
  tp.push(["addHandler", "checkoutSubmitPayment", onCheckoutSubmitPayment]);

  /* user login events */
  tp.push(["addHandler", "loginRequired", onLoginRequired]);
  tp.push(["addHandler", "loginSuccess", onLoginSuccess]);

  /* meter related */
  tp.push(["addHandler", "meterExpired", onMeterExpired]);
  tp.push(["addHandler", "meterActive", onMeterActive]);

  tp.push(["addHandler", "experienceExecute", onExperienceExecute]);
  tp.push(["addHandler", "experienceExecutionFailed", onExperienceExecutionFailed]);

  /* external checkout related events */
  tp.push(["addHandler", "externalCheckoutComplete", onExternalCheckoutComplete]);

  tp.push(["init", function () {
    // ログイン状態でAIDが違うcookieを保有している場合、強制的にログアウトさせる
    if (tp.pianoId.isUserValid() && tp.pianoId.getUser().aud !== tp.aid) {
      try {
        tp.pianoId.logout();
        document.cookie = "__utp=; domain=" + window.PianoCookieDomain + "; max-age=0";
      } catch (e) {}
    }
    // 明示的にログアウトボタンからログアウトした場合は、localStorageからも値を消す
    tp.addHandler('logout', function(){
      if (typeof window.localStorage !== 'undefined') {
        try {
          window.localStorage.removeItem('__utp');
        } catch (e) {
        }
      }
    });
    //ダブルオプトイン確認済みか判定してカスタム変数に格納。未確認の場合はAPIに問い合わせた後、experienceを実行する。
    var tags = tp.tags || '';
    tp.api.callApi("/email/confirmation/check", {}, function(response){
      if (response.data === true) {
        tp.setCustomVariable("isConfirmed","true");
      } else if (response.data === false) {
        tp.pianoId.logout();
        document.cookie = "__utp=; domain=" + window.PianoCookieDomain + "; max-age=0";
      }
      tp.experience.init();
    });
  }]);
})();


  // do not change this section
  // |BEGIN INCLUDE TINYPASS JS|
  (function(src){var a=document.createElement("script");a.type="text/javascript";a.async=true;a.src=src;var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)})("//code.piano.io/api/tinypass.min.js");
  // |END   INCLUDE TINYPASS JS|


  window.addEventListener("click", function(event){
    var ev = event || window.event;
    if(ev) {
      var el = ev.target || ev.srcElement;
      if(el.className && el.className.indexOf("tp-close") != -1){
        cX.setEventAttributes({origin: "ct2-web", persistedQueryId: 'ecf12e4fd150cc9cb83844387b707eab28d4900a'});
        cX.sendEvent("modal-closed");
      }
    }
  }, false);
