
var bm = bm || {};

bm.mergeConfigWithData = function(element, defaults, dataKeySuffix, breakpoints, responsiveKey){

    responsiveKey = responsiveKey || 'responsive';
    function mergeData() {
        var newConfig = jQuery.extend(true, {}, defaults);
        newConfig.responsive = newConfig.responsive || {};
        var responsiveConfig = newConfig.responsive;
        var $this = $(element);
        var datum;

        $.each(defaults, function (key) {
            var dataKey = key.toLowerCase();
            if ($this.data(dataKeySuffix+'-' + dataKey) !== undefined) {
                datum = $this.data(dataKeySuffix+'-' + dataKey);
                if (datum === 'false'){
                    datum = false;
                } else if (datum === 'true'){
                    datum = true;
                }
                newConfig[key] = datum;
            }

            $.each(breakpoints, function (name, enter) {
                if ($this.data(dataKeySuffix+'-' + name + '-' + dataKey)) {
                    datum = $this.data(dataKeySuffix+'-' + name + '-' + dataKey);
                    if (datum === 'false'){
                        datum = false;
                    } else if (datum === 'true'){
                        datum = true;
                    }
                    responsiveConfig[enter] = (responsiveConfig[enter]) ? responsiveConfig[enter] : {};
                    responsiveConfig[enter][key] = datum;
                }
            });

        });
        if (responsiveConfig) {
            newConfig[responsiveKey] = responsiveConfig;
        }

        //newConfig.countr = Math.random(10);
        return newConfig;
    }

    return mergeData();
};