function unlockElement(type, id, domEl) {
  var msg = trans.msg.replace('[+id+]', id).replace('[+element_type+]', trans['type' + type]);
  if (confirm(msg) == true) {
    jQuery.get('index.php?a=67&type=' + type + '&id=' + id, function(data) {
      if (data == 1) {
        jQuery(domEl).fadeOut();
      } else alert(data);
    });
  }
}

function actionDisableElement(t) {
  let $t = $(t),
      $row = $(t).closest('.rTableRow'),
      $title = $('.rTableRowTitle', $row),
      $icon = $('i', $t);

  $row.fadeTo(100, .5);

  jQuery.get($t.data('disabled') ? $t.data('enable-href') : $t.data('disable-href'), function(data) {
    $row.fadeTo(100, 1);

    /__alertQuit\(\)/.test(data) && parent.modx.alert(data.match(/\<body\>(.*?)\<\/body\>/s)[0]);

    if ($t.data('disabled')) {
      $t.data('disabled', 0);
      $t.attr('title', $t.data('disable-title') ?? $t.title);
      $icon.attr('class', $t.data('disable-icon'));
      $title.removeClass('disabledPlugin');
    } else {
      $t.data('disabled', 1);
      $t.attr('title', $t.data('enable-title') ?? $t.title);
      $icon.attr('class', $t.data('enable-icon'));
      $title.addClass('disabledPlugin');
    }
  });
}

// Switch Views
var version = 1;

function initViews(pre, helppre, target) {
  jQuery('#' + helppre + '-help').click(function() {
    jQuery('#' + helppre + '-info').toggle(400);
  });
}

function setColumnCount(targetEl, count) {
  targetEl.find('.panel-collapse > ul').css({
    '-moz-column-count': count,
    '-webkit-column-count': count,
    'column-count': count
  });
}

function getViewOpts(form) {
  viewOpts = {};
  // Options
  viewOpts.cb_buttons = form.find('input:checkbox[name=cb_buttons]').is(':checked');
  viewOpts.cb_description = form.find('input:checkbox[name=cb_description]').is(':checked');
  viewOpts.cb_icons = form.find('input:checkbox[name=cb_icons]').is(':checked');
  viewOpts.cb_all = form.find('input:checkbox[name=cb_all]').is(':checked');

  // Views
  viewOpts.view = form.find('input[name=view]:checked').val();
  viewOpts.columns = form.find('input[name=columns]').val();

  viewOpts.fontsize = form.find('input[name=fontsize]').val();

  return viewOpts;
}

function setView(viewOpts, targetEl, target) {
  // Options
  if (viewOpts.cb_buttons) {
    targetEl.find('.btnCell').show();
  } else {
    targetEl.find('.btnCell').hide();
  }
  if (viewOpts.cb_description) {
    targetEl.find('span.elements_descr').show();
  } else {
    targetEl.find('span.elements_descr').hide();
  }
  if (viewOpts.cb_icons) {
    targetEl.removeClass('noicons');
  } else {
    targetEl.addClass('noicons');
  }

  // Views
  switch (viewOpts.view) {
    case 'inline':
      targetEl.removeClass('flex list');
      targetEl.addClass('inline');
      setColumnCount(targetEl, 1);
      break;
    case 'flex':
      targetEl.removeClass('inline list');
      targetEl.addClass('flex');
      setColumnCount(targetEl, viewOpts.columns);
      break;
    case 'list':
    default:
      targetEl.removeClass('flex inline');
      targetEl.addClass('list');
      setColumnCount(targetEl, 1);
      break;
  }

  // Set font-size
  targetEl.css('font-size', viewOpts.fontsize / 10 + 'em');

  // Save view-options to localStorage
  viewOpts.version = version; // Provides version of options-obj to allow easy resetting of localStorage on future updates
  localStorage.setItem('MODX_mgrResources_' + target, JSON.stringify(viewOpts));

  // console.log('save', viewOpts);
}

function setAllViews(viewOpts) {
  jQuery('.switchForm').each(function() {
    var form = jQuery(this);
    var target = form.data('target');
    var targetEl = jQuery('#' + target);
    setView(viewOpts, targetEl, target);
    setViewOptions(form, viewOpts);
  });
}

function setViewOptions(form, viewOpts) {
  form.find('input:checkbox[name=cb_buttons]').attr('checked', viewOpts.cb_buttons).prop('checked', viewOpts.cb_buttons);
  form.find('input:checkbox[name=cb_description]').attr('checked', viewOpts.cb_description).prop('checked', viewOpts.cb_description);
  form.find('input:checkbox[name=cb_icons]').attr('checked', viewOpts.cb_icons).prop('checked', viewOpts.cb_icons);
  form.find('input:radio[name=view][value=' + viewOpts.view + ']').attr('checked', true).prop('checked', true);
  form.find('input[name=columns]').val(viewOpts.columns);
  form.find('input[name=fontsize]').val(viewOpts.fontsize);
  form.find('input:checkbox[name=cb_all]').attr('checked', viewOpts.cb_all).prop('checked', viewOpts.cb_all);
}

function setViewDefaultOptions(form) {
  var viewOpts = {};
  viewOpts.cb_buttons = 1;
  viewOpts.cb_description = 1;
  viewOpts.cb_icons = 1;
  viewOpts.view = 'list';
  viewOpts.columns = 3;
  viewOpts.fontsize = 10;
  viewOpts.cb_all = true;
  setViewOptions(form, viewOpts);
}

// Add switch-view functionality
jQuery(document).ready(function() {
  jQuery('.switchForm').each(function() {
    var form = jQuery(this);
    var target = form.data('target');
    var targetEl = jQuery('#' + target);

    form.change(function() {
      var viewOpts = getViewOpts(form);
      if (form.find('input:checkbox[name=cb_all]').is(':checked')) {
        // Set view in all tabs
        setAllViews(viewOpts);
      } else {
        // Set view in single tab
        setView(viewOpts, targetEl, target);
      }
    });

    // Get parameters from localStorage
    var viewOpts = JSON.parse(localStorage.getItem('MODX_mgrResources_' + target));

    // console.log('load', viewOpts.version, '==', version);
    // console.log(viewOpts);

    // Set views - if version is different, defaults will be set up
    if (viewOpts && viewOpts.version == version) {
      setViewOptions(form, viewOpts);
    } else {
      setViewDefaultOptions(form);
    }

    // Now restore settings
    form.trigger('change');

    // Add reset-button
    form.find('.btn_reset').click(function(e) {
      e.preventDefault();
      setViewDefaultOptions(form);
      form.trigger('change');
    });

    // Prevent sending form
    form.submit(function(e) {
      e.preventDefault();
    });
  });

  // Add switchForm-toggle
  jQuery('.switchform-btn').each(function() {
    jQuery(this).click(function() {
      var target = jQuery(this).data('target');
      jQuery('#' + target).toggle(400);
    });
  });

  // jQuery(function() {
  //   var context = jQuery('#resourcesPane').nuContextMenu({
  //     hideAfterClick: true,
  //     items: '.man_el_name',
  //     callback: function(action, element) {
  //       var el = jQuery(element);
  //       var name = el.text().trim();
  //       var cm = el.closest('.man_el_name');
  //       mgrResAction(name, action, cm.data('type'), cm.data('id'), cm.data('catid'));
  //     },
  //     menu: [
  //       {name: 'create', title: mraTrans.create_new, icon: 'plus'},
  //       {name: 'edit', title: mraTrans.edit, icon: 'edit'},
  //       {name: 'duplicate', title: mraTrans.duplicate, icon: 'clone'},
  //       {name: 'void'},
  //       {name: 'remove', title: mraTrans.remove, icon: 'trash'}
  //     ]
  //   });
  // });
  //
  // function mgrResAction(name, action, type, id, catid) {
  //   var actionIds, deleteMsg;
  //
  //   switch (type) {
  //     case 'site_templates' :
  //       actionsIds = {'create': 19, 'edit': 16, 'duplicate': 96, 'remove': 21};
  //       deleteMsg = mraTrans.confirm_delete_template;
  //       break;
  //     case 'site_tmplvars' :
  //       actionsIds = {'create': 300, 'edit': 301, 'duplicate': 304, 'remove': 303};
  //       deleteMsg = mraTrans.confirm_delete_tmplvars;
  //       break;
  //     case 'site_htmlsnippets' :
  //       actionsIds = {'create': 77, 'edit': 78, 'duplicate': 97, 'remove': 80};
  //       deleteMsg = mraTrans.confirm_delete_htmlsnippet;
  //       break;
  //     case 'site_snippets' :
  //       actionsIds = {'create': 23, 'edit': 22, 'duplicate': 98, 'remove': 25};
  //       deleteMsg = mraTrans.confirm_delete_snippet;
  //       break;
  //     case 'site_plugins' :
  //       actionsIds = {'create': 101, 'edit': 102, 'duplicate': 105, 'remove': 104};
  //       deleteMsg = mraTrans.confirm_delete_plugin;
  //       break;
  //     case 'site_modules' :
  //       actionsIds = {'create': 107, 'edit': 108, 'duplicate': 111, 'remove': 110};
  //       deleteMsg = mraTrans.confirm_delete_module;
  //       break;
  //     default :
  //       alert('Unknown type');
  //       return;
  //   }
  //
  //   // Actions that need confirmation
  //   var confirmMsg = false;
  //   switch (action) {
  //     case 'create' :
  //       id = false;
  //       break;
  //     case 'edit' :
  //       break;
  //     case 'duplicate' :
  //       confirmMsg = mraTrans.confirm_duplicate_record;
  //       break;
  //     case 'remove' :
  //       confirmMsg = deleteMsg;
  //       break;
  //   }
  //
  //   if (confirmMsg) {
  //     confirmMsg += ' \n \n ' + name; // + " ("+id+")"
  //     var r = confirm(confirmMsg);
  //     if (r != true) return;
  //   }
  //
  //   var target = 'index.php?a=' + actionsIds[action] + (id ? '&id=' + id : '') + (catid ? '&catid=' + catid : '');
  //
  //   if (top.main) top.main.document.location.href = target;
  //   else document.location.href = target;
  // }
});

function initQuicksearch(inputId, listId) {
  jQuery('#' + inputId).quicksearch('#' + listId + ' ul.elements > li', {
    selector: '.man_el_name',
    'show': function() { jQuery(this).removeClass('hide'); },
    'hide': function() { jQuery(this).addClass('hide'); },
    'bind': 'keyup',
    'onAfter': function() {
      jQuery('#' + listId).find('.panel-collapse').each(function() {
        var parentLI = jQuery(this);
        var totalLI = jQuery(this).find('ul.elements > li').length;
        var hiddenLI = jQuery(this).find('ul.elements > li.hide').length;
        if (hiddenLI == totalLI) { parentLI.prev('.panel-heading').addClass('hide'); } else { parentLI.prev('.panel-heading').removeClass('hide'); }
      });
    }
  });
  jQuery('.filterElements-form').keydown(function(e) {
    if (e.keyCode == 13) {
      e.preventDefault();
    }
  });
}

var storageKey = 'MODX_mgrResources';

// localStorage reset :
// localStorage.removeItem(storageKey);

// Prepare remember collapsed categories function
var storage = localStorage.getItem(storageKey);
var elementsInTreeParams = {};
var searchFieldCache = {};

try {
  if (storage != null) {
    try {
      elementsInTreeParams = JSON.parse(storage);
    } catch (err) {
      console.log(err);
      elementsInTreeParams = {'cat_collapsed': {}};
    }
  } else {
    elementsInTreeParams = {'cat_collapsed': {}};
  }

  // Remember collapsed categories functions
  function setRememberCollapsedCategories(obj) {
    obj = obj == null ? elementsInTreeParams.cat_collapsed : obj;
    var state;
    for (var type in obj) {
      if (!elementsInTreeParams.cat_collapsed.hasOwnProperty(type)) continue;
      for (var category in elementsInTreeParams.cat_collapsed[type]) {
        if (!elementsInTreeParams.cat_collapsed[type].hasOwnProperty(category)) {
          continue;
        }
        state = elementsInTreeParams.cat_collapsed[type][category];
        if (state == null) {
          continue;
        }
        var collapseItem = jQuery('#collapse' + type + category);
        var toggleItem = jQuery('#toggle' + type + category);
        if (state == 0) {
          // Collapsed
          collapseItem.collapse('hide');
          toggleItem.addClass('collapsed');
        } else {
          // Open
          collapseItem.collapse('show');
          toggleItem.removeClass('collapsed');
        }
      }
    }
    // Avoid first category collapse-flicker on reload
    setTimeout(function() {
      jQuery('.panel-group').removeClass('no-transition');
    }, 50);
  }

  function setLastCollapsedCategory(type, id, state) {
    state = state != 1 ? 1 : 0;
    if (typeof elementsInTreeParams.cat_collapsed[type] == 'undefined') elementsInTreeParams.cat_collapsed[type] = {};
    elementsInTreeParams.cat_collapsed[type][id] = state;
  }

  function writeElementsInTreeParamsToStorage() {
    var jsonString = JSON.stringify(elementsInTreeParams);
    localStorage.setItem(storageKey, jsonString);
  }

  jQuery(document).ready(function() {

    jQuery('.filterElements-form').keydown(function(e) {
      if (e.keyCode == 13) e.preventDefault();
    });

    // Shift-Mouseclick opens/collapsed all categories
    jQuery('.accordion-toggle').click(function(e) {
      e.preventDefault();
      var thisItemCollapsed = jQuery(this).hasClass('collapsed');
      if (e.shiftKey) {
        // Shift-key pressed
        var toggleItems = jQuery(this).closest('.panel-group').find('> .panel .accordion-toggle');
        var collapseItems = jQuery(this).closest('.panel-group').find('> .panel > .panel-collapse');
        if (thisItemCollapsed) {
          toggleItems.removeClass('collapsed');
          collapseItems.collapse('show');
        } else {
          toggleItems.addClass('collapsed');
          collapseItems.collapse('hide');
        }
        // Save states to localStorage
        toggleItems.each(function() {
          state = jQuery(this).hasClass('collapsed') ? 1 : 0;
          setLastCollapsedCategory(jQuery(this).data('cattype'), jQuery(this).data('catid'), state);
        });
        writeElementsInTreeParamsToStorage();
      } else {
        jQuery(this).toggleClass('collapsed');
        jQuery(jQuery(this).attr('href')).collapse('toggle');
        // Save state to localStorage
        state = thisItemCollapsed ? 0 : 1;
        setLastCollapsedCategory(jQuery(this).data('cattype'), jQuery(this).data('catid'), state);
        writeElementsInTreeParamsToStorage();
      }
    });

    setRememberCollapsedCategories();
  });
} catch (err) {
  alert('document.ready error: ' + err);
}
