function Scroller(scroll_container, opts) {
	var self = $(scroll_container);
	var container = self.children(".mask");
  var ul = container.children('ul');
  var items = ul.children('li');
  var num = items.length;
	var left_btn = $("<span class='prev_btn'>Previous</span>");
  var right_btn =  $("<span class='next_btn'>Next</span>");
  var position = 0;
  var options;
  var defaults = {
    NUM_SHOWN: 6,
    TILE_WIDTH: 120
  };

	var disable = function(which) {
      which.fadeTo('fast', 0.2);
      which.css('cursor', 'default');
  };

  var enable = function(which) {
      which.fadeTo('fast', 1);
      which.css('cursor', 'pointer');
  };

  var select = function(which) {
      var item = $(which)[0];
  };

  var refresh = function() {
      ul.stop();
      ul.animate({
          left: -position * options.TILE_WIDTH
        }, 400 );

      if (position + options.NUM_SHOWN  >= num)
          disable(right_btn);
      else
          enable(right_btn);
      if (position <= 0)
          disable(left_btn);
      else
          enable(left_btn);
  };

  var scrolling = 0;

  var scroll = function() {
      if (scrolling === 0) return;

      position += scrolling;

      if (position + options.NUM_SHOWN  > num) {
          position = num - options.NUM_SHOWN;
          return position;
      }
      if (position < 0) {
          position = 0;
          return position;
      }
      refresh();
      setTimeout(scroll, 100);
  };

	return {
		init: function() {
      options  = $.extend(defaults, opts);
      if (num > options.NUM_SHOWN) {
        self.prepend(left_btn).append(right_btn);
      }

		  items.each(function(index) {
					this._index = index;
		      var li = $(this);
		      li.css('cursor', 'pointer');
		  });

			right_btn.mousedown(function() {
				scrolling = 1;
				scroll();
			});
			
		  right_btn.mouseup(function() {
				scrolling = 0;
			});
			
		  right_btn.mouseout(function() {
				scrolling = 0;
			});

		  left_btn.mousedown(function() {
				scrolling = -1;
				scroll();
			});

		  left_btn.mouseup(function() {
				scrolling = 0;
			});

		  var ghost = null;

		  items.hover(
		      function() {
		          $(this).find('.carousel_label').fadeIn();
		      },
		      function() {
		          $(this).find('.carousel_label').fadeOut('fast');
		      }
		  );
			
			disable(left_btn);
		      if (num <= options.NUM_SHOWN)
		              disable(right_btn);
		}
	};
}

