(function($){
	$.banner = {
		version: '1.0'
	};

	$.fn.banner = function(){
		var banner = $(this), 
			carregando = $('.box-carregando'),
			nav = banner.find('.nav a'),
			slide = banner.find('.slide'),
			categoria = banner.find('.categoria a'),
			imageBanner = $('.bgBanner'),
			currentAba,
			currentBanner,
			isHandlerActive = true,
			timer;

		carregando.hide();
		banner.removeClass('carregando');
		$.banner.initialize = function() {
			if(banner.length){
				slide.find('ul').hide().find('li').hide();
				currentAba = slide.find('ul.' + banner.find('.categoria a:first-child').attr('class'));
				currentBanner = currentAba.find('li:first-child');
				categoria.filter('.' + currentAba.attr('class')).addClass('ativo');
				currentAba.show();
				$.banner.changeBanner();

				$.banner.setEventos();
			} else {
				carregando.hide();
			}
		};

		$.banner.setEventos = function() {
			categoria.click($.banner.changeAba);
			nav.click($.banner.proxAnt);
		}

		$.banner.changeAba = function(evt) {
			if(!isHandlerActive){
				isHandlerActive = true;
				clearTimeout(timer);
				var ul = slide.find('ul'),
					old = slide.find('ul.' + categoria.filter('.ativo').attr('class').replace(/^(\S*).*/, '$1'))
					classAtual = $(evt.currentTarget).attr('class').replace(/^(\S*).*/, '$1');

				if(old.attr('class') != classAtual){
					currentAba = slide.find('ul.' + classAtual);
					currentBanner = currentAba.find('li:first-child').addClass('ativo');

					categoria.removeClass('ativo');

					imageBanner.fadeOut();
					old.fadeOut(function(){
						ul.find('li').removeClass('ativo').hide();
						categoria.filter('.' + classAtual).addClass('ativo');
						currentAba.show();
						$.banner.changeBanner()
					});
				} else {
					isHandlerActive = false;
				}
			}
		};

		$.banner.changeBanner = function() {
			var image = currentBanner.find('a').attr('data-image'),
				imgPreloader = new Image();

			imageBanner.css({'background-image': 'url(/assets/images/preloaderFundo.gif)', 'background-position': 'center 200px', 'background-repeat':'no-repeat'}).fadeIn();
			imgPreloader.onload = function(){
				imageBanner.fadeOut(function(){
					imageBanner.css({'background-image': 'url(' + image + ')', 'background-position': 'center top', 'background-repeat':'no-repeat'}).fadeIn();
					currentBanner.fadeIn(function(){isHandlerActive = false});
					timer = setTimeout($.banner.proxAnt , 5000);
				})
			};
			imgPreloader.onerror = function(){
				$.banner.changeBanner();
			};
			imgPreloader.src = image;
		};

		$.banner.proxAnt = function(evt) {
			if(!isHandlerActive){
				isHandlerActive = true;
				clearTimeout(timer);
				var click,
					atual = parseInt(currentBanner.index()),
					total = parseInt(currentAba.find('li').length) - 1;

				if(typeof evt != 'undefined') {
					click = $(evt.currentTarget).attr('class');
				}

				if(click == 'anterior') {
					atual--;
				} else {
					atual++;
				}

				if(atual < 0){
					atual = total
				}

				if(atual > total){
					atual = 0;
				}

				imageBanner.fadeOut();
				currentBanner.fadeOut(function(){
					currentBanner = currentAba.find('li').eq(atual);
					$.banner.changeBanner();
				});
			}
			
		};

		$.banner.initialize();
	}
}(jQuery));
