var loginApiToken = false;
var userId = false;
var isPlusUser = false;
var hash;
var user;

$(document).ready(function(){

    TweenMax.to($(".logo"),0.1,{scaleX:1.9,scaleY:1.9});
    TweenMax.to($(".check"),0.1,{scaleX:1.9,scaleY:1.9});
    TweenMax.to($(".marker"),0.1,{scaleX:0.5,scaleY:0.5});

    TweenMax.to($(".logo"),1.2,{delay:0.1,opacity:1,scaleX:1,scaleY:1,ease:Bounce.easeOut});

    TweenMax.to($(".check-1"),1,{delay:0.7,opacity:1,scaleX:1,scaleY:1,ease:Bounce.easeOut});
    TweenMax.to($(".check-2"),1,{delay:0.8,opacity:1,scaleX:1,scaleY:1,ease:Bounce.easeOut});
    TweenMax.to($(".check-3"),1,{delay:0.9,opacity:1,scaleX:1,scaleY:1,ease:Bounce.easeOut});

    TweenMax.to($(".marker-1"),1,{delay:1.2,opacity:1,scaleX:1,scaleY:1,ease:Bounce.easeOut});
    TweenMax.to($(".marker-2"),1,{delay:1.3,opacity:1,scaleX:1,scaleY:1,ease:Bounce.easeOut});
    TweenMax.to($(".marker-3"),1,{delay:1.4,opacity:1,scaleX:1,scaleY:1,ease:Bounce.easeOut});

    $(".logo").css({"height":$(".logo-image").height()+"px"});
    $(window).resize(function(){
        $(".logo").css({"height":$(".logo-image").height()+"px"});
        var check_height = $(window).height()-$(".bottom-holder").height()-$(".logo").height();
        $(".check-holder").css({"height":check_height+"px"});
    });

    var check_height = $(window).height()-$(".bottom-holder").height()-$(".logo").height();
    $(".check-holder").css({"height":check_height+"px"});

    $(".bottom-holder").css({"bottom":$(".bottom-holder").height()*-1+"px"});

    TweenMax.to($(".bottom-holder"),1,{delay:2,opacity:1,bottom:0,ease:Sine.easeOut});
    TweenMax.to($(".woman"),1,{delay:2.4,opacity:1,bottom:"-3%",ease:Back.easeOut});
    TweenMax.to($(".man"),1,{delay:2.5,opacity:1,bottom:"-7%",ease:Back.easeOut});

    //

    $(".start-game").on("click",function(){

        window.tp.pianoId.init();

        window.tp.push(['init', () => {

            window.tp.experience.init();
            user = window.tp.pianoId.getUser();

            window.tp.push([
                   'addHandler',
                   'loginSuccess',
                   () => {


                       tp.api.callApi("/access/check", {rid : "R97IHZ8"}, function(response){
                           if (response.access && response.access.granted) {
                               userId = window.tp.pianoId.getUser().uid;
                               continueToGame();
                           }
                           else {
                               showPaywall();
                           }
                       });

                   },
                ]);


                tp.api.callApi("/access/check", {rid : "R97IHZ8"}, function(response){
                    if (response.access && response.access.granted) {
                        userId = window.tp.pianoId.getUser().uid;
                        continueToGame();
                    }
                    else {
                        showPaywall();
                    }
                });


        }]);

        window.tp.push([
            'addHandler',
            'checkoutCompleted',
            () => {

                tp.api.callApi("/access/check", {rid : "R97IHZ8"}, function(response){

                    if (response.access && response.access.granted) {
                        userId = window.tp.pianoId.getUser().uid;
                        continueToGame();
                    }
                    else {
                        showPaywall();
                    }
                });

            },
        ]);

    });



    $(".rules-bt").on("click",function(){

        $("body").addClass("disable-nav");
        $('.popup-rules').addClass("popup-active");

    });

    $(".winners-button").on("click",function(){

        $("body").addClass("disable-nav");
        $('.popup-winners').addClass("popup-active");

    });

    $(".popup-rules .close-bt").on("click",function(){

        $("body").removeClass("disable-nav");
        $('.popup-rules').removeClass("popup-active");

    });

    $(".popup-winners .close-bt").on("click",function(){

        $("body").removeClass("disable-nav");
        $('.popup-winners').removeClass("popup-active");

    });

    $(".subscriber-button").on("click",function(){

        showLoginEmbed('login-modal', {
            modal: true,
            loginAnchorId: null,
            locale: 'lt',
            successCallback: function() { // what to do after login
                checkLogin()
            }
        });

    });

});

function continueToGame()
{

    $.post(getURL('api/getsession/'),{user_id:userId},function(data){

        if (data.state==1)
        {
            hash = data.hash;
            $("body").removeClass("disable-nav");
            $(".popup-paywall").removeClass("popup-active");
            hideIntro();
        }
        else
        {
            alert("Įvyko klaida, mėginkite dar kartą");
        }

    },'json');

}

function getUser() {
    if (!loginApiToken) {
        return;
    }

    if (typeof window.Promise !== 'function') { // for IE11
        r = JSON.parse(atob(loginApiToken[1].split('.')[1]));
        if (r && r.cid) {
            userId = r.cid;
            $(".subscriber-holder").hide();
            isPlusUser = checkPaywall();
        }
    } else if (window.LoginAPI) { // modern browser
        window.LoginAPI.getCustomers().then(function(r) {
            userId = r.data.id;

            isPlusUser = checkPaywall();
        });
    }
}

function checkPaywall() {
    if (!userId || !loginApiToken) {
        return;
    }

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'https://paywall.delfi.lt/paywall/api/user/' + userId + '/service-info');
    xhr.setRequestHeader('Authorization', 'Bearer ' + loginApiToken);
    xhr.timeout = 3000;
    xhr.onload = function () {
        if (xhr.status === 200) {
            var r = [];
            try {
                r = JSON.parse(xhr.responseText);
            } catch (_) { }

            for (var i = 0; i < r.length; i++) {
                if (r[i].service && r[i].valid && r[i].service.id == 1) {
                    continueToGame();
                    return true;
                } else {
                    $(".subscriber-holder").hide();
                    showPaywall();
                    return false;
                }
            }
        }
    };
    xhr.send();
}

function showPaywall()
{

    tp.offer.show({
        offerId: "OFI3HWMTB6UI",
        templateId: "OTDZQP47CG3O",
        displayMode: "inline",
        //promoCode: "ED0704DPRC",
        showCloseButton: true,
        containerSelector: ".popup.popup-paywall.popup-active",
        formNameByTermId: '{"TMV0ERIWOI76":"Checkoutform","TMC2E433AM91":"Checkoutform", "TMKQYJNPSH54":"Checkoutform", "TMEA6356ZS64":"Checkoutform"}',
        checkoutFlowId: "CFIHFY9V6CR3",
    });
    $("body").addClass("disable-nav");
    $(".popup-paywall").addClass("popup-active");

}

function checkLogin() {
    if (typeof window.Promise !== 'function') { //IE11
        var m = document.cookie.match(/loginApiToken=([^;]+)/);
        if (m && m.length === 2) { // logged in, get userId and plusUserState
            loginApiToken = m[1];

            getUser();
        } else { // not logged in, showLoginEmbed

            showPaywall();
        }
    } else if (window.LoginAPI) { // modern browser
        window.LoginAPI.getToken().then(function(token) {
            if (token !== null) { // logged in, get userId and plusUserState
                loginApiToken = token;
                getUser();
            } else {
                showPaywall();
            }
        });
    }
}

function hideIntro()
{

    TweenMax.to($(".logo"),0.8,{delay:0.5,scaleX:0.5,scaleY:0.5,opacity:0,ease:Back.easeIn,onComplete:function(){

            $(".intro-screen").hide();
            $(".categories-screen").show();
            loadCategories();

        }});

    TweenMax.to($(".bottom-holder"),1,{delay:0.5,opacity:1,bottom:$(".bottom-holder").height()*-1,ease:Back.easeIn});
    TweenMax.to($(".woman"),0.3,{delay:0.1,opacity:0,bottom:"-50%",ease:Back.easeIn});
    TweenMax.to($(".man"),0.3,{opacity:0,bottom:"-50%",ease:Back.easeIn});

    TweenMax.to($(".check-1"),0.3,{delay:0.6,opacity:0,scaleX:1.9,scaleY:1.9,ease:Back.easeIn});
    TweenMax.to($(".check-2"),0.3,{delay:0.7,opacity:0,scaleX:1.9,scaleY:1.9,ease:Back.easeIn});
    TweenMax.to($(".check-3"),0.3,{delay:0.8,opacity:0,scaleX:1.9,scaleY:1.9,ease:Back.easeIn,});

    TweenMax.to($(".marker-1"),0.3,{delay:0.3,opacity:0,scaleX:0.5,scaleY:0.5,ease:Back.easeIn});
    TweenMax.to($(".marker-2"),0.3,{delay:0.4,opacity:0,scaleX:0.5,scaleY:0.5,ease:Back.easeIn});
    TweenMax.to($(".marker-3"),0.3,{delay:0.5,opacity:0,scaleX:0.5,scaleY:0.5,ease:Back.easeIn});

    $(".game-select").mouseover(function(){

        TweenMax.to($(this),0.3,{scaleX:1.1,scaleY:1.1});

    });

    $(".game-select").mouseout(function(){

        TweenMax.to($(this),0.3,{scaleX:1,scaleY:1});

    });

}

var selected_game;
var game_title;
var is_selected = false;

function loadCategories()
{

    $(".categories-loader").load(getURL('index.php/api/categories/'),{user_id:userId,hash:hash},function(){


        TweenMax.to($(".categories-title"),0.1,{scaleX:0.4,scaleY:0.4});
        TweenMax.to($(".categories-title"),0.5,{delay:0.1,opacity:1,scaleX:1,scaleY:1,ease:Back.easeOut});

        var a = 0.1;

        $(".game-select").each(function(){

            TweenMax.to($(this),0.1,{scaleX:0.4,scaleY:0.4});
            TweenMax.to($(this),0.5,{delay:a,opacity:1,scaleX:1,scaleY:1,ease:Back.easeOut});
            a+=0.1;

        });

        $(".game-select").on("click",function(){

            if ($(this).attr("data-active")=="active-game") {

                if (!is_selected) {

                    is_selected = true;
                    selected_game = parseInt($(this).attr("data-id"));
                    game_title = $(this).attr('data-title');
                    questions = [];

                    $.post(getURL("api/startgame/"), {
                        selected_game: selected_game,
                        user_id: userId,
                        hash: hash
                    }, function (data) {

                        if (data.state == 1) {

                            my_score = parseInt(data.score);
                            questions = data.questions;
                            TweenMax.to($(".categories-title"), 0.5, {
                                opacity: 0,
                                scaleX: 0.4,
                                scaleY: 0.4,
                                ease: Back.easeIn
                            });

                            a = 0.1;

                            $(".game-select").each(function () {

                                TweenMax.to($(this), 0.5, {
                                    delay: a,
                                    opacity: 0,
                                    scaleX: 0.4,
                                    scaleY: 0.4,
                                    ease: Back.easeIn
                                });
                                a += 0.1;

                            });

                            var change_question_timeout = setTimeout(showQuestion, 1000);

                        }

                    }, 'json');

                }
            }

        });

    });

}

function showQuestion()
{

    $(".categories-screen").hide();
    $(".question-screen").show();
    loadGame();

}

var questions = [];

function loadGame()
{

    $(".main-title").html("Protmūšio serija - " + game_title);

    TweenMax.to($(".ready-screen"),0.1,{scaleX:0.4,scaleY:0.4});

    TweenMax.to($(".screen-changer"),0.5,{height:"100%",onComplete:function(){

        TweenMax.to($(".ready-screen"),0.3,{opacity:1,scaleX:1,scaleY:1,ease:Back.easeOut});
        $(".roger-bt").on("click",function(){

            TweenMax.to($(".ready-screen"),0.5,{scaleX:0.4,scaleY:0.4,opacity:0,ease:Back.easeIn,onComplete:function(){
                startCountdown();
            }});

        });

    }});

}

function startCountdown()
{

    $(".ready-screen").hide();
    $(".countdown").show();
    TweenMax.to($(".countdown"),0.3,{opacity:1,scaleX:1.1,scaleY:1.1});
    $(".countdown").html(countdown_left);
    countdown_timer = setInterval(updateCountdown,1000);

}

function updateCountdown()
{

    countdown_left--;
    if (countdown_left==2)
    {
        TweenMax.to($(".countdown"),0.3,{borderRadius:"25px",scaleX:1.2,scaleY:1.2});
    }
    else if (countdown_left==1)
    {
        TweenMax.to($(".countdown"),0.3,{borderRadius:"50%",scaleX:1.3,scaleY:1.3});
    }
    else
    {
        clearInterval(countdown_timer);
        TweenMax.to($(".countdown"),0.3,{opacity:0,scaleX:1.4,scaleY:1.4});
        $(".screen-changer").css({"bottom":"auto","top":"0"});
        TweenMax.to($(".screen-changer"),0.5,{height:0,onComplete:function(){

            startGame();

            }});
        $(".question-content").show();
    }

    $(".countdown").html(countdown_left);

}

var question_timer;
var question_timeleft = 10;
var current_question = 0;
var guess;

function startGame()
{

    if (selected_game==47)
    {
        question_timeleft = 20;
    }
    else
    {
        question_timeleft = 10;
    }

    current_question = 0;
    for (var a = 0;a<questions.length;a++)
    {
        if (questions[a].state==1)
        {
            current_question++;
        }
    }

    question_timeleft = questions[current_question].time;
    question_timer = setInterval(updateQuestionTimer,1000);
    initQuestion();

    $(".next-quesiton-button").on("click",function(){

        $(this).hide();
        my_score += last_earn;

        $(".incorrect").hide();
        $(".correct").hide();
        $(".timeout").hide();
        $(".question-popup").fadeOut();

        question_state = true;

        question_timeleft = questions[current_question].time;
  
        question_timer = setInterval(updateQuestionTimer,1000);
        TweenMax.to($(".screen-changer"),0.5,{height:0});
        TweenMax.to($(".answer"),0.3,{opacity:1});

        $(".time-left").html(question_timeleft+" s.");
        TweenMax.to($(".time-background"),0.1,{height:0});
        $(".answer").removeClass("checked");

        current_question++;

        if (current_question<questions.length) {
            updateState();
            initQuestion();
        }
        else
        {
            clearInterval(question_timer);
            question_state = false;
            endGame();
        }

    });

    $(".answer").on("click",function(){

        if (question_state) {

            $(".next-quesiton-button").show();
            guess = parseInt($(this).attr("data-id"));
            $(this).addClass("checked");
            endCurrentQuestion();

        }

    });

    $(".answer").mouseover(function(){

        TweenMax.to($(this),0.3,{scaleX:1.1,scaleY:1.1});

    });

    $(".answer").mouseout(function(){

        TweenMax.to($(this),0.3,{scaleX:1,scaleY:1});

    });

}

function endGame()
{

    TweenMax.to($(".question-screen"),0.5,{scaleX:0.7,scaleY:0.7,opacity:0,ease:Back.easeOut,onComplete:function(){

        $(".question-screen").hide();
        $(".result-screen").show();

        $(".registration-holder").load(getURL("api/registration/"),{user_id:userId,hash:hash,selected_game:selected_game},function(){

            TweenMax.to($(".score-registration"),0.1,{scaleX:0.7,scaleY:0.7});
            TweenMax.to($(".score-registration"),1,{delay:0.1,scaleX:1,scaleY:1,opacity:1,ease:Back.easeOut});

            $(".checkbox").on("click",function(){

                var checked = parseInt($(this).attr("data-checked"));

                if (checked!=0)
                {
                    $(this).attr("data-checked",0);
                    $('.bubble',this).hide();
                }
                else
                {
                    $(this).attr("data-checked",1);
                    $('.bubble',this).show();
                }

            });

            $(".registration-bt").on("click",function(){

                var is_valid = true;

                if ($("#name-if").val()=="")
                {
                    is_valid = false;
                    $(".error-message").html("Įveskite savo vardą");
                }

                if ($("#phone-if").val()=="")
                {
                    is_valid = false;
                    $(".error-message").html("Įveskite savo telefono numerį");
                }


                if (!validateEmail($("#email-if").val()))
                {
                    is_valid = false;
                    $(".error-message").html("Blogas el. pašto formatas");
                }

                var check2 = parseInt($(".cek2").attr("data-checked"));
                var check1 = parseInt($(".cek1").attr("data-checked"));

                if (check2==0)
                {
                    is_valid = false;
                    $(".error-message").html("Turite sutikti su privatumo taisyklėmis");
                }

                if (is_valid)
                {

                    $(".registration-bt").hide();

                    $.post(getURL("api/register/"),{user_id:userId,hash:hash,name:$("#name-if").val(),email:$("#email-if").val(),phone:$("#phone-if").val(),legal1:check1, legal2:check2},function(data){

                        $(".registration-form").hide();
                        $(".success-form").show();

                    },'json')

                }

            });

        });

    }});

}

function validate(evt) {
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    key = String.fromCharCode( key );
    var regex = /^[0-9+]+$/;
    if( !regex.test(key) ) {
        theEvent.returnValue = false;
        if(theEvent.preventDefault) theEvent.preventDefault();
    }
}

function validateEmail(email) {
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
}

function initQuestion()
{

    $(".question").html(questions[current_question].question);
    $(".a1 .wrapper").html(questions[current_question].answer1);
    $(".a2 .wrapper").html(questions[current_question].answer2);
    $(".a3 .wrapper").html(questions[current_question].answer3);

    updateState();

}

function updateState()
{

    $(".question-progress").html(current_question+1+"/"+questions.length);
    TweenMax.to($(".filled-bar"),0.3,{width:(current_question+1)/questions.length*100+"%"});
    $(".question-counter").html((current_question+1)+" klausimas");


}

function updateQuestionTimer()
{

    question_timeleft--;
    var _height = ((questions.length-question_timeleft)/questions.length*100)+"%";
    TweenMax.to($(".time-background"),0.1,{height:_height});
    $(".time-left").html(question_timeleft+" s.");

    if (question_timeleft<=0)
    {
        $(".incorrect").hide();
        $(".correct").hide();

        TweenMax.to($(".answer"),0.3,{opacity:0.6});
        $(".timeout").show();
        $(".question-popup").fadeIn();
        $(".next-quesiton-button").show();

        $.post("api/timeout/",{selected_game:selected_game,id:questions[current_question].id,user_id:userId,hash:hash});

        endCurrentQuestion();
    }

}

var question_state = true;

function endCurrentQuestion()
{

    question_state = false;
    clearInterval(question_timer);
    showCorrectPopup();

}

var my_score = 0;
var current = {score:0};
var last_earn;

function showCorrectPopup()
{

    $(".explainer").html("");

    $.post(getURL("index.php/api/guess/"),{user_id:userId,hash:hash,selected_game:selected_game,time_left:question_timeleft,id:questions[current_question].id,guess:guess},function(data){

        if (data.state==1)
        {

            $(".explainer").html(data.explainer);
            $(".correct").show();
            $(".question-popup").fadeIn();

            last_earn = parseInt((question_timeleft<=0)?0:parseInt(question_timeleft)+20);
            current.score = my_score;


            TweenMax.to(current,1,{delay:0.5,score:(my_score+last_earn),onUpdate:function(){
                $(".my-points").html(Math.round(current.score));
            }});

        }
        else if (data.state==2)
        {
            last_earn = 0;
            $(".incorrect").show();
            $(".explainer").html(data.explainer);
            $(".question-popup").fadeIn();
        }

    },'json');

}

var countdown_timer;
var countdown_left = 3;

function getURL(src)
{
    return host_url+src;
}
