
var ir = new InteressiRivalutazione();
var check = false; // boolean: verifica che i passi siano andati a buon fine
var checkConf = false; //boolean verifica che il caricamento della configurazione sia andato a buon fine
showHint('http://www.guidaavvocati.it/indici_2.txt',4); // recupera l'ultima data per cui c'è un indice

function InteressiRivalutazione(){

    var valuta; // stringa: valuta selezionata
    var clInteressi = false; // boolean: calcolo interessi ?
    var clRivalutazione = false; // boolean: calcolo rivalutazione ?
    var clSvalutazione = false; // boolean: calcolo svalutazione ?
    var capitaleEu; // numero: capitale in euro
    var capitaleLi; // numero: capitale in lire
    var insertCap; // stringa: capitale inserito dall'utente
    var calcCap; // stringa: capitale calcolato
	var dataIn; // stringa: data iniziale
	var dataEnd; // stringa: data finale
	var intLastDate; // data: ultima data per cui è presente un indice;
	var racLastDate; //data: ultima data per cui è presente una data raccordo;
	var indiceIn="NO";
	var indiceEnd="NO";
	var raccordo=1;
	var steps;
	var totRivalutazione = 0;
	var soloRivalutazione = 0;
	var totInteressi = 0;
	var soloInteressi = 0;

    this.setCalcolo = setCalcolo;
    this.setValuta = setValuta;
    this.setCapitale = setCapitale;
    this.formatCapitale = formatCapitale;
    this.showCapitale = showCapitale;
    this.checkInput = checkInput;
	this.setIntLastDate = setIntLastDate;
    this.setIndici = setIndici;
	this.elaboraIndici = elaboraIndici;
    this.setRaccordo = setRaccordo;
    this.elaboraRaccordo = elaboraRaccordo;
    this.setStepInteressi = setStepInteressi;
    this.setRivalutazione = setRivalutazione;
    this.setInteressi = setInteressi;
    this.elaboraStepInteressi = elaboraStepInteressi;
    this.formatOutput = formatOutput;
    this.showOutput = showOutput;
    this.stampa = stampa;
    this.setDate = setDate;
    this.resetta = resetta;
	this.stringToDate = stringToDate;
	this.checkDate = checkDate;
	this.daysBetween = daysBetween;

    function setCalcolo(){
        clInteressi = false;
        clRivalutazione = false;
        clSvalutazione = false;
        var slCalcolo = document.getElementsByName("slCalcolo");
        var nomeSelezione;
        var chkSelezione;
        for (var i=0; i < slCalcolo.length; i++){
            nomeSelezione = slCalcolo[i].value;
            chkSelezione = slCalcolo[i].checked;
            if (nomeSelezione == "Interessi") clInteressi = chkSelezione;
            else if (nomeSelezione == "Rivalutazione") clRivalutazione = chkSelezione;
            else if (nomeSelezione == "Svalutazione") clSvalutazione = chkSelezione;
        }
        //alert("interessi "+clInteressi+"\n"+"rivalutazione "+clRivalutazione+"\n"+"svalutazione "+clSvalutazione);
    }

    function setValuta(p_valuta){
        valuta = p_valuta;
         if (valuta == "euro"){
             document.getElementById("capitaleEu").disabled=false;
             document.getElementById("capitaleEu").focus();
             document.getElementById("capitaleLi").disabled=true;
         }
        else {
            document.getElementById("capitaleLi").disabled=false; 
            document.getElementById("capitaleLi").focus();
            document.getElementById("capitaleEu").disabled=true;
        }
    }

    function setCapitale(){
        var tempCapitale;
        if (!valuta) alert("non è stata selezionata la valuta");
        if (valuta == "euro"){
            tempCapitale = document.getElementById("capitaleEu").value;
            insertCap = tempCapitale;
            tempCapitale = formatCapitale(tempCapitale);
            capitaleEu = tempCapitale;
            capitaleLi = capitaleEu*1936.27;
            calcCap = showCapitale(capitaleLi);
            document.getElementById("capitaleLi").value = showCapitale(capitaleLi);
        }
        else if (valuta == "lire"){
            tempCapitale = document.getElementById("capitaleLi").value;
            insertCap = tempCapitale;
            tempCapitale = formatCapitale(tempCapitale);
            capitaleLi = tempCapitale;
            capitaleEu = capitaleLi/1936.27;
            calcCap = showCapitale(capitaleLi);
            document.getElementById("capitaleEu").value = showCapitale(capitaleEu);
        }
        //alert("capitale euro: "+capitaleEu+"\n"+"capitale lire: "+capitaleLi);
    }

    function formatCapitale(capInserito){
        var temp;
        if(capInserito.indexOf(".")>0){
	        temp = capInserito.replace(/\./g,"");
	        capInserito = temp;
	    }
        if(capInserito.indexOf(",")>0){
	        temp = capInserito.replace(",",".");
	        capInserito = temp;
	    }
	    if(!isNaN(capInserito)) return capInserito;
	    else alert("nel campo CAPITALE inserire solo caratteri numerici o virgola");
    }

    function showCapitale(capCalcolato){
        var temp="";
        capCalcolato = parseFloat(capCalcolato).toFixed(2);
        capCalcolato = capCalcolato.replace(".",",");
		var comp = capCalcolato.split(",");
		for (var i=1; i<=comp[0].length;i++){
			if (i%3==0) {
				if (i == comp[0].length) temp = comp[0].charAt(comp[0].length-i)+temp;
				else temp = "."+comp[0].charAt(comp[0].length-i)+temp;
			}
			else temp = comp[0].charAt(comp[0].length-i)+temp;
		}
		if (comp.length > 1)	temp = temp + "," + comp[1];
		return temp;
    }

    function checkInput(){
        if (clInteressi||clRivalutazione||clSvalutazione){
            if (!((clInteressi||clRivalutazione)&&clSvalutazione)){
               if (valuta&&capitaleEu){
			   //alert("OK");
			   return true;
			   }
               else {
                    alert("inserire il capitale");
                    return false;
               } 
            }else{
                alert("non si possono calcolare \n rivalutazione o interessi e svalutazione \n contemporaneamente");
                return false;
            }
        }else {
            alert("selezionare il calcolo desiderato");
            return false;
        }
    }

	function setIntLastDate(data){
		checkConf = false;
		var lastDay;
		var lastDateStr;
		var dati = data.split('\n');
		datiLastItem = dati[dati.length-1];
		datoLastItem = datiLastItem.split('-');
		if (datoLastItem[1]=='01'||datoLastItem[1]=='03'||datoLastItem[1]=='05'||datoLastItem[1]=='07'||datoLastItem[1]=='08'||datoLastItem[1]=='10'||datoLastItem[1]=='12') lastDay = '31';
		else if (datoLastItem[1]=='02') lastDay = '29';
		else lastDay = '30';
		lastDateStr = lastDay+'/'+datoLastItem[1]+'/'+datoLastItem[0];
		intLastDate = stringToDate(lastDateStr);
		if (!checkDate(intLastDate,lastDateStr)) {
			if (datoLastItem[1]=='02') {
				lastDay = '28';
				lastDateStr = lastDay+'/'+datoLastItem[1]+'/'+datoLastItem[0];
				intLastDate = stringToDate(lastDateStr);
				checkConf = checkDate(intLastDate,lastDateStr);
			}
			else checkConf = false;
		} else checkConf = true;
	}
	
    function setIndici(){
		if(clRivalutazione||clSvalutazione){
			showHint('http://www.guidaavvocati.it/indici_2.txt',1);
		}
    }
	
	function elaboraIndici(data){
	    check = false;
		var annoIn = dataIn.substring(6);
		var meseIn = dataIn.substring(3,5);
		var annoEnd = dataEnd.substring(6);
		var meseEnd = dataEnd.substring(3,5);
		var dati = data.split('\n');
		for (var i=0;i<dati.length;i++){
		  dato = dati[i].split('-');
		  if (dato[0]==annoIn && dato[1]==meseIn) indiceIn = dato[2];
		  if (dato[0]==annoEnd && dato[1]==meseEnd) indiceEnd = dato[2];
		}
		//verifica che gli indici siano stati identificati
		if (indiceIn != "NO" && indiceEnd != "NO"){
			check = true;
		}
		else check = false;
	}

    function setRaccordo(){
		if(clRivalutazione||clSvalutazione){
			showHint('http://www.guidaavvocati.it/raccordo.txt',2);
		}
    }
    
    function elaboraRaccordo(data){
        check = false;
        var dataInizio = stringToDate(dataIn);
        var dataFine = stringToDate(dataEnd);
        var dati = data.split('\n');
        for (var i=0;i<dati.length;i++){
          dato = dati[i].split('-');
          minDataInizio = stringToDate(dato[0]);
          maxDataInizio = stringToDate(dato[1]);
          minDataFine = stringToDate(dato[2]);
          maxDataFine = stringToDate(dato[3]);
          if (minDataInizio <= dataInizio && maxDataInizio >= dataInizio && minDataFine <= dataFine && maxDataFine >= dataFine) 
          {
            raccordo = parseFloat(dato[4]);
            check = true;
            break;
          }
          else
          {
            check=true;
          }
        }        
    }

    function setStepInteressi(){
        if(clInteressi){
            showHint('http://www.guidaavvocati.it/interessi.txt',3);
        }
    }
    
    function elaboraStepInteressi(data){
        check = false;
        steps = new Array();
        var checkInizio = false;
        var dataInizio = stringToDate(dataIn);
        var dataFine = stringToDate(dataEnd);
        var dati = data.split('\n');
	    for (var i=0;i<dati.length;i++){
	      dato = dati[i].split('-');
	      intDataInizio = stringToDate(dato[0]);
	      intDataFine = stringToDate(dato[1]);
	      //se non è stato raggiunto il primo intervallo
	      if (!checkInizio){
      	      if (intDataInizio <= dataInizio && intDataFine >= dataInizio){
      	        checkInizio = true;
      	        if (dataFine <= intDataFine){
      	            intervallo = daysBetween(dataInizio,dataFine)+1;
      	            steps[0] = new Array(dataIn,dataEnd,intervallo,dato[2]);
      	            check = true;
      	            break;
      	        }
      	        else {
      	            intervallo = daysBetween(dataInizio,intDataFine)+1;
      	            steps[0] = new Array(dataIn,dato[1],intervallo,dato[2]);
      	        }
      	      }
	      }
	      //se è già stato raggiunto il primo intervallo, si cicla fino all'ultimo ==> si lavora sulla data finale
	      else{
	        if (dataFine <= intDataFine){
	            intervallo = daysBetween(intDataInizio,dataFine)+1;
	            steps[steps.length]=new Array(dato[0],dataEnd,intervallo,dato[2]);
	            check = true;
	            //alert(steps.length);
	            break;
	        }
	        else {
	            intervallo = daysBetween(intDataInizio,intDataFine)+1;
	            steps[steps.length]=new Array(dato[0],dato[1],intervallo,dato[2]);
	        }
	      }
	    }
    }

    function setRivalutazione(){
        if(clRivalutazione||clSvalutazione){
			if(clRivalutazione) totRivalutazione = ((indiceEnd/indiceIn)*raccordo)*capitaleEu;
			else totRivalutazione = ((indiceIn/indiceEnd)/raccordo)*capitaleEu;
            soloRivalutazione = totRivalutazione - capitaleEu;
            //alert(totRivalutazione+' '+soloRivalutazione);
        }
        return true;
    }

    function setInteressi(){
        if(clInteressi){
            soloInteressi = 0;
            for (var i=0; i<steps.length;i++){
                soloInteressi += ((steps[i][2]/365)*steps[i][3]*capitaleEu)/100;
            }
            totInteressi = parseFloat(capitaleEu) + parseFloat(soloInteressi);
            //alert(totInteressi+' '+soloInteressi);
        }
        return true;
    }
    
    function formatOutput(){
        return true;
    }

    function showOutput(){
        var listSteps;
        document.getElementById("infoTitle").style.display = "none";
        document.getElementById("infoText").style.display = "none";
        if(clInteressi){
            listSteps = "<ul>";
            for (var i=0; i<steps.length;i++){
                listSteps += "<li style='list-style-type:none'>"+steps[i][2]+" giorni tra "+steps[i][0]+" e "+steps[i][1]+" con tasso interesse "+showCapitale(steps[i][3])+"%"+"</li>";
            }
            listSteps += "</ul>";
            var soloInteressiLi = soloInteressi*1936.27;
            var totInteressiLi = totInteressi*1936.27;
            var interessiText = "interessi: &#8364;"+showCapitale(soloInteressi)+" = &#8356;"+showCapitale(soloInteressiLi);
            interessiText += "<br />"
            interessiText += "capitale+interessi: &#8364;"+showCapitale(totInteressi)+" = &#8356;"+showCapitale(totInteressiLi);
            document.getElementById("interessiTitle").style.display = "block";
            document.getElementById("interessiSteps").innerHTML = listSteps;
            document.getElementById("interessiSteps").style.display = "block";
            document.getElementById("interessiTot").innerHTML = interessiText;
            document.getElementById("interessiTot").style.display = "block";
        }
        if(clRivalutazione||clSvalutazione){
            var calcolo;
			if (clRivalutazione) calcolo = "rivalutazione";
			else calcolo = "devalutazione";
            var soloRivalutazioneLi = soloRivalutazione*1936.27;
            var totRivalutazioneLi = totRivalutazione*1936.27;
            var rivalutazioneText = calcolo+": &#8364;"+showCapitale(soloRivalutazione) +" = &#8356;"+showCapitale(soloRivalutazioneLi);
            rivalutazioneText += "<br />";
            rivalutazioneText += "capitale+"+calcolo+": &#8364;"+showCapitale(totRivalutazione) +" = &#8356;"+showCapitale(totRivalutazioneLi);
			var indiciText = "indice "+dataIn + ": "+indiceIn+"<br />"+"indice "+dataEnd+": "+indiceEnd+"<br />"+"raccordo: "+raccordo;
			document.getElementById("rivalutazioneTitle").innerHTML = calcolo;
            document.getElementById("rivalutazioneTitle").style.display = "block";
			document.getElementById("rivalutazioneIndici").innerHTML = indiciText;
            document.getElementById("rivalutazioneIndici").style.display = "block";
            document.getElementById("rivalutazioneTot").innerHTML = rivalutazioneText;
            document.getElementById("rivalutazioneTot").style.display = "block";
        }
        return true;

    }
    
    function stampa(){
        document.getElementById("printCapEu").value = showCapitale(capitaleEu);
        document.getElementById("printCapLi").value = showCapitale(capitaleLi);        
        document.getElementById("printDataIn").value = dataIn;
        document.getElementById("printDataEnd").value = dataEnd;
        if (clRivalutazione||clSvalutazione){
            document.getElementById("printRival").value = showCapitale(soloRivalutazione);
            document.getElementById("printTotRival").value = showCapitale(totRivalutazione);
            document.getElementById("printRivalLi").value = showCapitale(soloRivalutazione*1936.27);
            document.getElementById("printTotRivalLi").value = showCapitale(totRivalutazione*1936.27);
			document.getElementById("printIndiceIn").value = showCapitale(indiceIn);
			document.getElementById("printIndiceEnd").value = showCapitale(indiceEnd);
			document.getElementById("printRaccordo").value = showCapitale(raccordo);
			if (clRivalutazione) document.getElementById("printIsRival").value = "1";
			else document.getElementById("printIsRival").value = "0";
        }
        else {
            document.getElementById("printRival").value = "NO";
            document.getElementById("printTotRival").value = "NO";  
            document.getElementById("printRivalLi").value = "NO";
            document.getElementById("printTotRivalLi").value = "NO";
			document.getElementById("printRival").value = "NO";
			document.getElementById("printRival").value = "NO";
			document.getElementById("printRival").value = "NO";
			document.getElementById("printIsRival").value = "NO";
        }
        if (clInteressi){
            document.getElementById("printInt").value = showCapitale(soloInteressi);
            document.getElementById("printTotInt").value = showCapitale(totInteressi);
            document.getElementById("printIntLi").value = showCapitale(soloInteressi*1936.27);
            document.getElementById("printTotIntLi").value = showCapitale(totInteressi*1936.27);
			var newEl = document.createElement("input");
			var newElTesto = "";
            for(var i=0;i<steps.length;i++){
                newElTesto += steps[i][2]+" giorni tra "+steps[i][0]+" e "+steps[i][1]+" con tasso interesse "+showCapitale(steps[i][3])+"%"+"&lt;br /&gt;";
            }
            newEl.setAttribute("name","passo");
            newEl.setAttribute("value",newElTesto);
            document.getElementById("printForm").appendChild(newEl);
        }
        else{
            document.getElementById("printInt").value = "NO";
            document.getElementById("printTotInt").value = "NO";
            document.getElementById("printIntLi").value = "NO";
            document.getElementById("printTotIntLi").value = "NO";
        }
        document.getElementById("printForm").submit();
    }        
    function setDate(){
        var dataInString = document.getElementById("dataIn").value;
		var dataEndString = document.getElementById("dataEnd").value;
		if (dataInString==""||dataEndString==""){
			alert("inserire le date");
			return false;
		}
		else if (dataInString == dataEndString){
			alert("le date non devono essere uguali");
			return false;
		}
		else {
			var currDate = new Date();
			var dataInDate = stringToDate(dataInString);
			var dataEndDate = stringToDate(dataEndString);
			var chkDataIn = checkDate(dataInDate,dataInString);
			var chkDataEnd = checkDate(dataEndDate,dataEndString);
			if (chkDataIn&&chkDataEnd){
				if ((dataInDate > intLastDate || dataEndDate > intLastDate)&&(clRivalutazione||clSvalutazione)){
					alert("Indice non disponibile per la data selezionata. \nL'ultimo indice disponibile e' del "+(intLastDate.getMonth()+1).toString()+"/"+intLastDate.getFullYear().toString());
					return false;
				}
				if ((dataInDate > dataEndDate)&&(clRivalutazione||clInteressi)) {
					alert("Verificare la correttezza delle date inserite");
					return false;
				}
				if ((dataEndDate > dataInDate)&&clSvalutazione) {
					alert("Verificare la correttezza delle date inserite");
					return false;
				}
				if ((dataInDate > currDate || dataEndDate > currDate)&&clInteressi) alert("Per il periodo successivo alla data odierna\nverra' utilizzato l'ultimo tasso disponibile");
				if (clSvalutazione){
				dataEnd = dataInString;
				dataIn = dataEndString;
				}else{
				dataIn = dataInString;
				dataEnd = dataEndString;
				}
				return true;
			}
			else {
				alert("Il campo data non e' stato valorizzato correttamente");
				return false;
			}
		}
    }
	
	function stringToDate(giorno){
	    var tokens = giorno.split('/');
	    var result = new Date(tokens[2],tokens[1]-1,tokens[0]);
	    return result;
	}

	function checkDate(dateObj,giornoObj){
	       var anno=dateObj.getFullYear().toString(); 
	       var mese=(dateObj.getMonth()+1).toString(); 
	       var giorno=dateObj.getDate().toString();
	       if (mese.length<2)   mese="0"+mese;
	       if (giorno.length<2)   giorno="0"+giorno;
	       if ((giorno+"/"+mese+"/"+anno)!= giornoObj) return false;
	       return true;
	}	
	
   function resetta(){
        var tipoCap = document.getElementsByName("selCap");
        for (var i=0; i<tipoCap.length;i++) tipoCap[i].checked = false;
        //setAttribute("checked",false);
        var tipoCalcolo = document.getElementsByName("slCalcolo");
        for (var i=0; i<tipoCalcolo.length;i++) tipoCalcolo[i].checked = false;
        //setAttribute("checked",false);
        document.getElementById("dataIn").value="";
        document.getElementById("dataEnd").value="";
        document.getElementById("capitaleEu").value="";
        document.getElementById("capitaleEu").setAttribute("disabled","disabled");
        document.getElementById("capitaleLi").value="";
        document.getElementById("capitaleLi").setAttribute("disabled","disabled");
        valuta = "";
        clInteressi = false;
        clRivalutazione = false;
        clSvalutazione = false;
        capitaleEu = 0;
        capitaleLi = 0;
        insertCap = "";
        calcCap = "";
	    dataIn = "";
	    dataEnd = "";
	    indiceIn="NO";
	    indiceEnd="NO";
	    raccordo=1;
	    document.getElementById("interessiTitle").style.display = "none";
        document.getElementById("interessiSteps").style.display = "none";
        document.getElementById("interessiTot").style.display = "none";
        document.getElementById("rivalutazioneTitle").style.display = "none";
		document.getElementById("rivalutazioneIndici").style.display = "none";
        document.getElementById("rivalutazioneTot").style.display = "none";
        document.getElementById("infoTitle").style.display = "block";
        document.getElementById("infoText").style.display = "block";
    }
    
    function daysBetween(date1, date2){

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms)

    // Convert back to days and return
    return Math.round(difference_ms/ONE_DAY)
    }        
}

function IntRiv(){
	if (checkConf) {
		check = ir.checkInput();
		if (check){ 
			check = ir.setDate();
			if (check){
				// azzero la visualizzazione
				document.getElementById("interessiTitle").style.display = "none";
		        document.getElementById("interessiSteps").style.display = "none";
		        document.getElementById("interessiTot").style.display = "none";
		        document.getElementById("rivalutazioneTitle").style.display = "none";
		        document.getElementById("rivalutazioneTot").style.display = "none";
		        document.getElementById("infoTitle").style.display = "block";
		        document.getElementById("infoText").style.display = "block";
				// inizio il calcolo
				ir.setIndici(); // check viene modificato nella callback
				if (check) ir.setRaccordo(); // check viene modificato nella callback
				if (check) ir.setStepInteressi(); // check viene modificato nella callback
			}
		}
	} else alert("errore nel recupero dell'ultimo indice "+ir.intLastDate);
}

function insertCapitale(){
    ir.setCapitale();
}

