(function($) {
	
	$.fn.flatRoll=function(args)
	{
		if(typeof args.speed!='number')
			args.speed=500;

		if(typeof args.step!='number')
			args.step=1;

		var list=this.addClass('list');
		var container=$('<div/>').addClass('flatRoller');

		container.insertBefore(list).append(list);
		
		var children=container.find('ul>*');
		var childWidth=children.outerWidth(true);
		var childrenWidth=childWidth*children.size();

		var wider=container.width()>=childrenWidth;
		if(wider)
		{
			children=children.add($('<li></li>').appendTo(list))
			childrenWidth=container.width();
		}

		children.addClass('child');	

		list.css('width', childrenWidth+'px');
		container.css('height', list.outerHeight(true)+'px');
	
		var buttons=args.btnLeft.add(args.btnRight);		
		buttons.bind('click', function() {return false;} );

		var changeBtn=function(btn, disabled)
		{
			if(disabled)
				btn.addClass('disabled').removeAttr('href');
			else
				btn.removeClass('disabled').attr('href', '');
		}

		var scrollList=function(positive)
		{
			var stepSize=args.step*childWidth;
			var newLeft=parseInt(list.css('left'))+(positive? +stepSize: -stepSize);
			var maxLeft=childrenWidth-container.width();

			changeBtn(buttons, false);

			if(newLeft>=0)
			{
				changeBtn(args.btnLeft, true);
				newLeft=0;
			}
			else if(-newLeft>=maxLeft)
			{
				changeBtn(args.btnRight, true);
				newLeft=-maxLeft;
			}
			
			list.animate({ 'left': newLeft+'px' }, args.speed);
		}

		if(wider)
		{
			changeBtn(buttons, true);
		}
		else
		{
			changeBtn(args.btnLeft, true);
			args.btnLeft.bind('click', function() { scrollList(true); });
			args.btnRight.bind('click', function() { scrollList(false); });
		}

		return this;
	}
}) (jQuery);

