(function($){
	$.fn.tinycarousel=function(options){
		var defaults={
			start:1,
			display:1,
			axis:'x',
			controls:true,
			pager:false,
			interval:false,
			intervaltime:3000,
			animation:true,
			duration:1000,
			callback:null
		};
		var options=$.extend(defaults,options);
		var oSlider=$(this);
		var oViewport=$('.viewport',oSlider);
		var oContent=$('.overview',oSlider);
		var oPages=oContent.children();
		var oBtnNext=$('.next2',oSlider);
		var oBtnPrev=$('.prev2',oSlider);
		var oPager=$('.pager',oSlider);
		var iPageSize,iSteps,iCurrent,oTimer,bForward=true,bAxis=options.axis=='x';return this.each(function(){initialize();});
			
			function initialize(){
				iPageSize		= bAxis?$(oPages[0]).outerWidth(true):$(oPages[0]).outerHeight(true);
				var iLeftover	= Math.ceil(((bAxis?oViewport.outerWidth():oViewport.outerHeight())/(iPageSize*options.display))-1);
				iSteps			= Math.max(1,Math.ceil(oPages.length/options.display)-iLeftover);
				iCurrent		= Math.min(iSteps,Math.max(1,options.start))-2;
				oContent.css(bAxis?'width':'height',(iPageSize*oPages.length));
				move(1);
				setEvents();
			}
			
			function setButtons(){
				if(options.controls){
					oBtnPrev.toggleClass('disable',!(iCurrent>0));
					oBtnNext.toggleClass('disable',!(iCurrent+1<iSteps));
				}
			}
			
			function setEvents(){
				if(options.controls&&oBtnPrev.length>0&&oBtnNext.length>0){
					oBtnPrev.click(function(){move(-1);
						return false;
					});
					oBtnNext.click(function(){move(1);
						return false;
					});
				}if(options.pager&&oPager.length>0){
					oPager.click(setPager);
				}
			}
			
			function setPager(oEvent){
				var oTarget=oEvent.target;
				if($(oTarget).hasClass('pagenum')){
					iCurrent=parseInt(oTarget.rel)-1;
					move(1);
				}
				return false;
			}
	
			function setPagerActive(){
				if(options.pager){
					var oNumbers=$('.pagenum',oPager);
					oNumbers.removeClass('active');
					$(oNumbers[iCurrent]).addClass('active');
				}
			}
			
			function setTimer(bReset){
				if(options.interval&&!bReset){
					clearInterval(oTimer);
					oTimer=window.setInterval(function(){
					bForward=iCurrent+1==iSteps?false:iCurrent==0?true:bForward;
					move(bForward?1:-1,true);
					},options.intervaltime);
				}
			}
			
			function move(iDirection,bTimerReset){
				if(iCurrent+iDirection>-1&&iCurrent+iDirection<iSteps){
					iCurrent+=iDirection;var oPosition={};
					oPosition[bAxis?'left':'top']=-(iCurrent*(iPageSize*options.display));
					oContent.animate(oPosition,{
						queue:false,duration:options.animation?options.duration:0,complete:function(){
							if(typeof options.callback=='function')options.callback.call(this,oPages[iCurrent],iCurrent);
						}
					});
					setButtons();
					setPagerActive();
					setTimer(bTimerReset);
				}
			}

	};
})(jQuery);
