//Associa il gestore di evento document_onkeydown() al keydown sul documento
window.document.onkeydown = document_onkeydown;

//Contiene 1 se il browser che si sta utilizzando Ã¨ internet explorer altrimenti 0
var ie = (document.all) ? 1:0;

function document_onkeydown() {
    
}

/*
 * Rimuove gli spazi iniziali e finali da una stringa
 */
function Trim(s)
{
  // Remove leading spaces and carriage returns

  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r'))
  {
    s = s.substring(1,s.length);
  }

  // Remove trailing spaces and carriage returns

  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r'))
  {
    s = s.substring(0,s.length-1);
  }
  return s;
}



//funzione per il controllo della alfanumericitÃ¨
//-------------------------------------------------------------------
//I parametri da passare saranno:
//
//	STRINGA:		rappresenta la stringa di catatteri da controllare
//
//	CONTROLLO:		stringa di due caratteri (il primo alfabetico ed
//					il secondo numerico che indicheranno i controlli
//					da fare
//
//	Tipi di CONTROLLO:		A1	Albabetico Minuscolo
//							A2	Albabetico Maiuscolo
//							A3	Albabetico Maiuscolo + Minuscolo + Spazio + Apice
//							B1	AlbaNumerico Minuscolo
//							B2	AlbaNumerico Maiuscolo
//							B3	AlfabeticoMaiuscolo + Minuscolo + Numerico + Spazio + Virgola + Punto + Apice
//							B4	AlfabeticoMaiuscolo + Minuscolo + Numerico + Spazio + Virgola + Punto + Apice + &
//							N1	Numerico Intero
//							N2	Numerico + Virgola
//							N3	Numerico + Virgola + Punto
//							N4	Numerico + Punto
//							C1  Numerico + puntoevirgola  //concatenazione di valori
//-------------------------------------------------------------------
function AlfaNumerico(stringa,controllo)
{
//alert("Controllo chiesto " + controllo);
	var punto 					= 0;
	var virgola 				= 0;
	var elemento 				= "";
	var contatore 				= 0;
	var StrSpazio 				= " ";
	var StrSommaDiff 			= "-+";
	var StrApice 				= "'";
	var StrAnd 				= "&";
	var StrSlash 				= "/";
	var StrPunto 				= ".";
	var StrVirgola 				= ",";
	var StrDuePunti 			= ":";
	var StrNumerico 			= "0123456789";
	var StrAlfabeticoMinuscolo              = "abcdefghilmnopqrstuvzwyjkx!";
	var StrAlfabeticoMaiuscolo              = "ABCDEFGHILMNOPQRSTUVZWYJKX";
	var StrAccenti 				= "Ã¨Ã¨Ã¨Ã¨Ã¨`Ã¨";
	var StrUmpercente			= "@";
	var StrParentesi			= "()[]{}";
        var StrConcat				= "0123456789;";
        var StrMultivalore			= "Ã¨Ã¨_-;";//Aggiungere qui eventuali caratteri speciali da aggiunere ai numerici

	switch (controllo)
	{

		//Alfabetico Minuscolo
		case "A1" :
		{
			StrRicerca = StrAlfabeticoMinuscolo;
			//alert(StrRicerca);
		}
		break;
		//Alfabetico Maiuscolo
		case "A2" :
		{
			StrRicerca = StrAlfabeticoMaiuscolo;
			//alert(StrRicerca);
		}
		break;
		//Alfabetico Maiuscolo e Minuscolo con Spazio
		case "A3" :
		{
			StrRicerca = StrAlfabeticoMaiuscolo + StrAlfabeticoMinuscolo + StrSpazio + StrApice;
			//alert(StrRicerca);
		}
		break;
		//AlfaNumerico Minuscolo
		case "B1" :
		{
			StrRicerca = StrAlfabeticoMinuscolo + StrNumerico;
			//alert(StrRicerca);
		}
		break;
		//AlfaNumerico Maiuscolo
		case "B2" :
		{
			StrRicerca = StrAlfabeticoMaiuscolo + StrNumerico;
			//alert(StrRicerca);
		}
		break;
		//Alfa Numerico Maiuscolo + Minuscolo + Numerico + Spazio + Virgola + Punto + Apice + Slash
		case "B3" :
		{
			StrRicerca = StrAlfabeticoMaiuscolo + StrAlfabeticoMinuscolo + StrNumerico + StrSpazio + StrVirgola + StrPunto + StrApice + StrDuePunti + StrSlash + StrAccenti + StrSommaDiff + StrAnd + StrUmpercente + StrParentesi+StrMultivalore;
//			alert(StrRicerca);
		}
		break;
		//Alfa Numerico Maiuscolo + Minuscolo + Numerico + Spazio + Virgola + Punto + Apice
		case "B4" :
		{
			StrRicerca = StrAlfabeticoMaiuscolo + StrAlfabeticoMinuscolo + StrNumerico + StrSpazio + StrVirgola + StrPunto + StrApice + StrDuePunti + StrAnd;
			//alert(StrRicerca);
		}
		break;
		//Numerico Intero
		case "N1" :
		{
			StrRicerca = StrNumerico;
			//alert(StrRicerca);
		}
		break;
		//Numerico + Virgola
		case "N2" :
		{
			StrRicerca = StrNumerico + StrVirgola;
			//alert(StrRicerca);
		}
		break;
		//Numerico + Virgola + Punto
		case "N3" :
		{
			StrRicerca = StrNumerico + StrVirgola + StrPunto;
			//alert(StrRicerca);
		}
		break;
		//Numerico + Punto
		case "N4" :
		{
			StrRicerca = StrNumerico + StrPunto;
			//alert(StrRicerca);
		}
		break;
		//Numerico + Virgola + Punto + segno
		case "N5" :
		{
			StrRicerca = StrNumerico + StrVirgola + StrPunto+StrSommaDiff;
			//alert(StrRicerca);
		}
		break;
		case "C1" :
                {
                        StrRicerca =     StrConcat;
                }
	}

	for (var y=0; y<stringa.length; y++)
	{
		elemento = stringa.substring(y, y+1);
		if (StrRicerca.indexOf(elemento) != -1)
			contatore++;
		if ((controllo == "N2") && (elemento == "."))
			virgola++;
		if ((controllo == "N4") && (elemento == "."))
			punto++;
	}

	if ((controllo == "N2") || (controllo == "N4"))
	{
		if (((contatore == stringa.length) && (virgola <= 1)) && ((contatore == stringa.length) && (punto <= 1)))
			return true;
		else
			return false;
	}else{ 
		if (contatore == stringa.length)
			return true;
		else
			return false;
        }
}

/*
 * Completa in una stringa numerica i decimali con gli zero mancanti
 */
function completaDecimali(val,digits)
{
    val = String(val);
    lung = val.length;
    posP = val.indexOf(".");
    //alert("lung=" + lung + " posP=" + posP);
    carMancanti= 0 ;
    if (posP == -1){
        val = val + ".";
        carMancanti = digits;
    }else{
        carPassati 	= lung - posP  ;
        carMancanti = digits - carPassati+1;
    }
    
    //    alert("Sul numero " + val +  " caratteri mancanti sono " + carMancanti);
    for (j=1;j<=carMancanti;j++)
    {
        val = val + "0";
    }
    return val;
}

/*
 * Arrotonda un numero decimale con una data approssimazione
 */
function arrotondaJS(val,digits,round)
{
    divfactor=1;
    for (j=0;j<digits;j++)
    {
        divfactor*=10;
    }
    if (round)
    {
        val2=Math.round(val*divfactor);
    }
    else
    {
        val2=Math.floor(val*divfactor);
    }
    val2/=divfactor;
    
    val2 = "" + val2;
    posP = val2.indexOf(".");
    
    lung = val2.length;
    if ((lung-posP) == 0)
        val2 += "00";
    if ((lung-posP) == 1)
        val2 += "0";
    
    val2=completaDecimali(val2,digits)
    return val2
}


/*
 * Arrotonda un numero decimale con una data approssimazione
 */
function arrotonda(val,digits,round)
{
    if(val=='') return val;

    divfactor=1;
    for (j=0;j<digits;j++){
        divfactor*=10;
    }
    if (round){
        val2=Math.round(val*divfactor);
    }else{
        val2=Math.floor(val*divfactor);
    }
    val2/=divfactor;
    
    val2 = "" + val2;
    posP = val2.indexOf(".");
    
    lung = val2.length;
    if ((lung-posP) == 0)
        val2 += "00";
    if ((lung-posP) == 1)
        val2 += "0";
    
    return val2
}

/*
 * Converte una stringa di un numero decimale con virgola in punto
 */
function ConvertiVirgolaInPunto(CifraOld)
{
    return CifraOld.replace(",",".");
}

/*
 * Converte una stringa di un numero decimale con punto in virgola
 */
function ConvertiPuntoInVirgola(CifraOld)
{
    return CifraOld.replace(".",",");
}

/*
 * Conta le occorrente di un carattere in una stringa
 */
function contaChar(strbase,chrfind)
{
    var i;
    var cont;
    cont =0;
    for (i=0;i<strbase.length;i++)
    {
        if (strbase.substr(i,1) == chrfind){
            cont++;
        }
    }
    return cont;
}




/*
 *Controlla i campi di un form in base al pattern specificato nell attributo id all'interno del tag
 *Restituisce true nel caso in cui i dati sono corretti altrimenti false
 */
function frmVerificaCampi(nomeform)
{
    posizione=document.forms[nomeform];
    num_ele = posizione.elements.length;
    for (var i=0; i < num_ele; i++){
        if (document.forms[nomeform].elements[i].type != "hidden"){
            id_campo = posizione.elements[i].id;
            valore_campo = posizione.elements[i].value;
            controllo_tipo = id_campo.charAt(5);
            controllo_obbligatorio = id_campo.charAt(4);
            stringa_msg = id_campo.substring(7,id_campo.length);  
            //Controlla i campi obbligatori
            if (controllo_obbligatorio=="S"){
                switch (posizione.elements[i].type){
                    case "select-one":
                        if(posizione.elements[i].value==''){
                            alert("Selezionare "+stringa_msg);
                            posizione.elements[i].focus();
                            return false;
                        }
                        break;
                    case "checkbox":
                        if(posizione.elements[i].checked==false){
                            alert("Selezionare "+stringa_msg);
                            posizione.elements[i].focus();
                            return false;
                        }
                        break;
                    case "radio":
                        if(posizione.elements[i].checked==false){
                            alert("Selezionare "+stringa_msg);
                            posizione.elements[i].focus();
                            return false;
                        }
                        break;
                    default:
                        if (valore_campo =="") {
                            alert("Errore:" + stringa_msg + " è un campo obbligatorio")
                            posizione.elements[i].focus();
                            return false;
                        }
                        break;
                }
            }
            
            switch (posizione.elements[i].type){
                case "password" :
                case "text" :
                    //Controlli su Importo
                    if (controllo_tipo == "I"){
                        valore_campo =ConvertiVirgolaInPunto(valore_campo);
                        posizione.elements[i].value = valore_campo;
                        if((AlfaNumerico(valore_campo,"N3")== false) || (contaChar(valore_campo ,".") > 1) ){
                            alert("Errore:" + stringa_msg + " può contenere solo importi del tipo ******.**")
                            posizione.elements[i].focus();
                            return false;
                        }                        
                    }
                    //Controlli su Numero intero
                    if (controllo_tipo == "N"){
                        if(AlfaNumerico(valore_campo,"N1")== false){
                            alert("Errore:" + stringa_msg + " deve essere un numerico intero.")
                            posizione.elements[i].focus();
                            return false;
                        }
                    }
                    //Controlli su stringa
                    if (controllo_tipo == "S"){
                        if(AlfaNumerico(valore_campo,"B3")== false){
                            alert("Errore:" + stringa_msg + " non è accettabile.")
                            posizione.elements[i].focus();
                            return false;
                        }
                    }
                    if (controllo_tipo == "C"){
                        if(AlfaNumerico(valore_campo,"C1")== false){
                            alert("Errore:" + stringa_msg + " non è accettabile.")
                            posizione.elements[i].focus();
                            return false;
                        }
                    }
                    //Controlli su date
                    if (controllo_tipo == "D"){
                        //alert("trovata una data" + posizione.elements[i].value );
                        if((divData(valore_campo)== false) && (valore_campo != "")){
                            alert("Errore:" + stringa_msg + " non è accettabile.")
                            posizione.elements[i].focus();
                            return false;
                        }
                    }
                    break;
            }// Switch
        }//If hiddem
    }//For
    return true;
}


function divData(str)
{
    var array=str.split('/');
    if(array.length!=3){
        array=str.split('-');
        if(array.length!=3)
            return false;
        else{
            if(array[0].length!=2)
                return false;
            if(array[1].length!=2)
                return false;
            if(array[2].length!=4)
                return false;
        }
    }
    else{
        if(array[0].length!=2)
            return false;
        if(array[1].length!=2)
            return false;
        if(array[2].length!=4)
            return false;
    }
    
    var app1 = str.substring(0,2);
    var app2 = str.substring(3,5);
    var app3 = str.substring(6,10);
    
    var rit = isDate(app1,app2,app3);
    return rit;
}



function isDate(gg, mm, aaaa){
    var inizioSecolo;
    var DayCompare;
    var month = new Array();
    //day x month
    month[1] = 31;//gen
    month[2] = 28;//feb
    month[3] = 31;//mar
    month[4] = 30;//apr
    month[5] = 31;//mag
    month[6] = 30;//giu
    month[7] = 31;//lug
    month[8] = 31;//ago
    month[9] = 30;//sett
    month[10] = 31;//ott
    month[11] = 30;//nov
    month[12] = 31;//dic
    //formattazione nel caso il num di cifre Ã¨ min.
    if ((isNaN(gg))||(isNaN(mm))||(isNaN(aaaa))) {return false;}
    if (gg.length == 1) gg = '0' + gg;
    if (mm.length == 1) mm = '0' + mm;
    //cifre anno
    var c ='';
    if (aaaa.length == 1) {
        c = '200';
    }
    if (aaaa.length == 2) {
        if (parseInt(aaaa) < 50)
            c = '20' ;
        else
            c = '19' ;
    }
    if (aaaa.length == 3) {
        if (parseInt(aaaa) < 50)
            c = '2' ;
        else
            c = '1' ;
    }
    aaaa = c + aaaa;
    
    inizioSecolo=aaaa.substr(aaaa.length-2,2);
    if (inizioSecolo=='00')
        inizioSecolo = true;
    else
        inizioSecolo = false;
    
    if ((gg.length != 2)||(mm.length != 2)||(aaaa.length != 4)) {return false;}
    
    //controlli num. :
    gg = parseInt(gg,10); mm = parseInt(mm,10); aaaa = parseInt(aaaa,10);
    if ((mm > 12)||(mm <= 0)) {return false;}
    
    //fine formattazione
    DayCompare = month[mm];
    //contr. bisestile
    if (mm == 2) { //se il mese Ã¨ febbraio
        if (inizioSecolo){ //se Ã¨ l'anno di inizio secolo
            if (((aaaa % 400) == 0) && (mm == 2)) DayCompare = 29;
        }else{
            if ((aaaa % 4) == 0) DayCompare = 29; //anno bisestile
        }
    }//fine bisestile
    if ((gg > DayCompare)||(gg <= 0)) {return false;}//se il giorno supera il max consent. x mese
    if (aaaa <= 0) {return false;}
    if ((aaaa < 1900) || (aaaa > 2070)) {return false;}//intervallo consentito x l'anno
    return true;
}


function high(which2) {
    theobject=which2
    highlighting=setInterval("highlightit(theobject)",50)
}

function low(which2) {
    clearInterval(highlighting)
    which2.filters.alpha.opacity=60
}

function highlightit(cur2) {
    if (cur2.filters.alpha.opacity<100)
	cur2.filters.alpha.opacity+=8
    else if (window.highlighting)
	clearInterval(highlighting)
}


function sommaImporti(v1,v2,digits) {
    som = (v1*1) + (v2*1)			;
    som = arrotondaJS(som,digits+1,true)	;
    som = arrotondaJS(som,digits,true)	;
    return som;
    
}

function sottraiImporti(v1,v2,digits) {
    subs = (v1*1) - (v2*1)			;
    subs = arrotondaJS(subs,digits+1,true)	;
    subs = arrotondaJS(subs,digits,true)	;
    return subs;
}

function moltiplicaImporti(v1,v2,digits) {
    molt = (v1*1) * (v2*1)			;
    molt = arrotondaJS(molt,digits+1,true)	;
    molt = arrotondaJS(molt,digits,true)	;
    return molt;
}

function dividiImporti(v1,v2,digits) {
    molt = (v1*1) / (v2*1)			;
    molt = arrotondaJS(molt,digits+1,true)	;
    molt = arrotondaJS(molt,digits,true)	;
    return molt;
}

function ivaAggiungi(costo,perc,digits){
    app = moltiplicaImporti(costo,perc,4)	;
    ris = dividiImporti(app,100,4)		;
    ris = sommaImporti(ris,costo,digits); 
    return ris;
}

function impostaCalcola(costo,perc,digits){
    app = moltiplicaImporti(costo,perc,4)	;
    ris = dividiImporti(app,100,4)		;
    ris = arrotondaJS(ris,digits+1,true)	; 
    ris = arrotondaJS(ris,digits,true)	; 
    return ris;
}

/*
 * Seleziona il valore di una combobox </select>
 */
function SelezionaValoreCombo(idCombo,valore)
{
    var k;
    var idx = document.getElementById(idCombo);      
    var n=idx.options.length;
    for(k=0; k<n; k++){
        if(idx.options[k].value==valore){
            idx.selectedIndex=k;
            return;
        }
    }
}


function elaboraselezione(numform)
{
    var num_ele;
    var parametri = "";
    var i =0;
    var pos=-1;
    
    if (numform  > document.forms.length - 1 ){
        alert("Errore di programmazione form richiesto inesistente in elaboraselezione");
        return false;
    }
    
    posizione= eval("document." + document.forms[numform].name);
    
    if (posizione.length > 0)
    {
        num_ele = posizione.elements.length;
        for ( i=0; i<num_ele; i++)
        {
            pos++;
            if  ((posizione.elements[i].type == "radio") && (posizione.elements[i].checked == true ))
            {
                parametri = posizione.elements[i].tag ;
            }
        }
    }
    return parametri;
}

function elaboraselezionecheck(numform,indicecol)
{
    ////PARAMETRI DI INPUT
    //numform 	-- E il numero della form di cui si vuole lavorare
    //indicecol	-- E una stringa del tipo (1;3;6) che in questo caso significa che come risultato mi interessano soli valori della colonna1,3,6
    var num_ele;
    var parametri 	= "";
    var i 			= 0	;
    var pos			= -1;
    var risultato	= "" ;
    
    //trasformo la stringa delle colonne cercate in un vettore di colonne
    vetindicecol =  indicecol.split(';');
    //alert ("Nome del formn " + document.forms[numform].name);
    posizione= eval("document." + document.forms[numform].name);
    
    //alert ("Num elemnti letti sono " + posizione.length);
    if (posizione.length > 0)
    {
        //Leggo il numero di elementi nel tag
        num_ele = posizione.elements.length;
        for ( i=0; i<num_ele; i++)
        {
            pos++;
            //            alert("nel for leggo " + posizione.elements[i].name);
            
            if  ((posizione.elements[i].type == "checkbox") && (posizione.elements[i].checked == true) )
            {
                parametri = posizione.elements[i].tag ;
                vetelementicheck = parametri.split('&');
                //				alert("Trovato un check gencar " + parametri);
                
                // se la max colonna ricercata non esiste perchÃ¨ maggiore della max col estraibile dal tag
                if (vetindicecol[vetindicecol.length-1] >= vetelementicheck.length)
                {
                    alert("Errore durante utilizzo della funzione elaboraselezionecheck");
                }
                
                for (var j=0; j<vetindicecol.length;j++)
                {
                    app = vetelementicheck[vetindicecol[j]];
                    if (app.slice(0,1)== "?") {
                        app = app.slice(1,app.length);
                    }
                    risultato += app + "Ã¨"; //come terminatore di valori all'interno dello stesso check
                }
                if (risultato.length >0) {
                    risultato = risultato.slice(0,risultato.length-1);
                }
                risultato += "Ã¨Ã¨"; 	//come terminatore dei caratteri di check
                //                alert ("nel for di lettura dati risualtato = " + risultato);
                
            }
        }
        if (risultato.length>0 ){
            risultato =  risultato.slice(0,risultato.length - 2);
        }
        return risultato;
    }
    return risultato;
}


/*
 * Sposta di una pagina indietro una griglia con il submit
 */
function indietro()
{
    if (document.frmfiltro.pag.value > 0)
    {
        
        document.frmfiltro.pag.value = document.frmfiltro.pag.value -1;
        document.frmfiltro.submit();
    }
}

/*
 * Sposta di una pagina avanti una griglia con il submit
 */
function avanti()
{
    document.frmfiltro.pag.value = (document.frmfiltro.pag.value*1) + 1;
    document.frmfiltro.submit();
    
}                               

/*
 * Sposta di una pagina indietro una griglia Ajax
 */
function indietroGrigliaAjax(nome)
{
    indice=document.getElementById('paginaCorrente'+nome).value;
    if (indice > 1)
    {
        var mostra;
        if ((verOffset=navigator.userAgent.indexOf("Firefox"))!=-1)
            mostra="table";
        else
            mostra="block";
        document.getElementById(nome+"Pagina"+indice).style.display="none";
        document.getElementById(nome+"Pagina"+(parseInt(indice)-1)).style.display=mostra;
        document.getElementById('paginaCorrente'+nome).value=parseInt(indice)-1;
    }
}

/*
 * Sposta di una pagina avanti una griglia Ajax
 */
function avantiGrigliaAjax(nome)
{
    indice=document.getElementById('paginaCorrente'+nome).value;        
    if(parseInt(indice)+1 <= parseInt(document.getElementById('pagineTotali'+nome).value)){                    
        var mostra;
        if ((verOffset=navigator.userAgent.indexOf("Firefox"))!=-1)
            mostra="table";
        else
            mostra="block";
        document.getElementById(nome+"Pagina"+indice).style.display="none";
        document.getElementById(nome+"Pagina"+(parseInt(indice)+1)).style.display=mostra;
        document.getElementById('paginaCorrente'+nome).value=parseInt(indice)+1;
    }
}             

/*
 * Esegue un redirect a livello di Javscript
 */
function Reindirizza(url){
    location.href=url;
}
