(function(){
	jQuery.fn.jqImageCarousel = function(configs){
		//Variável a ser utilizada no setInterval
		var autoRun;
		
		//Configurações por defeito
		configs = jQuery.extend({
			animSpeed : 600,
			timeInterval : 5000,
			autoRotate : false
		}, configs);
		
		return this.each(function(){
			
			//Calcular o tamanho de cada item e o valor a passar à ul
			var itemWidth = jQuery('#carousel li').outerWidth(); 
			var leftValue = itemWidth * (-1); 
			
			//Mover o último elemento para a primeira posição
			jQuery('#carousel li:first').before(jQuery('#carousel li:last'));
			
			//Colocar elemento correcto na sua posição correspondente
			jQuery('#carousel ul').css(
				{ 'left' : leftValue }
			);
			
			//Adicionar evento click previous
			jQuery('a.prevarrow', this).click(function(){
				//Animar o elemento
				jQuery('#carousel ul:not(:animated)').animate( { 'left' : '+=' + itemWidth }, configs.animSpeed, function(){
					//Mover o último elemento para a primeira posição
					//jQuery('#carousel li:first').before(jQuery('#carousel li:last')); 
					jQuery('#carousel li:last').insertBefore(jQuery('#carousel li:first')); 
					
					//Colocar elemento correcto na sua posição correspondente
					jQuery('#carousel ul').css(
						{ 'left' : leftValue }
					);
				});
				
				return false;
			}).delay(configs.animSpeed);
			
			//Adicionar evento click next
			jQuery('a.nextarrow', this).click(function(){
				//Animar o elemento
				jQuery('#carousel ul:not(:animated)').animate( { 'left' : '-=' + itemWidth }, configs.animSpeed, function(){
					//Mover o primeiro elemento para a última posição
					//jQuery('#carousel li:last').after(jQuery('#carousel li:first'));   
					jQuery('#carousel li:first').insertAfter(jQuery('#carousel li:last'));      
					
					//Colocar elemento correcto na sua posição correspondente
					jQuery('#carousel ul').css(
						{ 'left' : leftValue }
					);
				});
				
				return false;
			}).delay(configs.animSpeed);
			
			//Caso pretenda rotação automática
			if(configs.autoRotate){
				autoRun = setInterval('autoRotateFunction()', configs.timeInterval);
				
				//Eventos mouseover e mouseout
				jQuery('#carousel').mouseover(function(){
					clearInterval(autoRun);
				}).mouseout(function(){
					autoRun = setInterval('autoRotateFunction()', configs.timeInterval);
				});
			}

			//Função usada no SetInterval
			function autoRotateFunction(){
				//Animar o elemento
				jQuery('#carousel ul').animate( { 'left' : '-=' + itemWidth }, configs.animSpeed, function(){
					//Mover o primeiro elemento para a última posição
					//jQuery('#carousel li:last').after(jQuery('#carousel li:first'));   
					jQuery('#carousel li:first').insertAfter(jQuery('#carousel li:last'));
					
					//Colocar elemento correcto na sua posição correspondente
					jQuery('#carousel ul').css(
						{ 'left' : leftValue }
					);
				}).delay(configs.animSpeed);
			};
		});
	};
})(jQuery);
