Newsgroup: it.comp.lang.javascript
Titolo: aiuto per compatibilita' con NN

Salve!
Ho creato un programmino per la gestione di un simil-database, piuttosto
lungo.
Il problema e' che non riesco (ne' so come fare) a renderlo compatibile con
NN.
Se qualcuno mi puo' aiutare commento e posto il codice.
ciao
enrico

Il Thu, 15 Feb 2001 17:26:20 GMT, enricų bono ha scritto.....

Beh, possiamo provarci.
Prova a postarlo e vediamo se e come vengono spezzate le linee, altrimenti io 
mi candido e ti autorizzo a mandarmi il materiale in e-mail.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
               Nessun traguardo č abbastanza lontano.
------------------------------------------------------------------------

OK, ci Sto troppo dentro (come dice Capsula).
Inizio a Commentare (come dice Ciotti)

Ok!!!
Senza accapo automatico (e con i commenti) sono appena 555 linee!!!
Non so proprio come ringrziarvi!!
Il tutto è composto da una pagina che specifica 2 frame:
 madre (che sta sopra e che contiene il codice che scrivo dopo)
 figlio (che sta sotto, non contiene niente e visualizzerà i risultati in
una tabellona)
Il programma serve per mostrare una sorta di database, prendendo i dati da
dei record (definiti in fondo alla pagina) e costruendo una tabella in
"figlio". Ogni record mostra un documento; per ogni record vengono mostrati
nella tabella la data del documento, il titolo+collegamento href, il tipo,
e, se c'è la possibilità, il collegamento per il download via ftp, in vari
formati (.doc, .rtf, .zip, .pdf);
Al documento che sta dentro il frame madre (si chiama "ricerca_madre.htm" )
vengono passati minimo due parametri, con una stringa di ricerca (p.e.
"ricerca_madre.htm?par=vescovopar=lettera"; il programma prende questi due
parametri e costruisce i risultati.
Se vuoi vederlo al lavoro il link è:
 
www.diocesi.trapani.it/cerca.htm
, clicca su "cerca documenti";
Allora, inizio:
Il codice html che segue sta tutto nella pagina che va caricata nel frame
"madre";
<html>
<head>
 <title>Ricerca Documenti - Diocesi di Trapani</title>
  <LINK REL="StyleSheet" HREF="ricerca_madre.css" type="text/css">
</head>
<body>
<table width="571" height="70" cellspacing="0" cellpadding="0" border="1"
bgcolor="#cococo">
<tr><td colspan="7" background="barra_titolo.jpg"  BORDERCOLORDARK="#c0c0c0"
BORDERCOLORLIGHT="#c0c0c0" title="Ricerca di Documenti
Diocesi di Trapani
www.diocesi.trapani.it
"">
<img src="ico_cerca.gif" width=15 height=17 border=0 align="absmiddle"
alt="Ricerca di Documenti
Diocesi di Trapani
www.diocesi.trapani.it
"><span
style="font-family:sans-serif,verdana;font-size:12px;font-weight:bold;color:
white;position:relative;">
&nbsp;Ricerca Documenti</span><a href="aiuto/ricerca_aiuto.htm"
target="figlio"><img src="ico_help.gif" width=16 height=14 border=0
style="position:relative;top:2px;left:420px;" alt="Clicca per visualizzare
la guida per questa pagina"></a>
</td></tr>
<tr>
<form name="formTipo">
 <td colspan="3" valign="middle" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080" title="Scegli il tipo di documento che vuoi
ricercare"><nobr><img src="barretta.gif" width=7 height=26 border=0
align="absmiddle" style="cursor: move;"><span
style="font-family:sans-serif,verdana;font-size:12px;color:black;">&nbsp;<u>
S</u>cegli il tipo di documento:</span>
<!-- Questo select mostrerà un menu a tendina di tutte le categorie
mostrate, in modo da poter fare una ricerca dentro i primi risultati -->
<select name="selectTipo" size="1"
style="font-family:sans-serif,verdana;font-size:12px;font-style:normal;font-
weight:normal;color:black;" onchange="javascript:scegliTendina();">
  <option selected value="tutti">Tipo:
tutti&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 </select></nobr></td></form>
<td colspan="4" valign="middle" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080" title="Scegli il formato di documento che vuoi
scaricare"><img src="barretta.gif" width=7 height=26 border=0
align="absmiddle" style="cursor: move;"><span
style="font-family:sans-serif,verdana;font-size:12px;color:black;">&nbsp;<u>
D</u>ownload:</span></td>
 </tr>
<tr>
<!-- questi tasti servono per visualizzare i record in ordine
crescente/decrescente-->
 <td width="92" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080"><a href="javascript:ordinaRecord(0);"
title="Clicca per visualizzare i dati per Data, in ordine Temporale
Crescente/Decrescente">&nbsp;Data</a></td>
 <td width="278" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080"><a href="javascript:ordinaRecord(1);"
title="Clicca per visualizzare i dati per Titolo, in ordine Alfabetico
Crescente/Decrescente">&nbsp;Titolo</a></td>
 <td width="100" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080"><a href="javascript:ordinaRecord(8);"
title="Clicca per visualizzare i dati per Tipo, in ordine Alfabetico
Crescente/Decrescente">&nbsp;Tipo</a></td>
 <td width="25" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080"><a href="javascript:ordinaRecord(3);"
title="Clicca per visualizzare i file che sono scaricabili in formato Doc,
in ordine Crescente/Decrescente">&nbsp;Doc</a></td>
 <td width="23" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080"><a href="javascript:ordinaRecord(4);"
title="Clicca per visualizzare i file che sono scaricabili in formato Rtf,
in ordine Crescente/Decrescente">&nbsp;Rtf</a></td>
 <td width="23" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080"><a href="javascript:ordinaRecord(5);"
title="Clicca per visualizzare i file che sono scaricabili in formato Zip,
in ordine Crescente/Decrescente">&nbsp;Zip</a></td>
 <td width="23" BGCOLOR="#c0c0c0" BORDERCOLORDARK="white"
BORDERCOLORLIGHT="#808080"><a href="javascript:ordinaRecord(6);"
title="Clicca per visualizzare i file che sono scaricabili in formato Pdf,
in ordine Crescente/Decrescente">&nbsp;Pdf</a></td>
</tr>
</table>
<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript">
<!--
/********************
* Enrico Bono  *
*  [...]   *
*********************/
//array che contiene tutti i parametri passati alla ricerca
var par = new Array();
par = document.location.search.split('par=');
/*   vengono passati al minimo 2 parametri per volta, tipo
*    vescovo + lettera; oppure viene passato un solo parametro ("tutti")
*  ne caso in cui si vogliono visualizzare tutti i record*/
//il primo elemento dell'array par contiene l'intera Stringa search
par[0] = document.location.search;
if (!par[2])
 par[2]='';//inizializza il secondo parametro, se non c'è già
//questo e' son
var son = parent.figlio;
//dichiarazione delle variabili
var contaDoc,lung, ordinamento;
var crescente = true;
/* contaDoc è un contatore: quando mostro le ultime novità mi servono solo
gli ultimi
* 20 record in ordine di data ;
* crescente mi indica se la tabella è visualizzata in ordine crescente o
decresc.
* ordinamento è un intero che mi indica qual è l'ordinamento corrente (per
data, per tipo, per titolo...) */
//queste sono tutte var temporanee
//tranne eRec, che è l'array che contiene tutti i records
var view;
var temp='';
var tempArray, eRec = new Array();
var tempStringa = new Array;
var a = new Array(3);
var b = new Array(3);
var numero1 = numero2 =0;
//costante; serve per scaricare i files in ftp
var FTP = 'ftp:/'+'/
ftp.diocesi.trapani.it/pub/
';
//*********************************************
// <funzione nome="eaddRec()">
// Aggiunge un nuovo record all'array eRec
// Viene utilizzato alla fine del file,
// dove c'è anche una descrizione dei campi che vengono utilizzati
//*********************************************
function eaddRec(){
 //aggiungo un nuovo elemento, grande quanto tutto l'array di parametri
passati
 //
 var ii=eRec.length;
 eRec[ii] = new Array(arguments.length);
 //assegno tutte i dati del record a un array;
 //in pratica ho un array (eRec) di array
 for (eadr=0;eadr<arguments.length;eadr++){
  eRec[ii][eadr]=arguments[eadr];
  }
}
//*********************************************
// <funzione nome="costruisciHTMLTesta()">
// Servono quando costruisco la pagina che contiene la tabella (dentro il
frame figlio);
// Verranno richiamati, nell'ordine, le funzioni costruisciHTMLtesta(),
costruisciRigo(), costruisciHTMLcoda()
// ,secondo un ordine che mostro alla fine del file (dove c'è una specie di
MAIN)
//*********************************************
function costruisciHTMLTesta(){
 //ti ricordo che son = parent.figlio
 son.document.close();
 //qui NN mi da' un errore: dice che parent.figlio "has no property"!?!
 //ho provato ad aggiungere la riga qui sopra son.document.close(), non so
perchè;
 //cmq non funzia lo stesso
 //costruisco la testa della pagina html
 son.document.write('<html><head>');
 son.document.write('<title>Documenti - Risultato della ricerca:
'+par[2]+'</title>');
 top.document.title='Documenti - Risultato della ricerca: '+par[2];
 son.document.write('<LINK REL="StyleSheet" HREF="ricerca.css"
type="text/css">');
 son.document.write('</head><body>');
 //costruisco la testata della tabella
 son.document.write('<table border="0" cellpadding="1" cellspacing="1"
align="left" width="570">');
 //aggiorno la barra di stato
 window.status='RICERCA: Caricamento Dati';//Azzera il contatore
 //aggiorno il contatore
 contaDoc=0;
}
//*********************************************
// <funzione nome="costruisciRigo()">
// Costruisce ogni singolo rigo della tabella
// All'inizio faccio un test per vedere se il rigo deve essere mostrato
// (cioè se appartiene a una delle categorie richieste dai parametri
contenuti
// nell'array par[1], par[2], ...
//*********************************************
function costruisciRigo(kk){
//controllo di tutte le chiavi:
//se il record contiene una chiave che è = a un parametro passato al
programma,
//il che significa che il rigo deve essere mostrato, allora view=true (cioè
lo mostro)
 view= false;
 if ((par[1]=='tutti')||     //se il primo parametro passato al programma è
"tutti"
  (par[2]=='tutti')||     //o il secondo è "tutti" (viene dal menu a
tendina)
  ((eRec[kk][7]==par[1])&&((par[2]=='') //oppure il primo parametro é
verificato e il secondo è vuoto
   ||(par[2]=='tutti')||              //oppure il secondo è tutti
   (par[2]==eRec[kk][8]))))             //oppure la seconda chiave del
record verifica il secondo parametro...
   view=true;       //allora posso mostrare il rigo
 else{         //else cerco nelle chiavi successive di ogni record, se ci
sono
  cicloesterno:
   for (q=8;q<eRec[kk].length;q++)
    for (p=1;p<par.length;p++)
     if (eRec[kk][q]==par[p]){
      view=true;
      break cicloesterno;
      }
  }
// alert('par[1,2]: ' + par[1] + ' ' + par[2] +'\neRec[7 e 8]: ' +
eRec[kk][7] +' '+eRec[kk][8]+ '\n' + view);
 if (view) //se (view) allora mostro il rigo
  {//apertura rigo
  son.document.write('<tr><td width="90" align="right" bgcolor="Gainsboro"
valign="top">');
  son.document.writeln(eRec[kk][0]); //data
  son.document.write('&nbsp;</td><td  bgcolor="Gainsboro">');
  if (eRec[kk][2]!=''){//se c'è l'indirizzo html lo inserisco
   son.document.write('<a href="../../'+eRec[kk][2]+'" target="dx"
title="Apri il documento:\n\n' + eRec[kk][1] + '\ndel: ' + eRec[kk][0] +
'\nTipo:\n');//inserisco un Title moolto ricco di info
   for(q=7;q<eRec[kk].length;q++)
    son.document.write(eRec[kk][q] + ' - ');
   son.document.writeln( '\nIndirizzo:\n'+eRec[kk][2]+'">');
   }
  son.document.writeln('&nbsp;'+eRec[kk][1]+'&nbsp;');//inserisco titolo
documento
  if (eRec[kk][2]!='')//se c'è l'indirizzo html chiudo il tag <a href...
   son.document.writeln('</a>');
  son.document.write('</td><td width="100" align="center"
bgcolor="Gainsboro">');//chiudo la cella e apro la successiva
  son.document.writeln(eRec[kk][8].substr(0,1).toUpperCase() +
eRec[kk][8].substring(1));//mostro il tipo, scrivendo la prima lettera in
maiuscolo :-)
  son.document.write('</td><td width="22" bgcolor="Gainsboro"
align="center">');
  if (eRec[kk][3]!='')//se sono presenti collegamenti ftp mostro un'icona
con il commegamento; questo è in formato .doc
   {son.document.write('<a href="' + FTP +eRec[kk][3]+'" title="Scarica il
documento in formato .DOC\n\n' + eRec[kk][1] +'\ndel: ' + eRec[kk][0] +
'\nTipo:\n');//sempre stesso Title molto ricco
   for(q=7;q<eRec[kk].length;q++)
    son.document.write(eRec[kk][q] + ' - ');
   son.document.writeln( '\nIndirizzo:\n'+ FTP + eRec[kk][3]+'">');
   son.document.write('<img src="ico_word.gif" width=16 height=16
border=0>');
   son.document.writeln('</a>');}
  else//se il file non esiste in ftp inserisco uno spazio per riempire la
cella, altrimenti la cella non viene mostrata
   son.document.writeln('&nbsp;');
  son.document.write('</td><td width="22" bgcolor="Gainsboro"
align="center">');//chiudo cella...
  if (eRec[kk][4]!='')//stessa cosa, file .rtf
   {son.document.write('<a href="' + FTP +eRec[kk][3]+'" title="Scarica il
documento in formato .RTF\n\n' + eRec[kk][1] +'\ndel: ' + eRec[kk][0] +
'\nTipo:\n');
   for(q=7;q<eRec[kk].length;q++)
    son.document.write(eRec[kk][q] + ' - ');
   son.document.writeln( '\nIndirizzo:\n'+ FTP + eRec[kk][4]+'">');
   son.document.write('<img src="ico_rtf.gif" width=16 height=16
border=0>');
   son.document.writeln('</a>');}
  else
   son.document.writeln('&nbsp;');
  son.document.write('</td><td width="22" bgcolor="Gainsboro"
align="center">');
  if (eRec[kk][5]!='')//stessa cosa, file .zip
   {son.document.write('<a href="' + FTP +eRec[kk][3]+'" title="Scarica il
documento in formato .ZIP\n\n' + eRec[kk][1] +'\ndel: ' + eRec[kk][0] +
'\nTipo:\n');
   for(q=7;q<eRec[kk].length;q++)
    son.document.write(eRec[kk][q] + ' - ');
   son.document.writeln( '\nIndirizzo:\n'+ FTP + eRec[kk][5]+'">');
   son.document.write('<img src="ico_zip.gif" width=16 height=16
border=0>');
   son.document.writeln('</a>');}
  else
   son.document.writeln('&nbsp;');
  son.document.write('</td><td width="22" bgcolor="Gainsboro"
align="center">');
  if (eRec[kk][6]!='')//...file .pdf
   {son.document.write('<a href="' + FTP +eRec[kk][3]+'" title="Scarica il
documento in formato .PDF\n\n' + eRec[kk][1] +'\ndel: ' + eRec[kk][0] +
'\nTipo:\n');
   for(q=7;q<eRec[kk].length;q++)
    son.document.write(eRec[kk][q] + ' - ');
   son.document.writeln( '\nIndirizzo:\n'+ FTP + eRec[kk][6]+'">');
   son.document.write('<img src="ico_pdf.gif" width=16 height=16
border=0>');
   son.document.writeln('</a>');}
  else
   son.document.writeln('&nbsp;');
  //chiusura rigo
  son.document.write('</td></tr>');
  //aggiorno contatore
  contaDoc++;//ogni rigo mostrato aggiorno sia contaDoc...
  window.status='RICERCA; Documenti trovati: '+contaDoc;//... che la barra
di stato
  }
}
//*********************************************
// <funzione nome="costruisciHTMLCoda()">
// Chiude il documento dentro il frame "figlio"
//*********************************************
function costruisciHTMLCoda(){
 son.document.write('</table></body></html>');
 son.document.close();
}
//*********************************************
// <funzione nome="aggiornaTendina()">
// Questa è un bel casino:
// Crea un menu a tendina con una serie di filtri per ricerche successive
// Meglio che provi a farlo funzionare, per capire meglio,
// visto che manco io riesco a spiegarlo...
//*********************************************
function aggiornaTendina(){
 //cappo è il numero di record presenti nel database
 var cappo = eRec.length;
 //callo è il menu a tendina
 var callo = document.formTipo.selectTipo;
 //controllo se il tipo di documento è già presente in un record già
controllato
 //se è già presente (ce=true) "niente di fatto", come diceva Mike
 //altrim (ce=falso) aggiungo il tipo mancante alla tendina
 for(iii=0;iii<cappo;iii++)
  {tempStringa[iii]=eRec[iii][8];
  if ((iii>1)&&(eRec[iii][8]!=eRec[iii-1][8]))
   {var ce = false;
   for(ics=0;ics<iii;ics++)
    {if(tempStringa[iii]==tempStringa[ics])
     {ce = true;
     break;
     }
    }
   if ((!ce)&&((par[1]=='tutti')||(eRec[iii][7]==par[1])))//se la voce manca
nella tendina la inserisco
    {aaa= callo.length;
    newOpt=parent.madre.document.createElement('OPTION');//creo un nuovo
elemento OPTION
    callo.add(newOpt,aaa+1);//aggiungo un elemento alla tendina
    callo.options[aaa].text=eRec[iii][7].toUpperCase()+ '/' +
tempStringa[iii].substr(0,1).toUpperCase() +
tempStringa[iii].substring(1);//aggiungo al nuovo elemento testo...
    callo.options[aaa].value=tempStringa[iii];//... e value
    }
   }
  }
 //ordina alfabeticamente la tendina
 //in effetti lo avrei potuto fare prima di costruire text e value; in
pratica così lo faccio 2 volte...
 aaa= callo.length;
 for(iii=1;iii<aaa;iii++)
  for(ics=iii+1;ics<aaa;ics++)
   if (callo.options[iii].text>callo.options[ics].text)
    {temp=callo.options[iii].text;
    callo.options[iii].text=callo.options[ics].text;
    callo.options[ics].text=temp;
    temp=callo.options[iii].value;
    callo.options[iii].value=callo.options[ics].value;
    callo.options[ics].value=temp;
    }
}
//*********************************************
// <funzione nome="scegliTipo()">
// Questa costruisce la pagina vera e propria
//*********************************************
function scegliTipo(cresce){
 //...
 costruisciHTMLTesta();
 //se "cresce" è impostata a true allora costruisco la tabella in
quest'ordine (p.e. dalla A alla Z)...
 if (cresce)
  for(i=0;i<eRec.length;i++)
   costruisciRigo(i);
 else//else la costruisco al contrario (p.e. dalla Z alla A)
  for(i=eRec.length-1;i>-1;i--)
   costruisciRigo(i);
 //chiudo il documento
 costruisciHTMLCoda();
}
//*********************************************
// <funzione nome="scegliTendina()">
// quando scelgo un filtro dalla tendina ...
//*********************************************
function scegliTendina(){
 //... riassegno il secondo parametro della ricerca
 par[2] =
document.formTipo.selectTipo.options[document.formTipo.selectTipo.selectedIn
dex].value;
 //e ricostruisco il documento
 scegliTipo(crescente);
}
//*********************************************
// <funzione nome="crescenza()">
// Serve quando ho già la tabella costruita e voglio invertire l'ordine
// dei record (come dire A-Z lo porto in Z-A).
//  E' in pratica quasi la stessa cosa di scegliTipo(),
// forse la tolgo completamente nella prossima re-versione
//*********************************************
function crescenza(){
 //cambio "crescente"
 crescente=!crescente;
 if (crescente)
  scegliTipo(true)  //ricostruisco la tabella in ordine crescente...
 else
  scegliTipo(false);  //... o in ordine decrescente
}
//*********************************************
// <funzione nome="cambio()">
// serve per scambiare due elementi dell'array
//*********************************************
function cambio(aaa,bbb){
 tempArray = eRec[aaa];
 eRec[aaa] = eRec[bbb];
 eRec[bbb] = tempArray;
/*
Devo controllare se cambiando un record con piu chiavi con uno
con meno chiavi ottengo due array con lo stesso numero di
elementi o, come sarebbe giusto, scambio solo gli array
*/
}
//*********************************************
// <funzione nome="ordinaRecord()">
// questa funzione, messa insieme alla precedente "cambio()"
// non sono altro che Array.sort()
// solo che siccome sono un masochista l'ho voluta rifare.
// In realtà c'è qualche altro motivo per cui non l'ho usata, però
// per il momento non mi è ben chiaro...
//*********************************************
function ordinaRecord(orType){
 var ki,ko;
 lung = eRec.length;
 //inizio "0", cioè per data
 //invece di usare oggetti Date (sempre perchè sono masochista)
 //ho usato stringhe nel formato "gg.mm.aaaa";
 //di conseguenza ho complicato un po' il loro ordinamento
 if (orType==0)
  if (ordinamento!=orType){
   for(ki=0;ki<lung;ki++)
    for(ko=ki+1;ko<lung;ko++)
     {numero1 =eRec[ko][0].indexOf('.',0);
     a[1]=eRec[ko][0].substring(0,numero1);
     numero2 =eRec[ko][0].indexOf('.',numero1+1);
     a[2]=Math.round(eRec[ko][0].substring(numero1+1,numero2));
     a[3]=Math.round(eRec[ko][0].substring(numero2+1,eRec[ko][0].length));
     numero1 =eRec[ki][0].indexOf('.',0);
     b[1]=eRec[ki][0].substring(0,numero1);
     numero2 =eRec[ki][0].indexOf('.',numero1+1);
     b[2]=Math.round(eRec[ki][0].substring(numero1+1,numero2));
     b[3]=Math.round(eRec[ki][0].substring(numero2+1,eRec[ki][0].length));
     // se una data è minore dell'altra allora cambio la pos del record
if((a[3]<b[3])||((a[3]==b[3])&&(a[2]<b[2]))||(((a[3]==b[3])&&(a[2]==b[2]))&&
(a[1]<=b[1])))
      cambio(ki,ko);
   crescente=true;//imposto "crescente", così poi "scegliTipo()" sa in che
ordine visualizzare la tabella
     }
   eliminaNonNovita();//se ho ricerca solo le ultime novità mi tengo solo
gli elementi più recenti dell'array
   }//fine (orType=='data')
 //se ordinamento =titolo ("1") oppure =tipo ("8")
 if ((orType==1)||(orType==8))
  if (ordinamento!=orType){
   for(ki=0;ki<lung;ki++)
    for(ko=ki+1;ko<lung;ko++)
     if (eRec[ki][orType]<eRec[ko][orType])
      cambio(ki,ko);
   crescente=true;
   }
//rtf zip pdf doc
 if ((orType<7)&&(orType>2))
  if (ordinamento!=orType){
   for(ki=0;ki<lung;ki++)
    for(ko=ki+1;ko<lung;ko++)
     if (eRec[ki][orType]<eRec[ko][orType])
      cambio(ki,ko);
   crescente=false;
   }
 ordinamento=orType; //indica qual è l'orinamento corrente
 crescenza(); //ricostruisco la tabella
}
//*********************************************
// <funzione nome="eliminaNonNovita()">
// Se il primo parametro è "novita" mi tengo solo gli n records più recenti
//*********************************************
function eliminaNonNovita(){
//se siamo nelle novita' elimina dagli array tutti gli elementi in eccesso
//il parametro viene passato, p.e., così: 'ricerca_madre.htm?par=novita.20'
//in questo caso mi tengo i 20 records più recenti
 if(par[1].substr(0,6)=='novita'){
  for(jdk=eRec.length;jdk>par[1].substring(7);jdk--){
   eRec.shift();
   }
  //per continuare a vedere tutte le categorie
  par[2]='tutti';//da controllare
  }
}
//Qui inizia l'inserimento dei record (ne ho messi solo alcuni), poi c'è il
main e ho finito (sudor, sudor...)
//ogni record contiene vari campi, nell'ordine:
/* data
 titolo
 indirizzo html
 indirizzo doc (via ftp)
 indirizzo rtf (via ftp)
 indirizzo zip (via ftp)
 indirizzo pdf (via ftp)
 chiave di ricerca 1
 chiave di ricerca 2
 event. chiave di ricerca 3
 ...
 event. chiave di ricerca n...
I primi nove campi (cioè fine alla chiave 2) ci sono sempre, gli altri ogni
tanto
*/
eaddRec('19.12.1999' ,  'Con voci di giubilo date il grande annuncio' ,
'vescovo/doc_giubilari/dg_dx.htm' ,  'doc_giubilari/con_voci_di_giubilo.doc'
,  'doc_giubilari/con_voci_di_giubilo.rtf' ,
'doc_giubilari/con_voci_di_giubilo.zip' ,  '' ,  'vescovo' ,
 'docGiubilare' ); //Stringa numero1
eaddRec('27.02.2000' ,  'Ecco ora il momento favorevole' ,
'vescovo/doc_giubilari/dg_dx.htm' ,
'doc_giubilari/ecco_ora_il_momento_favorevole.doc' ,
'doc_giubilari/ecco_ora_il_momento_favorevole.rtf' ,
'doc_giubilari/ecco_ora_il_momento_favorevole.zip' ,  '' ,  'vescovo' ,
'docGiubilare' ); //Stringa numero2
eaddRec('01.01.2000' ,  'Sentieri Diocesani' ,
'diocesi/sentieri_diocesani/sd_01.htm' ,
'doc_giubilari/sentieri_diocesani.doc' ,
'doc_giubilari/sentieri_diocesani.rtf' ,
'doc_giubilari/sentieri_diocesani.zip' ,  '' ,  'spiritualita' ,
 'sentieri' ); //Stringa numero3
eaddRec('18.06.2000' ,  'Settimana Eucaristica Diocesana 2000' ,
'news/04.htm' ,  'doc_giubilari/settimana_eucaristica_diocesana.doc' ,
'doc_giubilari/settimana_eucaristica_diocesana.rtf' ,
'doc_giubilari/settimana_eucaristica_diocesana.zip' ,  '' ,  'news' ,
'news2000' ); //Stringa numero4
eaddRec('25.12.1999' ,  'Veglia per il passaggio al nuovo Millennio' ,
'vescovo/omelie/om_1999/om_08.htm' ,
'omelie/1999/veglia_passaggio_millennio.doc' ,
'omelie/1999/veglia_passaggio_millennio.rtf' ,
'omelie/1999/veglia_passaggio_millennio.zip' ,  '' ,  'vescovo' ,
 'lettera' ); //Stringa numero5
eaddRec('01.09.2000' ,  'Giubileo regionale dei Giovani, Siracusa' ,
'vescovo/omelie/om_2000/om_35.htm' ,
'doc_giubilari/giubileo_regionale_giovani_siracusa.doc' ,
'doc_giubilari/giubileo_regionale_giovani_siracusa.rtf' ,
'doc_giubilari/giubileo_regionale_giovani_siracusa.zip' ,  '' ,  'vescovo' ,
'omelia' ); //Stringa numero6
eaddRec('31.05.2000' ,  'Venite a Mangiare' ,
'vescovo/doc_giubilari/dg_dx.htm' ,  'doc_giubilari/venite_a_mangiare.doc' ,
'doc_giubilari/venite_a_mangiare.rtf' ,
'doc_giubilari/venite_a_mangiare.zip' ,  '' ,  'vescovo' ,
 'docGiubilare' ); //Stringa numero7
eaddRec('19.12.1999' ,  'Auguri per il Natale 1999' ,
'vescovo/lettere/lt_natale1999.htm' ,  'documenti/auguri_natale_1999.doc' ,
'documenti/auguri_natale_1999.rtf' ,  'documenti/auguri_natale_1999.zip' ,
'' ,  'vescovo' ,  'documento' ); //Stringa numero8
eaddRec('19.03.2000' ,  'Benvenuto al Vescovo' ,  '' ,
'documenti/benvenuto_vescovo.doc' ,  'documenti/benvenuto_vescovo.rtf' ,
'documenti/benvenuto_vescovo.zip' ,  '' ,  'vescovo' ,  'documento' );
//Stringa numero9
eaddRec('12.12.2000' ,  'Il Decalogo del Chierichetto' ,
'news/mochi/decalogo.htm' ,  'documenti/decalogo_chierichetto.doc' ,
'documenti/decalogo_chierichetto.rtf' ,
'documenti/decalogo_chierichetto.zip' ,  '' ,  'vescovo' ,  'documento' );
//Stringa numero10
eaddRec('01.09.1998' ,  'Piano Pastorale 1998' ,
'vescovo/piano98/piano98_0.htm' ,  'documenti/piano_pastorale_1998.doc' ,
'documenti/piano_pastorale_1998.rtf' ,  'documenti/piano_pastorale_1998.zip'
,  '' ,  'vescovo' ,  'pianoPastorale' ); //Stringa numero11
eaddRec('01.09.1999' ,  'Piano Pastorale 1999' ,
'vescovo/piano99/piano99_0.htm' ,  '' ,  '' ,  '' ,  '' ,  'vescovo' ,
'pianoPastorale' ); //Stringa numero12
eaddRec('01.09.2000' ,  'Piano Pastorale 2000' ,
'vescovo/piano2000/piano2000_00.htm' ,  'documenti/piano_pastorale_2000.doc'
,  'documenti/piano_pastorale_2000.rtf' ,
'documenti/piano_pastorale_2000.zip' ,  '' ,  'vescovo' ,
 'pianoPastorale' ); //Stringa numero13
eaddRec('01.09.2000' ,  'Preghiera per l\'inizio del nuovo Millennio' ,
'vescovo/lettere/lt_preghiera_millennio.htm' ,
'documenti/preghiera_per_il_nuovo_millennio.doc' ,
'documenti/preghiera_per_il_nuovo_millennio.rtf' ,
'documenti/preghiera_per_il_nuovo_millennio.zip' ,  '' ,  'vescovo' ,
'documento' ); //Stringa numero14
eaddRec('21.04.2000' ,  'Discorso per la Processione dei Misteri' ,
'vescovo/omelie/om_2000/om_10.htm' ,
'omelie/2000/processione_dei_misteri.doc' ,
'omelie/2000/processione_dei_misteri.rtf' ,
'omelie/2000/processione_dei_misteri.zip' ,  '' ,  'vescovo' ,  'omelia' );
//Stringa numero15
/* MAIN
Le funzioni sono richiamate in un modo piuttosto intricato:
qui sopra ho aggiunto tutti i record;
con ordinaRecord(0) ordino l'array eRec in ordine cronologico inverso
 (dal più recente al meno recente) (lo "0" indica l'ordine cronologico; "1"
è alfabetico per i titoli;
 "2" ordina per tipo...
 ordinaRecord richiama la funzione "crescenza()"
 Questa determina se l'ordinamento deve essere "dal + grande al + piccolo" o
viceversa,
  quindi costruisce la testa dell'HTML ("costruisciHTMLtesta()")
  costruisce ogni singolo rigo ("costruisciRigo()")
  costruisce la fine dell'HTML ("costruisciHTMLcoda()")
Poi parte aggiornaTendina(), che costruisce il menu a tendina;
poi "azzero" il par[1], perchè se il programma viene richiamato con il
parametro "tutti"
 (cioè "ricerca_madre.htm?par=tutti") continuerebbe a mostrare tutti i
record anch quando seleziono
 un filtro dal menu a tendina
*/
ordinaRecord(0);
aggiornaTendina();
par[1]='';
//FINE!
//Semplice semplice, no?
//-->
</SCRIPT>
</body>
</html>

 Non so proprio come ringrziarvi!!
"senza accapo automatico" lo dici tu! Bisogna vedere poi come arriva il 
messaggio :-)
Manda in mail, che finché ricostruisco le righe viene notte...
Ma non aspettarti comunque una risposta in tempi brevissimi....
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------

 messaggio :-)
Intendevo in nell'editor (HomeSite), non nel messaggio...

 Intendevo in nell'editor (HomeSite), non nel messaggio...
Si, l'avevo capito... infatti mi riferivo al messaggio...
Ti ho spedito la soluzione in e-mail :-)
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
               Nessun traguardo č abbastanza lontano.
------------------------------------------------------------------------

> Si, l'avevo capito...
scus
ciao :-)