﻿var tbAtivoCodigo;
var tbProcura;
var btnOk;

var divLista;
var idBtnLista;
var btnLista;

var debug;
var applicationPath;
var linhaSel = -1;

// Indica se tem alguma consulta pendente para ser executada
var isFilaPreenchida = false;
// Essa variável impede a exibição da lista
var clicouOk = false;
var lista = new Array();

var emptyText = "Informe a ação";

function SetVariaveisPanel1(idTbAtivoCodigo, idTbProcura, idBtnOk) {
    tbAtivoCodigo = document.getElementById(idTbAtivoCodigo);
    tbProcura = document.getElementById(idTbProcura);
    btnOk = document.getElementById(idBtnOk);
}

function SetVariaveisPanel2(idDivLista, _idBtnLista, idDebug) {
    divLista = document.getElementById(idDivLista);
    idBtnLista = _idBtnLista;
    btnLista = document.getElementById(idBtnLista);
    debug = document.getElementById(idDebug);
}

function SetVariaveis(idDebug, _applicationPath) {
    debug = document.getElementById(idDebug);
    applicationPath = _applicationPath;
}

function EscondeLista() {
    divLista.style.display = 'none';   
}

function escondeDiv(idDiv) {
    var div = document.getElementById(idDiv);
    div.style.display = 'none';
}

function OnBlur(tbProcura, idDivLista) {
    setTimeout("escondeDiv('" + idDivLista + "');", 1000);
    if (tbProcura.value == '')
        tbProcura.value = emptyText;
}

function ClicouOk() {
    clicouOk = true;
}

function LimpaTexto() {
    // Se clicou ok não limpa, pois vai fazer postback e pesquisar pelo texto informado
    if (clicouOk)
        return;

    if ((tbProcura.value == '')) 
        tbProcura.value = emptyText;
}

function OnFocus(tbProcura, idTbAtivoCodigo, idTbProcura,
    idBtnOk, idDebug, applicationPath, idDivLista, idBtnLista, _emptyText) {
    SetVariaveisPanel1(idTbAtivoCodigo, idTbProcura, idBtnOk);
    SetVariaveisPanel2(idDivLista, idBtnLista, idDebug);
    SetVariaveis(idDebug, applicationPath);
    emptyText = _emptyText;
    AjustaTexto(tbProcura);
}

function GetKey(e) {
    if (window.event) // IE
    {
        return e.keyCode;
    }
    else if (e.which) // Netscape/Firefox/Opera
    {
        return e.which;
    }
    else
        return -1;
}

function OnKeyPress(e) {
    var keynum = GetKey(e);
   
    //debug.innerHTML = "keypress: " + keynum;
    if (keynum == 13) {
        // Pega o código da linha selecionada se existir
        ClicaOk(linhaSel);
        return false;
    }
    else
        return true;

}

function ClicaOk(nroLinha) {
    if (divLista)
        divLista.style.display = 'none';
        
    if (nroLinha > -1) {
        tbAtivoCodigo.value = lista[nroLinha][0];
        tbProcura.value = lista[nroLinha][1];
    }
    btnOk.click();
}

function OnKeyUp(tbProcura, e, idBtnLista, idTbNroRegistros, idDivLista) {
    AjustaTexto(tbProcura);
    //debug.innerHTML = tbProcura.value;

    var keynum = GetKey(e);
    //debug.innerHTML = "keyUp: " + keynum;

    var tbNroRegistros = document.getElementById(idTbNroRegistros);
    var nroRegistros = parseInt(tbNroRegistros.value);
    if (keynum == 38) {
        // Tecla para cima
        if (linhaSel > -1) {
            oui(applicationPath);
            linhaSel--;
            if (linhaSel > -1)
                ovi(applicationPath);
        }
        //debug.innerHTML = linhaSel;
        return;
    }

    if (keynum == 40) {
        // Tecla para baixo
        if (linhaSel < nroRegistros - 1) {
            if (linhaSel > -1)
                oui(applicationPath);

            linhaSel++;
            ovi(applicationPath);
        }
        //debug.innerHTML = linhaSel;
        return;
    }

    if (keynum == 27) {
        // Tecla Esc, esconde div
        EscondeLista();
        return;
    }

    if (keynum == 13) {
        return;
    }

    if (tbProcura.value.length > 1) {
        // Executa a procura se passou de 2 caracteres digitados
        InsereFilaExecucao();
    }
}

function DoPostBack() {
    __doPostBack(idBtnLista, tbProcura.value);
}

function InsereFilaExecucao() {
    if (!isFilaPreenchida) {
        // A fila não está preenchida, então preenche e coloca o timeout para executar depois de 300ms
        isFilaPreenchida = true;
        setTimeout("ClicaBtnLista()", 300);
    }   
}

function ClicaBtnLista() {
    // Se a fila estiver preenchida, executa a consulta
    if (isFilaPreenchida) {
        if (Page.get_isInAsyncPostBack()) {
            // Já tem uma consulta em andamento, então executa novamente em 100ms
            setTimeout("ClicaBtnLista()", 300);
        }
        else {
            // Não tem consulta executando, esvazia a fila e executa a consulta
            isFilaPreenchida = false;
            isPesquisando = true;
            var btnLista = document.getElementById(idBtnLista);
            btnLista.click();
        }
    }
}

var Page = Sys.WebForms.PageRequestManager.getInstance();

Page.add_initializeRequest(OnInitializeRequest);

function OnInitializeRequest(sender, args) {
    var postBackElement = args.get_postBackElement();

    if (Page.get_isInAsyncPostBack() && args.get_postBackElement().id == idBtnLista) {
        alert('Processando... Por favor, aguarde.');
        args.set_cancel(true);
    }

}

function AjustaTexto(tbProcura) {
    var pos = tbProcura.value.indexOf(emptyText);
    if (pos >= 0) {
        if (pos == 0) {
            tbProcura.value = "";
        }
        else 
        {
            tbProcura.value = tbProcura.value.substring(0, pos);
        }
    }   
}

function GetTrListaSel() {
    var trLista = document.getElementsByName("trLista" + linhaSel, "tr");
    if (trLista.length != 0)
        return trLista[0];
}

if (typeof (window.external) != 'undefined') {
    //yes, this is evil browser sniffing, but only IE has this bug
    document.getElementsByName = function(name, tag) {
        if (!tag) {
            tag = '*';
        }
        var elems = document.getElementsByTagName(tag);
        var res = []
        for (var i = 0; i < elems.length; i++) {
            att = elems[i].getAttribute('name');
            if (att == name) {
                res.push(elems[i]);
            }
        }
        return res;
    }
}

// Clique na linha selecionada
function cl(nroLinha) {
    linhaSel = nroLinha;
    ClicaOk(nroLinha);
}

function ovi(applicationPath) {
    ov(GetTrListaSel(), applicationPath, linhaSel);
}

function oui(applicationPath) {
    ou(GetTrListaSel());
}

// Marca a linha
function ov(sender, applicationPath, nroLinha) {
    if (linhaSel > -1)
        oui(applicationPath);

    linhaSel = nroLinha;

    if (sender.style)
    {
      sender.style.cursor = "cursor";
      sender.style.cursor = "pointer";
      sender.style.backgroundRepeat = "repeat-x";
      sender.style.backgroundPosition = "center"
      sender.style.backgroundImage = "url(" + applicationPath + "Css/RadComboBox/rcbDropDownBg.gif)";
    }
}

// Desmarca a linha
function ou(sender) {
    if (sender != undefined) {
        if (sender.style)
            sender.style.backgroundImage = "";
    }
}

// Evento de mouseout da linha
function mou(sender) {
    linhaSel = -1;
    ou(sender);
}

function InsereDebug(texto) {
    debug.innerHTML += texto;
}