registarNameSpace("Mn.Base.TopBox");

/**
 * Indica se o container da caixa de aviso de topo existe no DOM
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 *
 */
Mn.Base.TopBox.existe = function(){
    return $('#caixa_aviso_topo').length > 0;
}

/**
 * Indica se a caixa de aviso de topo se encontra vísivel actualmente
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 */
Mn.Base.TopBox.visivel = function(){
    return $('#caixa_aviso_topo').is(":visible");
}

/**
 * Cria o aviso de topo, nomeadamente, o container e os eventos associados
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 */
Mn.Base.TopBox.cria = function(){
    if(Mn.Base.TopBox.existe() == false){
        //adiciona o HTML ao DOM
        $('body').append("<div id='caixa_aviso_topo' class='verde'><span></span><a class='icone_fechar' href=''>X</a></div>");
        //define o evento
        $('#caixa_aviso_topo .icone_fechar').live('click', function(eve){
            eve.preventDefault();
            Mn.Base.TopBox.oculta();
        });
    }
}

/**
 * Exibe a caixa de aviso de topo utilizando um efeito de fadein
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 *
 * @param {Number} exibir_durante permite indicar que a mensagem apenas será exibida durante
 * um determinado período de tempo
 */
Mn.Base.TopBox.mostra = function(exibir_durante){
    //reinicia o timer
    clearTimeout($('#caixa_aviso_topo').stop().data('timer'));
    if(exibir_durante != undefined){
        $('#caixa_aviso_topo').fadeIn(function() {
            var elem = $(this);
            $.data(this, 'timer', setTimeout(function() {
                elem.fadeOut();
            }, exibir_durante));
        });
    }
    else{
        $('#caixa_aviso_topo').fadeIn();
    }
}

/**
 * Esconde a caixa de aviso utilizando um efeito de fadeout
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 *
 * @param {Int} ocultar_passados Indica que a mensagem deve ser ocultada passados x ms.
 */
Mn.Base.TopBox.oculta = function(ocultar_passados){
    //reinicia o timer
    clearTimeout($('#caixa_aviso_topo').stop().data('timer'));
    if(ocultar_passados != undefined){
        var elem = $('#caixa_aviso_topo');
        $.data(this, 'timer', setTimeout(function() {
            elem.fadeOut();
        }, ocultar_passados));
    }
    else{
        $('#caixa_aviso_topo').fadeOut();
    }
}

/**
 * Define a mensagem que deverá constar na caixa de aviso
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 */
Mn.Base.TopBox.defineMensagem = function(mensagem){
    $('#caixa_aviso_topo span').html(mensagem);
}

/**
 * Exibe uma mensagem na caixa de aviso de topo
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 *
 * @param {String} mensagem Texto da mensagem a exibir
 * @param {String} classe Classe css com o estilo a aplicar a caixa de aviso
 * @param {Int} durante parametro opcional que indica o número de segundos que a mensagem deve ser exibida
 */
Mn.Base.TopBox.exibeMensagem = function(mensagem, classe, durante){
    if(classe != undefined){
        $('#caixa_aviso_topo').removeClass();
        $('#caixa_aviso_topo').addClass(classe);
    }
    Mn.Base.TopBox.defineMensagem(mensagem);
    if(!Mn.Base.TopBox.visivel()){
        Mn.Base.TopBox.mostra(durante);
    }else{
        Mn.Base.TopBox.oculta(durante); //durante -> oculta passados x segundos
    }
}

/**
 * Acções para inicialização da caixa de aviso de topo
 */
$(document).ready(function() {
    Mn.Base.TopBox.cria();
});
