/**
 * Implementação do tratameto de formulários específico para o website em questão
 */
registarNameSpace("Mn.Website.Form");

/**
 * Implementa o tratamento antes da submissão de um formulário
 * Poderá ser útil para implementar formas de remover erros anteriores
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 *
 * @param {Object} formulario Elemento <form> que foi submetido
 * 
 */
Mn.Website.Form.preparaSubmissao = function(formulario){
    //limpa os erros de validação
    $('.erro_validacao', formulario).each(function(){
        $(this).remove();
    });
}

/**
 * Implementa a forma de processamento de um erro de um formulário.
 * A função é específica para o website em questão
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 *
 * @param {Object} formulario Elemento <form> que foi submetido
 * @param {String} tipo indica se o erro é 'simples' ou 'composto'
 * @param {String} campo do campo ao qual se refere o erro
 * @param {String} descricao Descrição completa do erro
 */
Mn.Website.Form.processaErro = function(formulario, tipo, campo, descricao){
    //neste caso específico queremos obter as labels dos elementos do formulário
    if(tipo == 'simples'){
        var input_aux = $('[name='+campo+']', formulario);
        //obtem a label associada ao input que originou o erro
        var label = $('label[for=' + input_aux.attr('id') + ']', formulario);
    }
    else if(tipo == 'composto'){
        //obtem os vários campos
        var campos = campo.split(',');
        //vamos apenas obter a label para o primeiro elemento porque os restantes serão iguais
        input_aux = $('[name='+campos[0]+']', formulario);
        label = $('label[for=' + input_aux.attr('id') + ']', formulario);
    }
    //para impedir a colocação repetida do erro
    if(label.parent(':has(.erro_validacao)').length == 0){
        label.after('<div class="erro_validacao" title="'+ descricao + '"></div>');
    }
}

/**
 * Processa a exibição do resultado da submissão de um formulário.
 * Implementa a forma de tratamento e exibição ao utilizador do formulário.
 *
 * @author MNDeployer
 * @version 1.0
 * @since 0.01
 * 
 * @param {Object} formulario Objecto formulário
 * @param {Boolean} estado Indica se a submissão do formulário teve sucesso
 * @param {String} titulo Titulo para exibição ao utilizador
 * @param {String} mensagem Descrição para exibição ao utilizador
 */
Mn.Website.Form.processaResultadoFormulario = function(formulario, estado, titulo, mensagem){
    //se não tiver sucesso
    if(estado == false){
        //exibicao das tooltips de erro se for justificavel
        $('.erro_validacao').tipsy({
            gravity: 'w',
            live: true
        });
        //exibição do painel de topo
        Mn.Base.TopBox.exibeMensagem(mensagem, 'vermelho', 10000);
    }
    else{
        Mn.Base.TopBox.exibeMensagem(mensagem, 'verde', 10000);
    }
}
