(function($) {

    $.fn.news = function(options) {

        defaultOptions = {
            minimum:1,
            maximum:5,
            controls:{add:'.add', remove:'.remove'},
            items:'li',
            addDisabled:'add-disabled',
            removeDisabled:'remove-disabled',
            displayed:3
        };

        this.each(function(index, element) {
            this.options = $.extend(defaultOptions, options);
            this.items = $(this).find(this.options.items);
            this.controls = $(this).parents(".module-inner").eq(0).find(".tools:first");
            this.add = this.controls.find(this.options.controls.add);
            this.remove = this.controls.find(this.options.controls.remove);
            this.add.show();
            this.remove.show();

            if (this.items == undefined || this.items.length == 0) {
                this.add.hide();
                this.remove.hide();
            }
            this.minimum = this.options.minimum;
            this.maximum = Math.min(this.options.maximum, this.items.length);
            this.displayed = Math.max(Math.min(this.options.displayed, this.maximum), this.minimum);
            for (i = this.items.length - 1; i > this.displayed - 1; i--) {
                this.items.eq(i).hide();
            }

            this.count = this.items.filter(":visible").length;
            if (this.count == this.maximum) {
                this.add.addClass(this.options.addDisabled);
            }
            if (this.count == this.minimum) {
                this.remove.addClass(this.options.removeDisabled);
            }
            var self = this;


            this.add.click(
                          function() {
                              if (self.count == self.maximum) {
                                  return false;
                              }
                              self.count++;
                              if (self.count == self.maximum) {
                                  $(this).addClass(self.options.addDisabled);
                              }
                              if (self.count > self.minimum) {
                                  self.remove.removeClass(self.options.removeDisabled)
                              }
                              self.items.filter(":hidden:first").show();
                              return false;
                          }
                    );


            this.remove.click(
                             function() {
                                 if (self.count == self.minimum) {
                                     return false;
                                 }
                                 self.count--;
                                 if (self.count == self.minimum) {
                                     $(this).addClass(self.options.removeDisabled);
                                 }
                                 if (self.count < self.maximum) {
                                     self.add.removeClass(self.options.addDisabled)
                                 }
                                 self.items.filter(":visible:last").hide();
                                 return false;
                             }
                    );
        });

    }


}
)(jQuery);

