/*******************************************************/
/* QUESTI SCRIPT SONO STATI GENERATI DA MARCO DI MITRO */
/* E-MAIL: m.dimitro@ingeniaweb.com                    */
/* DATO CHE NON POSSO  OBBLIGARVI A NON COPIARE QUESTO */
/* CODICE,  SE PROPRIO  VOLETE FARLO ALLORA  INCLUDETE */
/* QUESTA BREVE INTESTAZIONE. ;-)                      */
/*******************************************************/

//variabili da sostituire ai caratteri speciali passati da PHP 
var ChrRetA=String.fromCharCode(13);
var ChrRetB=String.fromCharCode(10);
var ChrQuote=String.fromCharCode(34);

var FormName=0; //Form su cui lavorare

//Nella stringa S cerca le ricorrenze dei chr "&", "=" e "#" che non possono essere trasmessi da 1 pag all'altra
//e li sostituisce rispettivamente con chr(247)="¸" e chr(232)="Þ" e chr(231)="þ"
function ValidateValue(S) {
	if (S!='') {
        for (var ii=0;ii<S.length;ii++) {
    		switch (S.substring(ii,ii+1)) {
    			case "&":
    				S=S.substring(0,ii)+"¸"+S.substring(ii+1);
    				break;
    			case "=":
    			 	S=S.substring(0,ii)+"Þ"+S.substring(ii+1);
    				break;
    			case " ":
    			 	S=S.substring(0,ii)+"¯"+S.substring(ii+1);
    				break;
    			case "#":
    			 	S=S.substring(0,ii)+"þ"+S.substring(ii+1);
    				break;
    		}		
    	}
    }
	return S;
}

//PRIVATE FUNCTION
function UnValidateValue(S) { 
	for (ii=0;ii<S.length;ii++) { 
		switch (S.substring(ii,ii+1)) {
			case "¸":		 
				S=S.substring(0,ii)+"&"+S.substring(ii+1);
				break;
			case "Þ":
				S=S.substring(0,ii)+"="+S.substring(ii+1);
				break;
			case "¯":
				S=S.substring(0,ii)+" "+S.substring(ii+1);
				break;
			case "þ":
				S=S.substring(0,ii)+"#"+S.substring(ii+1);
				break;
		}		
	} 
	return S;
}

/* 
	Questa funzione ricarica la pagina corrente mediante il methodo form.submit.
	Permette di salvare eventuali informazioni contenute nella variabile Remember.
	Memorizza il nome dell'oggetto passato e con nome Obj.
                                            IMPORTANTE
	Il campo nascosto HidRememberSel permette di ricordare il contenuto dei campi select;
    - scrivendo semplicemente il nome di una select verranno ricordati i testi (text) di
      tutte le opzioni, ma non gli indici
    - facendo precedere al nome della select il segno "&" verranno memorizzati gli 
      indici delle sole opzioni selezionate
    - facendo precedere al nome della select i segni "&+" verranno memorizzate le chiavi
      (value) delle sole opzioni selezionate
    - facendo precedere al nome della select il segno "*" verranno memorizzati text e value di tutte
      le opzioni, che verranno quindi ricaricate insieme alla pagina
    
    Può memorizzare il contenuto di select riempite dinamicamente. In questo caso i nomi devono essere
	memorizzati nel campo nascosto HidRememberSel e separati da una virgola. Se invece si desidera ricordare
    quali opzioni di una select multipla sono state selezionate allora includerne il nome sempre nella
    casella HidRememberSel e farne precedere il nome dal carattere &.
    
    Il parametro ToAnchor permette di ricaricare la pagina e scorrerla automaticamente fino a visualizzare
    l'ancora indicata.
*/

function Refresh (Obj,ToAnchor) {
    var Er=0;
    document.forms[FormName].elements["Obj"].value=Obj; //ricordo il nome dell'oggetto su cui è occorso un evento
	var LastComma=-1;
	var ListSelValue="";
	var RememberList=document.forms[FormName].elements["HidRememberSel"].value+",";
	RememberList=RememberList.replace(" ",""); 
    var MemSelection=false;
	if (RememberList.length>2) {
        for (var I=0;I<RememberList.length;I++) {
			if (RememberList.substr(I,1)==",") {
				SelName=RememberList.substring(LastComma+1,I);
                if (SelName.substr(0,1)=="&") {
                    MemAllOptions=false;
                    MemSelection=true;
                    if (SelName.substr(1,1)=="+") {
                        //è stato richiesto di memorizzare la proprietà value delle opzioni selezionate e non l'indice
                        SelName=SelName.substr(2);
                        var MemValue=true;
                    } else {
                        SelName=SelName.substr(1);
                        var MemValue=false;
                    }
                } else {
                    if (SelName.substr(0,1)=="*") {
                        SelName=SelName.substr(1);
                        MemAllOptions=true; //memorizzo TUTTE le opzioni, non solo quelle selezionate
                        MemSelection=true;
                    } else {
                        MemSelection=false;
                        MemAllOptions=false;
                    }
                }

				if (MemSelection==false) {
                    //memorizzo le opzioni della select
    				if (ListSelValue.length>0) {
    					ListSelValue=ListSelValue+"þ"; //separatore dei nomi di select
    				}
    				ListSelValue=ListSelValue+SelName+"¯"; //separatore tra il nome della select e i valori delle opzioni
    				for (var ii=0;ii<document.forms[FormName].elements[SelName].options.length;ii++) {
    					if (ListSelValue.substr(ListSelValue.length-1,1)!="¯") {
    						ListSelValue=ListSelValue+"µ"+document.forms[FormName].elements[SelName].options[ii].value+"µ"+document.forms[FormName].elements[SelName].options[ii].text;
    					} else {
    						ListSelValue=ListSelValue+document.forms[FormName].elements[SelName].options[ii].value+"µ"+document.forms[FormName].elements[SelName].options[ii].text;
    					}
    				}
                } else if (MemAllOptions) {
                    //tutti i value e i text x ricaricare completamente la select
                    var LstASelected="";
                    if (document.forms[FormName].elements[SelName]) {
                        for (var ii=0;ii<document.forms[FormName].elements[SelName].options.length;ii++) {
                            if (LstASelected.length==0) {
        						LstASelected=document.forms[FormName].elements[SelName].options[ii].value+","+document.forms[FormName].elements[SelName].options[ii].text;
        					} else {
                                LstASelected=LstASelected+"æ"+document.forms[FormName].elements[SelName].options[ii].value+","+document.forms[FormName].elements[SelName].options[ii].text;
        					}
                        }
                    }
                    AddRemember(SelName+"ASlctd",LstASelected);
                } else {
                    //memorizzo gli indici selezionati della select in una variabile chiamata con il nome della select seguito da Slctd (ex LstTownSlctd)
                    var LstSelected="";
                    if (!document.forms[FormName].elements[SelName]) {
                        ObjNotFound("Refresh",SelName);
                        Er=2;
                    } else {
                        if (MemValue) {
                            //memorizzo la proprietà value
                            for (var ii=0;ii<document.forms[FormName].elements[SelName].options.length;ii++) { 
                                if (document.forms[FormName].elements[SelName].options[ii].selected) {
                                    if (LstSelected.length==0) {
                						LstSelected=document.forms[FormName].elements[SelName].options[ii].value;
                					} else {
                						LstSelected=LstSelected+","+document.forms[FormName].elements[SelName].options[ii].value;
                					}
                                }
            				}
                        } else {
                            //memorizzo l'indice
                            for (var ii=0;ii<document.forms[FormName].elements[SelName].options.length;ii++) {				
            					if (document.forms[FormName].elements[SelName].options[ii].selected) {
                                    if (LstSelected.length==0) {
                						LstSelected=ii;
                					} else {
                						LstSelected=LstSelected+","+ii;
                					}
                                } else {
                                    ObjNotFound("Refresh",SelName+".options["+ii+"].selected");
                                    Er=3;
                                }
            				}
                         }
                        AddRemember(SelName+"Slctd",LstSelected);
                    }
                }
				LastComma=I;
			}			
		}
		document.forms[FormName].elements["HidListSelValue"].value=ListSelValue;
	}
	
	if (ToAnchor) {
        ToAnchor="#"+ToAnchor;
    } else {
        var ToAnchor="";
    }
    
    for (var I=0; I<document.forms[FormName].elements.length; I++) {
        document.forms[FormName].elements[I].disabled=false;
    }
    
	document.forms[FormName].action=document.forms[FormName].action+ToAnchor;	
    document.forms[FormName].submit(); //ricarico la pagina ricordando i valori degli oggetti
} //refresh

//verifica che tutti i campi elencati siano stati compilati.
//Se questo non fosse vero verrà restituita la lista delle etichette dei
//campi non compilati; se invece tutti i campi sono compilati allora verrà restituita una stringa vuota.
//Per ogni campo da verificare occorre specificarne il nome e una etichetta identificativa per l'utente.
//Ex: CheckCompulsory("TxtNome", "Nome", "TxtPostCode", "C.A.P." ...)
function CheckCompulsory() {
    if ((arguments.length==0) || (arguments.length % 2==1)) {
        return "CheckCompulsory: Numero errato di parametri.";
    } else {
        var FieldList="";
        for (var I=0; I<arguments.length; I+=2) {
            if (ObjValueLength(arguments[I])==0) {
                //oggetto non compilato
                if (FieldList=="") {
                    FieldList=arguments[(I+1)] + "\n";
                } else {
                    FieldList=FieldList + arguments[(I+1)] + "\n";
                }
            }
        }
        return FieldList;
    }
}

//ABILITA O DISABILITA UN OGGETTO
//Disable accetta un parametro x disabilitare in ogni caso oppure
//due parametri di cui il secondo a TRUE indica di disabilitare
//a FALSE di abilitare.
function Disable(ObjName) {
    if (arguments.length>1) var D=arguments[1];
    else D=true;
    document.forms[FormName].elements[ObjName].disabled=D;
}

function Enable(ObjName) {
    document.forms[FormName].elements[ObjName].disabled=false;
}

//restituisce la lunghezza del valore di un oggetto. Questa funzione è utile ad esempio
//per verificare che i campi obbligatori siano stati compilati.
//Degli oggetti select viene restituita la lunghezza dell'opzione selezionata
function ObjValueLength(ObjName) {
	if (!document.forms[FormName].elements[ObjName].type) {
        ObjNotFound("ObjValueLength",ObjName+".type");
    }
    ObjType=document.forms[FormName].elements[ObjName].type;
        		
	switch (ObjType) { //Prendo il valore
		case "select-multiple": //select
		case "select-one":        
			var SelIndex=document.forms[FormName].elements[ObjName].selectedIndex;
			if (SelIndex==-1) {
				var Valore="";
			} else {
				var Valore=document.forms[FormName].elements[ObjName].options[SelIndex].value;
			}
			break;
		case "text":
		case "textarea":
		case "password":
		case "hidden":
			var Valore=document.forms[FormName].elements[ObjName].value;            
			break;
		case "checkbox":
			var Valore=document.forms[FormName].elements[ObjName].checked;
			break;
		case 'button':
		case 'file':
		case 'image':
		case 'option':
		case 'reset':
		case 'submit':
			break;
		default: //ovvero radio, dato che tutti gli altri oggetti sono già stati presi in considerazione        
			for (var j=0;j<document.forms[FormName].elements[ObjName].length;j++) {
				if (document.forms[FormName].elements[ObjName][j].checked==true) {
					Valore=document.forms[FormName].elements[ObjName][j].value;
				}
			}
			break;
	}
	if (Valore=="") {
		return 0;
	} else {
		return Valore.length;
	}
}

//setta il valore di un oggetto.
function SetObj(ObjName, ObjVal) {
    if (document.forms[FormName].elements[ObjName]) {
        ObjType=document.forms[FormName].elements[ObjName].type;
        if (ObjType=="undefined") {
            ObjNotFound("SetObj",ObjName+".Type");
        }
    	switch (ObjType) { //Prendo il valore
    		case "select-multiple": //select
    		case "select-one":
    			//seleziona l'opzione indicata
    			OptionSel(ObjName, ObjVal);
    			break;
    		case "text":
    		case "textarea":
    		case "password":
    		case "hidden":
                document.forms[FormName].elements[ObjName].value=ObjVal;
    			break;
    		case "checkbox":
                if ((ObjVal==true) || (ObjVal==1) || (ObjVal=="true") || (ObjVal==document.forms[FormName].elements[ObjName].value)) {
    				document.forms[FormName].elements[ObjName].checked=true;
    			} else {
    				document.forms[FormName].elements[ObjName].checked=false;
    			}
    			break;
    		case 'button':
    		case 'file':
    		case 'image':
    		case 'option':
    		case 'reset':
    		case 'submit':
    			break;
    		default: //ovvero radio, dato che tutti gli altri oggetti sono già stati presi in considerazione
                var ObjType=document.forms[FormName].elements[ObjName][0].type;
    			if (ObjType=="radio") { //vettore di radio
    				for (i=0;i<document.forms[FormName].elements[ObjName].length;i++) {		
    					if (document.forms[FormName].elements[ObjName][i]) {
                            if (document.forms[FormName].elements[ObjName][i].value==ObjVal) {
        					    document.forms[FormName].elements[ObjName][i].checked="1"; //o true	
        					}
                        } else {
                            ObjNotFound("SetObj",ObjName+"["+i+"]");
                        }
    				}
    			}
    			
    			break;
    	}
    } else {
        ObjNotFound("SetObj",ObjName);        
    }
}

//restituisce il valore di un oggetto.
function ObjValue(ObjName) {
	if (!document.forms[FormName].elements[ObjName].type) {
        ObjType="radio";
    } else {
        ObjType=document.forms[FormName].elements[ObjName].type;	
    }
	switch (ObjType) { //Prendo il valore
		case "select-multiple": //select
		case "select-one":
			var SelIndex=document.forms[FormName].elements[ObjName].selectedIndex;
			if (SelIndex==-1) {
				var Valore="";
			} else {
				var Valore=document.forms[FormName].elements[ObjName].options[SelIndex].value;
			} 
			break;
		case "text":
		case "textarea":
		case "password":
		case "hidden":
			var Valore=document.forms[FormName].elements[ObjName].value;
			break;
		case "checkbox":
			if (document.forms[FormName].elements[ObjName].checked) {
                var Valore=document.forms[FormName].elements[ObjName].value;
            } else {
                var Valore="";
            }
			break;
		case 'button':
		case 'file':
		case 'image':
		case 'option':
		case 'reset':
		case 'submit':
			break;
		default: //ovvero radio, dato che tutti gli altri oggetti sono già stati presi in considerazione
			if (document.forms[FormName].elements[ObjName].length) {
                for (var j=0;j<document.forms[FormName].elements[ObjName].length;j++) {
    				if (document.forms[FormName].elements[ObjName][j].checked==true) {
    					Valore=document.forms[FormName].elements[ObjName][j].value;	
    				}
    			}
            } else {
                ObjNotFound("ObjValue",ObjName+".type");
            }
			break;
	}
	return Valore;
}

//restituisce il testo di un oggetto.
//Nel caso delle select restituisce il testo dell'opzione selezionata.
//Per gli oggetti che non prevodono la proprietà text, viene restituita la proprietà value.
function ObjText(ObjName) {
	if (!document.forms[FormName].elements[ObjName].type) {
        ObjType="radio";
    } else {
        ObjType=document.forms[FormName].elements[ObjName].type;	
    }
	switch (ObjType) { //Prendo il valore
		case "select-multiple": //select
		case "select-one":
			var SelIndex=document.forms[FormName].elements[ObjName].selectedIndex;
			if (SelIndex==-1) {
				var Valore="";
			} else {
				var Valore=document.forms[FormName].elements[ObjName].options[SelIndex].text;
			}
			break;
		case "text":
		case "textarea":
		case "password":
		case "hidden":
			var Valore=document.forms[FormName].elements[ObjName].value;
			break;
		case "checkbox":
			var Valore=document.forms[FormName].elements[ObjName].checked;
			break;
		case 'button':
		case 'file':
		case 'image':
		case 'option':
		case 'reset':
		case 'submit':
			break;
		default: //ovvero radio, dato che tutti gli altri oggetti sono già stati presi in considerazione
			if (document.forms[FormName].elements[ObjName].length) {
                for (var j=0;j<document.forms[FormName].elements[ObjName].length;j++) {
    				if (document.forms[FormName].elements[ObjName][j].checked==true) {
    					Valore=document.forms[FormName].elements[ObjName][j].value;	
    				}
    			}
            } else {
                ObjNotFound("ObjText",ObjName+".type");
            }
			break;
	}
	return Valore;
}

//elimina i dati da una select
function SelectClear(SelectName) {	
	for (var j=document.forms[FormName].elements[SelectName].options.length-1; j>=0; j--) {
		document.forms[FormName].elements[SelectName].options[j]=null;	
	}
}

//seleziona l'opzione indicata
function OptionSel(SelectName, OptionValue) {
    if (document.forms[FormName].elements[SelectName]) {
        var Ritorna=false;
        for (var j=0;(j<document.forms[FormName].elements[SelectName].length) && (Ritorna==false);j++) {
    		if (document.forms[FormName].elements[SelectName].options[j].value==OptionValue) {
    			Ritorna=true;
    		}	
    	}
    	if (Ritorna==true) {
    		document.forms[FormName].elements[SelectName].options[j-1].selected=true;
    	}
    } else {        
        ObjNotFound("OptionSel",SelectName+"."+OptionValue);        
    } 
}

//seleziona un'opzione di una select in base all'index passato
function OptionSelIndex(SelectName, OptionIndex) {
    if (document.forms[FormName].elements[SelectName].options[OptionIndex]) {
        document.forms[FormName].elements[SelectName].options[OptionIndex].selected=true;
    }
}

//indica se esiste un opzione di valore specificato
function OptionDelete(SelectName, OptionValue) {
	var Ritorna=false;	
	if (!document.forms[FormName].elements[SelectName]) {
        ObjNotFound("OptionDelete",SelectName+"."+OptionValue);
    }
    for (var j=0;(j<document.forms[FormName].elements[SelectName].length) && (Ritorna==false);j++) {
		if (document.forms[FormName].elements[SelectName].options[j].value==OptionValue) {
			Ritorna=true;
		}	
	}
	if (Ritorna==true) {
		document.forms[FormName].elements[SelectName].options[j-1]=null;
	}
}

//indica se esiste un opzione di valore specificato
function OptionExist(SelectName, OptionValue) {
	var Ritorna=false;
    if (!document.forms[FormName].elements[SelectName]) {
        ObjNotFound("OptionExist",SelectName+"."+OptionValue);
    }
	for (var j=0;(j<document.forms[FormName].elements[SelectName].length) && (Ritorna==false);j++) {
		if (document.forms[FormName].elements[SelectName].options[j].value==OptionValue) {
			Ritorna=true;
		}	
	}
	return Ritorna;
}

//aggiunge un opzione alla select indicata
//è possibile specificare come terzo e quarto parametro i valori booleani true
//per indicare che tale opzione deve essere selezionata
function OptionAdd(SelectName, OptionValue, OptionText) {
	if (arguments.length>3) {
		var arg4=arguments[3];
	} else {
		var arg4="";
	}
	if (arguments.length>4) {
		var arg5=arguments[4];		
	} else {
		var arg5="";
	}
    if (!document.forms[FormName].elements[SelectName]) {
        ObjNotFound("OptionAdd",SelectName);
    }
	var opt=new Option(OptionText,OptionValue,arg4,arg5);
	Index=document.forms[FormName].elements[SelectName].options.length;
	document.forms[FormName].elements[SelectName].options[Index]=opt;
}

//sugli eventi onKeyup e onKeyPress degli oggetti di un form per i quali non si vuole permettere l'immissione 
//di certi chr invocare questa procedura specificando come parametri il nome dell'oggetto su cui 
//effettuare i controlli e la lista dei caratteri da bloccare (ex ",;")
function BlockFormChr(ObjName,BlockedChrs) {
    if (document.forms[FormName].elements[ObjName]) {
        var Txt=document.forms[FormName].elements[ObjName].value;
        var S="";
        var Er=false;
    	for (var J=0;J<Txt.length;J++) {
            var Found=0;
            var Chr=Txt.substr(J,1);
            for (var I=0;(I<BlockedChrs.length) && (Found=0);I++) {
                if (BlockedChrs.substr(I,1)==Chr) {
        			Found=1;
        		}
        	}
            if (Found==1) {
                Er=true;
            } else {
                S=S+Chr;
            }
                
        }
    	if (Er) document.forms[FormName].elements[ObjName].value=S;
    }	
}

//sugli eventi onKeyup e onKeyPress degli oggetti di un form per i quali si vuole permettere l'immissione 
//solo di certi chr invocare questa procedura specificando come parametri il nome dell'oggetto su cui 
//effettuare i controlli e la lista dei caratteri ammessi (ex "123456789")
function AllowFormChr(ObjName,AllowedChrs) {
    if (document.forms[FormName].elements[ObjName]) {
        var Txt=document.forms[FormName].elements[ObjName].value;
        var S="";
        var Er=false;
    	for (var J=0;J<Txt.length;J++) {
            var Found=0;
            var Chr=Txt.substr(J,1);
            for (var I=0;I<AllowedChrs.length;I++) {
                if (AllowedChrs.substr(I,1)==Chr) {
        			Found=1;
        		}
        	}
            if (Found==1) {
                S=S+Chr;
            } else {
                Er=true;
            }
                
        }
    	if (Er) document.forms[FormName].elements[ObjName].value=S;
    }
}


//aggiunge una variabile alla lista di quelle da ricordare.
//Se la variabile è già presente ne viene sostituito il valore.
function AddRemember (AddName,AddValue) {
	if (!document.forms[FormName].elements["HidRemember"]) {
        ObjNotFound("AddRemember","HidRemember");
    }
    if (AddValue!="") {
		AddValue=ValidateValue(AddValue);
	}    
	var Remember=document.forms[FormName].elements["HidRemember"].value; 
	if (Remember.length==0) {
		Remember=AddName+"="+AddValue;
	} else {	
		//cerco se la variabile è già in elenco
		var SearchIn="&"+Remember;
		var Pos=SearchIn.search("&"+AddName+"="); //pos=posizione di &AddName=
		if (Pos!=-1) { 			
			//la variabile è già presente
			if (Pos!=0) {
				Pos--;
				Concat="&"; //se non è la prima variabile dovrò separarla dalle altre
			} else {
				Concat="";
			}
			//-- ne sostituisco il valore --
			//cerco l'inizio della successiva var
			for (I=Pos+1;(I<Remember.length) && (Remember.substr(I,1)!="&");I++) {
			}
			if (Remember.substr(I,1)!="&") {
				PosAnd=-1;
			} else {
				PosAnd=I;
			}
			if (PosAnd==-1) {
				//è l'ultima variabile della lista Remember
				Remember=Remember.substr(0,Pos)+Concat+AddName+"="+AddValue;
			} else {		
				//è una variabile centrale
				Remember=Remember.substr(0,Pos)+Concat+AddName+"="+AddValue+Remember.substr(PosAnd);
			} 
		} else {
			//la variabile non è ancora presente nell'elenco: la concateno
			Remember=Remember+"&"+AddName+"="+AddValue;
		}
	}
	document.forms[FormName].elements["HidRemember"].value=Remember;	
	return Remember;
}

function ReadRemember(VarName) {
	//cerco se la variabile è in elenco
    if (!document.forms[FormName].elements["HidRemember"]) {
        ObjNotFound("ReadRemember","HidRemember");
    }
	var Remember=document.forms[FormName].elements["HidRemember"].value;
    var SearchIn="&"+Remember;
    var Pos=SearchIn.search("&"+VarName+"="); //pos=posizione di &AddName=
    if (Pos!=-1) { 			    	
    	//cerco l'inizio della posizione del valore
		for (I=Pos+1;Remember.substr(I,1)!="=";I++) {		
		}
		PosEq=I;
		//cerco l'inizio della successiva var
    	for (I=Pos+1;(I<Remember.length) && (Remember.substr(I,1)!="&");I++) {
    	}
    	if (Remember.substr(I,1)!="&") {
    		PosAnd=-1;
    	} else {
    		PosAnd=I;
    	}
    	if (PosAnd==-1) {		
			//è l'ultima variabile della lista Remember		
    		var Value=Remember.substr(PosEq+1);
    	} else {		
    		//è una variabile centrale		
			var Value=Remember.substring(PosEq+1,PosAnd);
    	}
		Value=UnValidateValue(Value);
		return Value;
    } else {
		return "";
	}
}

function ObjNotFound(FunctionName, ObjName) {
    if (window.location.host=="localhost") {
        window.status="JS "+FunctionName+" Err: "+ObjName+" not found.";
        StatusBarScroll();
    }
}
