
	/*
	 *	Carousel
	 *  Author: Jose
	 */


var JFadeCarousel  = {
	currentPosition : null,

	nextElement : null,
	prevElement : null,
	wideElement : null,
	items : null,
	totalCount : null,
	inProcess : false,
	pageItems : null,
	timer : null,
	_create: function() {
		var self = this;

		self.currentPosition = self.options.startPosition;

		self.nextElement = $('.jcarousel_next',self.element);
		self.prevElement = $('.jcarousel_prev',self.element);
		this.nextElement.click(function(e){
					e.preventDefault(); e.stopPropagation();
					self.clearInterval();
					self.next(); } );
		this.prevElement.click(function(e){
					e.preventDefault(); e.stopPropagation();
					self.clearInterval();
					self.prev(); } );
		self.wideElement = $('.jcarousel_wide_div',self.element);

		self.items = $('.jcarousel_item',self.element);
		self.totalCount = self.items.length ;

		if( self.totalCount > 1 )
		{
			if( self.options.unlimited )
			{
				if( self.options.autoInterval )
				{
					self.timer = self.setInterval();
				}
			}
			else
			{
				self.prevElement.hide();
			}
		}
		else
		{
			self.nextElement.hide();
			self.prevElement.hide();
			return;
		}


		if( self.options.callbackAfterInit != null)
		{
			self.options.callbackAfterInit(self);
		}

	},
	next: function() {
		var self = this;
		self._move( self.currentPosition + 1 );
	},
	prev: function() {
		var self = this;
		self._move( self.currentPosition - 1 );
	},
	_move: function( nextStep ) {
		var self = this;
		stepMargin = self.items.eq(1).offset().left -
					 self.items.eq(0).offset().left;

		if( self.options.unlimited )
		{
			if( nextStep >= self.totalCount )
			{
				nextStep = 0;
			}
			else if( nextStep < 0 )
			{
				nextStep = self.totalCount-1;
			}
		}
		if( self.inProcess )
		{
			return;
		}

		var next = nextStep > self.currentPosition;

		self.inProcess = true;

		self.items.eq(self.currentPosition).hide('fade',{},self.options.miliseconds,function(){
			self.items.eq(nextStep).show('fade',{},self.options.miliseconds,function(){

				self.inProcess = false;
				self.currentPosition = nextStep;
				self._checkPosition();
				if( self.options.callbackAfterMove != null)
				{
					self.options.callbackAfterMove(self);
				}

				});
			});

	},
	setInterval : function() {
		var self = this;
		if( self.options.autoInterval )
		{
			return setInterval(function(){self.next();}, self.options.autoInterval);
		};
		return null;
	},
	clearInterval : function() {
		var self = this;
		if( self.timer != null )
		{
			clearInterval(self.timer);
			self.timer = null;
			self.options.autoInterval = 0;
		}
	},
	_checkPosition : function() {
		var self = this;
		self.items.removeClass('active');
		self.items.eq(self.currentPosition).addClass('active');

	},
	options: {
		/* unlimited carousel */
		unlimited : true,
		/* animation time */
		miliseconds : 500,
		/* animation type */
		animateType : 'swing',
		/* starting position ex. (3 if total 5) */
		startPosition : 0,
		/* generate OR include by parent CSS class 1,2,3,4 total pages */
		showPages : false,
		/* items to show */
		itemsToShow : 1,
		/* auto timeout interval in miliseconds */
		autoInterval : 0,
		/* callbacks */
		callbackAfterCreate : null,
		callbackAfterMove : null,
		callbackGoToFirst : null,
		callbackGoToLast : null
	}
};
$.widget("ui.jFadeCarousel", JFadeCarousel);

