
  var ThumbSliderScroller = Class.create();

  ThumbSliderScroller.prototype = {
    initialize: function(options) {
      this.options = {
        element: null,
        rowItem: 'li',
        upActionControl: null,
        downActionControl: null
      }

      // merge default settings with passed options
      Object.extend(this.options, options || {});

        // action-button binding
      this.load();
    },

      // up/down action binding
    load: function() {
      Event.observe($(this.options.upActionControl), 'click', this.scrollUp.bindAsEventListener(this));
      Event.observe($(this.options.downActionControl), 'click', this.scrollDown.bindAsEventListener(this));
    },

    /**
     * scrolls the previous line of a thumb list scroll element up
     */
    scrollUp: function(event) {
        // visible row is always the first child element
      var visibleRowItem = $(this.options.element).down();

        // get all child elemetns of list element
      $rows = $(this.options.element).immediateDescendants();
      var lastRowItem = $rows[$rows.length - 1];
        // set "display" to "none"
      lastRowItem.setStyle({ display: 'none' });

        // 1.: copy last line before the current one
      $(this.options.element).insertBefore(lastRowItem, visibleRowItem);
        // 2.: if finished, blind it down...
      new Effect.BlindDown(lastRowItem);

        // stop normal link behaviour
      Event.stop(event);
    },

    /**
     * scrolls the next line of a thumb list scroll element down
     */
    scrollDown: function(event) {
        // visible row is always the first child element
      var visibleRowItem = $(this.options.element).down();
        // create a copy
      var copy = visibleRowItem;

        // blindup-effect for the visible row item
      new Effect.BlindUp(visibleRowItem, {
        afterFinish: function(effect) {
            // create new row item, content: child elements of our copy element
          var newRowItem = Builder.node(this.options.rowItem, $(copy).immediateDescendants());
            // append it to our list element
          $(this.options.element).appendChild(newRowItem);
            // and remove the up blinded element
          $(effect.element).remove();
            // binding to this object, to make object options available to inner scope
        }.bind(this)
      });

        // stop normal link behaviour
      Event.stop(event);
    }
  }
