
/* 

----------------------------------------------------------------------------------------------------
									jQuery meuCarousel
----------------------------------------------------------------------------------------------------


Plugin jQuery desenvolvido por Dirceu Moraes Resende Filho (dirceu.resende@yahoo.com.br) para a cria
ção de banner animados.



26/07/2010 - Adicionada a opção a exibirBotoesLocalizacao para exibir um controle adicional onde cada 
slide terá um número associado e ao clicar no controle, abre o slide correspondente.

21/07/2010 - Versão inicial (1.0)



____________________________________________

UTILIZAÇÃO BÁSICA:

$("elemento").meuCarousel();

_____________________________________________

OPÇÕES:

$("elemento").meuCarousel({
	autoRolagem: true,
	intervaloAutoRolagem: 5,
	exibirControles: true,
	exibirContador: true,
	exibirBotoesLocalizacao: false,
	loop: true,
	mouseEmCimaPara: true
});

_____________________________________________

MARCAÇÃO HTML NECESSÁRIA:

<div id='id_do_seu_elemento'>

	<div class='container'>
	
		<div class='elemento'>  ==> Recomendo adicionar style='display:none' para não exibir o texto embolado enquanto o navegador carrega a página.
			
			CONTEÚDO DO SEU DIV AQUI... PODE SER TEXTO, IMAGEM, ETC...
			
		</div>
		
		<div class='elemento'>
			
			CONTEÚDO DO SEU DIV AQUI... PODE SER TEXTO, IMAGEM, ETC...
			
		</div>
	
	</div>
	
</div>




----------------------------------------------------------------------------------------------------
									jQuery meuCarousel
----------------------------------------------------------------------------------------------------

*/

(function($) {

	jQuery.fn.meuCarousel = function(settings) {
		
		
		var configsPadrao = {
			autoRolagem: true,
			intervaloAutoRolagem: 5,
			exibirControles: true,
			exibirBotoesLocalizacao: false,
			exibirContador: true,
			loop: true,
			mouseEmCimaPara: true
		};
		
		
		var opts = $.extend({}, configsPadrao, settings); // escreve em cima das opções default com as opções enviadas
			
			
		return this.each(function() {
		
		
			/* Inicialização */
			var opt = $.meta ?  $.extend({}, opts, $this.data()) : opts;
			var elem = $(this);
			var self = this;
			var idIntervalo;


			/* Inicialização */
			$("div.elemento", elem).hide();
			$("div.elemento:first", elem).fadeIn("slow");
			
			
			/* Adiciona algumas marcações HTML para o funcionamento do plugin */
			aplicarMarcacao();
			
			
			if (opt.exibirControles) {
				verificaSetas();
			}
			
			if (opt.exibirContador) {
				exibirLabel();
			}
			
			if (opt.exibirBotoesLocalizacao) { 
				atualizaDestaqueControleManual(); 
			}
				
				
			if (opt.autoRolagem) {
			
				if (opt.mouseEmCimaPara) {				
					
					$(".container", elem).mouseenter(function(){
						pararAutoRolagem();
					});
					
					$(".container", elem).mouseleave(function(){
						iniciarAutoRolagem();
					});
						
				}
						
				iniciarAutoRolagem();
				
			}
			
			
			if (opt.exibirBotoesLocalizacao) {
				$(".controle_opcao", elem).click(function(){
					
					var index = $(this).index();
					
					pararAutoRolagem();
					$(".elemento:visible", elem).hide();
					$(".controle_opcao span", elem).removeClass("destaque");
					
					if ($(".elemento:nth(" + index + ")", elem).length > 0) {
						$(".elemento:nth(" + index + ")", elem).fadeIn("slow");
						$(".controle_opcao span:nth(" + index + ")", elem).addClass("destaque");
					}
					
					if (opt.exibirControles) { verificaSetas(); }
					if (opt.exibirContador) { exibirLabel(); }
					if (opt.autoRolagem) { iniciarAutoRolagem(); }
					if (opt.exibirBotoesLocalizacao) { atualizaDestaqueControleManual(); }
					
				});
			}
			
			
			/* Funções do clique nas setas */
			if (opt.exibirControles) {

				$(".seta_esquerda", elem).click(function() {
					voltarBanner();
				});				
				
				$(".seta_direita", elem).click(function() {
					avancarBanner();
				});
				
			}
			
			
			
			function voltarBanner() {
					
				pararAutoRolagem();
				
				var numElementos = $(".elemento", elem).size();
				if (numElementos > 0) {
					
					var ativoEsquerda = $(".elemento:visible:first", elem).index();
					$(".elemento:visible", elem).hide();
					
					var anterior = ativoEsquerda - 2;
					
					if ($(".elemento:nth(" + anterior + ")", elem).length > 0) {
						$(".elemento:nth(" + anterior + ")", elem).fadeIn("slow");
					}
					
				}
				
				if (opt.exibirControles) { verificaSetas(); }
				if (opt.exibirContador) { exibirLabel(); }
				if (opt.autoRolagem) { iniciarAutoRolagem(); }
				if (opt.exibirBotoesLocalizacao) { atualizaDestaqueControleManual(); }
			
			};


			function avancarBanner() {
			
				pararAutoRolagem();
			
				var numElementos = $(".elemento", elem).size();
				if (numElementos > 0) {
			
					var ativoDireita = $(".elemento:visible:first", elem).index();
					if (!opt.exibirControles) {
						ativoDireita += 1;
					}
					
					$(".elemento:visible", elem).hide();
					
					
					//console.log(elem.attr("id") + " - " + ativoDireita);
					
					if ($(".elemento:nth(" + ativoDireita + ")", elem).length > 0) {
						$(".elemento:nth(" + ativoDireita + ")", elem).fadeIn("slow");
					}
					else {
						$(".elemento:nth(0)", elem).fadeIn("slow");
					}
					
				}
				
				if (opt.exibirControles) { verificaSetas(); }
				if (opt.exibirContador) { exibirLabel(); }
				if (opt.autoRolagem) { iniciarAutoRolagem(); }
				if (opt.exibirBotoesLocalizacao) { atualizaDestaqueControleManual(); }
			
			};
			
			
			
			function verificaSetas() {
		
				if (opt.exibirControles) {
		
					var ativoSeta = $(".elemento:visible:first", elem).index();
					var numElementos = $(".elemento", elem).size();
					
					/* Seta esquerda */
					
					if (ativoSeta == 1) {
						$(".seta_esquerda", elem).hide();
					}
					else {
						$(".seta_esquerda", elem).show();
					}
					
					
					/* Seta direita */
					
					if (!opt.loop) {
						if (ativoSeta == numElementos) {
							$(".seta_direita", elem).hide();
						}
						else {
							$(".seta_direita", elem).show();
						}
					}
					
				}
				
			};
			
			
			function iniciarAutoRolagem() {
				if (opt.autoRolagem) {
					clearTimeout(idIntervalo);
					var $intervalo = opt.intervaloAutoRolagem * 1000;
					idIntervalo = setTimeout(function() { avancarBanner(); }, $intervalo);
				}
			};
			
			function pararAutoRolagem() {
			
				if (idIntervalo == null) { 
					return;
				}
			
				clearTimeout(idIntervalo);
			};
			
			
			function exibirLabel() {
				if (opt.exibirContador) {
					var ativoLabel = $(".elemento:visible:first", elem).index();
					var numElementos = $(".elemento", elem).size();
					$("span.exibindo", elem).html("Exibindo <span class='destaque'>" + (ativoLabel + 1) + "</span> de <span class='destaque'>" + numElementos + "</span>");
				}
			};
			
			
			function atualizaDestaqueControleManual() {
				$(".controle_opcao", elem).removeClass("destaque");
				if (opt.exibirBotoesLocalizacao) {
					var ativo = $(".elemento:visible:first", elem).index();
					$(".controle_opcao:nth(" + ativo + ")", elem).addClass("destaque");
				}
			}
			
			
			function aplicarMarcacao() {
				
				if (opt.exibirBotoesLocalizacao) {
					if ($("div.controles_localizacao", elem).length == 0) {
						$(".container", elem).append("\n<div class='controles_localizacao'></div>\n");
						
						var numElementos = $(".elemento", elem).size();
						for(i = 0; i < numElementos; i++) {
							$(".controles_localizacao", elem).append("\n<div class='controle_opcao'><span>" + (i+1) + "</span></div>\n");
						}
						
					}
				}
		
		
				if (opt.exibirControles) {
					if ($("p.seta_esquerda", elem).length == 0) {
						$(".container", elem).prepend("\n<p class='seta_esquerda'></p>\n");
					}
					if ($("p.seta_direita", elem).length == 0) {
						$(".container", elem).append("\n<p class='seta_direita'></p>\n");
					}
				}
		
		
				if (opt.exibirContador) {
					if ($("span.exibindo", elem).length == 0) {
						$(".container", elem).append("\n<span class='exibindo'></span>\n");
					}
				}
			
				
			}
		
			
		});
					
		
		/* Não quebre a corrente! */
		return this;
		
		
	};
		
		
})(jQuery);
		
