/*
 * PROCERGS - Companhia de Processamento de Dados do Estado do Rio Grande do Sul
 *
 * Desenvolvedor: Márcio Bordim Silveira
 * Data: 13/10/2011
 *
 * ---------------------------------------
 * Desenvolvedor: Márcio Bordim Silveira
 * Data: 16/12/2011
 * Versão 1.1
 * - Incluída a opção de ficar rodando os destaques de forma configurável
 */


//Chamo de grupo de destaque uma instância do componente destaque no componente que agrupa todas as informações
//para a exibição dos destaques. Isso permite termos mais de um componente destaque por documento.


//Variável global que vai armazenar todos os Grupos de Destaque do documento.
var $jGrupoDestaque;

// Função que faz a troca do destaque corrente.
// Deixamos fora do escopo do jQuery por ser exectada pelo Timer do Javascript.
// Para cada COmponente destaque utilizado no documento é gerado um Grupo de Destaque que possuirá um índice
// que será transportado por indice_grupo.
//
//TODO: Rever se é possível executar de dentro do componente
function trocaDestaque(indice_ativar, foi_click, indice_grupo){
    var aux_timer;
    //Como a função é global, é necessário buscar qual o grupo de Destaque que será utilizado.
    //Para isso, usa-se o indice_grupo que transporta o valor do grupo de Destaque.
    var $grupoDestaque = $jGrupoDestaque.eq(indice_grupo);
    indice_ativar = indice_ativar >= $('a.jComandDestaque', $grupoDestaque).length ? 0 : indice_ativar;

    if($grupoDestaque.data('habilitaTimer')){
        aux_timer = $grupoDestaque.data('timerToggleDestaque');
        //Interromper qualquer timer antes que dispare! - Código Repetido de proposito
        clearTimeout(aux_timer);
    }

    //Faz a troca do destaque escondendo e mostrando os itens para isso
    var $divItens = $('div.jItemDestaque', $grupoDestaque);
    var $botoes = $('li.ordemOff', $grupoDestaque);
    $divItens.hide();

    //Habilita e desabilita os botões para fazer o efeito de liga e desliga
    $botoes.removeClass('ordemOn');
    $divItens.eq(indice_ativar).show();
    $botoes.eq(indice_ativar).addClass('ordemOn');

    //Se utliza timer, reagenda ele para nova iteração.
    if($grupoDestaque.data('habilitaTimer')){
        var chamada_funcao = "trocaDestaque("+(indice_ativar + 1)+", false, " + $grupoDestaque.data('indiceGrupo') + ")";
        if(foi_click){
            aux_timer = setTimeout(chamada_funcao, $grupoDestaque.data('reiniciaTimer'));
        }
        else{
            //Quano o usuário clica, o tempo de espera pode ser maior para ele poder ler o que está no destaque
            aux_timer = setTimeout(chamada_funcao, $grupoDestaque.data('destaqueTimer'));
        }
        $grupoDestaque.data('timerToggleDestaque', aux_timer);
    }
}

$(function(){
    //Para garantir a consistência, todos os compoentes destaque são mapeados no início do processo.
    //Esses grupos ficarão armazenados em uma variável global.
    $jGrupoDestaque = $('.jGrupoDestaque');

    //Para cada Grupo de Destaque, implementa a funcionalidade de navegar entre os destaques.
    $jGrupoDestaque.each(function(indice_grupo){

        var $grupoDestaque = $(this);
        $grupoDestaque.data('indiceGrupo', indice_grupo);

        //Verifica se é para usar o Timer para trocar entre um destaque e outro
        //O valor vem de um campo hidden que está dentro do div do grupo do destaque.
        $grupoDestaque.data('habilitaTimer', $('[name="habilitaTimer"]', $(this)).val() == '1');

        if($grupoDestaque.data('habilitaTimer')) {
            //BUSCA A CONFIGURAÇÃO DE TEMPO DO COMPONENTE
            var destaque_timer = parseInt($('[name="destaqueTimer"]', $(this)).val());
            var reinicia_timer = parseInt($('[name="reiniciaTimer"]', $(this)).val());

            //Se não for um número válido, troca pelos valores default
            if(isNaN(destaque_timer) || destaque_timer <= 0) destaque_timer = 5;
            if(isNaN(reinicia_timer) || reinicia_timer <= 0) reinicia_timer = 20;

            //O valor deve estar em Mileseconds (multiplica por 1000
            $grupoDestaque.data('destaqueTimer', destaque_timer * 1000);
            $grupoDestaque.data('reiniciaTimer', reinicia_timer * 1000);

        }

        //Mapeia o clique dos botões dentro de um grupo de destaque
        $('a.jComandDestaque', $grupoDestaque).click(function(e){
            e.preventDefault();

            //Necessário buscar o grupo de destaque para verificar as configurações.
            //As variáveis não são globais!!!
            var $grupoDestaque = $(this).parents('.jGrupoDestaque');
            if($grupoDestaque.data('habilitaTimer')){
                var aux_timer = $grupoDestaque.data('timerToggleDestaque');
                //Interromper qualquer timer antes que dispare! - Código Repetido de proposito
                clearTimeout(aux_timer);
            }
            //Chama o troca destaque passando o índice do botão clicado
            //trocaDestaque(parseInt($(this).attr('href')), true);
            trocaDestaque(parseInt($(this).attr('href')), true, $grupoDestaque.data('indiceGrupo'));
        });

        //Inicia o Timer para a primeira vez
        if($grupoDestaque.data('habilitaTimer')){
            var aux_timer = setTimeout("trocaDestaque(1, false, "+indice_grupo+")", $grupoDestaque.data('destaqueTimer'));
            $grupoDestaque.data('timerToggleDestaque', aux_timer);
        }

    });
});


