$(window).on("load", function() {

  // Adapt some class to fit Bootstrap theme
  $("div.message-positive").addClass("alert-success");
  $("div.message-warning").addClass("alert-warning");
  $("div.message-negative").addClass("alert-danger");

  $("table.info").addClass("table");

  $(".notifCheck").addClass("checkbox");

  // Collapse menu on click
  $('.collapse li:not(".dropdown")').on('click', function() {
    if (!$('.navbar-toggler').hasClass('collapsed')) {
      $(".navbar-toggler").trigger("click");
    }
  });

  // Remember selected tab
  $('#authMenu .nav-link').on('click', function (e) {
      window.datas.choicetab = e.target.hash.substr(1)
  });

  // Transmit attributes to remove2f modal
  $('#remove2fModal').on('show.bs.modal', function (event) {
    var button = $(event.relatedTarget) // Button that triggered the modal
    var device = button.attr('device') // Extract device/epoch from button
    var epoch = button.attr('epoch')
    var prefix = button.attr('prefix')
    var modal = $(this)

    // Set device/epoch on modal remove2f button so that the portal JS code can find it
    modal.find('.remove2f').attr('device', device)
    modal.find('.remove2f').attr('epoch', epoch)
    modal.find('.remove2f').attr('prefix', prefix)
  })

  // Set tab items (my applications, password, history, logout) tabbable
  // (ie accessible via tab key)
  // needed because of jquery-ui setting only active element tabbable
  // (see #2561)
  $('.nav-item').click(function() {
    $('.nav-item').attr( "tabIndex", 0 );
  });
  $('.nav-item').focusin(function() {
    $('.nav-item').attr( "tabIndex", 0 );
  });
  $('.nav-item').focusout(function() {
    $('.nav-item').attr( "tabIndex", 0 );
  });

});

function llngGetCookie(name) {
  return document.cookie.split('; ').find(function(c) {
    return c.substring(0, name.length + 1) === name + '=';
  })?.substring(name.length + 1);
}

$(document).on( "portalLoaded", { }, function( event, info ) {
  // Make sure DOM is ready as well
  $( document ).ready(function() {
    // tick all checkboxes remembering the authentication choice
    // when global checkbox is clicked
    $("#globalrememberauthchoice").change(function() {
        var checked = this.checked;
        $( 'input[name="rememberauthchoice"]' ).each(function() {
            $( this ).val(checked);
        });
    });

    // if rememberStopped button has been clicked, stop the timer
    // from lauching the previously remembered authentication
    $("#buttonRememberStopped").click(function() {
        var curval = $( "input#rememberStopped" ).val();
        var newval;
        if( curval != "stopped" )
        {
            newval = "stopped";
        }
        else
        {
            newval = "running";
            window.setTimeout( launchAuthenticationChoice, 0 );
        }
        // store the new value
        $( "input#rememberStopped" ).val(newval);
        $( "#remembertimercontainer" ).hide();
        $( "#globalrememberauthchoicecontainer" ).css('display', 'flex');
    });

    // function running the previously remembered authentication choice
    // when the timer is over
    function launchAuthenticationChoice()
    {

        var timer = $( "span#remembertimer" ).text();
        var isStopped = $( "input#rememberStopped" ).val();

        if ( isStopped != "stopped" )
        {
            timer--;
            // display decremented timer in the appropriate html element
            $( "span#remembertimer" ).text(timer);

            if ( timer > 0 )
            {
                // wait for another 1s
                window.setTimeout( launchAuthenticationChoice, 1000 );
            }
            else
            {
                // launch authentication choice defined in cookie
              var sslform = $("#id_" + llngGetCookie(rememberCookieName) + " form .sslclick");
              if (sslform.length) {
                  sslform.click();
              } else {
                  var choiceform = $("#id_" + llngGetCookie(rememberCookieName) + " form");
                  choiceform?.submit();
              }
            }
        }

    };


    // Check rememberauthchoice cookie
    var rememberCookieName = $( "#rememberCookieName" ).val();
    // if this is first access
        if( window.datas.authError == 9 )
    {
        // if there is a rememberauthchoice cookie
        if (  ! ( typeof rememberCookieName === 'undefined' ) &&
              ! ( typeof llngGetCookie(rememberCookieName) === 'undefined' )
           )
        {
            // show timer
            $( "#remembertimercontainer" ).css('display', 'flex');
            // remember last authentication choice again
            $("#globalrememberauthchoice").prop('checked',true);
            $( 'input[name="rememberauthchoice"]' ).each(function() {
              $( this ).val('true');
            });
            // increment timer for starting to correct time
            $( "span#remembertimer" ).text( parseInt($( "span#remembertimer" ).text()) + 1 );
            // launch remembered authentication choice when timer reaches 0
            window.setTimeout( launchAuthenticationChoice, 0 );
        }
        else
        {
          // display the global checkbox
          $( "#globalrememberauthchoicecontainer" ).css('display', 'flex');
        }
    }

  });
});
