/**
 * Funções de auxílio ao grid
 *
 */

/**
 * callLink
 *
 * Envia o link via XMLHttp
 *
 * @author Henrique de Castro
 * @since  11/2008
 * @param  object   Link
 * @param  string   Div de retorno (opcional)
 * @param  string   Elemento a ser bloqueado (opcional)
 * @return boolean
 */
function callLink(obj, ret, elemBlock){

    //Executa o call
    return call({'type' : 'GET', 'url' : obj.href, 'ret' : ret, 'elemBlock' : elemBlock});

}

/**
 * callForm
 *
 * Envia o formulário via XMLHttp
 *
 * @author Henrique de Castro
 * @since  11/2008
 * @param  object   Formulário
 * @param  string   Div de retorno (opcional)
 * @param  string   Elemento a ser bloqueado (opcional)
 * @return boolean
 */
function callForm(obj, ret, elemBlock){

    //Busca os campos do formulário
    params  = $(obj).serialize();

    //Executa o call
    return call({'type' : obj.method, 'url' : obj.action, 'ret' : ret, 'elemBlock' : elemBlock, 'data' : params});

}

/**
 * call
 *
 * Faz a chamada via XMLHttp (usada para abstrair as funções do jquery)
 *
 * @author Henrique de Castro
 * @since  11/2008
 * @param  array   Parâmetros
 * @return boolean
 */
function call(params){

    //Seta o tipo padrão para POST
    params["type"] = params["type"] ? params["type"] : "POST";

    //O tipo de retorno será sempre JSON
    params["dataType"] = "json";

    //Busca o elemento de retorno
    params["ret"] = (params["ret"] ? params["ret"] : "#conteudo_principal");

    //Busca o elemento a ser bloqueado
    params["elemBlock"] = (params["elemBlock"] ? params["elemBlock"] : "#tudo");

    //Verifica se existe o parâmetro success
    if(!params["success"]) {

        //Exibe o HTML de retorno no local definido
        params["success"] =
            function(retorno){
                //Verifica se existe HTML de retorno
                if(retorno.html)
                    //Exibe o HTML de retorno
                    $(params["ret"]).empty().html(retorno.html);
            }

    }

    //Executa a chamada
    $.ajax(params);

    //Verifica a necessidade de exibir um preload
    if(!params["noPreload"]) {

        //Bloqueia o elemento passado
        $(params["elemBlock"]).block({

            message: "Carregando...",
            css: {
                border: '3px solid #000',
                width: '200px',
                height: '25px',
                color: '#000'
            }

        });

        //Em caso de sucesso, remove o bloqueio
        $(params["elemBlock"]).ajaxSuccess(
            function(){

                //Desbloqueia e remove as propriedades 'ajax' do elemento
                $(this).unblock();
                $(this).unbind();
            }
        );
    }

    //Não permite o envio, pois este é feito pelo XMLHttp
    return false;
}

/**
 * excluiRegistro
 *
 * Exclui um registro
 *
 * @author Luana Castilho
 * @since  12/2009
 * @param  object
 * @param  string
 * @param  string
 * @return boolean
 */
function excluiRegistro(obj, msg_confirm, class_grid){

    //Confirma a exclusão
    if(!confirm(msg_confirm))
        return false;
    else{

        //Função de retorno
        var success =  function(retorno) {

                        //Monta o html com a mensagem
                        var html = "<span class=\""+retorno.tipo+"\" id=\"mensagem_excluir\">"+retorno.mensagem+"</span>";

                        //Verifica se houve sucesso
                        if(retorno.tipo == 'acerto')
                            //Remove a linha do registro excluido
                            $(obj).parent().parent().remove();

                        //Remove a mensagem (caso essa exista)
                        $("#mensagem_excluir").remove();

                        //Exibe a mensagem
                        $("."+class_grid).before(html);

                    };

        //Executa o call
        call({'url' : $(obj).attr("href"), 'success' : success});
    }

    //Retorna false
    return false;

}

// ---------------- Fim das funções de auxílio ao grid -----------------------------

/**
* submitForm
*
* Envia um formulário
*
* @author Henrique de Castro
* @since 12/2008
* @param object
* @return boolean
*/
function submitForm(objForm){

    //Desabilita o botão salvar e o cancelar
    $('#salvar').val('Aguarde...');
    $('#salvar').attr('disabled', true);
    $('#cancelar').val('Aguarde...');
    $('#cancelar').attr('disabled', true);

    //Envia o formulário
    objForm.submit();
    return true;
}

/**
 * callDetail
 *
 * Chama a área de detalhe
 *
 * @author Henrique de Castro
 * @since  01/2010
 * @param  object     Link clicado
 * @return boolean
 */
function callDetail(obj){

    //Retira o destaque das outras linhas
    $('.destaque').removeClass('destaque');

    //Destaca o item atual
    $(obj).parent().parent().addClass('destaque');

    //Exibe a div
    $("#detail").show();

    //Executa o call
    return call({'type' : 'GET', 'url' : obj.href, 'ret' : '#detail'});
}

/**
 * closeDetail
 *
 * Limpa a div detail
 *
 * @author Henrique de Castro
 * @since  01/2010
 */
function closeDetail(){

    //Limpa a div
    $('#detail').empty();

    //Retira o destaque das linhas
    $('.destaque').removeClass('destaque');

}

/**
 * setCheckbox
 *
 * Ao selecionar um checkbox, executa a chamada na url passada
 *
 * @author Henrique de Castro
 * @since  01/2010
 * @param  string
 * @param  string
 * @return void
 */
function setCheckbox(url){

    //Executa o call
    call({'type' : 'GET', 'url' : url, 'noPreload' : true});

}

/**
 * bloqueiaTela
 *
 * Bloqueia a tela
 *
 * @author Henrique de Castro
 * @since  01/2009
 * @param  string
 * @return void
 */
function bloqueiaTela(url_logoff) {

    //Oculta a mensagem de erro
    $("#erro_senha").hide();

    //Bloqueia a tela
    $.blockUI({
        message : $("#dialog_bloqueio"),
        baseZ   : 99999
    });

    //Limpa a senha e desloga o usuário
    $("#senha").val("");
    call({'type': 'GET', 'url' : url_logoff, 'noPreload' : true});

}

/**
 * desbloqueiaTela
 *
 * Executa a função de desbloqueio da tela
 *
 * @author Henrique de Castro
 * @since  01/2009
 * @param  object
 * @return boolean
 */
function desbloqueiaTela(objForm){

    //Valida se existe a senha foi digitada
    if($.trim($("#senha").val()) == "")
        return false;

    //Monta os dados
    var params = { 'senha' : $("#senha").val(), 'login' : $("#login").val() };

    //Monta a função de retorno
    var success =  function(sucesso) {
                        if(sucesso.status)
                            $.unblockUI();
                        else
                            $("#erro_senha").show();
                    };

    //Executa o call
    call({'url' : objForm.action, 'elemBlock' : '#dialog_bloqueio', 'data' : params, 'success' : success });

    //Não permite o envio, pois este já foi feito pelo call
    return false;
}

/**
 *
 * Eventos do jquery
 *
 */
$(document).ready(function(){

    //Adiciona a validação ao formulário de contato
    $("#form_contato").validate({
	    submitHandler: function(form) {
            envia_formulario(form);
        },
		messages: {
				nome: {
					required: ""
				},
				email: {
					required: "",
					email: ""
				},
				telefone : {
					required: ""
				},
				cidade : {
					required: ""
				},
				estado : {
					required: ""
				},
				mensagem : {
					required: ""
				}
		}
	});
});
