(function($) {
    $.fn.jWResizer = function(min) {
        var prev = 0;
        var min_margin = parseInt(min) || 5;
        var children = $(this).children();
        var child_width = children.width();
        var border_right = parseInt(children.css('border-right-width'));
        var border_left = parseInt(children.css('border-left-width'));
        child_width += isNaN(border_left) ? 0 : border_left;
        child_width += isNaN(border_right) ? 0 : border_right;
        var handler = function($this) {
            var width = $($this).width();
            var padding_right = parseInt($($this).css('padding-right'));
            var padding_left = parseInt($($this).css('padding-left'));
            width -= isNaN(padding_left) ? 0 : padding_left;
            width -= isNaN(padding_right) ? 0 : padding_right;
            var child_in_line = Math.floor( width / (child_width + (min_margin * 2)));
            var medium_margin = ((width - (child_in_line * child_width)) / (child_in_line * 2) + (child_in_line > 1 ? -1 : 0));
            if(child_in_line > 2)
                medium_margin += Math.floor(medium_margin / (child_in_line - 1));
            else if(child_in_line == 2)
                medium_margin += Math.floor(medium_margin / 3);
            medium_margin = Math.floor(medium_margin);
            medium_margin += 'px';
            switch(child_in_line) {
                case 0:
                case 1:
                    children.css('margin-left', medium_margin).css('margin-right', medium_margin);
                break;
                case 2:
                    children.filter(':nth-child(' + child_in_line + 'n)').
                            css('margin-right', medium_margin).css('margin-left', '0px');
                    children.filter(':nth-child(' + (child_in_line) + 'n+1)').
                            css('margin-left', medium_margin).css('margin-right', medium_margin);
                break;
                default:
                    children.filter(':not(:nth-child(' + (child_in_line) + 'n+1))', ':not(:nth-child(' + child_in_line + 'n))').
                            css('margin-right', medium_margin).css('margin-left', '0px');
                    children.filter(':nth-child(' + child_in_line + 'n)').
                            css('margin-right', '0px').css('margin-left', '0px');
                    children.filter(':nth-child(' + (child_in_line) + 'n+1)').
                            css('margin-left', medium_margin).css('margin-right', medium_margin);
            }
        }
        return this.each(function() {
            var $this = this;
            $(window).resize(function(){
                var start_time = Date.now();
                handler($this);
                var end_time = Date.now();
                console.log('resized in ' + (end_time - start_time) + 'ms');
            });
            handler(this);
        });
    };
})(jQuery);

