rw.fn = (function ($, rw) {
    return {
        criaModulo: {}
    }
} ($, rw))

rw.fn.posicaoFinanceira = (function ($, rw) {
    function preencheCampos() {
        return function() {
            if($("#clienteFornecedor").val() != "") {
                var callback = function (data) {                    
                    if(data.resposta.status == "ERRO") {
                        rw.msg.erro(data)
                        return
                    }

                    $("#cnpj").val(data.resposta.posicaoFinanceira.cnpj)
                    $("#endereco" ).val(data.resposta.posicaoFinanceira.endereco)
                    $("#municipio").val(data.resposta.posicaoFinanceira.municipio)
                    $("#contato" ).val(data.resposta.posicaoFinanceira.contato)
                    $("#inscricaoEstadual").val(data.resposta.posicaoFinanceira.inscricaoEstadual)       
                    $("#email").val(data.resposta.posicaoFinanceira.email)    
                    $("#uf").val(data.resposta.posicaoFinanceira.uf)
                    $("#cep").val(data.resposta.posicaoFinanceira.cep)                    
                    $("#telefone").val(data.resposta.posicaoFinanceira.telefone)
                    $("#categoria1").val(data.resposta.posicaoFinanceira.categoria1)
                    $("#categoria2").val(data.resposta.posicaoFinanceira.categoria2)
                    $("#categoria3").val(data.resposta.posicaoFinanceira.categoria3)
                    $("#dataLimite").val(data.resposta.posicaoFinanceira.dataLimite)
                    $("#creditoUtilizado").val(data.resposta.posicaoFinanceira.creditoUtilizado)
                    $("#adiantamentos").val(data.resposta.posicaoFinanceira.adiantamentos)
                    $("#pedidos").val(data.resposta.posicaoFinanceira.pedidos)
                    $("#chequesPredatados").val(data.resposta.posicaoFinanceira.chequesPredatados)
                    $("#creditoDisponivel").val(data.resposta.posicaoFinanceira.creditoDisponivel)
                    $("#venda").val(String(data.resposta.posicaoFinanceira.vendaBloqueada) == "false" ? "Autorizada" : "Bloqueada")                    
                    $("#saldoAVencer").val(data.resposta.posicaoFinanceira.saldoAVencer)
                    $("#valorMaiorAcumulo").val(data.resposta.posicaoFinanceira.valorMaiorAcumulo)
                    $("#prazoMedio").val(data.resposta.posicaoFinanceira.prazoMedio)
                    $("#saldoVencido").val(data.resposta.posicaoFinanceira.saldoVencido)
                    $("#mediaAtraso").val(data.resposta.posicaoFinanceira.mediaAtraso)
                    $("#maiorAtraso").val(data.resposta.posicaoFinanceira.maiorAtraso)
                    $("#chequesDevolvidos").val(data.resposta.posicaoFinanceira.chequesDevolvidos)                        
                    $("#qtdBaixasInad").val(data.resposta.posicaoFinanceira.qtdBaixasInad)
                    $("#valorBaixasInad").val(data.resposta.posicaoFinanceira.valorBaixasInad)
                    $("#clienteDesde").val(data.resposta.posicaoFinanceira.clienteDesde)
                    $("#dataSituacao").val(data.resposta.posicaoFinanceira.dataSituacao)
                    $("#dataMaiorFatura").val(data.resposta.posicaoFinanceira.dataMaiorFatura)
                    $("#dataUltimaFatura").val(data.resposta.posicaoFinanceira.dataUltimaFatura)
                    $("#freqMediaCompraUn").val(data.resposta.posicaoFinanceira.freqMediaCompra)
                    $("#valorMedioCompra").val(data.resposta.posicaoFinanceira.valorMedioCompra)
                    $("#valorTotalCompras").val(data.resposta.posicaoFinanceira.valorTotalCompras)   
                    
                    $("#valorLimite").val(data.resposta.posicaoFinanceira.valorLimite)
                    $("#dataMaiorAcumulo").val(data.resposta.posicaoFinanceira.dataMaiorAcumulo)
                    $("#valorBaixasInad").val(data.resposta.posicaoFinanceira.valorBaixasInad)
                    $("#situacao").val(data.resposta.posicaoFinanceira.situacao)
                    $("#valorMaiorFatura").val(data.resposta.posicaoFinanceira.valorMaiorFatura)
                    $("#valorUltimaFatura").val(data.resposta.posicaoFinanceira.valorUltimaFatura)
                    $("#qtdMaiorAtraso").val(data.resposta.posicaoFinanceira.qtdMaiorAtraso)
                }        
                  
                $.ajax(
                    "../api/fn/posicao-financeira.asp", {
                        data: {
                            codigo: $("#clienteFornecedor").val(),
                            dataInicial: $("#dataInicial").val(),
                            dataFinal: $("#dataFinal").val()
                        }, 
                        async: true,
                        success: callback
                    }
                )
            } 
        }
    }

    return {
        preencheCampos: preencheCampos
    }
} ($, rw))

rw.fn.saldoBancos = (function ($, rw) {
    function montaDados(dataInicial, dataFinal, incluirInativas, idOrdenacao) {
        return function() {
            return {
	            dataInicial: $(dataInicial).val(),
	            dataFinal: $(dataFinal).val(),
	            incluirInativas: $(incluirInativas)[0].checked.toString(),
                ordem: idOrdenacao ? $(idOrdenacao).val() : "undefined"
            }
        }
    }    

    function insere(idTabela) {
        return function(registro) {
	        var row = rw.tabelas.insereLinha(idTabela)

	        // Se for conta título, mas não for a primeira.
	        if(registro.tipo == 'T' && rw.tabelas.linhas(idTabela) > 2) {
	            for(var i = 0; i < 8; i++) 
	                row.insertCell(-1).innerHTML = "&nbsp;"	                

	            row = rw.tabelas.insereLinha(idTabela)	            
	        }

	        $(idTabela + " tr:last").hide()

	        var cell = row.insertCell(-1)
	        cell.innerHTML = registro.codigo
	        cell.className = "wkvalor"

	        row.insertCell(-1).innerHTML = registro.conta

	        cell = row.insertCell(-1)
	        cell.innerHTML = registro.inicial
	        cell.className = "wkvalor"

	        cell = row.insertCell(-1)
	        cell.innerHTML = registro.entrada
	        cell.className = "wkvalor"

	        cell = row.insertCell(-1)
	        cell.innerHTML = registro.saida
	        cell.className = "wkvalor"

	        cell = row.insertCell(-1)
	        cell.innerHTML = registro.disponivel
	        cell.className = "wkvalor"

	        cell = row.insertCell(-1)
	        cell.innerHTML = registro.total
	        cell.className = "wkvalor"

	        cell = row.insertCell(-1)
	        cell.innerHTML = registro.limite
	        cell.className = "wkvalor"	        
            
            if(String(registro.totalInicial) != "undefined")
                insereTotais(idTabela, registro)

            $(idTabela + " tr:last").fadeIn(rw.FADE())            
	    }        
    }

    function insereTotais(idTabela, registro) {
	    var row = rw.tabelas.insereLinha(idTabela)

	    $(idTabela + " tr:last").hide()
	    row.insertCell(-1)
	    row.insertCell(-1).innerHTML = "Total"

	    var cell = row.insertCell(-1)
	    cell.innerHTML = registro.totalInicial
	    cell.className = "wkvalor"

	    cell = row.insertCell(-1)
	    cell.innerHTML = registro.totalEntrada
	    cell.className = "wkvalor"

	    cell = row.insertCell(-1)
	    cell.innerHTML = registro.totalSaida
	    cell.className = "wkvalor"

	    cell = row.insertCell(-1)
	    cell.innerHTML = registro.totalDisponivel
	    cell.className = "wkvalor"

	    cell = row.insertCell(-1)
	    cell.innerHTML = registro.totalTotal
	    cell.className = "wkvalor"

	    cell = row.insertCell(-1)
	    cell.innerHTML = registro.totalLimite
	    cell.className = "wkvalor"	    
    }

    return {
        montaDados: montaDados,
        insere: insere,
        insereTotais: insereTotais
    }
} ($, rw))

rw.fn.autorizacoes = (function ($, rw) {
    var _numeroTituloUrl = ""

    function _insereDescricao(registro, podeAlterar) {
        rw.tabelas.limpa("#titulo")
        $("#divTitulo").fadeIn(rw.FADE())	
        
        if(podeAlterar == true) {
            $("#podeSerAlterado").html("&nbsp;")
            $("#dataAutorizacao").removeAttr("disabled")            
        } else {
            $("#podeSerAlterado").html("<span>O título selecionado não pode ser alterado.</span>")
            $("#dataAutorizacao").attr("disabled", "disabled")            
        }

        $("#filial").val(registro.filial)					
        $("#classificacao").val(registro.classificacao)					
        $("#gerencial").val(registro.classificacaoGerencial)	
        $("#historico").val(registro.historico)	
        $("#portador").val(registro.portador)					
        $("#tipoCobranca").val(registro.tipoCobranca)					
        $("#formaPgto").val(registro.formaPagamento)                            											
        $("#desconto").val(registro.desconto)					
        $("#terminoDesconto").val(registro.terminoDesconto)					
        $("#juros").val(registro.jurosDiario)					
        $("#multa").val(registro.multa)	
        $("#inicioMulta").val(registro.inicioMulta)					
        $("#emissao").val(registro.emissao)		                           			
        $("#venctoEfetivo").val(registro.vencimentoEfetivo)	
    }

    function selecionaTitulo(cb, fornecedor, documento, vencimento) {
        var obj = {"fornecedor": fornecedor, "documento": documento, "vencimento": vencimento}

        if(cb.checked)
            _titulosSelecionados.push(obj)
        else 
            _titulosSelecionados.pop(obj)

        if(_titulosSelecionados.length > 0) {               
            $("#divAutorizacao").fadeIn(rw.FADE())
            rw.habilitaCampo("#btnOK", true)
        } else {
            $("#divAutorizacao").hide()
            rw.habilitaCampo("#btnOK", false)
        }

/*
_titulosSelecionados = $.grep(
    _titulosSelecionados, 
    function (t) {
        return (t.fornecedor != fornecedor || t.documento != documento || t.vencimento != vencimento)
    }
)
*/
    }

    function insere(idTabela) {
        return function (registro) {
            var row = rw.tabelas.insereLinha(idTabela)
            $(row).hide()

            var cell = row.insertCell(-1)            
            switch (String(registro.status)) {
                case "A": cell.innerHTML = "<label style='color: green'>A</label>"; break
                case "P": cell.innerHTML = "<label style='color: #ff8040'>P</label>"; break
                case "V": cell.innerHTML = "<label style='color: red'>V</label>"; break
            }
            
            cell = row.insertCell(-1)
            cell.innerHTML = registro.numero

            cell = row.insertCell(-1)
            cell.innerHTML = registro.fornecedor.nome

            cell = row.insertCell(-1)
            cell.innerHTML = registro.vencimento
            cell.className = "wkdata"

            cell = row.insertCell(-1)
            cell.innerHTML = registro.documento
            cell.className = "wkvalor"

            cell = row.insertCell(-1)
            cell.innerHTML = registro.valor
            cell.className = "wkvalor"

            if(registro.podeAlterar == true) {
                cell = row.insertCell(-1)
                var seleciona = 'rw.fn.autorizacoes.selecionaTitulo(this, ' + registro.fornecedor.ponteiro + ', "' + registro.documento + '", "' + registro.vencimento + '")'

                if(_numeroTituloUrl == registro.numero) {
                    _numeroTituloUrl = ""
                    cell.innerHTML = "<input type='checkbox' checked='checked' onclick='" + seleciona + "'/>"
                    _titulosSelecionados.push({
                        "fornecedor": registro.fornecedor.ponteiro,
                        "documento": registro.documento,
                        "vencimento": registro.vencimento
                    })
                } else {
                    cell.innerHTML = "<input type='checkbox' onclick='" + seleciona + "'/>"
                }
            }

            $(row).click(
                function () {
                    $("#codigo").val(registro.numero)					
                    $("#fornecedor").val(registro.fornecedor.nome)					
                    $("#numDoc").val(registro.documento)					
                    $("#cobranca").val(registro.cobrancaApresentada ? "Sim" : "Não")					
                    $("#vencto").val(registro.vencimento)					
                    $("#valor").val(registro.valor)
             
                    var callback = function (data) {
                        if (data.resposta.status == "ERRO") {
                            rw.msg.erro(data)
                            return
                        }

                        _insereDescricao(data.resposta.titulo, registro.podeAlterar)
                    }

                    $.ajax(
                        "../api/fn/autorizacao.asp", {
                            data: {
                                fornecedor: registro.fornecedor.ponteiro,
                                numero: registro.documento,
                                vencimento: registro.vencimento
                            }, 
                            async: true,
                            success: callback
                        }
                    )                    	
                }
            )

            $(row).fadeIn(rw.FADE())
        }
    }

    function inicializa() {
        var r = /\d{4}-\d{6}/
        _numeroTituloUrl = r.exec(window.location)

        if (_numeroTituloUrl == null) 
            $("#usuario")[0].checked = true
        else 
            _numeroTituloUrl = _numeroTituloUrl[0]        
    }

    function limpaTitulos() {
        _titulosSelecionados = []
    }

    function montaDados(idVetados, idPendentes, idAutorizados, idUsuario, idOrdenacao) {
        return function() {
            var tipo = 0
            
            if($(idPendentes)[0].checked)
                tipo = 1
            else if($(idAutorizados)[0].checked)
                tipo = 2
            else if($(idVetados)[0].checked)
                tipo = 3
            else if($(idUsuario)[0].checked)
                tipo = 4

            if(tipo > 0)
                return { 
                    tipoBusca: tipo,
                    ordem: idOrdenacao ? $(idOrdenacao).val() : "undefined"

                }
            else
                return {
                    titulo: _numeroTituloUrl,
                    ordem: idOrdenacao ? $(idOrdenacao).val() : "undefined"
                }
        }
    }    

    function altera(idAcao, idData) {
        if(_titulosSelecionados.length == 0) {
            rw.msg.alerta("Selecione pelo menos um título.")
            return false
        }

        var fornecedores = "", documentos = "", vencimentos = ""

        $.map(_titulosSelecionados, 
            function (t) {
                fornecedores += (t.fornecedor + ";")
                documentos += (t.documento + ";")
                vencimentos += (t.vencimento + ";")
            }
        )

        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                return false
            }
        }

        $.ajax("../api/fn/altera-autorizacao.asp", {
            data: {
                fornecedores: fornecedores,
                documentos: documentos,
                vencimentos: vencimentos,
                acao: $(idAcao).val(),
                data: $(idData).val()
            }, 
            async: false,
            success: callback
        })

        return true
    }

    return {
        insere: insere,
        montaDados: montaDados,
        altera: altera,
        limpaTitulos: limpaTitulos,
        inicializa: inicializa,
        selecionaTitulo: selecionaTitulo
    }
} ($, rw))

rw.fn.fluxoCaixa = (function ($, rw) {
    //provisório até a criação de uma consulta específica
    function buscaDados(filtro) {
        var _registros = []

        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                _registros = []
            }

            _registros = data.resposta.registros
        }

        $.ajax("../api/fn/fluxo-caixa.asp", { data: filtro, async: false, success: callback })
        return _registros
    }

    return {
        buscaDados: buscaDados
    }
} ($, rw))