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

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

            var cell = row.insertCell(-1)
            cell.innerHTML = registro.numero

            cell = row.insertCell(-1)
            cell.innerHTML = registro.data

            cell = row.insertCell(-1)
            cell.innerHTML = registro.cliente

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

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

rw.ge.atendimentos = (function ($, rw) {
    var _lista = []

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

            var cell = row.insertCell(-1)
            cell.className = "wkint"
            cell.innerHTML = registro.nrAtendimento

            cell = row.insertCell(-1)
            cell.innerHTML = registro.nomeCliente

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

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

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

            cell = row.insertCell(-1)
            cell.className = "wkint"
            cell.innerHTML = registro.codFilial

            var nomeFil = registro.nomeFilial
            if(nomeFil == "undefined" || nomeFil == "")
                nomeFil = "(Nome não cadastrado)"

            $(row).click(
                function () {
                    $("#dataEmissao").val(registro.dataEmissao)
                    $("#dataVencimento").val(registro.dataVencimento)
                    $("#dataFaturamento").val(registro.dataFaturamento)
                    $("#filial").val(registro.codFilial)
                    $("#desc_f4_filial").val(nomeFil)
                    $("#cliente").val(registro.codCliente)
                    $("#desc_f4_cliente").val(registro.nomeCliente)
                    $("#nrAtendimento").val(registro.nrAtendimento)
                }
            )

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

    function _atualizaTabela() {
        var tabela = $("#tabelaAtendimentos")[0]
        rw.tabelas.limpa("#tabelaAtendimentos")
        var registros = _lista

        $.map(registros, function (registro) {
            var row = tabela.tBodies[0].insertRow(-1)
            $("#tabelaAtendimentos tr:last").hide()

            var cell = row.insertCell(-1)
            cell.className = "wkint"
            cell.innerHTML = registro.nrAtendimento

            cell = row.insertCell(-1)
            cell.innerHTML = registro.nomeCliente

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

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

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

            cell = row.insertCell(-1)
            cell.className = "wkint"
            cell.innerHTML = registro.codFilial

            var nomeFil = registro.nomeFilial
            if(nomeFil == "undefined" || nomeFil == "")
                nomeFil = "(Nome não cadastrado)"

            $("#tabelaAtendimentos tr:last").fadeIn(rw.FADE())

            $(row).click(function () {
                $("#dataEmissao").val(registro.dataEmissao)
                $("#dataVencimento").val(registro.dataVencimento)
                $("#dataFaturamento").val(registro.dataFaturamento)
                $("#filial").val(registro.codFilial)
                $("#desc_f4_filial").val(nomeFil)
                $("#cliente").val(registro.codCliente)
                $("#desc_f4_cliente").val(registro.nomeCliente)
                $("#nrAtendimento").val(registro.nrAtendimento)
            })
        })
    }

    function _setDados(bInclusao) {
        var callback = function (data) {
            if(data.resposta.status == "ERRO")
                rw.msg.erro(data)

            _lista = data.resposta.atendimentos
        }

        $.ajax(
            "../api/ge/cad-atendimento.asp", {
                data: {
                    codFilial: $("#filial").val(),
                    codCliente: $("#cliente").val(),
                    dataEmissao: $("#dataEmissao").val(),
                    dataVencimento: $("#dataVencimento").val(),
                    dataFaturamento: $("#dataFaturamento").val(),
                    nrAtendimento: $("#nrAtendimento").val(),
                    inclusao: bInclusao
                }, 
                async: false,
                success: callback
            }
        )

        _atualizaTabela()
    }

    function _camposValidos() {
        if(!rw.verificaCampoVazio("#camposPrincipal", "Principal")) 
            return false

        if(!rw.datas.compara("#dataFaturamento", "#dataVencimento"))
            return false



        return true
    }

    function adiciona() {
        if(_camposValidos()) {
            dadosPreCadastrados()
            _setDados(true)
            window.location.reload()
            dadosPreCadastrados()
            rw.msg.alerta("Atendimento cadastrado com sucesso.")
            return true
        }

        return false
    }

    function altera() {
        if(_camposValidos()) {
            _setDados(false)
            window.location.reload()
            dadosPreCadastrados()
            rw.msg.alerta("Atendimento gravado com sucesso.")
            return true
        }

        return false
    }

    function dadosPreCadastrados() {
        var proximoNumero = "0"

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

            proximoNumero = data.resposta.proximoNumero
        }

        $.ajax(
            "../api/ge/con-dadosPreCadAtendimento.asp", {
                data: {},
                async: false,
                success: callback
            }
        )

        $("#nrAtendimento").val(proximoNumero)
        $("#dataEmissao").val(rw.datas.hoje())
    }

    return {
        insere: insere,
        adiciona: adiciona,
        altera: altera,
        dadosPreCadastrados: dadosPreCadastrados
    }
} ($, rw))

rw.ge.atendimentos.servicos = (function ($, rw) {
    var _lista = []
    var _servicoAtual = -1

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

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

            cell = row.insertCell(-1)
            cell.innerHTML = registro.nomeServico

            cell = row.insertCell(-1)
            cell.innerHTML = registro.situacaoServico

            cell = row.insertCell(-1)
            cell.innerHTML = registro.apelidoExecutorServico

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

            $(row).click(
                function () {
                    $("#tabPrecos").val(registro.codTabPrecosServico)
                    $("#desc_f4_tabPrecos").val(registro.nomeTabPrecosServico)
                    $("#servico").val(registro.codServico)
                    $("#desc_f4_servico").val(registro.nomeServico)
                    $("#descricaoServico").val(registro.descricaoServico)
                    $("#dataSaidaServico").val(registro.dataSaidaServico)
                    $("#dataRetornoServico").val(registro.dataRetornoServico)
                    $("#ponteiroExecutorServico").val(registro.ponteiroExecutorServico)
                    $("#comentarioServico").val(registro.comentarioServico)
                    var id = "#qtdeHorasServico"
                    $(id).val(registro.totalHorasServico)
                    $(document.getElementById(id.replace("#", "un_"))).val(registro.unidadeServico)
                    $(document.getElementById(id.replace("#", "cd_"))).val(registro.qtdeCasasDecimaisServico)
                    $("#valorServico").val(registro.valorServico)
                    _servicoAtual = registro.posicao

                    if (registro.situacaoServico.toLowerCase() == "pendente") {
                        $("#pendenteServico").attr("checked", true)
                        $("#realizadoServico").attr("checked", false)
                    } else {
                        $("#pendenteServico").attr("checked", false)
                        $("#realizadoServico").attr("checked", true)
                    }

                    rw.ge.atendimentos.servicos.horas.atualizaQtdeHoras(registro)


                }
            )

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

    function montaDados(idAtendimento, idOrdenacao) {
        return function () {
            return {
                atendimento: $(idAtendimento).val(),
                ordem: idOrdenacao ? $(idOrdenacao).val() : "undefined"
            }
        }
    }

    function _atualizaTabela() {
        var tabela = $("#tabelaServicosAtendimento")[0]
        rw.tabelas.limpa("#tabelaServicosAtendimento")
        var registros = _lista

        $.map(registros, function (registro) {
            var row = tabela.tBodies[0].insertRow(-1)
            $("#tabelaServicosAtendimento tr:last").hide()

            var cell = row.insertCell(-1)
            cell.className = "wkint"
            cell.innerHTML = registro.codServico

            cell = row.insertCell(-1)
            cell.innerHTML = registro.nomeServico

            cell = row.insertCell(-1)
            cell.innerHTML = registro.situacaoServico

            cell = row.insertCell(-1)
            cell.innerHTML = registro.apelidoExecutorServico

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

            $("#tabelaServicosAtendimento tr:last").fadeIn(rw.FADE())

            $(row).click(function () {
                $("#tabPrecos").val(registro.codTabPrecosServico)
                $("#desc_f4_tabPrecos").val(registro.nomeTabPrecosServico)
                $("#servico").val(registro.codServico)
                $("#desc_f4_servico").val(registro.nomeServico)
                $("#descricaoServico").val(registro.descricaoServico)
                $("#dataSaidaServico").val(registro.dataSaidaServico)
                $("#dataRetornoServico").val(registro.dataRetornoServico)
                $("#ponteiroExecutorServico").val(registro.ponteiroExecutorServico)
                $("#comentarioServico").val(registro.comentarioServico)
                var id = "#qtdeHorasServico"
                $(id).val(registro.totalHorasServico)
                $(document.getElementById(id.replace("#", "un_"))).val(registro.unidadeServico)
                $(document.getElementById(id.replace("#", "cd_"))).val(registro.qtdeCasasDecimaisServico)
                $("#valorServico").val(registro.valorServico)
                _servicoAtual = registro.posicao

                if (registro.situacaoServico.toLowerCase() == "pendente") {
                    $("#pendenteServico").attr("checked", true)
                    $("#realizadoServico").attr("checked", false)
                } else {
                    $("#pendenteServico").attr("checked", false)
                    $("#realizadoServico").attr("checked", true)
                }

                rw.ge.atendimentos.servicos.horas.atualizaQtdeHoras(registro)
            })
        })
    }

    function _setDados(bInclusao) {
        var campo = rw.formataString($("#qtdeHorasServico").val())
        var callback = function (data) {
            if (data.resposta.status == "ERRO") {
                rw.msg.erro(data)
                return
            }

            _lista = data.resposta.servicos
        }

        $.ajax("../api/ge/cad-servico.asp", {
            data: {
                codTabPrecosServico: $("#tabPrecos").val(),
                codServico: $("#servico").val(),
                descricaoServico: $("#descricaoServico").val(),
                dataSaidaServico: $("#dataSaidaServico").val(),
                dataRetornoServico: $("#dataRetornoServico").val(),
                ponteiroExecutorServico: $("#ponteiroExecutorServico").val(),
                comentarioServico: $("#comentarioServico").val(),
                totalHorasServico: campo,
                valorServico: $("#valorServico").val(),
                situacaoServico: $("#pendenteServico").attr("checked") ? "Pendente" : "Realizado",
                atendimento: $("#nrAtendimento").val(),
                inclusao: bInclusao,
                posicao: _servicoAtual
            },
            async: false,
            success: callback
        })

        _atualizaTabela()
    }

    function _camposValidos() {
        if (!rw.verificaCampoVazio("#camposServicos", "Serviços"))
            return false

        if (!rw.datas.compara("#dataSaidaServico", "#dataRetornoServico"))
            return false

        return true
    }

    function adiciona() {
        if (_camposValidos()) {
            _setDados(true)
            _servicoAtual = -1
            return true
        }

        return false
    }

    function altera() {
        if (_camposValidos()) {
            _setDados(false)
            _servicoAtual = -1
            return true
        }

        return false
    }

    function posicaoAtual() {
        return _servicoAtual
    }

    return {
        insere: insere,
        montaDados: montaDados,
        adiciona: adiciona,
        altera: altera,
        posicaoAtual: posicaoAtual
    }
} ($, rw))

rw.ge.atendimentos.servicos.horas = (function ($, rw) {
    var _lista = []
    var _horaAtual = -1
    var _totalHoras = "000:00"
    var _consulta = null

    function montaDados(idTabela, idOrdenacao) {
        return function () {
            return {
                inicio: rw.tabelas.linhas(idTabela),
                final: rw.tabelas.linhas(idTabela) + rw.TAMANHO_BUSCA(),
                ordem: $(idOrdenacao).val(),
                posicaoServico: rw.ge.atendimentos.servicos.posicaoAtual()
            }
        }
    }

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

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

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

            $(row).click(
                function () {
                    $("#hInicial").val(registro.horaInicial)
                    $("#hFinal").val(registro.horaFinal)
                    _horaAtual = registro.posicao
                }
            )

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

    function icone(consultaHora) {
        _consulta = consultaHora
        $("#qtdeHorasServico").after("<input type='hidden' class='un' id='un_qtdeHorasServico' value='hs'/><input type='hidden' class='cd' id='cd_qtdeHorasServico' value='0'/>")
        $("#qtdeHorasServico").dblclick(abre())
        $("#qtdeHorasServico").after(" <img src='../images/totalHoras.png' class='wkclicavel'/>")
        $("#qtdeHorasServico").next().click(abre())
    }

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

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

            $("#geHoras table").hide()
            $(_consulta.idTabela).show()

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

            $("#geHoras").css("top", $(window).height() / 2 - $("#geHoras").height() / 2)
            $("#geHoras").css("left", $(window).width() / 2 - $("#geHoras").width() / 2)
            $("#geHoras").fadeIn(rw.FADE())

            $(".wkblack").click(function () { _fecha() })

            $(document.body).keydown(
                function (event) {
                    if (event.keyCode == 27) // ESC
                        $(".wkblack, #geHoras").fadeOut(rw.FADE())
                }
            )

            _consulta.limpa()
            $("#hInicial").focus()
        }
    }

    function _camposVazios() {
        if ($("#hInicial").val() == "") {
            rw.msg.campoVazio("Hora Inicial")
            return true
        }

        if ($("#hFinal").val() == "") {
            rw.msg.campoVazio("Hora Final")
            return true
        }

        return false
    }

    function _registroSelecionado() {
        if (_horaAtual < 0) {
            rw.msg.registroNaoSelecionado("Hora")
            return false
        }

        return true
    }

    function _camposIncompletos() {
        if ($("#hInicial").val().length < 5) {
            rw.msg.alerta("O campo 'Hora Inicial' deve ser preenchido no formato hh:mm.")
            return true
        }

        if ($("#hFinal").val().length < 5) {
            rw.msg.alerta("O campo 'Hora Final' deve ser preenchido no formato hh:mm.")
            return true
        }

        return false
    }

    function adiciona() {
        if (!_camposVazios() && !_camposIncompletos()) {
            _setDados("adicionar")
            $("#hInicial").focus()
            return true
        }

        return false
    }

    function altera() {
        if (_registroSelecionado() && !_camposVazios() && !_camposIncompletos()) {
            _setDados("alterar")
            $("#hInicial").focus()
            return true
        }

        return false
    }

    function remove() {
        if (_registroSelecionado()) {
            _setDados("remover")
            $("#hInicial").focus()
            return true
        }

        return false
    }

    function cancela() {
        _fecha()
    }

    function confirma() {
        _setDados("gravar")
        _fecha()
        $("#qtdeHorasServico").val(_totalHoras)
    }

    function _fecha() {
        $(".wkblack, #geHoras").fadeOut(rw.FADE())
    }

    function _atualizaTabela() {
        var tabela = $("#tabelaHoras")[0]
        rw.tabelas.limpa("#tabelaHoras")
        var registros = _lista

        $.map(registros,
            function (r) {
                var row = tabela.tBodies[0].insertRow(-1)
                $("#tabelaHoras tr:last").hide()

                var cell = row.insertCell(-1)
                cell.className = "wkdata"
                cell.innerHTML = r.horaInicial

                cell = row.insertCell(-1)
                cell.className = "wkdata"
                cell.innerHTML = r.horaFinal

                $("#tabelaHoras tr:last").fadeIn(rw.FADE())

                $(row).click(
                    function () {
                        $("#hInicial").val(r.horaInicial)
                        $("#hFinal").val(r.horaFinal)
                        _horaAtual = r.posicao
                    }
                )
            }
        )
    }

    function _setDados(sOperacao) {
        var callback = function (data) {
            if (data.resposta.status == "ERRO")
                rw.msg.erro(data)

            _lista = data.resposta.sessoes
            _totalHoras = data.resposta.totalHoras
        }

        $.ajax(
            "../api/ge/cad-horas-servico.asp", {
                data: {
                    horaInicial: $("#hInicial").val(),
                    horaFinal: $("#hFinal").val(),
                    operacao: sOperacao,
                    posicao: _horaAtual
                },
                async: false,
                success: callback
            }
        )

        _atualizaTabela()
    }

    function atualizaQtdeHoras(registro) {
        var bHoras = false

        if (registro) {
            $("#qtdeHorasServico").val(registro.totalHorasServico)
            //$("#valorServico").val(registro.precoVenda)

            

            if (registro.possuiFormatoHorario == "false") {
                $("#qtdeHorasServico").unmask()
                var settings = { precision: registro.qtdeCasasDecimaisServico }
                $("#qtdeHorasServico").unbind("maskMoney")
                $("#qtdeHorasServico").maskMoney("destroy", settings)
                $("#qtdeHorasServico").maskMoney("init", settings)
                $("#qtdeHorasServico").next().hide()
                $("#qtdeHorasServico").next().next().hide()
                $("#qtdeHorasServico").attr("name", "Quantidade")
                $("#qtdeHorasServico").unbind("dblclick")
                $("#qtdeHorasLabel").html("Quantidade:")
                $("#un_qtdeHorasServico").val("sv")
                $("#qtdeHorasServico").maskMoney("mask")

                if (registro.qtdeCasasDecimaisServico == 0) {
                    $("#qtdeHorasServico").attr("maxlength", "7")
                } else if (registro.qtdeCasasDecimaisServico == 2) {
                    $("#qtdeHorasServico").attr("maxlength", "10")
                } else {
                    $("#qtdeHorasServico").attr("maxlength", "12")
                }
            } else {
                bHoras = true
                $("#un_qtdeHorasServico").val("hs")
            }
        } else {
            $("#qtdeHorasServico").val("000:00")
            bHoras = true
        }

        if (bHoras) {
            $("#qtdeHorasServico").unbind("maskMoney")
            $("#qtdeHorasServico").maskMoney("destroy", settings)
            $("#qtdeHorasServico").mask("999:59")
            $("#qtdeHorasServico").next().show()
            $("#qtdeHorasServico").next().next().show()
            $("#qtdeHorasServico").attr("name", "Total Horas")
            $("#qtdeHorasServico").dblclick(abre())
            $("#qtdeHorasLabel").html("Total Horas:")
        }
    }

    return {
        montaDados: montaDados,
        insere: insere,
        icone: icone,
        abre: abre,
        adiciona: adiciona,
        altera: altera,
        remove: remove,
        cancela: cancela,
        confirma: confirma,
        atualizaQtdeHoras: atualizaQtdeHoras
    }
} ($, rw))

rw.ge.atendimentos.despesas = (function ($, rw) {
    var _lista = []

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

            var cell = row.insertCell(-1)
            cell.innerHTML = registro.descricaoDespesa

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

            $(row).click(function () {
                $("#descricaoDespesa").val(registro.descricaoDespesa)
                $("#valorDespesa").val(registro.valorDespesa)
                $("#comentarioDespesa").val(registro.comentarioDespesa)
            })

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

    function montaDados(idAtendimento, idOrdenacao) {
        return function () {
            return {
                atendimento: $(idAtendimento).val(),
                ordem: idOrdenacao ? $(idOrdenacao).val() : "undefined"
            }
        }
    }

    function _atualizaTabela() {
        var tabela = $("#tabelaDespesasAtendimento")[0]
        rw.tabelas.limpa("#tabelaDespesasAtendimento")
        var registros = _lista

        $.map(registros, function (r) {
            var row = tabela.tBodies[0].insertRow(-1)
            $("#tabelaDespesasAtendimento tr:last").hide()

            var cell = row.insertCell(-1)
            cell.innerHTML = r.descricao

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

            $("#tabelaDespesasAtendimento tr:last").fadeIn(rw.FADE())

            $(row).click(function () {
                $("#descricaoDespesa").val(r.descricao)
                $("#valorDespesa").val(r.valor)
                $("#comentarioDespesa").val(r.comentario)
            })
        })
    }

    function adiciona() {
        if(!_camposValidos())
            return false        

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

        $.ajax("../api/ge/cad-despesa.asp", {
            data: {
                descricao: $("#descricaoDespesa").val(),
                valor: $("#valorDespesa").val(),
                comentario: $("#comentarioDespesa").val(),
                atendimento: $("#nrAtendimento").val()
            }, 
            async: false,
            success: callback
        })

        _atualizaTabela()        
        return true
    }

    function _camposValidos() {
        if(rw.verificaCampoVazio("#camposDespesa", "Despesas") == false) 
            return false
        
        return true
   }

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

rw.ge.equipamentos = (function ($, rw) {
    function inserePadrao(idTabela, onClick) {
        return function (registro) {
            var row = rw.tabelas.insereLinha(idTabela)
            row.className = rw.df.classeCss(registro)

            $(row).hide()
            if(onClick) 
                $(row).click(onClick(registro))            

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

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

            cell = row.insertCell(-1)
            cell.innerHTML = registro.marca

            cell = row.insertCell(-1)
            cell.innerHTML = registro.modelo

            cell = row.insertCell(-1)
            cell.innerHTML = registro.codigoTipo

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

    function insere(idTabela) {
        return inserePadrao(idTabela, null)
    }

    function insereF4(idEquipamento, idMarca, idModelo, idTipo, idTabela) {
        return inserePadrao(idTabela, function (registro) {
            return function () {
                $(idEquipamento).val(registro.codigo).blur()
                $(idMarca).val(registro.marca).blur()
                $(idModelo).val(registro.modelo).blur()
                $(idTipo).val(registro.tipo).blur()
                $(".wkblack, #wkf4").fadeOut(rw.FADE())
            }
        })
    }

    return {
        insere: insere,
        insereF4: insereF4
    }
} ($, rw))