(function( $ ){
  $.fn.filemanager = function(type, options) {
    type = type || 'file';
    this.on('click', function(e) {
      var route_prefix = (options && options.prefix) ? options.prefix : '/filemanager';
      var target_input = $('#' + $(this).data('input'));
      var target_preview = $('#' + $(this).data('preview'));
      window.open(route_prefix + '?type=' + type, 'FileManager', 'width=900,height=600');
      window.SetUrl = function (items) {
        var file_path = items.map(function (item) {
          return item.url;
        }).join(',');
        // set the value of the desired input to image url
        target_input.val('').val(file_path).trigger('change');
        // clear previous preview
        target_preview.html('');
        // set or change the preview image src
        items.forEach(function (item) {
          target_preview.append(
            $('#holder').css('height', '5rem').attr('src', item.thumb_url)
          );
        });
        // trigger change event
        target_preview.trigger('change');
      };
      return false;
    });
  }
})(jQuery);