/**

* HSScrollBar component.
*
* @author Htmlstream
* @version 1.0
* @requires malihu jquery custom scrollbar plugin (v3.1.5.)
*
*/

;(function ($) {

'use strict';

$.HSCore.components.HSScrollBar = {

  /**
   * Base configuration.
   *
   * @private
   */
  _baseConfig: {
    scrollInertia: 150,
    theme: 'minimal-dark'
  },

  /**
   * Collection of all initalized items on the page.
   *
   * @private
   */
  _pageCollection: $(),

  /**
   * Initialization of HSScrollBar component.
   *
   * @param {jQuery} collection
   * @param {Object} config 
   *
   * @return {jQuery}
   */
  init: function (collection, config) {

    if(!collection || !collection.length) return;

    var self = this;

    config = config && $.isPlainObject(config) ? $.extend(true, {}, config, this._baseConfig) : this._baseConfig;

    return collection.each(function(i, el){

      var $this = $(el),
          scrollBar,
          scrollBarThumb,
          itemConfig = $.extend(true, {}, config, $this.data());

      $this.mCustomScrollbar(itemConfig);

      scrollBar = $this.find('.mCSB_scrollTools');
      scrollBarThumb = $this.find('.mCSB_dragger_bar');

      if(scrollBar.length && $this.data('scroll-classes')) {
        scrollBar.addClass($this.data('scroll-classes'));
      }

      if(scrollBarThumb.length && $this.data('scroll-thumb-classes')) {
        scrollBarThumb.addClass($this.data('scroll-thumb-classes'));
      }

      self._pageCollection = self._pageCollection.add($this);

    });

  },

  /**
   * Destroys the component.
   * 
   * @param {jQuery} collection
   * 
   * @return {jQuery}
   */
  destroy: function( collection ) {

    if( !collection && !collection.length ) return $();

    var _self = this;

    return collection.each(function(i, el){

       var $this = $(el);

       $this.mCustomScrollbar('destroy');

       _self._pageCollection = _self._pageCollection.not( $this );

    });

  }

}

})(jQuery);