var GcodigoProduto;
var Ggrade1;
var Ggrade2;
var Ggrade3;
var GCodigoEstado;
var GCodigoMunicipio;
var qtdRows;

var rw = (function ($) {
     
    var _config = {
        assistencias: {
            url: "../api/ge/lista-assistencias.asp"
        }, autorizacoesPagamento: {
            urlAlteracao: "../api/fn/altera-autorizacao.asp",
            urlLista: "../api/fn/lista-autorizacoes.asp",
            urlTitulo: "../api/fn/autorizacao.asp"
        }, contaContabil: {
            url: "../api/df/conta-contabil.asp"
        }, contaGerencial: {
            url: "../api/df/conta-gerencial.asp"
        }, equipamentos: {
            f4: {
                getClasse: function () { return rw.ge.equipamentos },
                colunas: [ { dado: "codigo", nome: "Código", ordem: null }
                         , { dado: "nome", nome: "Nome", ordem: null }
                         , { dado: "marca", nome: "Marca", ordem: null }
                         , { dado: "modelo", nome: "Modelo", ordem: null }
                         , { dado: "codigoTipo", nome: "Tipo", ordem: null }
                         , { dado: "tipo", nome: "Tipo", ordem: null }]
            }, url: "../api/ge/lista-equipamentos.asp"
        }, estados: {
            url: "../api/df/lista-estados.asp"
        }, filiais: {
            url: "../api/df/lista-filiais.asp"
        }, fluxoCaixa: {
            url: "../api/fn/fluxo-caixa.asp"
        }, historicos: {
            f4: {
                getClasse: function () { return rw.df.historicos },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }
                         , { dado: "classificacao", nome: "Classificação", ordem: "2" } ]
            }, url: "../api/df/historicos.asp"
        }, login: {
            url: "./api/auth.asp"
        }, marcas: {
            f4: {
                getClasse: function () { return rw.ge.marcas },
                colunas: [ { dado: "codigo", nome: "Código", ordem: null }
                         , { dado: "nome", nome: "Nome", ordem: null } ]
            }, url: "../api/ge/lista-marcas.asp"
        }, modelos: {
            f4: {
                getClasse: function () { return rw.ge.modelos },
                colunas: [{ dado: "codigo", nome: "Código", ordem: null }
                         , { dado: "nome", nome: "Nome", ordem: null }]
            }, url: "../api/ge/lista-modelos.asp"
        }, municipios: {
            url: "../api/df/lista-municipios.asp"
        }, pedido: {
            url: "../api/ft/pedido.asp"
        }, pedidos: {
            url: "../api/ft/pedidos.asp"
        }, situacoes: {
            f4: {
                getClasse: function () { return rw.ge.situacoes },
                colunas: [{ dado: "codigo", nome: "Código", ordem: null }
                         , { dado: "nome", nome: "Nome", ordem: null }]
            }, url: "../api/ge/lista-situacoes.asp"
        }, tipos: {
            f4: {
                getClasse: function () { return rw.ge.tipos },
                colunas: [{ dado: "codigo", nome: "Código", ordem: null }
                         , { dado: "nome", nome: "Nome", ordem: null }]
            }, url: "../api/ge/lista-tipos.asp"
        }, planoCfrt: {
            f4: {
                getClasse: function () { return rw.df.planoCfrt },
                colunas: [ { dado: "codigo", nome: "Código", ordem: null }
                         , { dado: "nome", nome: "Nome", ordem: null }
                         , { dado: "inscricao", nome: "CPF/CNPJ", ordem: null }
                         , { dado: "classificacao", nome: "Classificacao", ordem: null } ]
            }, url: "../api/df/plano-clientes.asp"
        }, planoTransportadoras: {
            f4: {
                getClasse: function () { return rw.df.planoTransportadoras },
                colunas: [ { dado: "codigo", nome: "Código", ordem: null }
                         , { dado: "nome", nome: "Nome", ordem: null }
                         , { dado: "inscricao", nome: "CPF/CNPJ", ordem: null }
                         , { dado: "classificacao", nome: "Classificacao", ordem: null } ]
            }, url: "../api/df/plano-transportadora.asp"
        }, planoContabil: {
            f4: {
                getClasse: function () { return rw.df.planoContabil },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }
                         , { dado: "classificacao", nome: "Classificação", ordem: "2" }
                         , { dado: "tipo", nome: "Tipo", ordem: null } ]
            }, url: "../api/df/plano-contabil.asp"
        }, planoGerencial: {
            f4: {
                getClasse: function () { return rw.df.planoGerencial },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }
                         , { dado: "classificacao", nome: "Classificação", ordem: "2" }
                         , { dado: "tipo", nome: "Tipo", ordem: null } ]
            }, url: "../api/df/plano-gerencial.asp"
        }, planoCFOP: {
            f4: {
                getClasse: function () { return rw.df.planoCFOP },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }   ]
            }, url: "../api/df/naturezas-operacao.asp"
        }, planoFiliais: {
            f4: {
                getClasse: function () { return rw.df.planoFiliais },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }   ]
            }, url: "../api/df/lista-filiais.asp"
        }, tabelaPrecos: {
            f4: {
                getClasse: function () { return rw.df.tabelaPrecos },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }   ]
            }, url: "../api/df/tabelas-preco.asp"
        }, planoProdutos: {
            f4: {
                getClasse: function () { return rw.df.planoProdutos },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }
                         , { dado: "unidade", nome: "Uni", ordem: "1" }
                         , { dado: "classificacao", nome: "Classificação", ordem: "1" }
                         , { dado: "preco", nome: "Preço", ordem: "1" } ]
            }, url: "../api/df/lista-produtos.asp"
        }, planoGrade1: {
            f4: {
                getClasse: function () { return rw.df.planoGrade1 },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "descricao", nome: "Descrição", ordem: "1" }
                          ]
            }, url: "../api/df/lista-produtos.asp"
        }, planoGrade2: {
            f4: {
                getClasse: function () { return rw.df.planoGrade2 },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "descricao", nome: "Descrição", ordem: "1" }   ]
            }, url: "../api/df/lista-produtos.asp"
        }, planoGrade3: {
            f4: {
                getClasse: function () { return rw.df.planoGrade3 },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "descricao", nome: "Descrição", ordem: "1" }]
            }, url: "../api/df/lista-produtos.asp"
        }, planoOpComerciais: {
            f4: {
                getClasse: function () { return rw.df.planoOpComerciais },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Nome", ordem: "1" }   ]
            }, url: "../api/df/lista-opcomerciais.asp"
        }, planoMunicipios: {
            f4: {
                getClasse: function () { return rw.df.planoMunicipios },
                colunas: [ { dado: "codigo", nome: "Código", ordem: "0" }
                         , { dado: "nome", nome: "Municipios", ordem: "1" }   ]
            }, url: "../api/df/lista-municipiosEstados.asp"
        }, planoEstados: {
            f4: {
                getClasse: function () { return rw.df.planoEstados },
                colunas: [ { dado: "codigo", nome: "Estado", ordem: "0" }
                           ]
            }, url: "../api/df/lista-municipiosEstados.asp"
        }, posicaoFinanceira: {
            url: "../api/fn/posicao-financeira.asp"
        }, produtos: {
            url: "../api/df/produtos.asp"
        }, propriedades: {
            url: "../api/df/propriedades.asp"
        }, saldoContabil: {
            url: "../api/cn/consulta-saldocontabil.asp"
        }, saldoContasBancarias: {
            url: "../api/fn/saldo-bancos.asp"
        }, saldoTotal: {
            url: "../api/es/saldo-total.asp"
        }, posicaoProdutos: {
            url: "../api/ft/consulta-posicaoprodutos.asp"
        }, historicoCliente: {
            url: "../api/ft/consulta-historicocliente.asp"
        }, ativaDesativaFiliais: {
            url: "../api/df/ativadesativa-filiais.asp"
        }, cadPlanoContasContabil: {
            url: "../api/df/cadastro-planocontascontabil.asp"
        }, dadosrelatoriogerador: {
           url: "../api/cn/consulta-dadosrelatoriogerador.asp"
        }, cadClientes: {
           url: "../api/df/cadastro-clientes.asp"
        }, cadFornecedores: {
           url: "../api/df/cadastro-fornecedores.asp"
        }, conDadosCliente: {
           url: "../api/ft/consulta-dadosCliente.asp"
        }, conDadosPedido: {
           url: "../api/ft/consulta-dadosPedido.asp"
        }, conDadosNovoPedido: {
           url: "../api/ft/consulta-dadosNovoPedido.asp"
        }, conDadosNovoItem: {
           url: "../api/ft/consulta-dadosNovoItem.asp"
        }, addItem: {
           url: "../api/ft/add-item.asp"
        }, conParcelas: {
           url: "../api/ft/consulta-parcelas.asp"
        }, conFormasPagamento: {
           url: "../api/ft/consulta-formasPagamento.asp"
        }, alteraParcela : {
           url: "../api/ft/altera-dadosParcela.asp"
        }, gravaAlteraParcela : {
           url: "../api/ft/grava-dadosAlteradosParcela.asp"
        }, consultaNatureza : {
           url: "../api/ft/consulta-natureza.asp"
        }, gravaPedido : {
           url: "../api/ft/grava-pedido.asp"
        }, conLancamentos : {
         url : "../api/cn/consulta-lancamentoEditor.asp"
        }, altLancamentos : {
         url : "../api/cn/altera-lancamentoEditor.asp"
        }, conTiposCobranca : {
         url : "../api/ft/consulta-tipocobranca.asp"
        }
    }

    function contem(arr, obj, fn) {
        if (arguments.length == 2)
            return $.grep(arr, function (a) { return a == obj })
        else
            return $.grep(arr, function (a) { return fn(a) == obj })
    }

    function getConfig() { return _config }

    function hoje() {
        var dataHoje = new Date()

        var dia = String(dataHoje.getDay() + 1)
        var mes = String(dataHoje.getMonth() + 1)
        var ano = dataHoje.getFullYear()

        if(dia.length == 1) {
            dia = String("0") + dia
        }

        if(mes.length == 1) {
            mes = String("0") + mes
        }

        return  dia + "/" + mes + "/" + ano
    }

    function max(arr) {
        return Math.max.apply(null, arr)
    }

    function objToUrl(obj) {
        var url = "?"
        var primeiro = true
        
        for(attr in obj) {
            if(!primeiro) {
                url += "&" + encodeURI(attr) + "=" + encodeURI(obj[attr])
            } else {
                url += encodeURI(attr) + "=" + encodeURI(obj[attr])
                primeiro = false
            }
        }
        return url
    }

    function rwalert(msg) {
        alert(msg)
    }

    return {
        alert: rwalert,
        contem: contem,
        getConfig: getConfig,
        hoje: hoje,
        max: max,
        objToUrl: objToUrl,
        TAMANHO_BUSCA: 40
    }
} ($))

rw.abas = (function ($, rw) {
    var _abas = []

    function ajustaAltura() {
        var h = rw.max($.map(_abas, function (id) {
            return $("#tab" + id).height()
        }))

        $.map(_abas, function (id) {
            $("#tab" + id).css("height", h)
        })
    }
    
    function setAbas(abas) {
        if (typeof (abas) == "string")
            _abas = [abas]
        else
            _abas = abas
    }

    function trocaAba(aba) {
        if (rw.contem(_abas, aba)) {
            $.map(_abas, function (id) {
                $("#tab" + id).css("display", "none")
                $("#aba" + id)[0].className = "wkabainativa"
            })
            $("#tab" + aba).css("display", "block")
            $("#aba" + aba)[0].className = "wkabaativa"
        }
    }

    return {
        ajustaAltura: ajustaAltura,
        setAbas: setAbas,
        trocaAba: trocaAba
    }
} ($, rw))

rw.df = (function ($, rw) {
    var _usaCodigoProprio = null,
        _periodoInicial = "00/00/0000",
        _periodoFinal = "00/00/0000"

    function _setPeriodoInicial(data) { _periodoInicial = data }
    function _setPeriodoFinal(data) { _periodoFinal = data }
    function _setUsaCodigoProprio(usa) { _usaCodigoProprio = usa }

    function _loadPropriedades(async) {
        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
                rw.alert(data.resposta.descricao)
                return
            }

            _setPeriodoInicial(data.resposta.propriedades.periodoInicial)
            _setPeriodoFinal(data.resposta.propriedades.periodoFinal)
            _setUsaCodigoProprio(data.resposta.propriedades.codigoProprio)
        }

        $.ajax("../api/df/propriedades.asp", {
            async: async,
            success: callback
        })
    }

    function periodoInicial() {
        if (_usaCodigoProprio == null)
            _loadPropriedades(false)

        return _periodoInicial
    }

    function periodoFinal() {
        if (_usaCodigoProprio == null)
            _loadPropriedades(false)

        return _periodoFinal
    }

    function usaCodigoProprio() {
        if (_usaCodigoProprio == null)
            _loadPropriedades(false)

        return _usaCodigoProprio
    }

    return {
        periodoInicial: periodoInicial,
        periodoFinal: periodoFinal,
        usaCodigoProprio: usaCodigoProprio
    }
} ($, rw))

rw.df.filiais = (function ($, rw) {
    var _ordem = 0,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais() {
        var callback = function (data) {
            if(data.resposta.status == "ERRO") {
                rw.alert(data.resposta.descricao)
                _setResultado([])
            }

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().filiais.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }
    
    function cssClassFromCelula(coluna, valor) {
        if(coluna == "ativa")
            return valor == "Ativa" ? "wkativo" : "wkinativo"
        else
            return ""
    }

    function setOrdenacao(ordem) { _ordem = ordem; _inicio = 0 }

    return {
        buscaMais: buscaMais,
        cssClassFromCelula: cssClassFromCelula,
        setOrdenacao: setOrdenacao
    }
} ($, rw))

rw.df.historicos = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais() {
        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
                rw.alert(data.resposta.descricao)
                _setResultado([])
                return
            }

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().historicos.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao
    }
} ($, rw))

rw.df.municipios = (function ($, rw) {
    var _inicio = 0,
        _uf = "",
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais() {
        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
                rw.alert(data.resposta.descricao)
                _setResultado([])
            }

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().municipios.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                uf: _uf
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function setUf(uf) { _uf = uf; _inicio = 0; }

    return {
        buscaMais: buscaMais,
        setUf: setUf
    }
} ($, rw))


rw.df.planoFiliais = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tipo = "CFRT"

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoFiliais.url, {
            data: {
                tipo: _tipo,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))

rw.df.planoOpComerciais = (function ($, rw) {
    var _ordem = 2,
        _inicio = 2,
        _resultado = [],
        _tipo = "CFRT"

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoOpComerciais.url, {
            data: {
                tipo: _tipo,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))


rw.df.planoGrade1 = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais() {
        var callback = function (data) {
                 if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                _setResultado([])
                return
            }
            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoGrade1.url, {
            data: {
             codigoProduto : GcodigoProduto
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao
    }
} ($, rw))


rw.df.planoGrade2 = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais() {
        var callback = function (data) {
                 if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                _setResultado([])
                return
            }
            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoGrade2.url, {
            data: {
             codigoProduto : GcodigoProduto,
             codigog1: Ggrade1
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao
    }
} ($, rw))

rw.df.planoGrade3 = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais() {
        var callback = function (data) {
                 if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                _setResultado([])
                return
            }
            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoGrade3.url, {
            data: {
             codigoProduto : GcodigoProduto,
             codigog1: Ggrade1,
             codigog2: Ggrade2
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao
    }
} ($, rw))
rw.df.planoProdutos = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tipo = "CFRT"
        _codigo = "",
        _grade1 = "",
        _grade2 = "",
        _grade3 = "";

    function _incInicio()       { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }
    function _setCodigo(codigo) { _codigo = codigo }
    function _setGrade1(grade1) { _grade1 = grade1 }
    function _setGrade2(grade2) { _grade2 = grade2 }
    function _setGrade3(grade3) { _grade3 = grade3 }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }
//        if(_codigo == ""){
        $.ajax(rw.getConfig().planoProdutos.url, {
            data: {
             
                tipo: _tipo,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })
//        }else if(_grade1 == ""){
//        rw.msg.alerta(_codigo)
//        $.ajax(rw.getConfig().planoProdutos.url + "?codigoProduto="+_codigo, {
//            data: {
//                tipo: _tipo,
//                inicio: _inicio,
//                final: _inicio + rw.TAMANHO_BUSCA,
//                ordem: _ordem
//            }, async: false,
//            success: callback
//        })
//        }else if(_grade2 == ""){
//        $.ajax(rw.getConfig().planoProdutos.url+ "?"+_codigo+"&"+_grade1, {
//            data: {
//                tipo: _tipo,
//                inicio: _inicio,
//                final: _inicio + rw.TAMANHO_BUSCA,
//                ordem: _ordem
//            }, async: false,
//            success: callback
//        })
//        }else { 
//        $.ajax(rw.getConfig().planoProdutos.url+ "?"+_codigo+"&"+_grade1+"&"+_grade2, {
//            data: {
//                tipo: _tipo,
//                inicio: _inicio,
//                final: _inicio + rw.TAMANHO_BUSCA,
//                ordem: _ordem
//            }, async: false,
//            success: callback
//        })
//        }
        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))

rw.df.planoEstados = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tipo = "CFRT"
   
    function _incInicio()       { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }


    function buscaMais() {
        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                _setResultado([])
            }
            _setResultado(data.resposta.registros)
            _incInicio()
        }
//        if(_codigo == ""){
        $.ajax(rw.getConfig().planoEstados.url, {
            data: {
              inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
              
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))

rw.df.planoMunicipios = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais() {
        var callback = function (data) {
                 if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                _setResultado([])
                return
            }
            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoMunicipios.url, {
            data: {
             uf : GCodigoEstado
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao
    }
} ($, rw))




rw.df.planoCFOP = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tipo = "CFRT"

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoCFOP.url, {
            data: {
                tipo: _tipo,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }
  
    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))

rw.df.tabelaPrecos = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tipo = "CFRT"

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().tabelaPrecos.url, {
            data: {
                tipo: _tipo,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))

rw.df.planoTransportadoras = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tipo = "CFRT"

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoTransportadoras.url, {
            data: {
                tipo: _tipo,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().planoTransportadoras.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))

rw.df.planoCfrt = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tipo = "CFRT"

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoCfrt.url, {
            data: {
                tipo: _tipo,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    function setTipo(tipo) { _tipo = tipo; return this }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao,
        setTipo: setTipo
    }
} ($, rw))

rw.df.planoContabil = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoContabil.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaContabil.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; reinicializa() }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao
    }
} ($, rw))

rw.df.planoGerencial = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().planoGerencial.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function cssClassFromRegistro(registro) {
        switch(String(registro.tipo)) {
            case "T": return "wkf4titulo"
            case "A": return "wkf4analitica"
            case "G": return "wkf4grupo"
            case "S": return "wkf4subanalitica"
        }
    }

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

            _setResultado([data.resposta.conta])
        }

        $.ajax(rw.getConfig().contaGerencial.url, {
            data: {
                codigo: conta
            }, async: false,
            success: callback
        })

        return _resultado[0]
    }

    function reinicializa() { _inicio = 0; _resultado = [] }
    function setOrdenacao(ordem) { _ordem = ordem; _inicio = 0 }

    return {
        buscaMais: buscaMais,
        cssClassFromRegistro: cssClassFromRegistro,
        existe: existe,
        reinicializa: reinicializa,
        setOrdenacao: setOrdenacao
    }
} ($, rw))

rw.df.produtos = (function ($, rw) {
    var _ordem = 2,
        _inicio = 0,
        _resultado = [],
        _tabela = "0"

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().produtos.url, {
            data: {
                codigo: _tabela,
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA,
                ordem: _ordem
            }, async: false,
            success: callback
        })

        return _resultado
    }

    function setOrdenacao(ordem) { _ordem = ordem; _inicio = 0 }
    function setTabelaPrecos(tabela) { _tabela = tabela; _inicio = 0 }

    return {
        buscaMais: buscaMais,
        setOrdenacao: setOrdenacao,
        setTabelaPrecos: setTabelaPrecos
    }
} ($, rw))

rw.ft = (function ($, rw) {
    return {}
} ($, rw))

rw.ft.pedidos = (function ($, rw) {
    var _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

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

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().pedidos.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA
            }, async: false,
            success: callback
        })

        return _resultado
    }

    return {
        buscaMais: buscaMais
    }
} ($, rw));

rw.ft.lancamentos = (function ($, rw) {
    var _inicio = 0,
        _resultado = []

    function _incInicio() { _inicio += rw.TAMANHO_BUSCA }
    function _setResultado(res) { _resultado = res }

    function buscaMais(dataInicial, dataFinal, chaveInicial, chaveFinal, conta) {
        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
            rw.msg.erro(data)
            _setResultado([])
            }

            _setResultado(data.resposta.registros)
            _incInicio()
        }

        $.ajax(rw.getConfig().lancamentos.url, {
            data: {
            
                dataInicial  : dataInicial,
		            dataFinal    : dataFinal,
		            chaveInicial : chaveInicial,
		            chaveFinal   : chaveInicial,
		            numeroConta  : conta
            }, async: false,
            success: callback
        })

        return _resultado
    }

    return {
        buscaMais: buscaMais
    }
} ($, rw));

rw.ge = (function ($, rw) {
    return {};
} ($, rw));

rw.ge.assistencias = (function ($, rw) {
    var _inicio = 0,
        _resultado = [];

    function _incInicio() {
        _inicio += rw.TAMANHO_BUSCA;
    }

    function _setResultado(res) {
        _resultado = res;
    }

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

            _setResultado(data.resposta.registros);
            _incInicio();
        }

        $.ajax(rw.getConfig().assistencias.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA
            }, async: false,
            success: callback
        });

        return _resultado;
    }

    return {
        buscaMais: buscaMais
    };
}($, rw));

rw.ge.equipamentos = (function ($, rw) {
    var _inicio = 0,
        _resultado = [];

    function _incInicio() {
        _inicio += rw.TAMANHO_BUSCA;
    }

    function _setResultado(res) {
        _resultado = res;
    }

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

            _setResultado(data.resposta.registros);
            _incInicio();
        }

        $.ajax(rw.getConfig().equipamentos.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA
            }, async: false,
            success: callback
        });

        return _resultado;
    }

    function reinicializa() {
        _inicio = 0;
        _resultado = [];
    }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa
    }
}($, rw));

rw.ge.marcas = (function ($, rw) {
    var _inicio = 0,
        _resultado = [];

    function _incInicio() {
        _inicio += rw.TAMANHO_BUSCA;
    }

    function _setResultado(res) {
        _resultado = res;
    }

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

            _setResultado(data.resposta.registros);
            _incInicio();
        }

        $.ajax(rw.getConfig().marcas.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA
            }, async: false,
            success: callback
        });

        return _resultado;
    }

    function reinicializa() {
        _inicio = 0;
        _resultado = [];
    }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa
    }
}($, rw));

rw.ge.modelos = (function ($, rw) {
    var _inicio = 0,
        _resultado = [];

    function _incInicio() {
        _inicio += rw.TAMANHO_BUSCA;
    }

    function _setResultado(res) {
        _resultado = res;
    }

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

            _setResultado(data.resposta.registros);
            _incInicio();
        }

        $.ajax(rw.getConfig().modelos.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA
            }, async: false,
            success: callback
        });

        return _resultado;
    }

    function reinicializa() {
        _inicio = 0;
        _resultado = [];
    }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa
    }
}($, rw));

rw.ge.situacoes = (function ($, rw) {
    var _inicio = 0,
        _resultado = [];

    function _incInicio() {
        _inicio += rw.TAMANHO_BUSCA;
    }

    function _setResultado(res) {
        _resultado = res;
    }

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

            _setResultado(data.resposta.registros);
            _incInicio();
        }

        $.ajax(rw.getConfig().situacoes.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA
            }, async: false,
            success: callback
        });

        return _resultado;
    }

    function reinicializa() {
        _inicio = 0;
        _resultado = [];
    }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa
    }
}($, rw));

rw.ge.tipos = (function ($, rw) {
    var _inicio = 0,
        _resultado = [];

    function _incInicio() {
        _inicio += rw.TAMANHO_BUSCA;
    }

    function _setResultado(res) {
        _resultado = res;
    }

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

            _setResultado(data.resposta.registros);
            _incInicio();
        }

        $.ajax(rw.getConfig().tipos.url, {
            data: {
                inicio: _inicio,
                final: _inicio + rw.TAMANHO_BUSCA
            }, async: false,
            success: callback
        });

        return _resultado;
    }

    function reinicializa() {
        _inicio = 0;
        _resultado = [];
    }

    return {
        buscaMais: buscaMais,
        reinicializa: reinicializa
    }
}($, rw));

rw.f4 = (function ($, rw) {
    var _tipo = "",
        _config = {},
        _editId = "",
        _editGrade1Id = "",
        _editGrade2Id = "",
        _editGrade3Id = "",
        _editMunicipio = "",
        _table = {},
        _tableId = "f4table",
        _table2 = "asd",
        _GradeAtual;




    function abre(tipo, id) {

        _editId = id
    
        _tipo = tipo
        _config = rw.getConfig()[_tipo].f4

        _config.getClasse().reinicializa()

        if($(".wkblack").length == 0)
            $(document.body).append('<div class="wkblack"></div>')

        if($("#wkf4").length == 0)
            $(document.body).append('<div id="wkf4" class="wkf4"></div>')

        $(".wkblack").css({ "width": $(window).width(), "height": $(document).height() })
        $(".wkblack").fadeTo(1000, .6)

        $("#wkf4").css("top", $(window).height() / 2 - $("#wkf4").height() / 2)
        $("#wkf4").css("left", $(window).width() / 2 - $("#wkf4").width() / 2)
        $("#wkf4").fadeIn(1000)

        $(".wkblack").click(function (e) {
            $(".wkblack, #wkf4").fadeOut(500);
        })

        _criaTabela()
        _preencheTabela()
    }
     function abreProduto(tipo, id, gradeAtual, idGrade1,idGrade2,idGrade3) {
    _editGrade1Id = idGrade1;
    _editGrade2Id = idGrade2;
    _editGrade3Id = idGrade3;
     _GradeAtual = gradeAtual
        _editId = id
    
        _tipo = tipo
        _config = rw.getConfig()[_tipo].f4

        _config.getClasse().reinicializa()

        if($(".wkblack").length == 0)
            $(document.body).append('<div class="wkblack"></div>')

        if($("#wkf4").length == 0)
            $(document.body).append('<div id="wkf4" class="wkf4"></div>')

        $(".wkblack").css({ "width": $(window).width(), "height": $(document).height() })
        $(".wkblack").fadeIn(500)
        $(".wkblack").fadeTo("fast", .8)

        $("#wkf4").css("top", $(window).height() / 2 - $("#wkf4").height() / 2)
        $("#wkf4").css("left", $(window).width() / 2 - $("#wkf4").width() / 2)
        $("#wkf4").fadeIn(500)

        $(".wkblack").click(function (e) {
            $(".wkblack, #wkf4").hide()
        })

        _criaTabela()
        _preencheTabelaProdutos()
    }
     function abreMunicipios(tipo, id, idMunicipio, gradeAtual) {
    _editMunicipio = idMunicipio;
    _GradeAtual = gradeAtual;
        _editId = id;
    
        _tipo = tipo
        _config = rw.getConfig()[_tipo].f4

        _config.getClasse().reinicializa()

        if($(".wkblack").length == 0)
            $(document.body).append('<div class="wkblack"></div>')

        if($("#wkf4").length == 0)
            $(document.body).append('<div id="wkf4" class="wkf4"></div>')

        $(".wkblack").css({ "width": $(window).width(), "height": $(document).height() })
        $(".wkblack").fadeIn(500)
        $(".wkblack").fadeTo("fast", .8)

        $("#wkf4").css("top", $(window).height() / 2 - $("#wkf4").height() / 2)
        $("#wkf4").css("left", $(window).width() / 2 - $("#wkf4").width() / 2)
        $("#wkf4").fadeIn(500)

        $(".wkblack").click(function (e) {
            $(".wkblack, #wkf4").hide()
        })

        _criaTabela()
        _preencheTabelaMunicipios()
    }
    function _carregaMais() {
        var registros = _config.getClasse().buscaMais()
        var colunas = $.map(_config.colunas, function (c) { return c.dado })
        var contador = 0;
        $.map(registros, function (r) {
            var row = _table.tBodies[0].insertRow(-1)
            
            if(_config.getClasse().cssClassFromRegistro)
                row.className += " " + _config.getClasse().cssClassFromRegistro(r)

            $("#" + _tableId + " tr:last").hide()
            $.map(colunas, function (c) {
                var cell = row.insertCell(-1)
                cell.innerHTML = r[c]
                contador ++;
                if(_config.getClasse().cssClassFromCelula)
                    cell.className += " " + _config.getClasse().cssClassFromCelula(c, r[c])
            })
            row.setAttribute("onclick", "$('#" + _editId + "').val('" + r.codigo + "').blur();$('.wkblack, .wkf4').hide();")
            
            
            $("#" + _tableId + " tr:last").fadeIn(300)
                  
        })
        return registros
    }
        function _carregaMaisProdutos() {
        var registros = _config.getClasse().buscaMais()
        var colunas = $.map(_config.colunas, function (c) { return c.dado })
        var contador = 0;
        $.map(registros, function (r) {
            var row = _table.tBodies[0].insertRow(-1)
            
            if(_config.getClasse().cssClassFromRegistro)
                row.className += " " + _config.getClasse().cssClassFromRegistro(r)

            $("#" + _tableId + " tr:last").hide()
            $.map(colunas, function (c) {
                var cell = row.insertCell(-1)
                cell.innerHTML = r[c]
                contador ++;
                if(_config.getClasse().cssClassFromCelula)
                    cell.className += " " + _config.getClasse().cssClassFromCelula(c, r[c])
            })
            if(_GradeAtual == 1){
            row.setAttribute("onclick", "$('#" + _editId + "').val('" + r.codigo + "').blur();$('.wkblack, .wkf4').hide();rw.f4.EXsetValorGrade1('"+r.codigo+"');$('#" + _editGrade2Id + "').focus();$('#" + _editGrade2Id + "').val('');$('#" + _editGrade3Id + "').val('');")
            }else if(_GradeAtual == 2){
            row.setAttribute("onclick", "$('#" + _editId + "').val('" + r.codigo + "').blur();$('.wkblack, .wkf4').hide();rw.f4.EXsetValorGrade2('"+r.codigo+"');$('#" + _editGrade3Id + "').focus();$('#" + _editGrade3Id + "').val('');")
            
            }else if(_GradeAtual == 3){
            row.setAttribute("onclick", "$('#" + _editId + "').val('" + r.codigo + "').blur();$('.wkblack, .wkf4').hide();rw.f4.EXsetValorGrade3('"+r.codigo+"');")
            
            }else{
            row.setAttribute("onclick", "$('#" + _editId + "').val('" + r.codigo + "').blur();$('.wkblack, .wkf4').hide();rw.f4.EXsetValorCodigoProduto('"+r.codigo+"');$('#" + _editGrade1Id + "').focus();$('#" + _editGrade1Id + "').val('');$('#" + _editGrade2Id + "').val('');$('#" + _editGrade3Id + "').val('');")
            
            }
            $("#" + _tableId + " tr:last").fadeIn(300)
                  
        })
        return registros
    }
        function _carregaMaisMunicipios() {
        var registros = _config.getClasse().buscaMais()
        var colunas = $.map(_config.colunas, function (c) { return c.dado })
        var contador = 0;
        $.map(registros, function (r) {
            var row = _table.tBodies[0].insertRow(-1)
            
            if(_config.getClasse().cssClassFromRegistro)
                row.className += " " + _config.getClasse().cssClassFromRegistro(r)

            $("#" + _tableId + " tr:last").hide()
            $.map(colunas, function (c) {
                var cell = row.insertCell(-1)
                cell.innerHTML = r[c]
                contador ++;
                if(_config.getClasse().cssClassFromCelula)
                    cell.className += " " + _config.getClasse().cssClassFromCelula(c, r[c])
            })
            if(_GradeAtual == 1){
            row.setAttribute("onclick", "$('#" + _editId + "').val('" + r.codigo + "').blur();$('.wkblack, .wkf4').hide();rw.f4.EXsetValorCodigoEstado('"+r.codigo+"');$('#" + _editMunicipio + "').focus();")
            
            }else if(_GradeAtual == 2){
            row.setAttribute("onclick", "$('#" + _editId + "').val('" + r.codigo + "').blur();$('.wkblack, .wkf4').hide();rw.f4.EXsetValorCodigoEstado('"+r.codigo+"');$('#" + _editMunicipio + "').focus();")
            
            }
            $("#" + _tableId + " tr:last").fadeIn(300)
                  
        })
        return registros
    }

      function _carregaSemDados() {
           
            var row = _table.tBodies[0].insertRow(-1)
            var row = _table.tBodies[0].insertRow(-1)
var row = _table.tBodies[0].insertRow(-1)

            $("#" + _tableId + " tr:last").hide()
             

            var cell = row.insertCell(-1)
                cell.innerHTML
           var cell = row.insertCell(-1)
                cell.innerHTML = "Não existem dados cadastrados para está consulta"
                
                if(_GradeAtual == 1)
                {
                $("#"+_editGrade1Id).val("")
                }
                if(_GradeAtual == 2)
                {
                $("#"+_editGrade2Id).val("")
                }
                if(_GradeAtual == 3)
                {
                $("#"+_editGrade3Id).val("")
                }
            $("#" + _tableId + " tr:last").fadeIn(300)
         
        return registros
    }

    function setValorCodigoProduto(codigo){
            GcodigoProduto = codigo
            }
    function setValorCodigoEstado(codigo){
            GCodigoEstado = codigo
            }

    function setValorGrade1(grade1){
            Ggrade1 = grade1
            }
   function setValorGrade2(grade2){
            Ggrade2 = grade2
            }
   function setValorGrade3(grade3){
            Ggrade3 = grade3
            }
    function _criaTabela() {
        var tab = '<table id="' + _tableId + '"><thead><tr>'
        
        $.map(_config.colunas, function (c) {
            if(c.ordem) {
                tab += '<th onclick="page.setOrdenacao(' + c.ordem + ')">' + c.nome + '</th>'
            } else {
                tab += '<th>' + c.nome + '</th>'
            }
        });
        
        tab += '</tr></thead><tbody></tbody></table>'
        $("#wkf4").html(tab)
    }

    function _preencheTabela() {
        var colunas = $.map(_config.colunas, function (c) { return c.dado })
        _table = $("#" + _tableId)[0]
        rw.table.limpa(_table)
    primeiraVez = true;
        while($("#" + _tableId).height() < $(".wkf4").height()) {
            var registros = _carregaMais()
           
            if (registros.length == 0 && primeiraVez) {
            registros = _carregaSemDados();
            $("#" + _tableId).hide();
            break
            }else if(registro.length == 0){
            break;
            }
     
           
        }

        $(".wkf4").scroll(_scroll)
    }

    function _preencheTabelaProdutos() {
        var colunas = $.map(_config.colunas, function (c) { return c.dado })
        _table = $("#" + _tableId)[0]
        rw.table.limpa(_table)
        primeiraVez = true;
        while($("#" + _tableId).height() < $(".wkf4").height()) {
            var registros = _carregaMaisProdutos()
            if (registros.length == 0 && primeiraVez) {
            registros = _carregaSemDados();
            $("#" + _tableId).hide();
            break
            } else if(registros.length == 0){
            break;
            }
            primeiraVez = false;
        }

        $(".wkf4").scroll(_scroll)
    }
    function _preencheTabelaMunicipios() {
        var colunas = $.map(_config.colunas, function (c) { return c.dado })
        _table = $("#" + _tableId)[0]
        rw.table.limpa(_table)
        primeiraVez = true;
        while($("#" + _tableId).height() < $(".wkf4").height()) {
            var registros = _carregaMaisMunicipios()
            if (registros.length == 0 && primeiraVez) {
            registros = _carregaSemDados();
            $("#" + _tableId).hide();
            break
            } else if(registro.length == 0){
            }
            primeiraVez = false;
        }

        $(".wkf4").scroll(_scroll)
    }
    function _scroll() {
        if ($(".wkf4").scrollTop() == $("#f4table").height() - $(".wkf4").height())
            _carregaMais()
    }

    return {
        abre: abre,
        abreProduto : abreProduto,
        abreMunicipios : abreMunicipios,
        EXsetValorCodigoProduto : setValorCodigoProduto,
        EXsetValorCodigoEstado : setValorCodigoEstado,
        EXsetValorGrade1 : setValorGrade1,
        EXsetValorGrade2 : setValorGrade2,
        EXsetValorGrade3 : setValorGrade3
    }
} ($, rw))

rw.input = (function ($, rw) {
    function blur(id, classe, aviso) {
        var codigo = $("#" + id).val()
        if (codigo == "") return

        var reg = classe.existe(codigo)
        if (reg) {
            $("#" + id + "nome").val(reg.nome)
        } else {
            $("#" + id + "nome").val("")
            rw.msg.alerta(aviso)
            $("#" + id).focus()
        }
    }

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

rw.input.contaContabil = (function ($, rw) {
    function blur(id, tipos) {
        var codigo = $("#" + id).val()
        if (codigo == "") return

        var reg = rw.df.planoContabil.existe(codigo)
        if (reg) {
            if(tipos.indexOf(reg.tipo) > -1) {
                $("#" + id + "nome").val(reg.nome)
            } else {
                $("#" + id + "nome").val("")
             //   rw.msg.alerta("Selecione apenas contas título.")
                $("#" + id).focus()
            }
        } else {
            $("#" + id + "nome").val("")
            rw.msg.alerta("Conta não encontrada.");
            $("#" + id).focus()
        }
    }

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

rw.input.contaGerencial = (function ($, rw) {
    function blur(id, tipos) {
        var codigo = $("#" + id).val()
        if (codigo == "") return

        var reg = rw.df.planoGerencial.existe(codigo)
        if (reg) {
            if(tipos.indexOf(reg.tipo) > -1) {
                $("#" + id + "nome").val(reg.nome)
            } else {
                $("#" + id + "nome").val("")
                rw.msg.alerta("Selecione apenas contas título.")
                $("#" + id).focus()
            }
        } else {
            $("#" + id + "nome").val("")
            rw.msg.alerta("Conta não encontrada.");
            $("#" + id).focus()
        }
    }

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

rw.input.cpf = (function ($, rw) {
    function blur(id) {
    }

    function valida(cpf) {
    }

    return {
        blur: blur,
        valida: valida
    }
}($, rw))

rw.input.data = (function ($, rw) {
    function blur(id) {
        if (!valida($("#" + id).val())) {
            rw.msg.alerta("Formato de data inválido.")
            $("#" + id).focus()
        }
    }

    function valida(data) {
        if(data == "") return true

        var regex = new RegExp(/^([0-3][0-9])\/([01][0-9])\/(\d{4})$/)

        var arr = regex.exec(data)
        if (arr == null)
            return false
        else {
            var d = new Date(arr[2] + "/" + arr[1] + "/" + arr[3])
            if (d.getDate() != arr[1])
                return false
        }

        return true
    }

    return {
        blur: blur,
        valida: valida
    }
} ($, rw))

rw.input.historico = (function ($, rw) {
    function blur(id) {
        rw.input.blur(id, rw.df.historicos, "Histórico não encontrado.")
    }

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


rw.input.produto = (function ($, rw) {
    function blur(id) {
        rw.input.blur(id, rw.df.produtos, "Produto não encontrado.")
    }

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

rw.input.relatorio = (function ($, rw) {
    function load(id, modulo, componente) {
        var callback = function (data) {
            with (data.resposta) {
                if (status == "ERRO") {
                    rw.msg.erro(data)
                    return
                }

                var options = ""
                $.map(relatorios, function (r) {
                    options += '<option value="' + r + '">' + r + '</option>'
                })
                $("#" + id).html(options)
            }
        }

        $.ajax("../api/df/modelos-relatorios.asp", {
            data: { mod: modulo, comp: componente },
            success: callback
        })
    }

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

rw.input.uf = (function ($, rw) {
    function click(elem, idTabela) {
        rw.table.limpa(idTabela)
        rw.df.municipios.setUf(elem.value)
        rw.table.filler.fill(idTabela, rw.df.municipios, ["codigo", "nome"])
    }
    
    function load(id) {
        var callback = function (data) {
            if(data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                return
            }

            var options = '<option value="">(Todos)</option>'
            $.map(data.resposta.registros, function (r) {
                options += '<option value="' + r.uf + '">' + r.uf + '</option>'
            })
            $("#" + id).html(options)
        }

        $.ajax("../api/df/lista-estados.asp", {
            success: callback
        })
    }

    return {
        click: click,
        load: load
    }
} ($, rw))

rw.table = (function ($, rw) {
    function limpa(table) {
        var t = table
        if (typeof (table) == "string")
            t = $("#" + table)[0].tBodies[0]

        else if (typeof (table.tBodies) == "object")
            t = table.tBodies[0]

        while(t.rows.length > 0)
            t.deleteRow(0)
    }

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

rw.table.filler = (function ($, rw) {
    var _classe = {},
        _colunas = [],
        _table = {},
        _tableId = ""

    function _carregaMais() {
        var registros = _classe.buscaMais()
        $.map(registros, function (r) {
            var row = _table.tBodies[0].insertRow(-1)

            if(_classe.cssClassFromRegistro)
                row.className += " " + _classe.cssClassFromRegistro(r)
            
            $("#" + _tableId + " tr:last").hide()
            $.map(_colunas, function (c) {
                var cell = row.insertCell(-1)
                cell.innerHTML = r[c]

               if(_classe.cssClassFromCelula)
                    cell.className = " " + _classe.cssClassFromCelula(c, r[c])
            });
            
            $("#" + _tableId + " tr:last").fadeIn(1000);
        });

        return registros;
    }

    
  
    function fill(tableId, classe, colunas) {
        _tableId = tableId;
        _classe = classe;
        _colunas = colunas;
        _table = $("#" + tableId)[0];

        rw.table.limpa(_table)

        while($(document).height() <= $(window).height() + 10) {
            var registros = _carregaMais();
            if (registros.length == 0)
                break;
        }

        $(window).scroll(rw.table.filler.scroll)
    }

    function ordenaPor(ordem) {
        _classe.setOrdenacao(ordem)
        fill(_tableId, _classe, _colunas)
    }

    function scroll() {
        if ($(window).scrollTop() == ($(document).height() - ($(window).height())) ||
			$(window).scrollTop() == ($(document).height() - ($(window).height()) - 1)) { // POG para Firefox
			_carregaMais()
        }
    }

    function setParametro(parametro, valor) {
        _classe.setParametro(parametro, valor)
        fill(_tableId, _classe, _colunas)
    }

    return {
        fill: fill,
        ordenaPor: ordenaPor,
        scroll: scroll
    }
} ($, rw))

// Inicialização de campos. É executada após a página ter sido carregada por inteiro.
$(function () {
    $(".wkdata").datepicker().mascara('data');
});