
var lst = Array();
var lst_zindex = 1000;
var lst_erro = 'Uso incorreto da lista! Nome=';
function lst_sel(nome,saindo){
   var lstI = -1;
   var i = 0;
   var I = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('2.'+lst_erro+nome);
      return false;
   }
   var L = lst[lstI][1];
   var E = lst[lstI][2];
   var EI = lst[lstI][3];
   var DV = lst[lstI][4];
   I = L.selectedIndex ;
   if (I<0) I=0;
   
   if (!saindo){
        t = setTimeout('lst_foco_no_edit("'+nome+'");',300);
   }
   if (L.options[I]){
       E.value  = L.options[I].text;
       EI.value = L.options[I].value;
   }
   DV.style.visibility = 'hidden';
   enter_submit=1;
}
function lst_start(nome,url,valor,texto,tam){
    var sai='';
    // sai += '<input type=button value="S" onclick="javascript:s()">' ;
    sai += '<div style="position:relative;z-index:'+lst_zindex.toString()+'">' ;
    sai += '<input type=text id="' + nome + '_edit" name="' + nome + '_edit" autocomplete="off"  value="' + texto + '" size="' + tam + '" onkeyup="javascript:lst_ku(event,'+"'"+nome+"'"+');" onkeypress="javascript:lst_kp(event,'+"'"+nome+"'"+');" onblur="javascript:lst_esconde('+"'"+nome+"'"+');"><br>';
    sai += '<div id='+nome+'_div style="visibility:hidden;position:absolute;left=0;top=20;z-index:1000;">';
    sai += '<select style="border:0px;" size=10 id="'+nome+'_lista" onchange="lst_sel('+"'"+nome+"'"+')" ></select></div></div>';
    sai += '<input type=hidden id="'+nome+'" name="'+nome+'" value="'+valor+'">';
    sai += '<iframe id="'+nome+'_frame" style="visibility:hidden;position:absolute;width:400px;height:200px;"></iframe>';
    document.write(sai);
    
    lst_zindex = lst_zindex - 1;
    var i = lst.length;
    lst[i] = Array(8);
    lst[i][0] = nome;
    lst[i][1] = document.getElementById(nome+'_lista');
    lst[i][2] = document.getElementById(nome+'_edit');
    lst[i][3] = document.getElementById(nome);
    lst[i][4] = document.getElementById(nome+'_div');
    lst[i][5] = document.getElementById(nome+'_frame');
    lst[i][6] = url;
    lst[i][7] = window.onkeydown; // evento da janela
}
function lst_limpa(nome){
   var lstI = -1;
   var i = 0;
   var I = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('1.'+lst_erro+nome);
      return false;
   }
   var L = lst[lstI][1];
   for (I=L.length-1;I>=0;I--) L.remove(I);
   return L;
}
function lst_adiciona(L,valor,texto){
    var y=document.createElement("option");
    y.value=valor;
    y.text=texto;
    try{
       L.add(y,null);
    } 
    catch(ex){
       L.add(y);
    }
}
function lst_ku(event,nome){
   var lstI = -1;
   var i = 0;
   var I = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('2.'+lst_erro+nome);
      return false;
   }
   var L = lst[lstI][1];
   var E = lst[lstI][2];
   var EI = lst[lstI][3];
   var DV = lst[lstI][4];
   var WE = lst[lstI][7]; // document.keydown

   // up
   if (event.keyCode==38) {
       I = L.selectedIndex ;
       if (I>0) L.selectedIndex = I-1;
       lst_atualiza_edit(nome);
   }
   // down
   if (event.keyCode==40) {
       I = L.selectedIndex ;
       if (I<(L.length-1)) L.selectedIndex = L.selectedIndex+1;
       lst_atualiza_edit(nome);
   }
   // enter
   if (event.keyCode==13) {
       I = L.selectedIndex ;
       if (I >= 0) {
           t = setTimeout('lst_foco_no_edit("'+nome+'");',300);
           E.value  = L.options[I].text;
           EI.value = L.options[I].value;
           DV.style.visibility = 'hidden';
           enter_submit=1;
           //document.onkeydown=WE?WE:function(e){};
       }
       if (window.event){
           window.event.returnValue = false;
           window.event.keyCode = 0;
       } else {
           enter_submit=1;
            //document.onkeydown(event);
       }
       return false;
   }
   // backspace ou delete
   if ((event.keyCode==8) || (event.keyCode==46)) {
       setTimeout('lst_kc("'+nome+'",1)', 50);
   }
   return true;
}
function lst_foco_no_edit(nome){
   var lstI = -1;
   var i = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('3.'+lst_erro+nome);
      return false;
   }
   var E = lst[lstI][2];
   E.focus();
}
function lst_kp(event,nome){
   // seleciona o ítem na lista
   if (event.keyCode!=38 && event.keyCode!=40){
        setTimeout('lst_kc("'+nome+'",0)', 10);
   }
}
function lst_esconde(nome){
   // seleciona o ítem na lista
   var lstI = -1;
   var i = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('4.'+lst_erro+nome);
      return false;
   }
   var L = lst[lstI][1];
   var E = lst[lstI][2];
   var EI = lst[lstI][3];
   var DV = lst[lstI][4];
   var WE = lst[lstI][7]; // document.keydown
   if (enter_submit==0)
      t = setTimeout('lst_foco_no_edit("'+nome+'");',300);
   DV.style.visibility = 'hidden';
   enter_submit = 1;
   lst_sel(nome,1);
   return true;
}
function s(){
   var E = lst[0][2];
   var EI = lst[0][3];
   alert(E.value+'='+EI.value);
}
function lst_kc(nome,teste){
   // seleciona o ítem na lista
   var lstI = -1;
   var i = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('5.'+lst_erro+nome);
      return false;
   }
   var E = lst[lstI][2];
   var FR;
   var url = lst[lstI][6];

   FR = document.getElementById(nome+'_frame');

   FR.src = url + '&busca=' + E.value + '&date=' + Date().toString() ;
   return true;
}

function lst_atualiza(nome,teste){
   // seleciona o ítem na lista
   var lstI = -1;
   var i = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('6.'+lst_erro+nome);
      return false;
   }
   var L = lst[lstI][1];
   var E = lst[lstI][2];
   var EI = lst[lstI][3];
   var DV = lst[lstI][4];
   var WE = lst[lstI][7]; // windows evento keydown

   if (E.value.length>0 && L.length > 0){
       //p = E.style.top;
       //DV.style.top  = ( p + 10  );
       //DV.style.left = E.style.left ;
       
       DV.style.visibility = 'visible';
       enter_submit=0;
       var DIV = DV.innerHTML;
       document.onkeydown=lst_bloquear_enter;
       var V='';
       var T=0;
       var Isel = -1;
       var I = 0;

       for (I=0;I<L.length;I++){
          V = E.value.toUpperCase() ;
          T = V.length ;
          if (L.options[I].text.substring(0,T).toUpperCase()==V){
              Isel = I;
              break;
          }
       }
       
       L.selectedIndex = Isel;
       if (Isel>=0) {
              EI.value = L.options[Isel].value;
       } else {
              EI.value = 0;
       }
   } else {
       L.selectedIndex = -1;
       EI.value = 0 ;
       DV.style.visibility = 'hidden';
       enter_submit = 1;
       //document.onkeydown=WE?WE:function(e){};
   }
   return true;
}
function lst_oc(event){
   lstI = -1;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('7.'+lst_erro+nome);
      return false;
   }
   var L = lst[lstI][1];
   var E = lst[lstI][2];
   var EI = lst[lstI][3];
   var DV = lst[lstI][4];
   var WE = lst[lstI][7]; // document.keydown
   var I = L.selectedIndex ;
   if (I >= 0) {
       E.value  = L.options[I].text;
       EI.value = L.options[I].value;
       DV.style.visibility = 'hidden';
       enter_submit=1;
       //document.onkeydown=WE?WE:function(e){};
   }
   return false;
}
function lst_atualiza_edit(nome){
   // seleciona o ítem na lista
   var lstI = -1;
   var i = 0;
   if (lst.length>0) for (i=0;i<lst.length;i++) if (lst[i][0]==nome) lstI = i ;
   if (lstI<0) {
      alert('8.'+lst_erro+nome);
      return false;
   }
   
   var L = lst[lstI][1];
   if (L.length > 0 && L.selectedIndex >=0 ){
       lst[lstI][3].value = L.options[L.selectedIndex].value;
       lst[lstI][2].value = L.options[L.selectedIndex].text;
   }
   return true;
}
function lst_bloquear_enter(e)
{
    if (!e) e = window.event;
    if (e.keycode){
        if (e.keyCode==13){
            e.keyCode=0;
            e.returnValue=false;
        }
    }
   return true;
}
//lst_start('cidade','?inc=lista&nome=cidade&dados=local_cidade,id,nome,uf,pais&','0','',200);
//lst_start('cli','?inc=lista&nome=cli&dados=sc_pessoa,id,nome&','0','',400);