/*
* Funzione che identifica il browser
*/

    var NS6 = "";
    var NS4 = "";
    var IE  = "";
    var ua = window.navigator.userAgent;
    var msie = ua.substring(0,ua.indexOf(" "));
    //*********** INTERNET EXPLORER ***************
    if ( msie == "Mozilla/4.0" ){
        var stringaBrowser    = ua.substring(ua.indexOf(";")+2);
        var explorer        = stringaBrowser.substring(0,stringaBrowser.indexOf(";"));
        var versione        = CLEANCHARACTER(" ",explorer.substring(stringaBrowser.indexOf(" ")));
        if ( versione < 4) {
            // INTERNET EXPLORER 3 o minore
        } else {
            NS6 = "";
            NS4 = "";
            IE  = "true";
        }
    //*********** NETSCAPE ***************
    } else {
        if ( msie == "Mozilla/5.0" ){
            NS6 = "true";
            NS4 = "";
            IE  = "";
        } else {
            NS6 = "";
            NS4 = "true";
            IE  = "";
        }
    }

function MessaggioCampiObbligatori(){
    return "I campi contrassegnati con * sono obbligatori";
}
function MessaggioMilioniEuro(){
    return "I dati sono esposti in milioni di euro";
}

function FlagCampiObbligatori(){
   return("*");
}

// ------------------------------------------ FUNZIONI DI CONTROLLO ------------------------------------------------


/*
* Il campo deve essere una data
*/
function DATE(obb, obbSearch, value, queryOp) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;
    return verificaInputData(value);
}

/*
* Il campo deve essere una data MAGGIORE DI OGGI
*/
function DATE_MAX_TODAY(obb, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    if(value != "") {
       ret = verificaInputData(value);
       if(ret != 0) return ret;
       if(confrontaDate(value, sysDate()) != 1) return 39;
    }
    return(0);
}

/*
* Il campo deve essere una data MAGGIORE O UGUALE AD OGGI
*/
function DATE_EQUALS_OR_MAX_TODAY(obb, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    if(value != "") {
       ret = verificaInputData(value);
       if(ret != 0) return ret;
       if(confrontaDate(value, sysDate()) == 2) return 38;
    }
    return(0);
}

/*
* Il campo deve essere una data MINORE DI OGGI
*/
function DATE_MIN_TODAY(obb, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    if(value != "") {
       ret = verificaInputData(value);
       if(ret != 0) return ret;
       if(confrontaDate(value, sysDate()) != 2) return 35;
    }
    return(0);
}

/*
* Il campo deve essere una data MINORE O UGUALE AD OGGI
*/
function DATE_EQUALS_OR_MIN_TODAY(obb, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    if(value != "") {
       ret = verificaInputData(value);
       if(ret != 0) return ret;
       if(confrontaDate(value, sysDate()) == 1) return 34;
    }
    return(0);
}


function MAILADDR(obb, obbSearch, num, value, queryOp) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;
    // ind è l'indice della @
    var ind = -1;
    // se il browser è Netscape allora devo cercare l'occorrenza di "%40" invece della @
    var ind1 = value.indexOf("%40");
    var ind2 = value.indexOf("@");
    if(ind1!=-1){
         ind = ind1;
    }else if (ind2!=-1){
         ind = ind2;
    }
    if(ind != -1 ) { //c'è la "@"
        var prima = value.substring(0,ind);
        var dopo = value.substring(ind+1);
        if(prima == "%20" || prima.length < 1) return 18;
        if(dopo == "%20" || dopo.length < 1) return 19;
        if(value.length > num) return 8;
    }
    else {
        if(value != "") return 17; //il carattere @ è obbligatorio
    }
    return 0;
}

/*
* Il campo deve essere di un certo tipo
  Novembre 2002: se il campo non è obbligatorio ed è vuoto, sospendere i controlli
*/
function PWD(obb, obbSearch, minValue, maxValue, value, queryOp) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;
  //se non obbligatorio e vuoto tutto OK
    if(obb==false && value.length == 0) return 0;
    //non ci deve essere il "."
    if(value.indexOf(".") != -1) return 13;
    if(value.length < minValue || value.length > maxValue) return 9;
    if(isNaN(value)) { //c'e' almeno un carattere
        for(i=0; i<value.length; i++) {
            if(!isNaN(value.charAt(i))) return 0;
        }
    }
    return 10;
}

/*
* controlla la partita IVA (11 numeri)
*/
function IVA(obb, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    // sono ammessi solo valori numerici
    if(isNaN(value)) return 6;
    // la lunghezza deve essere esattamente 11
    if(value != "" && value.length != 11) return 14;
    return 0;
}


/*
* controlla che il campo sia testo
*/
function TEXT(obb, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    // sono ammessi solo valori non numerici
    if(isNaN(value)) {
        //se trovo un numero
        trovato = 0;
        for(var i=0; i<value.length; i++) {
            if(!isNaN(value.charAt(i))) trovato = 1;
        }
    }
    if(trovato == 1) return 16;
    return 0;
}

/*
* Verifica se il campo è di lunghezza pari ad un valore specificato
*/
function TEXTVALUE(obb, num, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    if(value.length != 0 && value.length != num) return 11;
    return 0;
}


/*
* Valore decimale nel formato ORACLE NUMBER(n,d)
* Modificato da DF il 12/Mar/04
*/
function DECIMAL(obb, obbSearch, n, d, value, queryOp) {
    value = unescape(value);
    
    // trim che funziona
    re=/\s+$|^\s+/g;
    value = value.replace(re,"");
    
    value = ControlSpazi(value);
    
    if(MANDATORY(obb, obb, value) != 0) return 1;

    // Toglie i separatori di migliaia
    value = value.replace(/\$|\./g,'');
    
    var ind = value.indexOf(",");
    
    if(ind != -1) { //c'e' il separatore decimale
        var ii = value.substring(0,ind);
        var dd = value.substring(ind+1);
        if(isNaN(ii)) return 6; //Il campo accetta solo Numeri
        if(isNaN(dd)) return 6; //Il campo accetta solo Numeri

        if(ii.length > n) {
            return 21; // massimo nr digit parte intera superata
        }
        if (dd.length > d) {
            return 22; //massimo nr digit parte decimale superata
        }
    }
    else { //non c'e' il separatore decimale
        if(isNaN(value))  return 6; //Il campo accetta solo Numeri
        if(value.length > n) return 21; // massimo nr digit parte intera superata
    }
    return 0;
}

function PERCENT(obb, obbSearch, value, queryOp) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, obb, value) != 0) return 1;
    
    value = unescape(value);
    var ind = value.indexOf(",");

    if(ind != -1) { //c'è il ","
        var ii = value.substring(0,ind);
        var dd = value.substring(ind+1);
        if(isNaN(ii)) return 6; //Il campo accetta solo Numeri
        if(isNaN(dd)) return 6; //Il campo accetta solo Numeri
        if(ii.length > 2 && dd.length > 0 && parseInt(dd, 10) > 0) {
            return 21; // massimo nr digit parte intera superata
        }
        if (parseFloat(ii) > 100) {
            return 23; // massimo valore 100
        }
        if (dd.length > 2) {
            return 22; //massimo nr digit parte decimale superata
        }
    }
    else { //non c'è il ","
        if(isNaN(value))  return 6; //Il campo accetta solo Numeri
        if(value.length > 3) return 21; // massimo nr digit parte intera superata
        if(parseFloat(value) > 100) {
            return 23; // massimo valore 100
        }
    }
    return 0;
}

function MAIL(obb, num, value) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    if(MANDATORY(obb, value) != 0) return 1;
    // ind è l'indice della @
    var ind = -1;
    // se il browser è Netscape allora devo cercare l'occorrenza di "%40" invece della @
    var ind1 = value.indexOf("%40");
    var ind2 = value.indexOf("@");
    if(ind1!=-1){
         ind = ind1;
    }else if (ind2!=-1){
         ind = ind2;
    }
    if(ind != -1 ) { //c'è la "@"
        var prima = value.substring(0,ind);
        var dopo = value.substring(ind+1);
        if(prima == "%20" || prima.length < 1) return 23;
        if(dopo == "%20" || dopo.length < 1) return 24;
        if(value.length > num) return 8;
    }
    else {
        if(value != "") return 22; //il carattere @ è obbligatorio
    }
    return 0;
}



/*
* Funzione che confronta le due password inserite
*/
function confrontaPasswords(pwd1,pwd2) {
    return(checkPwd(pwd1,pwd2));
}



/*
* LOTTO 2 (modificata funzione esistente nel LOTTO 1)
* Il codice fiscale deve essere di 16 caratteri
*/
function CF(obb, obbSearch, value, queryOp) {
    
    //inizio vittorio 18/02/2004
    //value = ControlSpazi(value);
    //fine vittorio 18/02/2004    
    
    //if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;

    value = unescape(value);
    
    // trim che funziona
    re=/\s+$|^\s+/g;
    value = value.replace(re,"");
    
    value = ControlSpazi(value);
    
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;

    // la lunghezza deve essere esattamente 16
    if(value != "") { 
        if (value.length != 16) return 9;
        if (!controllaCodiceFiscale(value))
            return 500;
    }
    return 0;
}

/*
* LOTTO 2 (modificata funzione esistente nel LOTTO 1)
* Prima di effettuare il controllo formale del codice fiscale 
* verifica se è stato inserito un numero (contenente la partia iva)
* Il codice fiscale deve essere di 16 caratteri
*/
function CFIVA(obb, obbSearch, value, queryOp) {
    
    //Ernesto        

    value = unescape(value);
    
    // trim che funziona
    re=/\s+$|^\s+/g;
    value = value.replace(re,"");
    
    value = ControlSpazi(value);
    
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;
    if(value == "") return 0;
    
    if (isNaN(value)) {
            
        // la lunghezza deve essere esattamente 16
        if(value != "") { 
            if (value.length != 16) return 9;
            if (!controllaCodiceFiscale(value))
                return 500;
        }
        return 0;
    } else {   
        if ( (value.length <11) || (value.length >13) ) return 9;
        return 0;
    }        
}


// ------------------------------------------ FUNZIONI PRIVATE ------------------------------------------------

// ------------------------------------------ GESTIONE MESSAGGI DI ERRORE ------------------------------------------------
var controls_message_body = "";
var SEPARATORE = "@_|"
var WIDTH_COMBO = 350;
var SIZE_COMBO = 5;

/*
* Ritorna la stringa del messaggio relativa ad un certo codice
*/
function getErrorMessage(errorCode){
    var numMaxMsg = 10000;
    var arrayMessages = new Array(numMaxMsg);

    arrayMessages[0] = "Tutto bene";
    arrayMessages[1] = "Campo obbligatorio";
    arrayMessages[2] = "Data non valida. Formato data: gg/mm/aaaa";
    arrayMessages[3] = "Caratteri della data non validi";
    arrayMessages[4] = "Giorno o mese della data non validi";
    arrayMessages[5] = "Anno non bisestile";
    arrayMessages[6] = "Valore non numerico";
    arrayMessages[7] = "I caratteri apice ' o doppio apice \" non sono ammessi";
    arrayMessages[8] = "Numero di caratteri superiore alla lunghezza consentita";
    arrayMessages[9] = "Lunghezza errata";
    arrayMessages[10] = "Inserire almeno una cifra";
    arrayMessages[11] = "Numero di cifre errato";
    arrayMessages[12] = "Numero troppo grande";
    arrayMessages[13] = "Il punto non è ammesso";
    arrayMessages[14] = "Inserire 11 cifre";
    arrayMessages[15] = "Non è possibile digitare il carattere % nei campi di ricerca";
    arrayMessages[16] = "Numero non positivo";
    arrayMessages[17] = "Il carattere @ è obbligatorio";
    arrayMessages[18] = "Inserire almeno un carattere prima di @";
    arrayMessages[19] = "Inserire almeno un carattere dopo di @";
    arrayMessages[20] = "Il primo carattere non puo' essere uno spazio";

    arrayMessages[21] = "Superato il numero massimo di cifre intere";
    arrayMessages[22] = "Superato il numero massimo di cifre decimali";
    arrayMessages[23] = "La percentuale non puo' avere un valore maggiore di 100";


    arrayMessages[24] = "Numero con tutti zeri non valido";
    arrayMessages[25] = "Valore non nell'intervallo";
    arrayMessages[26] = "Lunghezza errata, eventuali zeri iniziali vengono ignorati";
    
    // MESSAGGI LOTTO 2
    arrayMessages[500] = "Codice Fiscale non valido";

    arrayMessages[4000]    = "Lunghezza massima consentita 4000 caratteri"; //Controllo della descrizione
    if ( isNaN(errorCode) )
        return("javascript:getErrorMessage: codice messaggio non numerico. ");
    if ( errorCode >= arrayMessages.length )
        return("javascript:getErrorMessage: messaggio non trovato. ");
    return arrayMessages[errorCode];
}

/*
* Svuta la stringa del messaggio
*/
function clearMessageBody() {
    controls_message_body = "";
    return;
}

/*
* Svuta la stringa del messaggio
*/
function getMessageBody() {
    return controls_message_body;
}

/*
* Mostra il messaggio
*/
function showMessageBody() {
    if(controls_message_body != "")
        alert(controls_message_body);
    return;
}

/*
* Aggiunge un messaggio alla stringa di messaggio
*/
function pushMessageBody(messageLine){
    controls_message_body += messageLine;
    controls_message_body += "\r\n";
    //return true;
}

// ------------------------------------------ VARIABILI GLOBALI ------------------------------------------------
var FIELD_SEPARATOR = "|";
var controls_delete_message = "Eliminare le informazioni selezionate ?";


// ------------------------------------------ FUNZIONI UTILIZZATE IN JSP ------------------------------------------------

/**
* Invia la richiesta ad un pagina Jsp che esegue un datalet. 
*/
function sendRequest(myForm, myAction, myBack, extFunction) {
    sendRequestCheck(myForm, myAction, myBack, extFunction, true);
}

/**
 * Invia la richiesta ad un pagina Jsp che esegue un datalet. 
 * Non viene fatto alcun controllo sui campi
 */
function sendRequestNoCheck(myForm, myAction, myBack, extFunction) {
    sendRequestCheck(myForm, myAction, myBack, extFunction, false);
}

function sendRequestCheck(myForm, myAction, myBack, extFunction, checkFields) {
   //impostazioni operazioni
    myForm.action = myAction;
    //myForm.back.value = myBack;
    //pulisco il messaggio
    clearMessageBody();
 
    myQueryOp = "";
    err = false;
    if((myBack=="") || (myBack=="false")) {
        //verifica dei campi
        if (checkFields) {
            err = allFieldsOk(myForm, myQueryOp);
            //chiamata funzione esterna
            if(!err && extFunction != "") {
                extMsg = eval(extFunction);
                if(extMsg != "") {
                    pushMessageBody(extMsg);
                    err = true;
                }
            }
        }
        //se non ci sono errori sottometto la form
        if(!err) {
            //sottomissione della form
            replaceParam(myForm);
            //disabilito tutti i bottoni della form        
            for ( i=0; i < myForm.length ; i++ ) {
                var obj = myForm.elements[i];
                if(obj.type == "button") {
                    obj.disabled = true;
                }
            }
            myForm.submit();
        }
        else {
            //mostro il messaggio
            showMessageBody();
        }
    } 
    else {
        replaceParam(myForm);
        myForm.submit();
    }
}

/**
* Viene richiamata con l'evento onLoad della pagina.
* Visualizza il messaggio di errore proveniente da un datalet.
* Imposta le variabili globali externFunction e controls_delete_message che saranno utilizzate dalla funzione sendRequest
*/
function showMessage(dlMsg, delMsg, dataOp, extLoad) {
    //settaggio variabili globali
    if(delMsg != "") controls_delete_message = delMsg;
    //visualizzazione messaggio proveniente dal datalet
    if(extLoad != "") {
        eval(extLoad);
    }
    if(dlMsg != ""){
        alert(dlMsg);
        return;
    }
    //visualizzazione messaggio operazione effettuata
    var msgOk = "";
    if(dataOp == "insert") msgOk = "Inserimento effettuato";
    if(dataOp == "delete") msgOk = "Eliminazione effettuata";
    if(dataOp == "update") msgOk = "Modifica effettuata";
    if(msgOk != "") alert(msgOk);
}

/**
* Viene richiamata con l'evento onLoad della pagina.
* Visualizza il messaggio di errore proveniente da un datalet.
* Imposta le variabili globali externFunction e controls_delete_message che saranno utilizzate dalla funzione sendRequest
*/
function showWarning(dlMsg, delMsg, warObj, dataOp, extLoad) {
    //settaggio variabili globali
    if(delMsg != "") controls_delete_message = delMsg;
    //visualizzazione messaggio proveniente dal datalet
    if(extLoad != "") {
        eval(extLoad);
    }
    if(dlMsg != ""){
        alert(dlMsg);
        return;
    }
    //visualizzazione messaggio operazione effettuata
    var msgOk = ""
    
    if (warObj != null && (warObj.value !=null && warObj.value != "")) 
        msgOk += warObj.value + "\r";
    
    if(dataOp == "insert") msgOk += "Inserimento effettuato";
    if(dataOp == "delete") msgOk += "Eliminazione effettuata";
    if(dataOp == "update") msgOk += "Modifica effettuata";
    
    if(dataOp != "") warObj.value = "";    
    
    if(msgOk != "") alert(msgOk);
}

/**
* Pulisce i campi di tipo "text" della form di input
*/
function clean(myForm) {
    for ( i=0; i < myForm.length; i++ ) {
        if (myForm.elements[i].type == "text" || myForm.elements[i].type == "password") {
            myForm.elements[i].value = "";
        }
    }
    return;
}


/**
* Confronta i due campi di tipo "password" di input
*/
function checkPwd(pwd, pwdConfirm) {
    if(pwd == pwdConfirm) return "";
    else return "Le due password non sono uguali";
}

// ------------------------------------------ FUNZIONI DI DECODIFICA ------------------------------------------------
/**
* Esegue la decodifica del nome del campo.
*/
function decodeFieldName( myName ) {
    ind1 = myName.indexOf(FIELD_SEPARATOR);
    if(ind1 != -1)
        myName = myName.substring(0, ind1);
    return myName;
}

/**
* Esegue la decodifica del nome della funzione.
*/
function decodeFunctionName( myName ){
    ind1 = myName.indexOf(FIELD_SEPARATOR);
    ind2 = myName.indexOf(FIELD_SEPARATOR, ind1+1);
    if(ind1 != -1 && ind2 != -1)
        return myName.substring(ind1+1, ind2);
    return "";
}

/**
* Esegue la decodifica della label del campo.
*/
function decodeFieldDescription( myName ){
    ind1 = myName.indexOf(FIELD_SEPARATOR);
    ind2 = myName.indexOf(FIELD_SEPARATOR, ind1+1);
    if(ind2 != -1)
        myName = myName.substr(ind2+1);
    return myName;
}

// ------------------------------------------ FUNZIONI DI VERIFICA ------------------------------------------------
/**
* Esegue la funzione di verifica myFunctionName col valore myFieldValue.
*/
function execCheck( myFunctionName, field, myQueryOp){
    if(myFunctionName == "") return 0;
    //elimino i " dal campo
    reDouble = /"+/;
    var strValue;

    //elimino il ' dal campo
    //reSingle = /'+/;
    //if(strValue != null) strValue = strValue.replace(reSingle, "''");
    if(field.type=="select-one" || field.type=="select-multiple"){
        ind=field.selectedIndex;
        if (ind==-1)
            strValue=null;
        else
            strValue=field.options[ind].value;
        if(strValue==null)strValue="";
    } else {
        strValue = field.value;
        if(strValue != null) strValue = strValue.replace(reDouble, "");
        field.value = strValue;
    }

    //assegno il nuovo valore al campo
    //if(strValue==null)strValue="";

    //codifico i caratteri speciali
    strValue=escape(strValue);

    var myStatement = "result = " + myFunctionName.substring(0, myFunctionName.indexOf(")"));
    myStatement = myStatement + ",\"" + strValue + "\",\"" + myQueryOp +"\");";

    return eval(myStatement);
}

/**
* Controlla tutti i campi di una form richiamando le opportune funzioni di verifica.
* Il nome di una funzione di verifica lo ricava dal nome del campo secondo la seguente sintassi:
* <nome campo>"_"<nome funzione controllo>"_"<label del campo>
*/
function allFieldsOk(myForm, myQueryOp) {
   var idx;
    var i;
    var errorMsg = false;
    var errorMessage="";
    var functionName;
    var fieldName;
    var fieldDescription;

    for ( i=0; i < myForm.length; i++ ){
        if (myForm.elements[i].type != "hidden") {
            //ricavo i tre campi del nome dell'elemento
            fieldName = decodeFieldName( myForm.elements[i].name );
            fieldDescription = decodeFieldDescription( myForm.elements[i].name );
            functionName = decodeFunctionName( myForm.elements[i].name );
         //se sono in una form di ricerca non devo controllare il NOTNULL
            if ((errorCode = execCheck(functionName, myForm.elements[i], myQueryOp)) != 0 ) {
                //devo aggiungere il messaggio di errore
                pushMessageBody("'" + fieldDescription + "': " + getErrorMessage(errorCode));
                if (!errorMsg) {
                    idx=i;
                    errorMsg = true;
                }
            }
        } else {
            if (myForm.elements[i].value==null)
                myForm.elements[i].value="";
        }
    }
    if(errorMsg){
        myForm.elements[idx].focus();
    }
    return errorMsg;
}

/**
* Cambia i nome dei campi alla form considerando solo la parte DB.
*/
function replaceParam(myForm) {
    
    for ( i=myForm.length-1; i >= 0; i-- ) {
        
        dbName = decodeFieldName( myForm.elements[i].name );
        myForm.elements[i].name = dbName;

    }
    return;
}

// ------------------------------------------ FUNZIONI DI UTILITA ------------------------------------------------
/**
* Mostra i nomi dei campi e il loro valore.
*/
function showAll(myForm){
    var errorMessage="";
    for ( i=0; i < myForm.length; i++ ){
        errorMessage = errorMessage + myForm.elements[i].name + '='+ myForm.elements[i].value + '\n';
    }
    alert(errorMessage);
    return;
}



/*
 * Serve per la generazione dei numeri di pagine risultanti da una ricerca.
 * numPagTot Il numero di pagine totali ottenuti dalla ricerca
 * numPagCorrente Il numero di pagina corrente da evidenziare
 */
 /* -- OLD -- 
function numeriPagine(strPagCorrente, strPagTot, strForm, ind) {
	if(strPagCorrente == "" || strPagTot == "") return;	
	if(strPagTot == "null") {		
		document.write("<td align=\"center\">");
        document.write("<p>");
		document.write("<span class=\"evidenza13\">");
		document.write(" Nessun risultato trovato ");
        document.write("</span>");
        document.write("</p>");
		document.write("</td>");
		return;
	}

	var numPagCorrente = parseInt(strPagCorrente, 10);
	var numPagTot = parseInt(strPagTot, 10);
	if(numPagCorrente <= 0) numPagCorrente = 1;
	if(numPagTot < numPagCorrente ) numPagTot = numPagCorrente;
	var numPagVisibili = 5;
	var divInt = Math.round( (numPagCorrente / numPagVisibili) - (numPagCorrente % numPagVisibili) / numPagVisibili );

	if(numPagCorrente == (divInt)*numPagVisibili) {
		//precedente
		if( (divInt-1)*numPagVisibili+1 > numPagVisibili) {
			document.write("<td width=\"150\" align=\"right\"><p><span class=\"evidenza13\"><a href='javascript:pagina(" + (divInt-1)*numPagVisibili + "," + strForm + ","+ind+")'>&lt;&lt;precedente</a></span></p></td>");
		} else {
            document.write("<td width=\"150\" class=\"sbiadito\"><span class=\"sbiadito\">&lt;&lt;precedente</span></td>");
		}

		//prima di pagina corrente
        document.write("<td align=\"center\">");
        document.write("<p>");
        document.write("<span class=\"evidenza13\">");
		for(i = (divInt-1)*numPagVisibili+1; i < numPagCorrente; i++) {			
			document.write("<a href='javascript:pagina(" + i + "," + strForm + ","+ind+")'>" + i + "</a> - ");
		}
        document.write("</span>");

		//pagina corrente		
	    document.write("<span class=\"sbiadito\">");
	    document.write(numPagCorrente);
        document.write("</span>");
        document.write("<span class=\"evidenza13\">"); 
        if (numPagCorrente <  parseInt(strPagTot)){       
	        document.write(" - ");
            document.write("</span>");
        }
        
        //dopo di pagina corrente
        document.write("<span class=\"evidenza13\">");
		for(i = numPagCorrente+1; i <= numPagTot && i <= (divInt+1)*numPagVisibili; i++) {
			document.write("<a href='javascript:pagina(" + i + "," + strForm + ","+ind+")'>" + i + "</a>");
			if ((i + 1) <= numPagTot && (i + 1) <= (divInt+1)*numPagVisibili) {
			    document.write(" - ");
			}
		}
        document.write("</span>");
        document.write("</p>");
		document.write("</td>");

		//successivo
		if( numPagTot > (divInt)*numPagVisibili ) {			
			document.write("<td width=\"150\" align=\"right\"><p><span class=\"evidenza13\"><a href='javascript:pagina(" + (divInt*numPagVisibili+1) + "," + strForm + ","+ind+")'>successivo&gt;&gt;</a></span></p></td>");
		} else {
            document.write("<td width=\"150\" class=\"sbiadito\"><span class=\"sbiadito\">successivo&gt;&gt;</span></td>");
		}
	} else {
		//precedente
		if( (divInt)*numPagVisibili+1 > numPagVisibili) {
			document.write("<td width=\"150\" align=\"right\"><p><span class=\"evidenza13\"><a href='javascript:pagina(" + (divInt)*numPagVisibili + "," + strForm + ","+ind+")'>&lt;&lt;precedente</a></span></p></td>");
		} else {
			document.write("<td width=\"150\" class=\"sbiadito\"><span class=\"sbiadito\">&lt;&lt;precedente</span></td>");
		}

		//prima di pagina corrente
        document.write("<td align=\"center\">");
        document.write("<p>");
        document.write("<span class=\"evidenza13\">");
		for(i=(divInt*numPagVisibili)+1; i < numPagCorrente; i++) {
			document.write("<a href='javascript:pagina(" + i + "," + strForm + ","+ind+")'>" + i + "</a> - ");
		}
        document.write("</span>");

		//pagina corrente
        document.write("<span class=\"sbiadito\">");
		document.write(numPagCorrente);
        document.write("</span>");
        document.write("<span class=\"evidenza13\">");
		document.write(" - ");
        document.write("</span>");

		//dopo di pagina corrente
        document.write("<span class=\"evidenza13\">");
		for(i = numPagCorrente+1; i <= numPagTot && i <= (divInt+1)*numPagVisibili; i++) {
			document.write("<a href='javascript:pagina(" + i + "," + strForm + ","+ind+")'>" + i + "</a>");
			if ((i + 1) <= numPagTot && (i + 1) <= (divInt+1)*numPagVisibili) {
			    document.write(" - ");
			}
		}
        document.write("</span>");
        document.write("</p>");
		document.write("</td>");

		//successivo
		if( numPagTot > (divInt+1)*numPagVisibili ) {
			document.write("<td width=\"150\" align=\"right\"><p><span class=\"evidenza13\"><a href='javascript:pagina(" + ((divInt+1)*numPagVisibili+1) + "," + strForm + ","+ind+")'>successivo&gt;&gt;</a></span></p></td>");
		} else {
            document.write("<td width=\"150\" class=\"sbiadito\"><span class=\"sbiadito\">successivo&gt;&gt;</span></td>");
		}
	}
}

---  OLD  ---
*/

/** NEW PAGINAZIONE */
function numeriPagine(strPagCorrente, strPagTot, strForm, ind) {
	if(strPagCorrente == "" || strPagTot == "") return;	
	if(strPagTot == "null") {		
		document.write("<td align=\"center\">");
        document.write("<p>");
		document.write("<span class=\"PagPaginatore\">");
		document.write(" Nessun risultato trovato ");
        document.write("</span>");
        document.write("</p>");
		document.write("</td>");
		return;
	}

	var numPagCorrente = parseInt(strPagCorrente, 10);
	var numPagTot = parseInt(strPagTot, 10);
	if(numPagCorrente <= 0) numPagCorrente = 1;
	if(numPagTot < numPagCorrente ) numPagTot = numPagCorrente;
	var numPagVisibili = 5;
	var divInt = Math.round( (numPagCorrente / numPagVisibili) - (numPagCorrente % numPagVisibili) / numPagVisibili );

	if(numPagCorrente == (divInt)*numPagVisibili) {		
		//precedente
		if( (divInt-1)*numPagVisibili+1 > numPagVisibili) {
			document.write("<td align=\"center\"><p><span class=\"PagPaginatoreOff\"><a href='javascript:pagina(" + (divInt-1)*numPagVisibili + "," + strForm + ","+ind+")'>&lt;&lt;</a></span></p></td>");
		} else {
            document.write("<td class=\"PagPaginatoreOff\" align=\"right\"><span class=\"PagPaginatoreOff\">&lt;&lt;</span></td>");
		}

		//prima di pagina corrente
        document.write("<td align=\"center\">");
        document.write("<p>");
        document.write("<span class=\"PagPaginatoreOff\">");
		for(i = (divInt-1)*numPagVisibili+1; i < numPagCorrente; i++) {			
			document.write("<a href='javascript:pagina(" + i + "," + strForm + ","+ind+")'>" + i + "</a> | ");
		}
        document.write("</span>");

		//pagina corrente				
	    document.write("<span class=\"PagPaginatoreOff\">");
	    document.write(numPagCorrente);
        document.write("</span>");
        document.write("<span class=\"PagPaginatoreOff\">"); 
        if (numPagCorrente <  parseInt(strPagTot) && numPagCorrente <(divInt)*numPagVisibili){        	     
	        document.write(" | ");
            document.write("</span>");
        }
              
		//successivo
		if( numPagTot > (divInt)*numPagVisibili ) {					
			document.write("<td align=\"center\"><p><span class=\"PagPaginatoreOff\"><a href='javascript:pagina(" + (divInt*numPagVisibili+1) + "," + strForm + ","+ind+")'>&gt;&gt;</a></span></p></td>");
		} else {			
            document.write("<td class=\"PagPaginatoreOff\"><span class=\"PagPaginatoreOff\">&gt;&gt;</span></td>");
		}
				
	} else {
		//precedente
		if( (divInt)*numPagVisibili+1 > numPagVisibili) {			
			document.write("<td align=\"center\"><p><span class=\"PagPaginatoreOff\"><a href='javascript:pagina(" + (divInt)*numPagVisibili + "," + strForm + ","+ind+")'>&lt;&lt;</a></span></p></td>");
		} else {			
			document.write("<td class=\"PagPaginatoreOff\" align=\"right\" ><span class=\"PagPaginatoreOff\">&lt;&lt;</span></td>");
		}

		//prima di pagina corrente
        document.write("<td align=\"center\">");
        document.write("<p>");
        document.write("<span class=\"PagPaginatoreOff\">");
		for(i=(divInt*numPagVisibili)+1; i < numPagCorrente; i++) {
			document.write("<a href='javascript:pagina(" + i + "," + strForm + ","+ind+")'>" + i + "</a> | ");
		}
        document.write("</span>");

		//pagina corrente
        document.write("<span class=\"PagPaginatore\">");
		document.write(numPagCorrente);
        document.write("</span>");
        document.write("<span class=\"PagPaginatoreOff\">");
        if (numPagCorrente < numPagTot){
			document.write(" | ");		
		}
        document.write("</span>");

		//dopo di pagina corrente
        document.write("<span class=\"PagPaginatoreOff\">");
		for(i = numPagCorrente+1; i <= numPagTot && i <= (divInt+1)*numPagVisibili; i++) {
			document.write("<a href='javascript:pagina(" + i + "," + strForm + ","+ind+")'>" + i + "</a>");
			if ((i + 1) <= numPagTot && (i + 1) <= (divInt+1)*numPagVisibili) {
			    document.write(" | ");
			}
		}
        document.write("</span>");
        document.write("</p>");
		document.write("</td>");

		//successivo
		if( numPagTot > (divInt+1)*numPagVisibili ) {
			document.write("<td align=\"center\"><p><span class=\"PagPaginatoreOff\"><a href='javascript:pagina(" + ((divInt+1)*numPagVisibili+1) + "," + strForm + ","+ind+")'>&gt;&gt;</a></span></p></td>");
		} else {
            document.write("<td class=\"PagPaginatoreOff\"><span class=\"PagPaginatoreOff\">&gt;&gt;</span></td>");
		}
	}
}

/** FINE NOUVA PAGINAZIONE */


/*
* Reimposta a 1 il numero di pagina da visualizzare in caso di nuova ricerca
*/
function fnResetPage(myForm,myAction,myDataOp,myQueryOp,myBack){
    myForm.NumPagina.value=1;
    sendRequest(myForm,myAction,myDataOp,myQueryOp,myBack);
}


    function pulisciCombo(combo) {
     while (combo.length != 0) {
          combo.options[0] = null;
        }
    }

    /*
    ** funzione per valorizzare 2 combo a cascata e pulire una textarea oppure un terzo combo e una textarea oppure un quarto combo
    ** @param combo1 E' il combo da cui si seleziona un valore
    ** @param combo2 E' il combo da valorizzare in base al valore selezionato al combo1
    ** @param element3 E' la textarea o l'eventuale terzo combo da pulire
    ** @param element4 E' la textarea o l'eventuale quarto combo da pulire
    ** @param arr_value E' l'array contenente i valori con cui caricare il combo2
    ** arr_value è del tipo : (00|0000|descrizione)
    */
    function valorizzaCombo(combo1,combo2,element3,element4,arr_value) {
        if (combo2 != null && combo2!="") pulisciCombo(combo2);
        if (element3 != null && element3!=""){
            if(element3.type=="textarea" || element3.type=="text") pulisciText(element3);
            if(element3.type=="select-one")     pulisciCombo(element3);
        }
        if (element4 != null && element4!=""){
            if(element4.type=="textarea") pulisciText(element4);
            if(element4.type=="select-one")     pulisciCombo(element4);
        }
        indValue = combo1.selectedIndex;
        codValue = combo1.options[indValue].value;
        var j=1;
        var option = new Option("", "", false, true);
        combo2.options[0]=option;
        for(i=0; i < arr_value.length; i++) {
            str = arr_value[i];
            vCodValue = str.substring(0, str.indexOf("|"));
            str = str.substring(str.indexOf("|")+1);
            vCodSubValue = str.substring(0, str.indexOf("|"));
            str = str.substring(str.indexOf("|")+1);
            vDescSubValue = str.substring(str.indexOf("|")+1);
            if(codValue == vCodValue) {
                var option = new Option(vDescSubValue, vCodSubValue, false, false);
                combo2.options[j]=option;
                j++;
            }
        }
        combo2.options[0].selected=true;
    }


/*
    ** funzione per valorizzare i livelli 2,3,4 di una serie di combo a cascata (max 4).
    ** Se il parametro code è valorizzato viene anche selezionato il valore corrispondente
    ** @param combo1 E' il combo da cui si seleziona un valore
    ** @param combo2 E' il combo da valorizzare in base al valore selezionato al combo1
    ** @param element3 E' la textarea o l'eventuale terzo combo da pulire
    ** @param element4 E' la textarea o l'eventuale quarto combo da pulire
    ** @param arr_value E' l'array contenente i valori con cui caricare il combo2
    ** arr_value è del tipo : (00|0000|descrizione)
    ** code : è il codice da selezionare tra quelli che vengono caricati.
    **        Se non è impostato viene selezionata la riga vuota
    */
    function valorizzaComboBox(combo1,combo2,element3,element4,arr_value,code) {
        if (combo2 != null && combo2!="") pulisciCombo(combo2);
        if (element3 != null && element3!=""){
            if(element3.type=="textarea" || element3.type=="text") pulisciText(element3);
            if(element3.type=="select-one")     pulisciCombo(element3);
        }
        if (element4 != null && element4!=""){
            if(element4.type=="textarea") pulisciText(element4);
            if(element4.type=="select-one")     pulisciCombo(element4);
        }
        indValue = combo1.selectedIndex;
        codValue = combo1.options[indValue].value;
        var j=1;
        var jApp=0;
        var option = new Option("--------------------", "", false, true);
        combo2.options[0]=option;
        for(i=0; i < arr_value.length; i++) {
            str = arr_value[i];
            vCodValue = str.substring(0, str.indexOf("|"));
            str = str.substring(str.indexOf("|")+1);
            vCodSubValue = str.substring(0, str.indexOf("|"));
            str = str.substring(str.indexOf("|")+1);
            vDescSubValue = str.substring(str.indexOf("|")+1);
            if(codValue == vCodValue) {
               if ((code !=null && code!="") && code == vCodSubValue){
                     jApp=j;
                     var option = new Option(vDescSubValue, vCodSubValue, false, true);
               }else
                     var option = new Option(vDescSubValue, vCodSubValue, false, false);
                combo2.options[j]=option;
                j++;
            }
        }
        combo2.options[jApp].selected=true;
    }


    /*
    ** funzione per impostare un campo hidden con il valore del combo selezionato
    ** @param combo E' il combo da cui si preleva il valore selezionato
    ** @param hidden E' il campo da valorizzare
    */
        function impostaValue(combo,hidden){
          ind=combo.selectedIndex;
          hidden.value=combo.options[ind].value;
        }

    /*
    ** funzione per impostare un valore nel combo con il valore passato
    ** @param combo E' il combo in cui bisogna impostare il valore
    ** @param code E' il codice del combo che bisogna impostare
    */
    function impostaCombo(combo,code) {
           for(i=0;i<combo.length;i++){
                if (combo.options[i].value==code){
                     combo.options[i].selected=true;
                }
          }
     }

    /*
    ** funzione per valorizzare combo multipli a cascata
    ** @param combo1 E' il combo da cui si seleziona un valore
    ** @param combo2 E' il combo da valorizzare in base al valore selezionato al combo1
    ** @param combo3 E' l'eventuale combo da pulire
    ** @param arr_value E' l'array contenente i valori con cui caricare il combo
    */
    function valorizzaComboMultiple(combo1,combo2,combo3,arr_value) {
         if (combo3 != null || combo3!="") pulisciCombo(combo3);
        pulisciCombo(combo2);

        for(i=0;i<combo1.length;i++){
            if (combo1.options[i].selected){
                    //indValue = combo1.options[i].selected;
                    codValue = combo1.options[i].value;
                        var j=1;
                        var option = new Option("", "", false, true);
                        combo2.options[0]=option;
                        for(i=0; i < arr_value.length; i++) {
                                str = arr_value[i];
                                vCodValue = str.substring(0, str.indexOf("|"));
                                str = str.substring(str.indexOf("|")+1);
                                vCodSubValue = str.substring(0, str.indexOf("|"));
                                str = str.substring(str.indexOf("|")+1);
                                vDescSubValue = str.substring(str.indexOf("|")+1);
                                if(codValue == vCodValue) {
                                     var option = new Option(vDescSubValue, vCodSubValue, false, false);
                                     combo2.options[j]=option;
                                     j++;
                              }
               }
             }
        }
        //combo2.options[0].selected=true;
    }

    /**
    * Funzione utilizzata per controllare la lunghezza del contenuto di una textarea
    ** @param nomeTextarea E' il nome della textarea
    ** @param valueTextarea E' il cntenuto della textarea
    ** @param lungTextarea E' la lunghezza massima consentita
    */
         function checkTextArea(nomeTextarea, valueTextarea, lungTextarea){
          if (valueTextarea.length>lungTextarea)
               return  nomeTextarea + ": Superata la lunghezza massima ("+ lungTextarea+" caratteri)";
            else return "";
        }
/*
* Creo il nome del file del HELP da richiamare.
*/
/*function callHelpFile(nomeFile){
  nomeFile = arrayHelpPages[nomeFile];
  return nomeFile;
}*/
/*
** Funzione per il caricamento delle lookUp di documentazione
*/
function lookUpHelp(url){
  var win = open(url,"lookHelp","Scrollbars=1,resizable=1,width=700,height=400,titlebar=yes");
  if (win.opener == null) {
    win.opener = self;
    win.focus();
  }
}

/*
* Creo il link del file del HELP da richiamare.
*/
function HELP(sNomeMappa){
  //var url = callHelpFile(sNomeMappa);
  var url = "../html/help/"+sNomeMappa;
  document.write("<a href=\"javascript:lookUpHelp('"+url+"')\" class=\"TestataLink\" title=\"Visualizza la pagina di aiuto\"><img src=\"../html/img/help.jpeg\" border=\"0\"></a>");
//document.write("<img src=\"../html/img/help.jpeg\" border=\"0\">");
}




//-- CONVERSIONE EURO

MAX_LEN_EURO_FORMATTATO = 20;

/**
* Esegue la decodifica del nome della funzione.
*/
function decodeFunctionName( myName ){
  ind1 = myName.indexOf(FIELD_SEPARATOR);
  ind2 = myName.indexOf(FIELD_SEPARATOR, ind1+1);
  if(ind1 != -1 && ind2 != -1)
  return myName.substring(ind1+1, ind2);
  return "";
}

/*
Elimina da una stringa(stringa) un carattere specificato(Chr).
Ritorna la stringa senza il carattere.
*/
function CLEANCHARACTER(Chr,stringa){
  for (r=0; r < stringa.length ; r++ ){
    stringa = stringa.replace(Chr,"");    //Pulisco la stringa del carattere specificato ritornandola.
  }
  return stringa;
}

/*
Sostituisce in una stringa(stringa) un carattere specificato(Chr1), con un altro(Chr2).
Ritorna la stringa modificata.
*/
function SOSTCHARACTER(Chr1,Chr2,stringa){
  for (r=0; r < stringa.toString().length ; r++ ){
    stringa = stringa.toString().replace(Chr1,Chr2);
  }
  return stringa;
}

/*
Toglie gli eventuali spazi, se la stringa non rimane vuota controlla che i caratteri presenti siano
compresi tra 0 e 9, compreso il ","
*/
function CONTROLLANUMERI(value){
  var indSpazio = value.indexOf(" ");
  if(indSpazio != -1) {
      return true; // Controllo gli eventuali spazi nel valore
  }
  /*for (d = 0; d < value.length ; d++ ){
    value = value.replace(" ","");          //Elimino gli eventuali spazi nella stringa
  }
  */
  if (value != ""){
    for (p=0; p < value.length ; p++ ){
      var ch = value.substring(p,p+1);
      if ( (ch.charCodeAt() < 48) || (ch.charCodeAt() > 57) ){    //Controllo che i caratteri siano compresi tra 0 e 9
        if (ch != ","){                 //Nei caratteri consentiti comprendo anche la virgola ","
          p = value.length;
          return true;
        }
      }
    }
  }
  return false;
}

function CONTROLLAPUNTO(value){
  var result = false;
  var trovato = 0;
  for(var p=0; p<value.length; p++) {
    var lett = value.substring(p,p+1);
    if(lett == ","){
      trovato++;
    }
  }
  if(trovato >1){
    result = true;
  }
  else {
    result = false;
  }
  return result;
}

/*
Controlla la lunghezza di una stringa: se è maggiore di n ritorna TRUE, altrimenti FALSE
*/
function controlloLunghezza(stringa,n){
  for (x = 0 ; x < stringa.length ; x++ ) {
    stringa = stringa.replace(",","");
  }
  if (stringa.length > n) {
    return true;
  }
  return false;
}

function controlloFormatoEURO(obb,value){
    value = unescape(value);
  if(MANDATORY(obb, "false", value, "") != 0) return 1; //Obbligatorietà del campo
  value = CLEANCHARACTER(".",value);          //Elimino il carattere dalla stringa
  if(CONTROLLANUMERI(value)) return 6;       //Ammessi solo caratteri numerici
  if(CONTROLLAPUNTO(value)) return 6;        //E' ammesso un solo punto
  var indPunto = value.indexOf(",");
  if(indPunto != -1) {    //C'è il punto
    var intero = value.substring(0,indPunto);
    var decimale = value.substring(indPunto+1);
    if (controlloLunghezza(intero,13)) return 9;  //Controllo la lunghezza della parte intera del numero  (MAX 13)
    if (controlloLunghezza(decimale,2)) return 9;  //Controllo la lunghezza della parte decimale del numero(MAX 2)
  } else {          //Non c'è il punto
    if (controlloLunghezza(value,13)) return 9;   //Controllo la lunghezza del numero (MAX 13)
  }
  return 0;
}



function fieldToEURO(myField){
  var valoreTemporaneo = toEuro(myField.value,true);
  valoreTemporaneo = valoreTemporaneo.toString();
  if (valoreTemporaneo.length <= MAX_LEN_EURO_FORMATTATO){
    myField.value = valoreTemporaneo;
  }
}

function punti(numero){
    numero=numero.toString();
    dp=numero.indexOf(",")!=-1?numero.substring(0,numero.indexOf(",")).length:numero.length;
    for (i=dp-3;i>0;i-=3)
        numero=numero.substring(0,i)+"."+numero.substr(i);
    numero=numero.replace(/-,/,"-");
    return numero
    }

function stampaEuroLabel(numero,nomeCampo){
         document.pageForm.elements[nomeCampo].value = numberToEURO(numero);
}


//--FINE CONVERSIONE EURO

/*
* Richiamata dal nome del campo.
* Controlla che nella stringa di input non sia presente il carattere '%';
* se il parametro 'obb' è =true, effettua anche il controllo di obbligatorietà
*/
function CHECKCAR(obb,obbSearch,value){
  for(var i=0; i<value.length; i++ ) {
          value = value.replace("%20"," ");        //tolgo il valore esadecimale dello spazio e lo sostituisco con " "
          value = value.replace("%27"," ");        //tolgo il valore esadecimale dell'apice e lo sostituisco con " "
  }
  if(MANDATORY(obb,obbSearch,value,"") != 0) return 1;
  var trovato = 0;
  for(var p=0; p<value.length; p++) {
    var lettera = value.substring(p,p+1);
    if(lettera == "%"){
      trovato++;
    }
  }
  if(trovato > 0) return 15;
  return 0;
}

/*
* Controlla che nella stringa di input non sia presente il carattere '%'
*/
function checkPerc(value){
  var trovato = 0;
  for(var p=0; p<value.length; p++) {
    var lettera = value.substring(p,p+1);
    if(lettera == "%"){
      trovato++;
    }
  }
  if(trovato > 0) return false;
  return true;
}


/*
Controlla la lunghezza di una stringa: se è minore di num ritorna FALSE, altrimenti TRUE
*/
function checkLength(stringa,num){
  for(var x=0 ; x<stringa.length; x++) {
    stringa = stringa.replace(",","");
  }
  if (stringa.length < num) {
    return false;
  }
  return true;
}

/******************************************************************************/
/*
* Il campo deve essere obbligatorio
*/
function NOTNULL(value) {
    re = /^\s+/g;
    var app = value.replace(re, "");
    if (app == "") return 1;
    return 0;
}


/*
* Verifica se il campo contiene un valore numerico
*/
function NOCONTROL(obb, obbSearch, value, queryOp) {
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;
    return 0;
}


/*
* Verifica l'obbligatorietà del campo in base alla queryOp
*/
function MANDATORY(obb, obbSearch, value, queryOp) {
    if(queryOp == "search") {
        if(obbSearch){
            return NOTNULL(value);
        }
    }
    else {
        if(obb) return NOTNULL(value);
    }
    return 0;
}

/*
* Il campo deve essere obbligatorio
*/
function MAXLEN(obb, obbSearch, num, value, queryOp) {
    
    //inizio vittorio 18/02/2004
    value = ControlSpazi(value);
    //fine vittorio 18/02/2004
    
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;

    // Assicura che i caratteri non siano stati sostituiti con le
    // relative rappresentazioni escaped
    // es. escape(" ") == "%20" ha una lunghezza di 3 caratteri anziche' 1
    unescapedValue = unescape(value);
    if(unescapedValue.length > num && num==4000)
        return 4000;
    if(unescapedValue.length > num) {
        return 8;
    }
    return 0;
}


/******************************************************************************/

/*
* Ritorna il numero in input, aggiungendo uno 0 davanti se esso è < 10.
*/
function formatNum(num) {
    var newNum = "";
    if(num < 10) newNum = "0"+num;
    else newNum = num;
    return newNum;
}

/*
* Ritorna la data di sistema, nel formato dd/mm/yyyy.
*/
function sysDate() {
    var date = new Date();
    var day = date.getDate();
    var month = date.getMonth()+1;
    var year = date.getYear();
    if(navigator.appName=="Netscape"){
        year = year + 1900;
    }
    var systemDate = formatNum(day)+"/"+formatNum(month)+"/"+formatNum(year);
    return systemDate;
}

/**
* Confronta due date. NB: devo essere sicuro di passare le due date nel formato gg/mm/aaaa
*/
function confrontaDate(data1, data2) {
   if(data1 == "" || data2 == "") {
        return(true);
    } else {
        var valore1 = parseInt(data1.substring( 6, 10 ) + data1.substring( 3, 5 ) + data1.substring( 0, 2 ));
        var valore2 = parseInt(data2.substring( 6, 10 ) + data2.substring( 3, 5 ) + data2.substring( 0, 2 ));
        return( valore1 <= valore2 );
    }
}

/**
* Verifica che la stringa passata non contenga spazi iniziali e che abbia
* una dimensione massima
*/
function MAXLEN_NOSPACE(obb, obbSearch, num, value, queryOp) {
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;

    // Assicura che i caratteri non siano stati sostituiti con le
    // relative rappresentazioni escaped
    // es. escape(" ") == "%20" ha una lunghezza di 3 caratteri anziche' 1
    unescapedValue = unescape(value);

    if (unescapedValue.charAt(0) == " ") {
        return 20;
    }
    if(unescapedValue.length > num && num==4000)
        return 4000;
    if(unescapedValue.length > num) {
        return 8;
    }
    return 0;
}



/**
* Viene richiamata con l'evento onLoad della pagina.
* Visualizza il messaggio di errore proveniente da un datalet.
* Imposta le variabili globali externFunction e controls_delete_message che saranno utilizzate dalla funzione sendRequest
*/
function showMessageOk(msg,lingua) {
    //visualizzazione messaggio operazione effettuata con successo
    if(msg == "OK" || msg == "" || msg == "0") {
          var msg = settaShowMessageLingua(lingua);
         alert(msg);
    }
    else {//visualizza messaggi di errore
         showMessage(msg);
    }

}

/*  visualizza il caratteri di obbligatorieta'
@param value e' una stringa, indica se il caratteri di obbligatorieta' e' da 
             visualizzare o  no
*/
function FlagCampiObbligatori(value){
    if (value != "F"){
        return "*";
    } else {
        return "";
    }
}

/**
 * Verifica che il campo sia numerico, effettua ulteriori controlli
 * in base al valore del parametro format
 * Valori accettati dalla stringa di format
 * 0 accetta zeri iniziali
 * - accetta numeri negativi
 * m controlla la lunghezza minima
 * M controlla la lunghezza massima
 * v controlla che non sia minore del valore specificato
 * V controlla che non sia maggiore del valore specificato
 * Autore : DF
 */
function NUMBERLENEX(obb, obbSearch, format, lenMin, lenMax, valueMin, valueMax, value, queryOp) {

    //value = ControlSpazi(value);

    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) {
        return 1;
    }

    value = unescape(value);
    var acceptLeadZeros     = format.indexOf("0") >= 0;
    var acceptNegative      = format.indexOf("-") >= 0;
    var checkMinLen         = format.indexOf("m") >= 0;
    var checkMaxLen         = format.indexOf("M") >= 0;
    var checkMinValue       = format.indexOf("v") >= 0;
    var checkMaxValue       = format.indexOf("V") >= 0;
    
    var valueInteger = parseInt(value);
    if (acceptNegative == false && valueInteger < 0) {
        return 16;
    }
    
    if (acceptNegative) {
        if (value.length > 0 && value.charAt(0) == '-') {
            value = value.substring(1);
            value = ControlSpazi(value);
        }
    }

    if (!isDigit(value)) {
        return 6;
    }

    len = value.length;
    if (len > 0) {
        if (!acceptLeadZeros) {
            i = 0;
            for (; i < len; i++) {
                if (value.charAt(i) != '0') {
                    break;
                }
            }
            if (i == len) {
                return 24;
            }
            value = value.substring(i);
            len = value.length;
        }
        
        if (checkMinValue && valueInteger < valueMin) {
            return 25;
        }
        if (checkMaxValue && valueInteger > valueMax) {
            return 25;
        }
        if (checkMinLen && len < lenMin) {
            return acceptLeadZeros ? 9 : 26;
        }
        if (checkMaxLen && len > lenMax) {
            return acceptLeadZeros ? 9 : 26;
        }

    }            

    return 0;
}




//**********************************************************//
//    LOTTO 2                                                        //
//    disabilitaControlliValidita(field)    //
//                                                            //
//    Funzione che rinomina i controlli di una form forzando a  //
//  false i parametri passati alle funzioni di controllo sui //
//    campi                                                     //
//**********************************************************//

function disableChecks(myForm) {
  var i=0;
  for ( i=0; i < myForm.length ; i++ ) {
   
   var obj = myForm.elements[i];
   var name= obj.name;
   var newname=name.replace('true','false');
   obj.name=newname;
   }
}



//**************************************************//
//    abilita i campi form(field)                            //
//                                                                    //
//    funzione che valorizza,                                    //
//    disabilita                                                    //
//    cambia il backgrauond dei campi form                  //
//controlla se e una combo per la valorizzazione    //
//  passando in input l'oggeto                            //
//   valore di default                                        //    
//  ed il nome della classe                                //
//  14/09/04 dino
//***************************************************//

function enableField(obj, valore, classe) 
{

    if (obj)
    {
        obj.className = classe;
        obj.disabled = false;
        if(obj.type=="select-one" || obj.type=="select-multiple")
        {
            impostaCombo(obj,valore);
        }
        else
        {
            obj.value = valore;
        }
    }    


}

//**************************************************//
//    diabilita i campi form(field)                            //
//                                                                    //
//    funzione che pulisce,                                    //
//    disabilita                                                    //
//    cambia il backgrauond dei campi form (bianco)      //
//  passando in input l'oggeto                            //
//  il valore                                                    //
//  ed il nome della classe                                //
//  controllo del tièo di oggetto nel caso di una combo
//  14/09/04 dino
//*************************************************//

function disabledField(obj, valore, classe) 
{

    if (obj)
    {
        if(obj.type=="select-one" || obj.type=="select-multiple")
        {
            impostaCombo(obj,valore);
        }
        else
        {
            obj.value = valore;
        }
    }    
    obj.disabled = true;
    obj.className = classe;
}

//**************************************************//
//    abilita i campi form(field)                            //
//                                                                    //
//    funzione che valorizza,                                    //
//    disabilita                                                    //
//    cambia il backgrauond dei campi form                  //
//  passando in input l'oggeto                            //
//  ed il nome della classe                                //
//***************************************************//

function enableFieldNoSet(obj, classe) 
{
    if (obj)
    {
        obj.className = classe;
        obj.disabled = false;
    }    
}


//**************************************************//
//    diabilita i campi form(field)                            //
//                                                                    //
//    funzione che pulisce,                                    //
//    disabilita                                                    //
//    cambia il backgrauond dei campi form (bianco)      //
//  passando in input l'oggeto                            //
//  ed il nome della classe                                //
//*************************************************//

function disabledFieldNoSet(obj, classe) 
{
    if (obj)
    {
        obj.disabled = true;
        obj.className = classe;
    }    
}


/**
 * Verifica che un campo sia valido.
 * Il campo e' nel formato Name|Control Function|Error Description
 * In caso di errore visualizza il messaggio associato al controllo
 * Autore : DF
 */
function assertField(obj, myQueryOp) {
    var fieldName = decodeFieldName( obj.name );
    var fieldDescription = decodeFieldDescription( obj.name );
    var functionName = decodeFunctionName( obj.name );
    
    if ((errorCode = execCheck(functionName, obj, myQueryOp)) != 0 ) {
        alert("'" + fieldDescription + "': " + getErrorMessage(errorCode));
        return false;
    }
    return true;
}

/*
* Funzione che controlla che un campo di testo abbia lunghezza
* Compresa tra numMin e numMax. Qualora numMax sia minore o
* uguale a zero controlla solo numMin
* -- CARLO 12/05/2005 --
*/
function MINMAXLEN(obb, obbSearch, numMax, numMin, value, queryOp) {
    
    value = ControlSpazi(value);
    
    if(MANDATORY(obb, obbSearch, value, queryOp) != 0) return 1;

    unescapedValue = unescape(value);
    if(unescapedValue.length > numMax && numMax==4000)
        return 4000;
    if(numMax > 0) {
		    if(unescapedValue.length > numMax) {
		        return 8;
		    }
		    if(unescapedValue.length < numMin) {
		    	return 27;
		    }
    } else {
    		if(unescapedValue.length < numMin) {
		        return 27;
		    }
	  }
    
    return 0;
}