var timeout_sharesmailboxeslist;
var hide_mailviewsplitterv = false;
var mailviewright_left = 0;
var mailviewleft_width = 0;
var mailviewsplitterv_left = 0;
var page_loading;
var current_page_scroll;

// Changement d'utilisateur sur la page de login
$(document).on(
  {
    click: function (e) {
      $('#formlogintable .hidden_login_input').removeClass(
        'hidden_login_input',
      );
      $('.login_div').hide();
      $('#rcmloginuser').val('');
      $('#rcmloginuser').focus();
      $('#rcmloginkeep').removeAttr('checked');
    },
  },
  '#rcmchangeuserbutton',
); //pass the element as an argument to .on

if (window.rcmail) {
  rcmail.addEventListener('init', function (evt) {
    // Initialisation de la liste des pages chargées
    page_loading = {};
    current_page_scroll = 1;

    if (rcmail.env['plugin.show_password_change']) {
      show_password_change(this);
    }

    // Switch to default task commande
    rcmail.register_command(
      'switch-to-default-task',
      function () {
        rcmail.switch_to_default_task();
      },
      true,
    );

    // Gestion de l'url courrielleur
    var url = window.location.href.split('?')[1];
    if (
      url &&
      url.indexOf('_courrielleur') != -1 &&
      url.indexOf('_err=session') != -1
    ) {
      if (url.indexOf('_courrielleur=1') != -1) {
        window.location.href = '_task=login&_courrielleur=1';
      } else if (url.indexOf('_courrielleur=2') != -1) {
        window.location.href = '_task=login&_courrielleur=2';
      }
    }

    if (
      rcmail.env.task == 'mail' &&
      (!rcmail.env.action || rcmail.env.action == '')
    ) {
      rcmail.enable_command('window-edit-folder', true);

      let ul = $('#folderlist-content')
        .find('a[rel="' + rcmail.env.mailbox + '"]')
        .closest('ul');
      let isHidden = ul.attr('style');
      if (isHidden) {
        ul.prev().click();
      }

      rcmail.addEventListener('contextmenu_init', function (menu) {
        // identify the folder list context menu
        if (menu.menu_name == 'folderlist') {
          // make sure this new shortcut is always active
          menu.addEventListener('activate', function (p) {
            if (p.command == 'window-edit-folder') {
              return true;
            }
          });
        }
      });
      if (rcmail.env.use_infinite_scroll) {
        var scroll = false;
        $('.pagenavbuttons').hide();
        $('#countcontrols').hide();

        var ml_container = '#messagelistcontainer';
        if (rcmail.env.skin == 'elastic' || rcmail.env.skin == 'mel_elastic') {
          ml_container = '#messagelist-content';
          $('.firstpage')
            .parent() /*.closest('div').children()*/
            .hide();
        } else {
          $('.pagenavbuttons').hide();
          $('#countcontrols').hide();
        }
        // Gestion du scroll infini
        $(ml_container).scroll(function () {
          if (
            $(ml_container).scrollTop() > 1 &&
            ($(ml_container).scrollTop() + $(ml_container).height()) /
              $('#messagelist').height() >=
              0.95 &&
            current_page_scroll > 1 &&
            (!rcmail.env.iselectron ||
              rcmail.env.mailbox.indexOf(rcmail.env.local_archive_folder) !== 0)
          ) {
            // Affichage de la page suivante au bas de la page
            var page = current_page_scroll;
            if (!rcmail.busy)
              console.log(
                'Fin de la liste des mails, recherche de mails plus ancien....',
              );
            if (
              page > 0 &&
              page <= rcmail.env.pagecount &&
              !page_loading[page]
            ) {
              page_loading[page] = true;
              var lock = rcmail.set_busy(true, 'loading');
              var post_data = {};
              post_data._mbox = rcmail.env.mailbox;
              post_data._page = page;
              // also send search request to get the right records
              if (rcmail.env.search_request)
                post_data._search = rcmail.env.search_request;
              rcmail.env.is_from_scroll = true;
              console.log('Recherche en cours....', post_data);
              rcmail.http_request('list', post_data, lock).always(() => {
                console.log('Recherche terminée !');
              });
            } else if (!rcmail.busy)
              console.log("Il n'y a pas de nouveaux mails");
          }
        });
        if (!rcmail.env.ismobile) {
          // Réinitialise les données une fois que la liste est rafraichie
          rcmail.message_list.addEventListener('clear', function (evt) {
            page_loading = {};
            rcmail.env.current_page = 1;
            current_page_scroll = 2;
          });
          rcmail.addEventListener('responseafterlist', function (evt) {
            if (rcmail.env.use_infinite_scroll) {
              current_page_scroll = rcmail.env.current_page + 1;
              rcmail.env.current_page = 1;
            }
            rcmail.http_post('plugin.set_current_page', {});
          });
        }
      }
    } else if (rcmail.env.task === 'mail' && rcmail.env.action === 'compose') {
      $('#compose-options select[name="_store_target"]').change();
    } else if (rcmail.env.task == 'settings') {
      // Masquer la skin mobile de l'interface de choix des skins
      if ($('#rcmfd_skinmel_larry_mobile').length) {
        $('#rcmfd_skinmel_larry_mobile')
          .parent()
          .parent()
          .parent()
          .parent()
          .hide();
      }
    } else if (rcmail.env.task == 'calendar') {
      // PAMELA - Masquer les champs non utilisés dans Mél
      $('#edit-url').parent().hide();
      $('#edit-priority').parent().hide();
      $('#edit-free-busy').parent().hide();
      $('#event-free-busy').hide();
      $('.edit-alarm-buttons').hide();
      $("#edit-sensitivity option[value='confidential']").remove();
      $("#edit-recurrence-frequency option[value='RDATE']").remove();
    }
  });
  // MANTIS 0004276: Reponse avec sa bali depuis une balp, quels "Elements envoyés" utiliser
  rcmail.addEventListener('change_identity', function (evt) {
    if (window.identity && window.identity != rcmail.env.identity) {
      var params = {};
      if (rcmail.env.identities_to_bal[rcmail.env.identity]) {
        params['_account'] = rcmail.env.identities_to_bal[rcmail.env.identity];
      }
      rcmail.http_request(
        'mail/plugin.refresh_store_target_selection',
        params,
        rcmail.set_busy(true, 'loading'),
      );
    }
    window.identity = rcmail.env.identity;
  });
  rcmail.addEventListener(
    'responseafterplugin.refresh_store_target_selection',
    function (evt) {
      // @rotomeca
      $('#compose-options select[name="_store_target"]').html(
        $(evt.response.select_html).html(),
      );
      setTimeout(() => {
        $('#compose-options select[name="_store_target"]')
          .addClass('form-control custom-select pretty-select')
          .change();

        let $select = $('#compose-options select[name="_store_target"]')[0];

        if ($select.value === '') {
          $select.value = evt.response.sended_folder;
        }

        $select = null;
      }, 100);
      $('#_compose_hidden_account').val(
        rcmail.env.identities_to_bal[rcmail.env.identity],
      );
    },
  );
}

// Open edit folder iframe
rcube_webmail.prototype.window_edit_folder = function () {
  window.location.hash = 'createfolder';
  var folder = $('#mailboxlist li.contextRow').length
    ? atob($('#mailboxlist li.contextRow').attr('id').replace('rcmli', ''))
    : rcmail.env.mailbox;
  var frame = $('<iframe>')
    .attr('id', 'managemailboxfolder')
    .attr(
      'src',
      rcmail.url('settings/edit-folder') +
        '&_framed=1&_path=' +
        encodeURIComponent(folder),
    )
    .attr(
      'onLoad',
      "if (this.contentWindow.location.href.indexOf('edit-folder') === -1) {$('#managemailboxfolder').dialog('close'); window.location.reload();} ",
    )
    .attr('frameborder', '0')
    .appendTo(document.body);

  var h = Math.floor($(window).height() * 0.75);
  var buttons = {};

  frame
    .dialog({
      modal: true,
      resizable: false,
      closeOnEscape: true,
      title: '',
      close: function () {
        frame.dialog('destroy').remove();
      },
      buttons: buttons,
      width: 450,
      height: 480,
      rcmail: rcmail,
    })
    .width(430);
  $(window).on('hashchange', function (e) {
    if (
      e.originalEvent.oldURL.replace(e.originalEvent.newURL, '') ==
      '#createfolder'
    ) {
      $('#managemailboxfolder').dialog('close');
    }
  });
};

// Get value from cache
rcube_webmail.prototype.mel_storage_get = function (
  name,
  fromJson = false,
  defaultValue = null,
) {
  if (this.env.keep_login) {
    var value = window.localStorage.getItem('mel.' + name);
  } else {
    var value = window.sessionStorage.getItem('mel.' + name);
  }

  if (value == null) {
    value = defaultValue;
  } else {
    if (fromJson) {
      value = JSON.parse(value);
    }
  }
  return value;
};

// Set value to cache
rcube_webmail.prototype.mel_storage_set = function (
  name,
  value,
  toJson = false,
) {
  if (toJson) {
    value = JSON.stringify(value);
  }
  if (this.env.keep_login) {
    window.localStorage.setItem('mel.' + name, value);
  } else {
    window.sessionStorage.setItem('mel.' + name, value);
  }
};

// Add value to cache
rcube_webmail.prototype.mel_storage_add = function (name, key, value) {
  var obj = this.mel_storage_get(name, true);
  if (!obj) {
    obj = {};
  }
  obj[key] = value;
  this.mel_storage_set(name, obj, true);
};

// Remove value from cache
rcube_webmail.prototype.mel_storage_remove = function (name) {
  if (this.env.keep_login) {
    window.localStorage.removeItem('mel.' + name);
  } else {
    window.sessionStorage.removeItem('mel.' + name);
  }
};

// Switch to default task
rcube_webmail.prototype.switch_to_default_task = function () {
  this.switch_task(rcmail.env.default_task);
};

/**
 * Show password change page as jquery UI dialog
 */
function show_password_change() {
  const navigator = top ?? parent ?? window;
  if (navigator.$('#changepasswordframe').length === 0) {
    var frame = navigator
      .$('<iframe>')
      .attr('id', 'changepasswordframe')
      .attr(
        'src',
        rcmail.url('settings/plugin.mel_moncompte') +
          '&_fid=changepassword&_framed=1',
      )
      .attr('frameborder', '0')
      .appendTo(navigator.document.body);

    //var h = Math.floor($(window).height() * 0.75);
    var buttons = {};

    frame
      .dialog({
        modal: true,
        resizable: false,
        closeOnEscape: true,
        title: rcmail.env.passwordchange_title,
        close: function () {
          frame.dialog('destroy').remove();
        },
        buttons: buttons,
        width: 700,
        height: 500,
        rcmail: rcmail,
      })
      .width(680);
  }
}

if (
  rcmail &&
  (rcmail.env.task == 'mail' || rcmail.env.task == 'addressbook') &&
  typeof rcube_list_widget !== 'undefined'
) {
  /**
   * Réécriture de la fonction clear de la classe javascript rcube_list_widget
   * Permet d'ajouter le triggerEvent clear
   * Nécessaire pour le scroll infini notamment
   */
  rcube_list_widget.prototype.clear = function (sel) {
    if (this.tagname == 'table') {
      var tbody = document.createElement('tbody');
      this.list.insertBefore(tbody, this.tbody);
      this.list.removeChild(this.list.tBodies[1]);
      this.tbody = tbody;
    } else {
      $(this.row_tagname() + ':not(.thead)', this.tbody).remove();
    }

    this.rows = {};
    this.rowcount = 0;

    if (sel) this.clear_selection();

    // reset scroll position (in Opera)
    if (this.frame) this.frame.scrollTop = 0;

    // fix list header after removing any rows
    this.resize();
    // PAMELA - triggerEvent clear for list
    this.triggerEvent('clear');
  };
}