// =========================================================================================
// /bbsoft2//bbcgi/bibliojs1.js
// =========================================================================================
//               Copyright (C) 2001 - BIBILIOsoft, Lda
// -----------------------------------------------------------------------------------------
// Este módulo contem várias funções em javascript para utilização no Iterface WWW
// 
// Não é autorizada a utilização destas rotinas noutros produtos. 
// Esta é uma mensagem especial para a equipa que se dedica a copiar o trabalho dos outros, para 
// mostrarem trabalho na instituição (pública) onde trabalham. Esta é uma mensagem para 
// um (e mais alguns amigos) senhores de baixo nível (moral e ético) conhecido na praça.!
// =========================================================================================

function ConvUp(linha_in)
{
  var i=0;
  var dim=0;
  var tmp="",car,linha_out="",tmpcar="";
  tmp=linha_in.toUpperCase();
 //var lstcar1="Á  À  Â  Ã  Ä  É  È  Ê  Ë  Í  Ì  Ï  Î  Ó  Ò  Õ  Ô  Ö  Ú  Ù  Ü  Ç  Û  ã  õ  â  ê  î  ô  û  á  é  í  ó  ú  à  è  ì  ò  ù  ä  ë  ï  ö  ü  Ä  Ë  Ö  Ü  ç  Æ  ý  Ý";
  var lstcar1="%C1%C0%C2%C3%C4%C9%C8%CA%CB%CD%CC%CF%CE%D3%D2%D5%D4%D6%DA%D9%DC%C7%DB%E3%F5%E2%EA%EE%F4%FB%E1%E9%ED%F3%FA%E0%E8%EC%F2%F9%E4%EB%EF%F6%FC%C4%CB%D6%DC%E7%C6%FD%DD";
  var lstcar2="A  A  A  A  A  E  E  E  E  I  I  I  I  O  O  O  O  O  U  U  U  C  U  A  O  A  E  I  O  U  A  E  I  O  U  A  E  I  O  U  A  E  I  O  U  A  E  O  U  C  A  Y  Y";
  dim=tmp.length;
  for(i=0;i<dim;i++)
     {
       tmpcar=tmp.charAt(i);
       car=escape(tmp.charAt(i));
       if (car.lastIndexOf("%")>=0) {p=lstcar1.lastIndexOf(car)} else {p=-1};
       car=(p>=0)?(lstcar2.charAt(p)):tmpcar;
       linha_out=unescape(linha_out + car);
     }
  return(linha_out);
}

// ----------------------------
function ValidaData(theForm)
{
  if (theForm.DP.value.length > 4)
  {
    alert("Deve digitar 4 caracteres para representar a data.");
    theForm.DP.focus();
    return (false);
  }
  var checkOK = "0123456789";
  var checkStr = theForm.DP.value;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    allNum += ch;
  }
  if (!allValid)
  {
    alert("Para representar a data digite apenas números.\nEx:2001");
    theForm.DP.focus();
    return (false);
  }
  var chkVal = allNum;
  var prsVal = parseInt(allNum);
  if (chkVal != "" && !(prsVal >= "1000" && prsVal <= "2010"))
  {
    alert("A data indicada deve estar entre 1000 e 2010.");
    theForm.DP.focus();
    return (false);
  }
}

// ----------------------------
function ChkTermo(form)
{
  var i=0;
  var x="";
  for(i=0;i<11;i++)
     {
       if(form.PRFX.options[i].selected==true)
          { 
           x=form.PRFX.options[i].value+" ";
           if (x=="PAL "){x=""};
          }
     }
  form.expressao.value=ConvUp(x+form.termo.value);
}

// ----------------------------
function TrataCDU(linha_in)
{
// Limpa da CDU os auxiliares
  var i=0;
  var linha_out=linha_in;
  lista=new Array("-",":","/","(",")","#","*","%2B","+","=","\"","&#34;","&quot;","&#43;");
  for(i=0;i<14;i++)
     {
       p=linha_in.indexOf(lista[i]);
       if (p>=0) {linha_out=linha_in.substring(0,p);break;};
     }
return(linha_out);
}

// ----------------------------
function ChkMeses(form)
{
  var i,rb,data,ano,mes;
  data=new Date();
  ano=data.getYear();
  ano=(ano<2000)?"19"+ano:ano; 
  mes=data.getMonth();
  for(i=0;i<12;i++) {if(form.R1[i].checked=="1") {rb=form.R1[i].value}}
  if (rb==null) {rb=mes+1};
  var prsVal = parseInt(rb);
  rb=(prsVal<10)?"0"+rb:rb;
  form.expressao.value="DT "+ano+rb+"$";
}

// ----------------------------
function ChkDP(form)
{
  var data,ano,dp;
  data=new Date();
  ano=data.getYear();
  ano=(ano<2000)?"19"+ano:ano; 
  dp=form.DP.value;
  if (dp==""){dp=ano} else {ano=""};
  form.expressao.value="(TDOC AM)" + " AND "+"(DP "+dp+ano+")";
}

// ----------------------------
function FindReplace(linha_in,car1,car2)
{
  var i=0;
  var dim=0;
  var car,linha_out="";
  dim=linha_in.length;
  for(i=0;i<dim;i++)
     {
       car=linha_in.charAt(i);
       if (car==car1) {car=car2};
       linha_out=linha_out + car;
     }
  return(linha_out);
}
// ----------------------------
function FindRepChar(linha_in,car1,car2)
{
  var i=0;
  var dim=0;
  var car,tmp=linha_in,linha_out="";
  dim=linha_in.length;
  for(i=0;i<dim;i++)
     {
       car=tmp.charAt(i);
       if (car==car1) {car=car2};
       linha_out=linha_out + car;
     }
  return(linha_out);
}

// ----------------------------
function FindReplace_2(linha,str1,str2)
{
   var s1,s2;
   var linha_in=linha;
   var c=linha_in.length;
   var p=0;

   while ((p>-1))
      {
       p=linha_in.substring(0,c).lastIndexOf(str1);
       if (p>=0)
           {
            s1=linha_in.substring(0,p);
            s2=linha_in.substring(p+str1.length,linha_in.length);
            linha_in=s1+str2+s2;
            c=p-1;
           };
      }
  return linha_in;    
}

// ----------------------------
function Dim_Campo(Campo)
{
 var msg01="Deve digitar no mínimo 2 caracteres para cada termo indicado.";
 var dim=Campo.length;
 if (dim<2)
    {
      alert(msg01);
      return(false);
    } else return(true);
}

// ----------------------------
function ChkChars(termo)
{
  var i=0;
  var sep="";
  termo=termo.toUpperCase();
// Para bases em que os auxiliares da CDU sao limpos do lexico. Retirar o comentario
//  if (termo.substring(0,4)=="CDU ") {termo=TrataCDU(termo);}
  lista=new Array("+","*","^"," AND "," OR "," NOT "," AND NOT "," (F) "," (G) ","(",")");
  for (i=0;i<11;i++)
      {
        if (termo.indexOf(lista[i])>=0)
           {
            sep="\"";
            break;
           }
      }
  return (sep+termo+sep);
}

// ----------------------------
function ChkChars_2(texto)
{
  var sep="",termo=texto;
  termo=termo.toUpperCase();
  lista=new Array("+","%2B","*","^"," AND "," OR "," NOT "," AND NOT ","(",")");
  for (i=0;i<12;i++)
      {
       if (termo.indexOf(lista[i])>=0)
          {
           sep="\"";
           break;
          }
       }
  return(sep+termo+sep);
}

// ----------------------------
function LimpaMais(linha_in)
{
var i=0;
var dim=linha_in.length;
var linha_out="",car="";
for (i=0;i<dim;i++)
   {
     car=linha_in.charAt(i);
     if (car=="+") car="%2B";
     if (car==" ") car="%20";
     linha_out=linha_out + car;
   }
return(linha_out);
}

// ----------------------------
function ValidaExpress(form)
{
  _NTermos=10;  // termos
  _LTermos=7;   // linhas com termos
  _OP = new Array(_LTermos);
  _PRFX = new Array(_LTermos);
  _Termo = new Array(_LTermos);
  var cont=0,i=0,t=0,_tdoc="",_dp="",part1="",part2="";tmp="";
  if (form.Termo1.value!="")
     {
       form.Termo1.focus();
       if (Dim_Campo(form.Termo1.value)==false) return(false);
       t=0;
       for(i=0;i<_NTermos;i++){if(form.PRFX1.options[i].selected==true){ _PRFX[t]=form.PRFX1.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR1.value=(form.TR1.checked==true)?form.TR1.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo1.value+form.TR1.value);
     }
  if (form.Termo2.value!="")
     {
       form.Termo2.focus();
       if (Dim_Campo(form.Termo2.value)==false) return(false);
       t=1;
       for(i=0;i<5;i++){if(form.OP2.options[i].selected==true)  { _OP[t]=form.OP2.options[i].value;}}
       for(i=0;i<_NTermos;i++){if(form.PRFX2.options[i].selected==true){ _PRFX[t]=form.PRFX2.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR2.value=(form.TR2.checked==true)?form.TR2.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo2.value+form.TR2.value);
     }
  if (form.Termo3.value!="")
     {
       form.Termo3.focus();
       if (Dim_Campo(form.Termo3.value)==false) return(false);
       t=2;
       for(i=0;i<5;i++){if(form.OP3.options[i].selected==true)  { _OP[t]=form.OP3.options[i].value;}}
       for(i=0;i<_NTermos;i++){if(form.PRFX3.options[i].selected==true){ _PRFX[t]=form.PRFX3.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR3.value=(form.TR3.checked==true)?form.TR3.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo3.value+form.TR3.value);
     }
  if (form.Termo4.value!="")
     {
       form.Termo4.focus();
       if (Dim_Campo(form.Termo4.value)==false) return(false);
       t=3;
       for(i=0;i<5;i++){if(form.OP4.options[i].selected==true)  { _OP[t]=form.OP4.options[i].value;}}
       for(i=0;i<_NTermos;i++){if(form.PRFX4.options[i].selected==true){ _PRFX[t]=form.PRFX4.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR4.value=(form.TR4.checked==true)?form.TR4.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo4.value+form.TR4.value);
     }
  if (form.Termo5.value!="")
     {
       form.Termo5.focus();
       if (Dim_Campo(form.Termo5.value)==false) return(false);
       t=4;
       for(i=0;i<5;i++){if(form.OP5.options[i].selected==true)  { _OP[t]=form.OP5.options[i].value;}}
       for(i=0;i<_NTermos;i++){if(form.PRFX5.options[i].selected==true){ _PRFX[t]=form.PRFX5.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR5.value=(form.TR5.checked==true)?form.TR5.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo5.value+form.TR5.value);
     }
  if (form.Termo6.value!="")
     {
       form.Termo6.focus();
       if (Dim_Campo(form.Termo6.value)==false) return(false);
       t=5;
       for(i=0;i<5;i++){if(form.OP6.options[i].selected==true)  { _OP[t]=form.OP6.options[i].value;}}
       for(i=0;i<_NTermos;i++){if(form.PRFX6.options[i].selected==true){ _PRFX[t]=form.PRFX6.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR6.value=(form.TR6.checked==true)?form.TR6.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo6.value+form.TR6.value);
     }
  if (form.Termo7.value!="")
     {
       form.Termo7.focus();
       if (Dim_Campo(form.Termo7.value)==false) return(false);
       t=6;
       for(i=0;i<5;i++){if(form.OP7.options[i].selected==true)  { _OP[t]=form.OP7.options[i].value;}}
       for(i=0;i<_NTermos;i++){if(form.PRFX7.options[i].selected==true){ _PRFX[t]=form.PRFX7.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR7.value=(form.TR7.checked==true)?form.TR7.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo7.value+form.TR7.value);
     }
  part1="";
  for (i=0;i<_NTermos-1;i++)
    {
     if (_Termo[i]!=null)
        {
         cont++;
         part1=(part1!="")?(part1+" "+_OP[i]+" "+_Termo[i]):_Termo[i];
        }
    }
  part2="";
  for(i=0;i<4;i++)
     {
       if(form.TDOC.options[i].selected==true)
          { 
           _tdoc=form.TDOC.options[i].value;    // Tipo de documento
           _tdoc=(_tdoc=="XX")?"":("TDOC " + _tdoc + " ");
          }
     }
  _dp=(form.DP.value!="")?("DP " + form.DP.value):"";  // Data de publicação
  part2=(_tdoc!="" && _dp!="")?(_tdoc + "AND " + _dp):(_tdoc+_dp);
  tmp=ConvUp((part1!="" && part2!="")?("(" + part1 + ") AND " + "("+part2+")"):part1+part2);
  if (tmp=="")
     {  
       alert("ATENÇÃO! Não existem termos para pesquisa!\n\nDeve preencher pelo menos um dos campos indicados\n");  
       return(false);
     } else 
     {
      form.expressao.value=tmp;
      return(true);
     }
}

// ----------------------------
function ValidaExpress_3(form)
{
//Pesqu00.htm 

  _OP = new Array(1);
  _PRFX = new Array(1);
  _Termo = new Array(1);
  var cont=0,i=0,t=0,_tdoc="",_dp="",part1="",part2="";tmp="";temp="";

  for(i=0;i<4;i++)
     {
       if(form.TDOC.options[i].selected==true)
          { 
           _tdoc=form.TDOC.options[i].value;    // Tipo de documento
           _tdoc=(_tdoc=="XX")?"":("TDOC " + _tdoc + " ");
          }
     }

  _dp=(form.DP.value!="")?("DP " + form.DP.value):"";  // Data de publicação
  temp=(_tdoc!="" && _dp!="")?(_tdoc + "AND " + _dp):(_tdoc+_dp);

  part1=form.termo.value;
//--------------------------------------
// trata o termo (espaços e operadores)
//--------------------------------------
  part1=FindReplace_2(part1,'  ',' ');
  part1=FindReplace_2(part1,' ',(form.OP[0].checked)?(form.OP[0].value):form.OP[1].value);
//--------------------------------------

  tmp=ConvUp((part1!="" && temp!="")?("("+temp + ") AND (" + part1 + ")"):temp+part1);
  if (tmp=="")
     {  
       alert("ATENÇÃO! Não existem termos para pesquisa!\n\nDeve definir uma expressão de pesquisa.\nPara mais informações consulte o guia do utilizador.");  
       return(false);
     } else 
     { 
       form.expressao.value=tmp;
       return(true);
     }


  if (form.Termo1.value!="")
     {
       form.Termo1.focus();
       if (Dim_Campo(form.Termo1.value)==false) return(false);
       t=0;
       for(i=0;i<10;i++){if(form.PRFX1.options[i].selected==true){ _PRFX[t]=form.PRFX1.options[i].value;_PRFX[t]=(_PRFX[t]=="PAL")?"":(_PRFX[t]+" ");}}
       form.TR1.value=(form.TR1.checked==true)?form.TR1.value:"";
       _Termo[t]=ChkChars(_PRFX[t]+form.Termo1.value+form.TR1.value);
     }
  part1="";
  for(i=0;i<4;i++)
     {
       if(form.TDOC.options[i].selected==true)
          { 
           _tdoc=form.TDOC.options[i].value;    // Tipo de documento
           _tdoc=(_tdoc=="XX")?"":("TDOC " + _tdoc);
          }
     }
  _dp=(form.DP.value!="")?("DP " + form.DP.value):"";  // Data de publicação
  temp=(_tdoc!="" && _dp!="")?(_tdoc + " AND " + _dp):(_tdoc+_dp);

  for (i=0;i<1;i++)
     {
      if (_Termo[i]!=null)
         {
          cont++;
          part1=(part1!="")?(part1+" "+_OP[i]+" "+_Termo[i]):_Termo[i];
         }
     }



  tmp=ConvUp((part1!="" && temp!="")?("("+part1 +")" + " AND " + "("+temp+")"):(part1));

  if (tmp=="")
     {  
       alert("ATENÇÃO! Não existem termos para pesquisa!\n\nDeve preencher pelo menos um dos campos indicados\n");  
       return(false);
     } else 
     {
      form.expressao.value=tmp;
      return(true);
     }
}
// ----------------------------
function ValidaExpress_4(form)
{
  var i=0;
  var trm="";
  var _tdoc="";
  var _dp="";
  var temp="",tmp="";
  for(i=0;i<4;i++)
     {
       if(form.TDOC.options[i].selected==true)
          { 
           _tdoc=form.TDOC.options[i].value;    // Tipo de documento
           _tdoc=(_tdoc=="XX")?"":("TDOC " + _tdoc + " ");
          }
     }
  _dp=(form.DP.value!="")?("DP " + form.DP.value):"";  // Data de publicação
  temp=(_tdoc!="" && _dp!="")?(_tdoc + " AND " + _dp):(_tdoc+_dp);if (temp!="") temp="(" + temp +")";
  trm=form.termo.value;if (trm!="") trm="(" + trm +")";
  tmp=ConvUp((trm!="" && temp!="")?(temp + " AND " + trm):temp+trm);
  if (tmp=="")
     {  
       alert("ATENÇÃO! Não existem termos para pesquisa!\n\nDeve definir uma expressão de pesquisa.\nPara mais informações consulte o guia do utilizador.");  
       return(false);
     } else 
     { 
       form.expressao.value=tmp;
       return(true);
     }
}

// ----------------------------
function findInPage(str)
{
   var NS4 = (document.layers);
   var IE4 = (document.all);
   var win = this;
   var n   = 0;
   var txt, i, found;

   if (str == "") return false;
   if (NS4) 
      {if (!win.find(str))
          while(win.find(str, false, true)) n++;
       else
          n++;
       if (n == 0) lert("Não foi encontrado o texto "+str+" nesta página");
      }
   if (IE4) 
      {
       txt = win.document.body.createTextRange();
       for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) 
           {
            txt.moveStart("character", 1);
            txt.moveEnd("textedit");
           }
   if (found)  
      {
       txt.moveStart("character", -1);
       txt.findText(str);
       txt.select();
       txt.scrollIntoView();
       n++;
      }
      else  
      { 
       if (n > 0) {n = 0; findInPage(str);
          }
          else alert("Não foi encontrado o texto "+str+" nesta página");
          }
      }
   return false;
}
// ----------------------------
function ChkVer()
{
  if (((navigator.appName == "Netscape") && (navigator.appVersion.substring(0,4) < "5.00")) ||
     ((navigator.appName == "Microsoft Internet Explorer") && (navigator.appVersion.substring(0,1) < "4")))
     {
      return(false);
     } else return(true);
}
// -----------------------------

function ShowExi(base,formato,mfn)
{
 var texto = "Informação detalhada acerca das existências";
 var loc = window.location.protocol+window.location.hostname+"/bbsoft2/bbcgi/bbwww.exe/[in=pesqexi.in]?base="+base+"&formato="+formato+"&lim_inicio=1&limites=25&from="+mfn+"&to="+mfn;
 popup=window.open("","ID","toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,width=500,height=250,left=175,top=200");
 ndoc=popup.document;
 ndoc.location.href=loc;
}

// -----------------------------
function MailIt(base,formato,express,mfn1,limites)
{
 var texto = "Envio do resultado de uma pesquisa por Email";
 express=FindRepChar(express,'+','OR');
 var loc = window.location.protocol+window.location.hostname+"/bbsoft2/bbcgi/bbwww.exe/[in=mailit.in]?base="+base+"&formato="+formato+"&expressao="+express+"&lim_inicio="+mfn1+"&limites="+limites;
 popup=window.open("","ID","toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=no,width=520,height=320,left=150,top=110");
 ndoc=popup.document;
 ndoc.location.href=loc;
}

// -----------------------------
function ListaLexico(base,termo_ini,limites)
{

 var texto = "Lista de termos pesquisáveis";
 var loc = window.location.protocol+"//"+window.location.hostname+"/bbsoft2/bbcgi/bbwww.exe/[in=lstlex.in]?base="+base+"&formato0=lstlex&expressao=AU&lim_inicio=1&limites=1000";
 popup=window.open("","ID","toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=no,width=400,height=500,left=150,top=100");
 ndoc=popup.document;
 ndoc.location.href=loc;
}
