$(document).ready(function() {
    //centrowanie popupu
    $("#helpPopup").center();
    $(window).scroll(function(){
        $("#helpPopup").center();
    });
    
    // obsługa zawartości popupu
    $("#helpPopupProgressbar" ).progressbar({
        value: 0
    });
     
     $("li.HPgoNextStep").click(function(){
         HPgoNextStep(this);
     });
     
     $("a#HPnextStep").click(function(){
         HPgoNextStep(this);
         return false;
     });
     
     //$("#DataTab1 input:radio").removeAttr("checked","checked");
     $("#HPquestion_1").show();
     $("a#HPprevStep").click(function(){
         HPgoPrevStep(this);
         return false;
     });
     $("a#HPprevStep").hide();
     $("#helpPopupClose").click(function(){
         $("#helpPopup").hide();
     });
     
     //otwarcie popup do ponownego uzycia
     $("#displayHelpPopup").click(function(){
         $("#helpPopup").show();
         return false;
     });
     
     $(".radioHelp").click(function(){
         $(this).children('input').attr('checked', 'checked');
         var sCheckedConfirm = null;
         $("#confirmPopupContent ul > li > input:checked").each(function(){
            sCheckedConfirm = $(this).val();
        });
        //jeżeli customer kliknie, że Emma była pomocna
        if(sCheckedConfirm=='yes'){
            $('.startConfirm').hide();
            $('.yesConfirm').show();
            $("#confirmPopupContent").hide();
            $("#sendCustomerData").show();
        }
        
        if(sCheckedConfirm=='no'){
            $('.startConfirm').hide();
            //Jeżeli emma nie była pomocna
            $('.noConfirm').show();
            $("#confirmPopupContent").hide();
            $("#sendCustomerData").show();
            $("#startAgainContainer").show();
        }
        //jeżeli customer chce sobie jeszcze pozwiedzać stronę ale nei wyłączać emmy
        if(sCheckedConfirm=='skip'){
            setTimeOut();
            $("#helpPopup").hide();
        }
     });
     
     $("#nextStepConfirm").click(function(){
         var checkError = customerDataValidate();
         if(checkError!=false){
            sendConfirmMail();
         }
        return false;
     });
     
     $("#closeEmmaPopupLink").click(function(){
         $("#helpPopup").hide();
         disableConfirm();
        $("#popupConfirm").hide();
        $("#questionsForSearch").show();
         return false;
     });
      $("#startAgain").click(function(){
         disableConfirm();
        $("#popupConfirm").hide();
        $("#questionsForSearch").show();
         return false;
     });
});

jQuery.fn.center = function () {
    var iTop = (($(window).height() - this.outerHeight()) / 2) + $(window).scrollTop();
    this.css("position","absolute");
    this.css("top", iTop + "px");
    this.css("left", (($(window).width() - this.outerWidth()) / 2) + $(window).scrollLeft() + "px");
    return this;
}

var HPiCurrentStep = 1;
function HPgoNextStep(item){
    $(".HPerrors").html('');
    if($(item).attr('class')=='HPgoNextStep'){
        $(item).children("input:radio").attr("checked","checked");
    }
    if(HPvalidate(HPiCurrentStep)==true){
        if((HPiCurrentStep+1)>HPmax){
            setProgress(100);
            HPfinish();
        }
        else{
            $("div#HPquestion_"+HPiCurrentStep).hide();
            HPiCurrentStep++;
            var sCheckTooltip = HPcheckTooltip();//ukrywanie tooltipów
            for(s=1;s<=HPmax;s++){
                 sFindElemTool = ','+((s))+',';
                if(sCheckTooltip.indexOf(sFindElemTool) > 0){
                    $("#HPquestion_"+s+" > .tip").hide();
                }
                else{
                    $("#HPquestion_"+s+" > .tip").show();
                }
            }
            
            var sCheckDisabled = HPcheckDisabled();//generuję string zawierajacy listę kroków które mają być wyłączone po wybraniu danej opcji
            var sFindElem = '';
            var iTemp = 0;
            for(z=HPiCurrentStep;z<=HPmax;z++){//sprawdzam od aktualnego kroku ilość opcji do wykluczenia
                sFindElem = ','+((z))+',';
                if(sCheckDisabled.indexOf(sFindElem) > 0){
                    iTemp++;
                }
                else{
                    break;
                }
            }
            HPiCurrentStep = HPiCurrentStep + iTemp;
            $("div#HPquestion_"+HPiCurrentStep).show("slide", {direction: "right"}, 150);

            HPhideNavigElements(HPiCurrentStep);
            
        }
    }
}

function HPgoPrevStep(){
    if((HPiCurrentStep-1)>0){
        $("div#HPquestion_"+HPiCurrentStep).hide();
        HPiCurrentStep--;
        var sCheckDisabled = HPcheckDisabled();
        var sFindElem = '';
        var iTemp = 0;
        for(z=HPiCurrentStep;z>=1;z--){
            sFindElem = ','+((z))+',';
            if(sCheckDisabled.indexOf(sFindElem) > 0){
                iTemp++;
            }
            else{
                break;
            }
        }
        HPiCurrentStep = HPiCurrentStep - iTemp;

        $("div#HPquestion_"+HPiCurrentStep).show("slide", {direction: "left"}, 150); 
    }
    HPhideNavigElements(HPiCurrentStep);
}

function HPhideNavigElements(HPiCurrentStep){
    if(HPiCurrentStep==1){
        $("a#HPprevStep").hide();
    }
    else{
        $("a#HPprevStep").show();
    }
    HPsetProgress((HPiCurrentStep-1)/(HPmax)*100);
}
  
function HPsetProgress(new_value) {
    $( "#helpPopupProgressbar" ).progressbar('value', new_value );
}

function HPcheckDisabled(){
     var sDisabled = '';
     var sDisabledAll =',';    
     $(".HPquestionsContainers > div > ul > li > input:checked").each(function(){
         sDisabled =  $(this).attr("class").replace(/disable/gi, "").replace(/ /gi, "");
         sDisabledAll = sDisabledAll + ","+ sDisabled;
    });
    sDisabledAll = sDisabledAll + ',';
    return sDisabledAll;
}

function HPcheckTooltip(){
     var sDisabled = '';
     var sDisabledAll =',';    
     $(".HPquestionsContainers > div > ul > li > input:checked").each(function(){
         sDisabled = $(this).attr("tooltips").replace(/hidetooltip/gi, "").replace(/ /gi, "");
         sDisabledAll = sDisabledAll + ","+ sDisabled;
    });
    sDisabledAll = sDisabledAll + ',';
    return sDisabledAll;
}

function HPvalidate(iStep){
    var sErrors = '';
    
    //spradzam czy są dostępne radio buttony dla aktualnego etapu, jezeli tak to sprawdzam czy któryś z nich jest zaznaczony
    
    var iCheckRadio = 0;
    $("#HPquestion_"+iStep+" > div > ul > li > input:radio").each(function(){
        iCheckRadio++;
    });
    
    var iCheckChecked = 0;
    if(iCheckRadio>0){
        $("#HPquestion_"+iStep+" > div > ul > li > input:radio:checked").each(function(){
            iCheckChecked++;
        });
        
        if(iCheckChecked<=0){
            sErrors=' You have to set the answer! ';
        }
    }
    
    //sprawdzam czy mam jakąś textarea do validacji -> nie moze być pusta!
    if ($("#HPquestion_"+iStep+" > div > textarea.validText").length > 0){
        if($("#HPquestion_"+iStep+" > div > textarea.validText").val()==''){
            if(sErrors!=''){
                sErrors = sErrors + ', '
            }
             sErrors=' You have to fill all fields! ';
        }
    }

    
    var sErrorsInputs = '';
    $("#HPquestion_"+iStep+" > div > div > .validText").each(function(){
         if($(this).val()==''){
             if(sErrors!=''){
                sErrorsInputs = sErrorsInputs + ', '
            }
             sErrorsInputs=' You have to fill all fields! ';
         }
    });
    sErrors = sErrors + sErrorsInputs;
    
    var sErrorsEmail = '';
    $("#HPquestion_"+iStep+" > div > div > .validEmail").each(function(){
         if(HPvalidate_email_landing($(this).val())==false){
             if(sErrors!=''){
                sErrorsEmail = sErrorsEmail + ', '
            }
             sErrorsEmail=' Incorrect e-mail address! ';
         }
    });
    sErrors = sErrors + sErrorsEmail;
    
    var sErrorsPhone = '';
    $("#HPquestion_"+iStep+" > div > div > .validPhone").each(function(){
         if(HPvalidate_phone_landing($(this).val())==false){
             if(sErrors!=''){
                sErrorsPhone = sErrorsPhone + ', '
            }
             sErrorsPhone=' Incorrect phone number! ';
         }
    });
    sErrors = sErrors + sErrorsPhone;
    
    if(sErrors==''){
        return true
    }
    else{
        $("#HPerror_"+iStep).html(sErrors);
        $("#HPerror_"+iStep).effect('shake', {
                            times: 3,
                            distance: 10
                        }, 100);
        return false;
    }
}

function HPvalidate_email_landing(email) {
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if(reg.test(email) == false) {
        return false;
    }
    return true;
}
            
function HPvalidate_phone_landing(phone) {
    phone = phone.replace(/ /g,"");
    if (IsNumeric(phone) && phone.length > 7) {
        return true
    } else {
        return false;
    }
}

//zmienna globalna która słoży do załaczania/wyłączania automatycznego popupu po określonym czasie
var showAutoPopup = false;
function HPfinish(){
    $("#helpPopupNavigContainer").hide();
    $("#helpPopupLoader").show();
    $("#helpPopupForm").hide();
    var sFindElem ='';
    var sDisabled = HPcheckDisabled(); // wyszukuje zablokowane kwestie i wywala je po to by, serialize() nie przekazało ich do post
    for(s=1;s<=HPmax;s++){
         sFindElem = ','+((s))+',';
        if(sDisabled.indexOf(sFindElem) > 0){
            $("#HPquestion_"+s).html();
        }
    }
    $.ajax({
        url: baseHref+"default/index/helppopupdata",
        type: "POST",
        //data: $("#landingForm").serialize()+"&car="+$("input#car").val()+"&url="+$("input#url").val()+"&idOffer="+idOffer+"&nameAction="+nameAction,
        data: $("#helpPopupForm").serialize(),
        dataType: "html",
        async:false,
        success: function(items){
            //sprawdzam czy widnieje odpowiedź "I would like to explore options", jezeli tak to przekierowywuję do dokumentu finance and insurance, a nie do search
            //jeżeli jednak odpowiedź jest inna, to przekierowywuję do index/search
           bFinanceInsurance = false;
           
           $(".HPquestionsContainers > div > ul > li > input:checked").each(function(){
                if($(this).val()=='I would like to explore options'){
                    bFinanceInsurance = true;
                }
           });
           if(bFinanceInsurance==false){
              window.location = baseHref+"index/search";
           }
           else{
              window.location = baseHref+"index/document/id/94/name/finance-and-insurance"; 
           }
        }
    });
}

function displayPopupConfirm(){
    //wyświetla help popup z zapytaniem ,czy popup był pomocny i formularzem z danymi adresowymi
    // wywoływane jest po 15 s w helperze widoku GenerateHelpPopup()
    if(showAutoPopup==true){
        $("#helpPopup").show();
    }
}

function disableConfirm(){
    //ajaxowo wyłączam możliwość pojawienia się popupu po odświeżeniu i 15 sekundach i wyłacząm potwierdzenie + formularz z detalami
    $.ajax({
        url: baseHref+"default/index/helppopupconfirmdisable",
        type: "POST",
        dataType: "html",
        async:false,
        success: function(items){
        
        }
    });
    showAutoPopup = false;
}

function sendConfirmMail(){
    $.ajax({
        url: baseHref+"default/index/sendmail",
        type: "POST",
        dataType: "html",
        data: $("#popupFormCustomer").serialize(),
        async:false,
        success: function(items){
            $("#popupConfirm").html(items);
        }
    });
    disableConfirm();
}

//validacja ostatniego formularza...
function customerDataValidate(){
    var sErrors = '';
    var sErrorsInputs = '';
    $(".validTextConfirm").each(function(){
         if($(this).val()==''){
             if(sErrors!=''){
                sErrorsInputs = sErrorsInputs + ', '
            }
             sErrorsInputs=' You have to fill all fields! ';
         }
    });
    sErrors = sErrors + sErrorsInputs;
    
    var sErrorsEmail = '';
    $(".validEmailConfirm").each(function(){
         if(HPvalidate_email_landing($(this).val())==false){
             if(sErrors!=''){
                sErrorsEmail = sErrorsEmail + ', '
            }
             sErrorsEmail=' Incorrect e-mail address! ';
         }
    });
    sErrors = sErrors + sErrorsEmail;
    
    var sErrorsPhone = '';
    $(".validPhoneConfirm").each(function(){
         if(HPvalidate_phone_landing($(this).val())==false){
             if(sErrors!=''){
                sErrorsPhone = sErrorsPhone + ', '
            }
             sErrorsPhone=' Incorrect phone number! ';
         }
    });
    sErrors = sErrors + sErrorsPhone;
    
    if(sErrors==''){
        return true
    }
    else{
        $("#confirmCustomerError").text(sErrors);
        $("#confirmCustomerError").effect('shake', {
                            times: 3,
                            distance: 10
                        }, 100);
        return false;
    }
}

function setTimeOut(){
    // Delay dla automatycznego pojawiania się popupu Emma
    // funkcja pobiera czas z serwera, zwiększa o odpowiednią ilosć sekund i zapisje do zmiennej sesyjnej czas z delayem oraz do drugiej zmiennej sesyjnej sam delay
    // w zależności od poprzedniego delay'a nowy jest odpowiednio zwiększany:
    // 1 - po wypełnieniu odpowiedzi - 15 sekund
    // 2 - po 1 odrzuceniu (I am still browsing thanks) - delay zwiększamy do 30 sekund
    // 3 - po 2 odrzuceniu dealy zwiększamy do 2 minut
    // 4 - po 3 odrzuceniu delay zwiększamy do 5 minut
    // 5 - za każdym kolejnym odrzuceniem, delay regenure się do 5 minut
    // 6 - jeżeli user kliknie w "I do not want to use Emma to help me" - wyłączamy przypominanie popupu

    //dla testów czy działa ok, ustawiam na razie z aktualnego stany, np na 2 minuty
    var iTimeOutSet = updateTimeout();
    timeoutEmma=setTimeout("displayPopupConfirm()",iTimeOutSet);
    
//    
    
}

function updateTimeout(){
    //ajaxowo aktualizuję czas po którum powienien pojawić się na nowo popup i zwracam ustawioną wartosć * 1000 (milisekundy na sekundy)
    var iUpdatedTimeout = $.ajax({
        url: baseHref+"default/index/updatetimeout",
        type: "POST",
        dataType: "html",
        async:false,
        success: function(items){
        
        }
    }).responseText;
    
    return iUpdatedTimeout * 1000;
}
