/*
 * Tiny Carousel 1.75
 *
 * Copyright (c) 2010 Maarten Baijs
 *
 * Date: 24 / 05 / 2010
 * Library: jQuery
 *
 */
(function($){
	$.fn.tinycarousel = function(options){
		var defaults = { 
			start: 1, // where should the carousel start?
			display: 1, // how many blocks do you want to move at 1 time?
			axis: 'x', // vertical or horizontal scroller? ( x || y ).
			controls: true, // show left and right navigation buttons.
			pager: false, // is there a page number navigation present?
			interval: false, // move to another block on intervals.
			intervaltime: 3000, // interval time in milliseconds.
			animation: true, // false is instant, true is animate.
			duration: 1000, // how fast must the animation move in ms?
			callback: null // function that executes after every move
		};
		var options = $.extend(defaults, options);  

		var Slider = $(this);
		var Viewport = $('.viewport', Slider);
		var Content = $('.overview', Slider);
		var Pages = Content.children();
		var BtnNext = $('.next', Slider);
		var BtnPrev = $('.prev', Slider);
		var Pager = $('.pager', Slider);
		var iPageSize, iSteps, iCurrent, Timer, bForward = true, bAxis = options.axis == 'x';

		return this.each(function(){
			initialize();
		});
		function initialize(){
			iPageSize = bAxis ? $(Pages[0]).outerWidth(true) : $(Pages[0]).outerHeight(true);
			var iLeftover = Math.ceil(((bAxis ? Viewport.outerWidth() : Viewport.outerHeight()) / (iPageSize * options.display)) -1);
			iSteps = Math.max(1, Math.ceil(Pages.length / options.display) - iLeftover);
			iCurrent = Math.min(iSteps, Math.max(1, options.start)) -2;
			Content.css(bAxis ? 'width' : 'height', (iPageSize * Pages.length));
			move(1);
			setEvents();
		}
		function setButtons(){
			if(options.controls){
				BtnPrev.toggleClass('disable', !(iCurrent > 0));
				BtnNext.toggleClass('disable', !(iCurrent +1 < iSteps));
			}
		}
		function setEvents(){
			if(options.controls && BtnPrev.length > 0 && BtnNext.length > 0){
				BtnPrev.click(function(){move(-1); return false;});
				BtnNext.click(function(){move( 1); return false;});
			}
			if(options.pager && Pager.length > 0){
				Pager.click(setPager);
			}
		}
		function setPager(Event){
			var Target = Event.target;
			if($(Target).hasClass('pagenum')){
				iCurrent = parseInt(Target.rel) -1;
				move(1);
			}
			return false;
		}
		function setPagerActive(){
			if(options.pager){
				var Numbers = $('.pagenum', Pager);
				Numbers.removeClass('active');
				$(Numbers[iCurrent]).addClass('active');
			}
		}
		function setTimer(bReset){
			if(options.interval && !bReset){
				clearInterval(Timer);
				Timer = 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 > 0 || iCurrent +1 < iSteps){
				iCurrent += iDirection;
				var Position = {};
				Position[bAxis ? 'left' : 'top'] = -(iCurrent * (iPageSize * options.display));
						
				Content.animate(Position,{
					queue: false,
					duration: options.animation ? options.duration : 0,
					complete: function(){
						if(typeof options.callback == 'function')
						options.callback.call(this, Pages[iCurrent], iCurrent);
					}
				});
				setButtons();
				setPagerActive();
				setTimer(bTimerReset);
			}
		}
	};
})(jQuery);
