var $fotoback
var $fotofrase;
var $frase;
var $nome;
var $profissao;

var larguraBarra;
var tempoSlide;
var tempoEfeito;

var imagens;
var esperandoImagem;
var abriuJanela;
var executando;
var nSlides;

var slideAtual;
var slideAnt;

var jGaleria;
var iChecaSlides;
var iSlideShow;
var tSomeFrase;



function galeria() {
	$fotoback = $('#fotoback');
	$fotofrase = $('#fotofrase');
	$frase = $('#fotofrase #frase');
	$nome = $('#fotofrase #nome');
	$profissao = $('#fotofrase #profissao');
	
	larguraBarra = 520;
	tempoSlide = 6000;
	tempoEfeito = 800;
	
	imagens = new Array();
	esperandoImagem = false;
	executando = false;
	slideAtual = 0;
	nSlides = 0;
	
	$.ajax({
		url: '/lib/ajax/galeria',
		processData: true,
		async: false,
		success: function (json) {
			iniciaCarregamento(json);
		}
	});	
}

function iniciaCarregamento(json) {
	jGaleria = json;
	nSlides = jGaleria.length;
	
	iChecaSlides = setInterval('checaSlides()', 10);
		
	$(window).blur (
		function () {
			if (executando) {
				executando = false;
				paraSlideShow();
			}
		}
	);
	$(window).focus (
		function () {
			if (!executando) {	
				executando = true;
				abriuJanela = true;			
				comecaSlideShow();
			}
		}
	);
}

function checaSlides() {	
	if (!esperandoImagem) {
		if (slideAtual < nSlides) {
			esperandoImagem = true;
			carregaSlide(jGaleria[slideAtual].imagem);
		} else {
			clearInterval(iChecaSlides);
			
			slideAtual = parseInt(Math.random() * (nSlides));
			if (slideAtual == 0) {
				slideAnt = nSlides-1;	
			} else {
				slideAnt = slideAtual - 1;			
			}
			
			executando = true;
			slideShow();
			comecaSlideShow();
		}
	}
}

function comecaSlideShow() {
	iSlideShow = setInterval('slideShow()', tempoSlide);
}

function paraSlideShow() {
	clearInterval(iSlideShow);
	clearTimeout(tSomeFrase);
}

function slideShow() {
	var $slideAnterior;
	var $slideAnt;
	
	if (executando) {
		if (abriuJanela) {
			someFrase();
			abriuJanela = false;	
		}
		
		mostraFrase(jGaleria[slideAtual]);
		tSomeFrase = setTimeout('someFrase()', tempoSlide - tempoEfeito);
		
		$slideAnt = $(imagens[slideAnt]);
		$slideAtual = $(imagens[slideAtual]);
		
		$slideAtual.fadeIn(tempoEfeito);
		$slideAnt.fadeOut(tempoEfeito);
	
		if (slideAtual < nSlides-1) {
			slideAtual++;
		} else {
			slideAtual = 0;	
		}
		
		if (slideAtual == 0) {
			slideAnt = nSlides-1;	
		} else {
			slideAnt = slideAtual - 1;			
		}
	}
}

function mostraFrase(json) {
	$frase.html(json.frase);
	$nome.html(json.nome);
	$profissao.html(json.profissao);
	
	$fotofrase.animate({width: larguraBarra, opacity: 1}, tempoEfeito);	
}

function someFrase() {
	$fotofrase.animate({width: 0, opacity: 0}, tempoEfeito);
}

function carregaSlide(url) {
	var imagem;
	var $imagem;
	
	imagem = new Image();
	$imagem = $(imagem);
	
	$imagem.load(carregaImagem);
	$imagem.error(erroImagem);
	$imagem.attr('src', '/lib/assets/img/galeria/' + url);	
}

function carregaImagem() {
	var $this = $(this);
	$this.addClass('slide');
	$this.hide();
	
	$fotoback.append(this);
	imagens.push(this);
	
	slideAtual++;
	esperandoImagem = false;
}

function erroImagem() {
	alert('Uma imagem necessária para exibição não foi encontrada');	
}
