/**

* Charts wrapper.
* 
* @author Htmlstream 
* @version 1.0
* @requires sparkline.js (v2.1.2), peity.js (v3.2.1)
*
*/

;(function($){

'use strict';

$.HSCore.components.HSChart = {

        /**
         * Sparkline Charts
         */
        sparkline: {

                /**
                 * Base plugin's configuration.
                 * 
                 * @var Object _baseConfig
                 */
                _baseConfig: {
                        fillColor: '#72c02c',
                        lineColor: '#72c02c',
                        barColor: '#72c02c'
                },

                /**
                 * Collection of all initialized items of the page.
                 * 
                 * @var jQuery _pageCollection
                 */
                _pageCollection: $(),

                /**
                 * Initializes new collection of items.
                 * 
                 * @param jQuery collections
                 *
                 * @return jQuery
                 */
                init: function(collection){

                        var self = this;

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

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

                                var $this = $(el),
                                                config = $.extend(true, {}, self._baseConfig, $this.data());

                                $this.sparkline( $this.data('data'), config);

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

                        });

                },

                /**
                 * Returns entire collection of initialized items or single initialized
                 * item (in case with index parameter).
                 * 
                 * @param Number index
                 *
                 * @return jQuery
                 */
                get: function(index) {

                        if(index) {
                                return this._pageCollection.eq(index);
                        }

                        return this._pageCollection;

                }

        },

        /**
         * Peity Charts
         */
        peity: {

                /**
                 * Base plugin's configuration.
                 * 
                 * @var Object _baseConfig
                 */
                _baseConfig: {
                        fill: ''
                },

                /**
                 * Collection of all initialized items of the page.
                 * 
                 * @var jQuery _pageCollection
                 */
                _pageCollection: $(),

                /**
                 * Initializes new collection of items.
                 * 
                 * @param jQuery collections
                 *
                 * @return jQuery
                 */
                init: function(collection, config){

                        var self = this;

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

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

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

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

                                $this.peity( $this.data('peity-type'), currentConfig );

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

                        });

                },

                /**
                 * Returns entire collection of initialized items or single initialized
                 * item (in case with index parameter).
                 * 
                 * @param Number index
                 *
                 * @return jQuery
                 */
                get: function(index) {

                        if(index) {
                                return this._pageCollection.eq(index);
                        }

                        return this._pageCollection;

                }

        }

};

})(jQuery);