  // Libreria di funzioni Flashbit standard ver. 2.1 
  // Non personalizzare! Usare jscript2.js con le funzioni dedicate al sito

  // INIZIO blocco funzioni fade IN/OUT
  // Mettere questo style negli oggetti da trattare: style='opacity:1.0; filter:alpha(opacity=100);'
  // Costanti per funzione fade on/off
  // Funzione che manda in fde ON/OFF l'oggetto passato
  function SFfade(id,tm,ch,cscript,id2){
    // Riceve: id oggetto, timeout refresh (1000=1 secondo), passo del fade, script da chiamare al termine del fade loop (esempio SFProva sotto), eventuale id di un secondo oggetto da passare allo script cscript
    // Decide in automatico se fade on o off in base allo stato di trasparenza attuale dell'oggetto
    var act=document.getElementById(id).style.opacity*1;
	if(act<1){var vl=ch; var lm=1;}else{var vl=-1*ch; var lm=0;}
	SFumaLoop(id,tm,vl,lm,cscript,id2);
  }
  function SFumaLoop(id,tm,vl,lm,cscript,id2){
    // Riceve: id oggetto, timeout refresh (1000=1 secondo), valora da sommare (può essere negativo, limite (valore da raggiungere), script da chiamare al termine del fade loop
    var act=document.getElementById(id).style.opacity*1; var npv=act+vl;
	document.getElementById(id).style.opacity=npv;                                  // Vari browser                (range 0 / 1)
	document.getElementById(id).style.filter='alpha(opacity='+(npv*100)+')';        // MS Explorer fuori standard! (range 0 / 100)
	if((vl>0 && npv<lm) || (vl<0 && npv>lm)){setTimeout("SFumaLoop('"+id+"',"+tm+","+vl+","+lm+",'"+cscript+"','"+id2+"')",tm);}else{ if(cscript!=''){eval(cscript+"(id,id2,lm);");} }
  }
  // FINE blocco funzioni fade IN/OUT
  function SFProva(id,id2,lm){
    alert(id+' '+id2+' '+lm);
  }  
  
  // Inverte lo stato di visione dell'oggetto ricevuto (style.display)
  function ShowHide(id){
    var divv=document.getElementById(id);
    divv.style.display=(divv.style.display=="block") ? "none" : "block";
  }


  // Chiama un URL il ajax mettendo il risultato in un oggetto (vecchia funzione mantenuta x compatibilità)
  function axLoader(url,id){
    var x=(window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
    x.onreadystatechange=function() {if(x.readyState==4 && x.status==200){el=document.getElementById(id).innerHTML=x.responseText;} }
    x.open('GET',url,true); x.send(null);
  }
  // Chiama un URL il ajax passando i risultati ad unoscript JS (vecchia funzione mantenuta x compatibilità)
  function axLoaderScript(url,scriptname){
    var x = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
    x.onreadystatechange = function() { if(x.readyState == 4 && x.status == 200){eval(scriptname+"(x.responseText);");} }
    x.open('GET', url, true);  x.send(null);
  }
  // Chiama un URL il ajax passando i risultati ad uno script JS e/o cambiando il contenuto di un DIV (nuova funzione che sostituisce le 2 sopra)
  function AxjL(url,id,jscript,working,event){
    // Riceve: url da chiamare con variabili in GET (es: pippo.php?a=12&v=OK)
	//         id: eventuale id di oggetto ove riportare l'esito
	//         script:  eventuale script JS a cuoi passare l'esito
	//         working: id eventuale DIV da mostrare ad inizio chiamata e nascondere al ricevimento dei dati (tipico work in progress)
	var dwrk=0; if(working!=''){ if(document.getElementById(id)){var dwrk=1;} }
	if(dwrk==1){DivPosiz(event,working,'C','');}
    var x=(window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
    x.onreadystatechange=function(){if(x.readyState==4 && x.status==200){  if(id!=''){document.getElementById(id).innerHTML=x.responseText;}  if(jscript!=''){eval(jscript+"(x.responseText);");}  if(dwrk==1){document.getElementById(working).style.display='none';}  } }
    x.open('GET',url,true); x.send(null);
  }
  
  
  // Crea un oggetto Flash. Per evitare il problema "dell'attivazione"
  function theflash(movie,width,height){
    document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="'+width+'" height="'+height+'">\n');
    document.write('<param name="movie" value="'+movie+'"><param name="quality" value="high"><param name="menu" value="false"><param name="wmode" value="transparent">\n');
    document.write('<embed src="'+movie+'" width="'+width+'" height="'+height+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" menu="false" wmode="transparent"></embed>\n');
    document.write('</object>\n');
  }
  // Crea un oggetto Flash e lo inserisce nell'oggetto passato. Per evitare il problema "dell'attivazione"
  function theflash2(id,movie,width,height){
    var obj='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="'+width+'" height="'+height+'">\n';
    obj+='<param name="movie" value="'+movie+'"><param name="quality" value="high"><param name="menu" value="false"><param name="wmode" value="transparent">\n';
    obj+='<embed src="'+movie+'" width="'+width+'" height="'+height+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" menu="false" wmode="transparent"></embed>\n';
    obj+='</object>\n';
	if(document.getElementById(id)){document.getElementById(id).innerHTML=obj;}
  }

  
  // Ritorna: dimensione della finestra e posizione del cursone nella stessa 
  function DoveSono(event) {
    var x=event.clientX; var y=event.clientY;
    if(window.scrollX){x+=window.scrollX;}else{x+=document.body.scrollLeft;}  if(window.scrollY){y+=window.scrollY;}else{y+=document.body.scrollTop;}
    if(window.innerWidth){var xwin=window.innerWidth;}else{var xwin=document.body.offsetWidth;}
    if(window.innerHeight){var ywin=window.innerHeight;}else{var ywin=document.body.offsetHeight;}
    return x+','+y+','+xwin+','+ywin; // ritorna posizione mouse e dimensioni finestra
  }
  // Ritorna: dimensione della finestra, posizione del cursone nella stessa ed eventuali valori di scroll
  // Esempio utilizzo: var xy=DoveXY(event); (xy è un array con i valori ricevuti con indice da 0 a 5)
  function DoveXY(event){
    // Mettere lettura variabili sotto
    var Xmouse=event.clientX;  if(window.scrollX){var Xscroll=window.scrollX; Xmouse+=Xscroll;}else{var Xscroll=document.body.scrollLeft; Xmouse+=Xscroll;}
	var Ymouse=event.clientY;  if(window.scrollY){var Yscroll=window.scrollY; Ymouse+=Yscroll;}else{var Yscroll=document.body.scrollTop;  Ymouse+=Yscroll;}
    if(window.innerWidth){var Xwin=window.innerWidth;}else{var Xwin=document.body.offsetWidth;}
    if(window.innerHeight){var Ywin=window.innerHeight;}else{var Ywin=document.body.offsetHeight;}
	// Rende array con: posizione mouse, eventuali valori di scroll, dimensioni della finestra
	// Xwin e Ywin includono eventuali scroll bar
    var lista = new Array(Xmouse*1,Ymouse*1,Xscroll*1,Yscroll*1,Xwin*1,Ywin*1);
    return lista;
  }
  // Funzione che posiziona il DIV indicato in modo adeguato nei pressi del mouse, o a centro schermo
  function DivPosiz(event,id,dove,come){
    // Riceve: id dell'oggetto da visualizzare e posizionare
	//         dove: C = a centro schermo (tenendo presente lo scroll), M = nei pressi del mouse (tenendo presente la larghezza della finestra)
	//         come: '' = semplice display block, F = in FADE
	// Legge le dimensioni dell'oggetto passato
	var Xsize=document.getElementById(id).style.width; var Ysize=document.getElementById(id).style.height;
	Xsize=Xsize.replace('px','')*1; Ysize=Ysize.replace('px','')*1;
	// Decide dove posizionare l'oggetto
	var xy=DoveXY(event); var Xmouse=xy[0]; var Ymouse=xy[1]; var Xscroll=xy[2]; var Yscroll=xy[3]; var Xwin=xy[4]; var Ywin=xy[5];
	// Posizione a centro pagina, o nei pressi del mouse (considerando lo scroll)
	if(dove=='C'){
	  var Xpos=(Xwin-Xsize)/2+Xscroll; var Ypos=(Ywin-Ysize)/2+Yscroll;
	}else{
	  var Xpos=Xmouse; if((Xpos+Xsize+5)>(Xwin+Xscroll-20)){Xpos=Xmouse-(Xsize+5);} // Con 20px di correzione per scrollbar (Xwin lo include!)
	  var Ypos=Ymouse; if((Ypos+Ysize+5)>(Ywin+Yscroll)){Ypos=Ymouse-(Ysize+5);}
	}
	// Posiziona e mostra l'oggetto (con opzione normale o FADE)
	document.getElementById(id).style.left=Xpos+'px'; document.getElementById(id).style.top=Ypos+'px';
	if(come!='F'){document.getElementById(id).style.display='block';}
	else{
  	  document.getElementById(id).style.opacity=0;                                  // Vari browser                (range 0 / 1)
	  document.getElementById(id).style.filter='alpha(opacity=0)';                  // MS Explorer fuori standard! (range 0 / 100)
	  document.getElementById(id).style.display='block';
	  setTimeout("DivPosizFade('"+id+"')",5);
	}
  }
  function DivPosizFade(id){
    var act=document.getElementById(id).style.opacity*1; var npv=act+0.03;
	document.getElementById(id).style.opacity=npv;                                  // Vari browser                (range 0 / 1)
	document.getElementById(id).style.filter='alpha(opacity='+(npv*100)+')';        // MS Explorer fuori standard! (range 0 / 100)
	if(npv<1){setTimeout("DivPosizFade('"+id+"')",5);}
  }

  
  // Imposta il il valore (la voce) ricevuta nell'oggetto select indicata
  function FastSelect(campo,voce){
	var sel=document.getElementById(campo);
	for(a=0;a<sel.length;a++){ if(sel.options[a].value==voce){sel.selectedIndex=a; a=sel.length+1;} }
  }
  
  
  // Sposta il focus sul campo indicato
  function FcSu(id){
    if(document.getElementById(id)){document.getElementById(id).focus();}
  }

  
  // Apre un pop-up delle dimensioni indicate
  function Finestra(url,x,y) {
    if(x==''){x=450}  if(y==''){y=300}
    myWindow = window.open(url,'Finestra,toolbar=no,scrollbars=yes,resizable=no,directories=no,menubar=no,status=yes,width='+x+',height='+y);
  }


  // Codifica una stringa per passarla in GET
  function urlencode(str) {
    // *     example 1: urlencode('Kevin van Zonneveld!');                     => 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://cname.dominio.net/');                => 'http%3A%2F%2Fcname.dominio.net%2F'
    // *     example 3: urlencode('http://www.google.nl/s?q=php.js&rls=u:en'); => 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26rls%3Du%3Aen'
    var histogram={}, histogram_r={}, code=0, tmp_arr=[];
    var ret=str.toString();
    var replacer = function(search, replace, str){
      var tmp_arr=[];  tmp_arr = str.split(search);  return tmp_arr.join(replace);
    };
    // The histogram is identical to the one in urldecode.
    histogram['!']   = '%21';  histogram['%20'] = '+';
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);  
    for(search in histogram){
      replace = histogram[search];
      ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2){ return "%"+m2.toUpperCase(); });
    return ret;
  }
  
  
  // Mostra/nasconte il DIV 'operazione in corso'
  // Deve esistere il DIV con id "inprogress" e le icone: images/empty.png e images/progress.gif
  function InProgress(x,y,label,show){
    // x e y sono le coordinate in cui far apparire il DIV
    // label è l'etichetta di testo da mostrare
    // show è lo stato di visualizzazione ON/OFF
    var ipdiv=document.getElementById('inprogress');
    if(x==''){x=290;}  if(y==''){y=140;}  if(label==''){label='Operazione in corso';}  if(show==''){show='ON';}
    label=label.replace(/'/g,'&acute');  ipdiv.innerHTML='<img src=\'images/empty.png\' width=20 height=100><br><img src=\'images/progress.gif\' width=50 height=50><br><img src=\'images/empty.png\' width=20 height=5><br>'+label;
    ipdiv.style.top=y+'px'; ipdiv.style.left=x+'px';
    if(show=='ON'){var stato='visible';}else{var stato='hidden';}  ipdiv.style.visibility=stato;
  }

  
  // Genera una stringa casuale di n caratteri
  function RandPW(n){
    var pw='';
    for(a=1;a<=n;a++) {pw=pw+String.fromCharCode(Math.floor(Math.random()*24+97));} // Solo lettere minuscole
    return pw;
  }
  
  
  // Carica l'ulr ricevuto nella pagina attiva
  function Gou(url){
    window.location.href=url
  }
  
  
  // Ridimensiona la finestra attiva (se le impostazioni di sicurezza JS del browser lo consentono
  function Winresize(x,y){
    if(x=='' || y=='' || x=='0' || y=='0'){var x=800; var y=600;}
	window.resizeTo(x,y);
  }


  // INIZIO blocco funzioni ListaKeyAct (mostra DIV con risultati che iniziano come il testo digitato) 
  // Mostra i risultati che combaciano con il testo digitato (adattato ai campi con id nascosto e _lb visibile)
  // Usa i seguenti oggetti:
  // id+"_h"  => DIV ove vengono riportati i record filtrati, deve essere opportunamente dimensionato e posizionato (sotto al campo di digitazione) e messo in "display:none"
  // id+"_db" => TEXTAREA, da non mostrare, che contiene tutti i record possibili, contiene 2 campi per ogni riga separati da un pipe "|". id record|nome/descrizione su cui filtrare
  // id+"_lb" => E' il campo ove si scrive ed ove verrà riportato il nome scelto (se assente si userà direttamente id)
  // id       => E' il campo, facoltativo, ove verrà riportato l'id del campo selezionato (di solito non visibile)
  var rfsltmp=0;
  function ListaKeyAct(id,event,clasn,scriptexe){
    // id è il campo di digitazione; classn è il nome della classe (senza Off / On finali), scriptexe è l'eventuale script da chiamare selezionando una voce (gli verrà passato id)
    var nrm=15; // Numero ri righe massimo da mostrare nel DIV di selezione
    var txt='<table border=0 width=100% collspan=1 cellspan=0>\n';
    // Controlla se esiste il campo nascosto con l'id e nel caso lo svuota per prevenire errori
    //if(document.getElementById(id+'_lb')){document.getElementById(id).value='';}
    // Controlla che tasto è stato premuto per decidere cosa fare (se SU, GIU' O INVIO passa agli script di movimento o selezione)
    if(event.keyCode>0){gh=event.keyCode;}else{gh=event.which;}
    if(gh!=38 && gh!=40 && gh!=13){
      // Prepara la variabile con il testo digitato (cerca id+'_lb' e se assnte usa id)
      if(document.getElementById(id+'_lb')){var a=document.getElementById(id+'_lb').value;}else{var a=document.getElementById(id).value;}
	  if(gh!=8 && gh!=46){a+=String.fromCharCode(gh);}else{a=a.substring(0,a.length-1);} a=a.toLowerCase(); l=a.length;  // Non aggiunge il "delete" ed il "cancel" (keyCode)
      // Crea array dei record da filtrare
      if(document.getElementById(id+'_db')){var db=document.getElementById(id+"_db").value; var j = new Array(2000); j=db.split('\n'); var dbn=j.length;}else{var dbn=-1;}
      // Cerca i record corrispondenti
      var nr=0;
	  for(i=0;i<=dbn-1;i++){
	    jx=j[i].split('|');
	    if(jx[1]){
	      var tmp=jx[1].toLowerCase();
		  if(tmp.substring(0,l)==a && nr<nrm){
		    nr++; var rrrrl=jx[1].length; //jx[1]=jx[1].replace(/"/gi,'\"');
		    var tmptxt="<span style='color:#0000FF; font-weight:bold;'>"+jx[1].substring(0,l)+"</span>"+jx[1].substring(l,rrrrl);
		    // Crea i record filtrati (righe della Tabella)
		    var tact="onmouseover=\"ListaKeyOnm('"+id+"','"+nr+"','"+clasn+"');\" onclick=\"ListaKeySet('"+id+"','"+nr+"','"+scriptexe+"');\"";
		    var idrc="<input type=hidden name='"+id+"idrfsl"+nr+"' id='"+id+"idrfsl"+nr+"' value='"+jx[0]+"'><div style='width:1px;height:1px;display:none;' id='"+id+"rfsl"+nr+"'>"+jx[1]+"</DIV>";
		    txt+="<tr id='"+id+"trfsl"+nr+"' "+tact+" class="+clasn+"Off><td width=1><img src='images/empty.png' width=1 height=1>"+idrc+"</td><td width=100%>"+tmptxt+"</td></tr>\n";
		  }
	    }
	  }
      if(document.getElementById(id+"_h")){document.getElementById(id+"_h").innerHTML=txt+'</table><input type=hidden name='+id+'totrcn  id='+id+'totrcn value='+nr+'>';}
	  // Mostra o nasconde il DIV delle opzioni a seconda della presenza di risultati
	  if(nr>0 && l>0){var dvdsp='block';}
	  else{
	    var dvdsp='none';
	    if(document.getElementById(id)){document.getElementById(id).value=''; alert('Selezione non valida, bisogna selezionare un record dai risultati.');}
	  }
	  if(document.getElementById(id+"_h")){document.getElementById(id+"_h").style.display=dvdsp;}
    }else{
      if(gh==38){ ListaKeyMov(id,gh,clasn); }
      if(gh==40){ ListaKeyMov(id,gh,clasn); }
      if(gh==13){ var num=rfsltmp; ListaKeySet(id,num,scriptexe);}
    }
  }
  // Cambia lo stato onmouse dei risultati
  function ListaKeyOnm(id,nr,clasn){
    // id è il prefisso dei DIV del gruppo, stato (0 o 1) indica se usare la classe Off o On, classn è il nome della classe (senza Off / On finali)
    // Legge il numero di righe presenti
    if(document.getElementById(id+'totrcn')){var nrm=document.getElementById(id+'totrcn').value;}else{var nrm=0;}
    ListaKeyMov0(id,nrm,clasn); // Deseleziona tutte le righe
    // Cambia il foglio di stile del record e ne assegna l'id alla variabile globale "rfsltmp"
    if(document.getElementById(id+'trfsl'+nr)){ document.getElementById(id+'trfsl'+nr).className=clasn+'On'; rfsltmp=nr; }
  }
  // Muove su e giù, con i tasti cursore, fra le opzioni filtrate
  function ListaKeyMov(id,gh,clasn){
    // Legge il numero di righe presenti
    if(document.getElementById(id+'totrcn')){var nrm=document.getElementById(id+'totrcn').value*1;}else{var nrm=0;}
    ListaKeyMov0(id,nrm,clasn); // Deseleziona tutte le righe
    // Controllo pulsante UP
    if(gh==38 && nrm>0){
      if(rfsltmp>0 && rfsltmp<=nrm){rfsltmp--;}
      if(rfsltmp==0){rfsltmp=nrm;}
	  if(document.getElementById(id+'trfsl'+rfsltmp)){document.getElementById(id+'trfsl'+rfsltmp).className=clasn+'On';} // Attiva la riga
    }
    // Controllo pulsante DOWN
    if(gh==40 && nrm>0){
      if(rfsltmp>=0 && rfsltmp<=nrm){rfsltmp++;}
      if(rfsltmp==nrm+1){rfsltmp=1;}
	  if(document.getElementById(id+'trfsl'+rfsltmp)){document.getElementById(id+'trfsl'+rfsltmp).className=clasn+'On';} // Attiva la riga
    }
  }
  // Deseleziona tutte le righe
  function ListaKeyMov0(id,nrm,clasn){
    for(i=1;i<=nrm;i++){ if(document.getElementById(id+'trfsl'+i)){document.getElementById(id+'trfsl'+i).className=clasn+'Off';}} 
  }
  // Seleziona la riga selezionata, premendo il tasto invio o cliccando con il mouse
  function ListaKeySet(id,num,scriptexe){
    if(document.getElementById(id+'idrfsl'+num) && document.getElementById(id+'rfsl'+num)){
      if(document.getElementById(id+'_lb')){
	    document.getElementById(id).value=document.getElementById(id+'idrfsl'+num).value;         // Riporta l'id
	    document.getElementById(id+'_lb').value=document.getElementById(id+'rfsl'+num).innerHTML; // Riporta la label
	  }else{
	    document.getElementById(id).value=document.getElementById(id+'rfsl'+num).innerHTML;       // Riporta la label (l'id non è usato in questo caso)
	  }
	  document.getElementById(id+"_h").style.display='none';
	  if(scriptexe!=''){eval(""+scriptexe+"('"+id+"');");}
    }else{alert('record '+num+' non trovato');}
  }
  // FINE blocco funzioni ListaKeyAct

  
  