// ================================================================================
// DATA DECLARATION
// ================================================================================
// ================================================================================
// DATA DECLARATION
// ================================================================================


         
// Constant Meran-Merano
var lnum_deduction = 103.29;
var lnum_minValue  = 2.07;
var lnum_Reduction = 0.5;  // (50% riduzione sulla tassa)
var lnum_Rival     = 1.05; //  5% rivalutazione 


// Cbo type of Building
//=====================
// Elementi:   
// 0  Descrizione Italiana
// 1  Deutsche Beschreibung
// 2  Aliquota
// 3  Deduzione I abitaz      ( true: con riduz. obbl., false: Non puo´ avere riduz. , null: puo´ ma non e´detto)
// 4  Riduzione inagibilitá   ( true: con deduz. obbl., false: Non puo´ avere deduz. , null: puo´ ma non e´detto)
// 5  Coeff. per 
// 6  Rif. Item in catRiepilogo


// Tolta la detrazione per comodato d´uso.



var larr_defaults = new Array(
  new Array("Abitazione principale + pertinenza(solo categorie A1 A8 e A9)",
            "Hauptwohnung +  Zubehör ", 
            6, true, false , 100,1), 
  new Array("Terreni agricoli",
            "Geschäfte (C/1)", 
            6, false, null, 100,2 ), 
  new Array("Negozi e botteghe (C/1)",
            "Geschäfte (C/1)", 
            6, false, null, 34,2 ), 
  new Array("Uffici e studi privati, industriali, commerciali etc. (A/10 e Cat. D)",
            "Büros (A/10 und Kat. D)", 
            6, false, null,50,2 ), 
  new Array("Altri immobili",
            "Andere Gebäude", 
            6, false, null,100,2 ), 
  new Array("Aree fabbricabili",
            "Baugrund", 
            6, false, false,1,0 )
 );

var larr_catRiepilogo = new Array(
         new Array("Aree fab.","Baugrund"),
         new Array("Ab.princ.","Hauptwohnung"),
         new Array("Altri imm.","Andere Gebäude")
           );

// Error messages descriptions
// 0  Descrizione Italiana
// 1  Deutsche Beschreibung
//=============================================================
var lmsg_desc = new Array(
         new Array("E´obbligatorio impostare un tipo di immobile","Eine Liegenschaftsart muss eingegeben werden"),
         new Array("Quota di proprietá non valida ( valida da 1 a 100)","Ungültige Besitzerquote (gültig von 1 bis 100)"),
         new Array("Il periodo di possesso non e´ valido","Ungültiger Besitzanteil"),
         new Array("La rendita indicata non puo´ essere 0","Ertrag kann nicht 0 sein"),
         new Array("Tipo immobile non congruo con impostazione \"Riduzione per inagibilitá\"","Liegenschaftsart stimmt nicht mit \"Abschlag für die Unbewohnbarkeit\" überein"),
         new Array("Tipo immobile non congruo con impostazione \"Detrazione per abitazione principale\"","Liegenschaftsart stimmt nicht mit \"Freibetrag für die Erstwohnung\" überein"),
         new Array("Il numero di proprietari residenti non puo´ essere 0","Anzahl der Besitzer mit Wohnsitz im Gebäude kann nicht 0 sein"),
         new Array("Il periodo di possesso impostato per la pertinenza non valido","Ungültige Besitzperiode für das I Zubehör"),
         new Array("Quota di proprietá della pertinenza non valida ( valida da 1 a 100)","Ungültiger Besitzeranteil für das 1. Zubehör (gültig von 1 bis 100)"),
         new Array("",""),
         new Array("",""),
         new Array("Cat.","Kat."),
         new Array("Aliquota","Steuersatz"),
         new Array("I abitaz.","Erstwohnung"),
         new Array("Inagibilitá","Unbewohnbarkeit"),
         new Array("ICI","ICI"),
         new Array("Detrazione","Abzug"),
         new Array("Importo","Betrag"),
         new Array("Totale","Gesamtbetrag"),
         new Array("(*) Il versamento non e´ dovuto per importi annuali inferiori a € " + displayEuro(lnum_minValue) ,
                   "(*) Die Steuer ist für Jahresbeträge unter € " + displayEuro(lnum_minValue) + " nicht geschuldet"),
         new Array("Imposta non dovuta","Steuer nicht geschuldet"),
         new Array("1. rata","1. Rate"),
         new Array("Chiudi","Schließen"),
         new Array("Riepilogo ICI ","ICI-Zusammenfassung"),
         new Array("Detrazione applicata €","angewandter Abzug €"),
         new Array("Totale da versare  €","Gesamtbetrag €"),
         new Array("1. rata","1. Rate"),
         new Array("2. rata","2. Rate"),
         new Array("",""),
         new Array("","")
         );


function SIAG_parseNumber ( lstr_data ) {
var lstr_data2 = "";
var lobj_reg   = /\x2c/g;

   if (isNaN (parseFloat(lstr_data))) 
        {lstr_data2 = lstr_data;} 
   else {
       if (typeof(lstr_data) == "string") {lstr_data2 = lstr_data.toString().replace(lobj_reg,".");}
       else {lstr_data2 = lstr_data }
   }
//   alert(parseFloat(lstr_data2) + "\n" + lstr_data +" - " + typeof(lstr_data) );
   return (parseFloat(lstr_data2));
}

        
function parseErrors( larr_errors,lstr_lang) {
var lstr_result = "";
var llng_lang   = 0;
   if (lstr_lang == "D") { llng_lang = 1 };
   
   for (i=0; i<larr_errors.length; i++){
     lstr_result += "\n\n" + lmsg_desc[larr_errors[i]][llng_lang];
   }
   return (lstr_result);
}


// this structure takes data calculate every time
// Each elements is an Object of GhType
var larr_data    = new Array();
var lobj_current = new GhComputation();


//=============================================================
//=================== EVENT HANDLERS ==========================
//=============================================================

function clearAll (theForm){
   larr_data    = new Array();
   lobj_current = new GhComputation();
   resetInterface(theForm);
}

function initCategoria (theForm, lstr_lang){
var lstr_text = "";
var llng_lang = 1;

  if (lstr_lang == "I") { llng_lang = 0; }

  for (i=0; i < larr_defaults.length; i++){
     lstr_text = larr_defaults[i][llng_lang];
	   theForm.elements.Categoria.options[i] = new Option(lstr_text, i);
  }
}

function categoriaChanged (theForm) {
var larr_defaultValue ;
   if (theForm.Categoria.selectedIndex != -1) {
       larr_defaultValue = larr_defaults[theForm.Categoria.selectedIndex];
       theForm.elements.aliquota.value = larr_defaultValue[2];
       
       if (larr_defaultValue[3] != null) {  
	       theForm.elements.detrazione.checked = larr_defaultValue[3];
	       detrazioneChecked(theForm);
       } 
       if (larr_defaultValue[4] != null) {   
	       theForm.elements.inagibile.checked = larr_defaultValue[4];
	       inagibileChecked(theForm);
       } 
   } 

}

function inagibileChecked(theForm) {
var lbool_hasReduction  = theForm.elements.inagibile.checked;
/**** No more controls 
   // throw away incompatible checked values
   if (lbool_hasReduction) 
   {
		// Check on detrazione
		theForm.elements.detrazione.checked = false;
		detrazioneChecked(theForm);
   }
   // Category selected is not allowed
   if (larr_defaults[theForm.elements.Categoria.selectedIndex][4] != null  && larr_defaults[theForm.elements.Categoria.selectedIndex][4] != lbool_hasReduction ) {
	    theForm.elements.Categoria.selectedIndex = -1;
	    for ( i=0; i<larr_defaults.length; i++){
	      if ((larr_defaults[i][4] == null || larr_defaults[i][4] == lbool_hasReduction) && (larr_defaults[i][3]== null || larr_defaults[i][3] == !lbool_hasReduction )) {
	         theForm.elements.Categoria.selectedIndex = i;
	         categoriaChanged (theForm);
	         break;     
	      }
	    }
	}   
*************/   
}

function detrazioneChecked(theForm) {
/***
var lbool_hasDeduction  = theForm.elements.detrazione.checked;
var lstr_Category       = "";

   if (lbool_hasDeduction) {

		theForm.elements.inagibile.checked = false;
		inagibileChecked(theForm);
****/
/****		// Category selected is not allowed
		if (larr_defaults[theForm.elements.Categoria.selectedIndex][3] != null  && !larr_defaults[theForm.elements.Categoria.selectedIndex][3]) {
		    theForm.elements.Categoria.selectedIndex = -1;
		    for ( i=0; i<larr_defaults.length; i++){
		      if ((larr_defaults[i][3] == null || larr_defaults[i][3] == true) && (larr_defaults[i][4]== null || larr_defaults[i][4] == false )) {
		         theForm.elements.Categoria.selectedIndex = i;
		         categoriaChanged (theForm);
		         break;     
		      }
		    }
		}   
**********/
/***
		if (theForm.elements.Quotap1.value == 0)  theForm.elements.Quotap1.value = theForm.elements.Quota1.value;
		if (theForm.elements.dalMesep1.selectedIndex  == -1) theForm.elements.dalMesep1.selectedIndex = theForm.elements.dalMese1.selectedIndex;
		if (theForm.elements.alMesep1.selectedIndex  == -1) theForm.elements.alMesep1.selectedIndex = theForm.elements.alMese1.selectedIndex;
     
		if (window.top.MyDeduction != null) {window.top.MyDeduction.style.display = "block"; }
   } else {
		theForm.elements.ImpPertinenza.value = 0;
		theForm.elements.Quotap1.value = 0;
		theForm.elements.dalMesep1.selectedIndex = -1 ;
		theForm.elements.alMesep1.selectedIndex  = -1 ;   
		if (window.top.MyDeduction != null) {  window.top.MyDeduction.style.display = "none";}
   }

   // Category selected is not allowed
   if (larr_defaults[theForm.elements.Categoria.selectedIndex][3] != null  && larr_defaults[theForm.elements.Categoria.selectedIndex][3] != lbool_hasDeduction ) {
	    theForm.elements.Categoria.selectedIndex = -1;
	    for ( i=0; i<larr_defaults.length; i++){
	      if ((larr_defaults[i][3] == null || larr_defaults[i][3] == lbool_hasDeduction) && (larr_defaults[i][4]== null || larr_defaults[i][4] == !lbool_hasDeduction )) {
	         theForm.elements.Categoria.selectedIndex = i;
	         categoriaChanged (theForm);
	         break;     
	      }
	    }
	}   
****/   
}




function checkButtons(theForm) {
	theForm.elements.first.disabled = true;
	theForm.elements.last.disabled = true;
	theForm.elements.next.disabled = true;
	theForm.elements.prev.disabled = true;
	theForm.elements.cmddel.disabled = true;

    if (larr_data.length > 0 ) {
  	   theForm.elements.first.disabled = false;
  	   
  	   if (lobj_current.index != -1) {
  	      if (lobj_current.index > 0) {
  	         theForm.elements.prev.disabled = false;
  	      }
  	      if (lobj_current.index < larr_data.length -1) {
  	         theForm.elements.next.disabled = false;
  	         theForm.elements.last.disabled = false;
  	      }
  	   } else {
  	      theForm.elements.prev.disabled = false;
  	   }
    } 
	// Set status Text    
    if (lobj_current.index == -1) { theForm.elements.status.value = " * " }
    else {theForm.elements.status.value = (lobj_current.index + 1).toString() + " / " + larr_data.length.toString()
        theForm.elements.cmddel.disabled = false;
    }
}

function deleteData( theForm ) {
var lnum_index = lobj_current.index;

 if (lnum_index != -1) 
 {
     for (i= lnum_index; i< larr_data.length-1; i++) {
        larr_data[i] = larr_data[i+1];
        larr_data[i].index = i;
      } 
     larr_data[(larr_data.length -1)] = null; 
     if ( delete larr_data[(larr_data.length -1)]) larr_data.length--;

     
     if ( larr_data.length > lnum_index) {
       lobj_current = larr_data[lnum_index];
  	   resetInterface(theForm);
	   checkButtons(theForm); 
     }
     else {
		lobj_current = new GhComputation();
		resetInterface(theForm);
		checkButtons(theForm); 
		goLast(theForm);   
     
     }
 }
 else {
    lobj_current = new GhComputation();
    resetInterface(theForm);
    checkButtons(theForm); 
    goLast();   
 }
}

function goNext (theForm){
   if (lobj_current.index > -1 && lobj_current.index < larr_data.length -1) {
      lobj_current = larr_data[lobj_current.index+1];
      resetInterface(theForm);
      checkButtons(theForm);
   }
}

function goPrev (theForm){
   if (lobj_current.index > 0 ) {
      lobj_current = larr_data[lobj_current.index-1];
      resetInterface(theForm);
      checkButtons(theForm);
   } else {
     if (lobj_current.index == -1 && larr_data.length > 0 ) goLast (theForm) ;
   }
   
}
function goFirst(theForm){
   if (larr_data.length > 0 ) {
      lobj_current = larr_data[0];
      resetInterface(theForm);
      checkButtons(theForm);
   }
}
function goLast (theForm){
   if (larr_data.length > 0 ) {
      lobj_current = larr_data[larr_data.length -1 ];
      resetInterface(theForm);
      checkButtons(theForm);
   }
}

function add_thisRates(theForm) {
   // check if element has some data....
   if (lobj_current.Taxable1 != 0 || lobj_current.TaxToPayRate2 != 0 ||lobj_current.TaxToPayRate1 != 0) {
        // save it
		if (lobj_current.index == -1 ) { lobj_current.index = larr_data.length; }
		larr_data[lobj_current.index] = lobj_current;
   }
   lobj_current = new GhComputation();
   resetInterface(theForm);
}


//======================================================================================
//======================================================================================
//=====   OBJECT DEFINITION                                                      =======
//======================================================================================
//======================================================================================


function GhComputation ( ){
  // version of object
  function getVersion() { return "1.0.0";}
  // Author
  function getAuthor() { return "Südtiroler Informatik AG - by Ghost!";}

  // internal functions...
  function getRate1_String(lang){
  var lstr_data = "";
  var lnum_item = 0;

     if (lang == "D") lnum_item = 1;

     lstr_data  = "<tr>";
     
     lstr_data += "<td align=left>" + larr_catRiepilogo[larr_defaults[this.Category][6]][lnum_item] + "</td>";
     lstr_data += "<td align=right>" + displayEuro (this.Percentage) + "°/oo </td>";
     lstr_data += "<td align=right>" + (this.hasDeduction?" X ":"--") +"</td>";
     lstr_data += "<td align=right>" + (this.hasReduction?" X ":"--") +"</td>";
     
     lstr_data += "<td align=right>" + displayEuro (this.TaxValue1) + "</td>";
     lstr_data += "<td align=right>" + displayEuro (this.DeductionRate1) + "</td>";
     lstr_data += "<td align=right>" + displayEuro (this.TaxToPayRate1) + "</td>";
     lstr_data += "</tr>";
     return  lstr_data; 
  }
  function getRate2_String(lang){
  var lstr_data = "";
  var lnum_item = 0;

     if (lang == "D") lnum_item = 1;

     lstr_data  = "<tr>";

     lstr_data += "<td align=left>" + larr_catRiepilogo[larr_defaults[this.Category][6]][lnum_item] + "</td>";
     lstr_data += "<td align=right>" + displayEuro (this.Percentage) + "°/oo </td>";
     lstr_data += "<td align=right>" + (this.hasDeduction?" X ":"--") +"</td>";
     lstr_data += "<td align=right>" + (this.hasReduction?" X ":"--") +"</td>";
     
     lstr_data += "<td align=right>" + displayEuro (this.TaxValue2) + "</td>";
     lstr_data += "<td align=right>" + displayEuro (this.DeductionRate2) + "</td>";
     lstr_data += "<td align=right>" + displayEuro (this.TaxToPayRate2) + "</td>";
     lstr_data += "</tr>";
     return  lstr_data; 
  }  
  function Overriden_toString(lang) {
    return getRate1_String(lang) + "\n" + getRate2_String(lang);
  }

  // public interface.
  this.toString = Overriden_toString; 
  this.toStringRate1 = getRate1_String;
  this.toStringRate2 = getRate2_String;
  this.Version  = getVersion;
  this.Author   = getAuthor;
  
  this.index        = -1;
  this.Category     = -1;
  this.interest1    = 0;
  this.Taxable1     = 0;
  this.Percentage   = 6;
  this.Quota1       = 100;
  this.fromMonth1   = 1;
  this.toMonth1     = 12;
  this.Month1       = 0;
  this.TotalMonth1  = 12;
  this.hasDeduction = false;
  this.hasReduction = false;
  this.NumOwners    = 1;

  this.interestp1    = 0;
  this.Taxablep1     = 0;
  this.Quotap1       = 100;
  this.Monthp1       = 0;
  this.fromMonthp1   = 1;
  this.toMonthp1     = 12;

  this.interestp2    = 0;
  this.Taxablep2     = 0;
  this.Quotap2       = 100;
  this.Monthp2       = 0;
  this.fromMonthp2   = 1;
  this.toMonthp2     = 12;

  this.interestp3    = 0;
  this.Taxablep3     = 0;
  this.Quotap3       = 100;
  this.Monthp3       = 0;
  this.fromMonthp3   = 1;
  this.toMonthp3     = 12;


  // Totals
  this.TotalTax       = 0;
  this.TotalDeduction = 0;
  // Rate1
  this.TaxValue1      = 0;
  this.DeductionRate1 = 0;
  this.TaxRate1       = 0;
  this.TaxToPayRate1  = 0;
  // Rate2
  this.TaxValue2      = 0;
  this.DeductionRate2 = 0;
  this.TaxRate2       = 0;
  this.TaxToPayRate2  = 0;
  
}
function resetInterface(theForm) {

 theForm.elements.aliquota.value = lobj_current.Percentage.toString() ;
 theForm.elements.Categoria.selectedIndex =  lobj_current.Category;

 if (lobj_current.fromMonth1 != -1) theForm.elements.dalMese1.selectedIndex = lobj_current.fromMonth1 - 1;
 if (lobj_current.toMonth1   != -1) theForm.elements.alMese1.selectedIndex = lobj_current.toMonth1 - 1;
 if (lobj_current.fromMonthp1 != -1) theForm.elements.dalMesep1.selectedIndex = lobj_current.fromMonthp1 - 1;
 if (lobj_current.toMonthp1   != -1) theForm.elements.alMesep1.selectedIndex = lobj_current.toMonthp1 - 1;

 if (lobj_current.fromMonthp2 != -1) theForm.elements.dalMesep2.selectedIndex = lobj_current.fromMonthp2 - 1;
 if (lobj_current.toMonthp2   != -1) theForm.elements.alMesep2.selectedIndex = lobj_current.toMonthp2 - 1;

 if (lobj_current.fromMonthp3 != -1) theForm.elements.dalMesep3.selectedIndex = lobj_current.fromMonthp3 - 1;
 if (lobj_current.toMonthp3   != -1) theForm.elements.alMesep3.selectedIndex = lobj_current.toMonthp3 - 1;


 theForm.elements.Rendita1.value         = lobj_current.interest1 ;
 theForm.elements.Renditap1.value         = lobj_current.interestp1 ;
 theForm.elements.Renditap2.value         = lobj_current.interestp2 ;
 theForm.elements.Renditap3.value         = lobj_current.interestp3 ;

 theForm.elements.NrProp.value           = lobj_current.NumOwners;
 theForm.elements.Quota1.value           = lobj_current.Quota1;
 theForm.elements.detrazione.checked     = lobj_current.hasDeduction;
 theForm.elements.inagibile.checked      = lobj_current.hasReduction;

 theForm.elements.Quotap1.value           = lobj_current.Quotap1;
 theForm.elements.Quotap2.value           = lobj_current.Quotap2;
 theForm.elements.Quotap3.value           = lobj_current.Quotap3;

 theForm.elements.DetrazioneR1.value     = lobj_current.DeductionRate1;
 theForm.elements.ImpostaR1.value        = lobj_current.TaxValue1;
 theForm.elements.VersamentoR1.value     = lobj_current.TaxToPayRate1;
 theForm.elements.ImpostaR2.value        = lobj_current.TaxValue2;
 theForm.elements.DetrazioneR2.value     = lobj_current.DeductionRate2;
 theForm.elements.VersamentoR2.value     = lobj_current.TaxToPayRate2;
 theForm.elements.TotaleR1.value         = lobj_current.TaxRate1;
 theForm.elements.TotaleR2.value         = lobj_current.TaxRate2;

//************************************ CHECK CATEG!!!*********************
//************************************************************************
 detrazioneChecked( theForm );
 checkButtons(theForm);
 return;
}

function showTotals (lang){
var lobj_win; 
var lstr_resultsR1 = "<table border=0 width=\"100%\">"
var lstr_resultsR2 = "<table border=0 width=\"100%\">"
var lstr_Report    = "";
var lnum_TotVersR1 = 0;
var lnum_TotVersR2 = 0;
var lnum_TotDetrR1 = 0;
var lnum_TotDetrR2 = 0;
var lnum_RiportoR1 = 0;
var lnum_RiportoR2 = 0;
var lnum_totalsR1  = new Array(new Array(0,0),new Array(0,0),new Array(0,0) );
var lnum_totalsR2  = new Array(new Array(0,0),new Array(0,0),new Array(0,0) );
var lnum_item      = 0;
var lbool_printx   = false;
    
    if (lang=="D") lnum_item = 1;



    lstr_resultsR1 += "<tr><td colspan=7>" + lmsg_desc[26][lnum_item] + "</td></tr>";
    lstr_resultsR2 += "<tr><td colspan=7>" + lmsg_desc[27][lnum_item] + "</td></tr>";


    lstr_resultsR1 += "<tr><td align=Center class=\"rowheader\">" + lmsg_desc[11][lnum_item] + "</td>"
    lstr_resultsR1 += "<td align=Center class=\"rowheader\">" + lmsg_desc[12][lnum_item] + "</td>"
    lstr_resultsR1 += "<td align=Center class=\"rowheader\">" + lmsg_desc[13][lnum_item] + "</td>"
    lstr_resultsR1 += "<td align=Center class=\"rowheader\">" + lmsg_desc[14][lnum_item] + "</td>"
    lstr_resultsR1 += "<td align=center class=\"rowheader\">" + lmsg_desc[15][lnum_item] + "</td><td align=center class=\"rowheader\">" + lmsg_desc[16][lnum_item] + "</td><td align=center class=\"rowheader\">" + lmsg_desc[17][lnum_item] + "</td></tr>";

    lstr_resultsR2 += "<tr><td align=Center class=\"rowheader\">" + lmsg_desc[11][lnum_item] + "</td>"
    lstr_resultsR2 += "<td align=Center class=\"rowheader\">" + lmsg_desc[12][lnum_item] + "</td>"
    lstr_resultsR2 += "<td align=Center class=\"rowheader\">" + lmsg_desc[13][lnum_item] + "</td>"
    lstr_resultsR2 += "<td align=Center class=\"rowheader\">" + lmsg_desc[14][lnum_item] + "</td>"
    lstr_resultsR2 += "<td align=center class=\"rowheader\">" + lmsg_desc[15][lnum_item] + "</td><td align=center class=\"rowheader\">" + lmsg_desc[16][lnum_item] + "</td><td align=center class=\"rowheader\">" + lmsg_desc[17][lnum_item] + "</td></tr>";


    for ( i=0 ; i < larr_data.length; i++) {
       lstr_resultsR1 += larr_data[i].toStringRate1(lang);
       lstr_resultsR2 += larr_data[i].toStringRate2(lang);
	
       // Riepiloghi
       lnum_totalsR1[ larr_defaults[larr_data[i].Category][6]][0] +=Math.round(larr_data[i].DeductionRate1 *100) / 100;
       lnum_totalsR2[ larr_defaults[larr_data[i].Category][6]][0] +=Math.round(larr_data[i].DeductionRate2 *100) / 100;
       lnum_totalsR1[ larr_defaults[larr_data[i].Category][6]][1] +=Math.round(larr_data[i].TaxToPayRate1 *100) / 100;
       lnum_totalsR2[ larr_defaults[larr_data[i].Category][6]][1] +=Math.round(larr_data[i].TaxToPayRate2 *100) / 100;

 	   //lnum_TotVersR1 += Math.round(larr_data[i].TaxToPayRate1 *100) / 100;
	   //lnum_TotVersR2 += Math.round(larr_data[i].TaxToPayRate2 *100) / 100;
 	   lnum_TotVersR1 += Math.round(larr_data[i].TaxToPayRate1);
	   lnum_TotVersR2 += Math.round(larr_data[i].TaxToPayRate2);
	   lnum_TotDetrR1 += Math.round(larr_data[i].DeductionRate1 *100) / 100; 
	   lnum_TotDetrR2 += Math.round(larr_data[i].DeductionRate2 *100) / 100; 
    }

   lstr_resultsR1 += "<tr><td colspan=7><hr></td></tr>";
   lstr_resultsR2 += "<tr><td colspan=7><hr></td></tr>";

   // Add Report.
    for ( i=0 ; i < lnum_totalsR1.length; i++) {
      lstr_resultsR1 += "<tr><td align=right colspan=5>" + larr_catRiepilogo[i][lnum_item] +"</td><td align=right>" ;
      lstr_resultsR1 += displayEuro (lnum_totalsR1[i][0]) +"</td><td align=right>"
      lstr_resultsR1 += displayEuro (lnum_totalsR1[i][1]) +"</td></tr>" ;

      lstr_resultsR2 += "<tr><td align=right colspan=5>" + larr_catRiepilogo[i][lnum_item] +"</td><td align=right>" ;
      lstr_resultsR2 += displayEuro (lnum_totalsR2[i][0]) +"</td><td align=right>"
      lstr_resultsR2 += displayEuro (lnum_totalsR2[i][1]) +"</td></tr>" ;
    }
   lstr_resultsR1 += "<tr><td colspan=5>&nbsp;<td colspan=2><hr></td></tr>";
   lstr_resultsR2 += "<tr><td colspan=5>&nbsp;<td colspan=2><hr></td></tr>";


//====================
   if (lnum_TotVersR1 <= lnum_minValue) {
       lnum_RiportoR1 = lnum_TotVersR1;
       lnum_TotVersR1 = 0;

       lstr_resultsR1 += "<tr><td align=right colspan=5>" + lmsg_desc[18][lnum_item] + "</td><td align=right>" + displayEuro (lnum_TotDetrR1) + "</td><td align=right><font color=red>" + displayEuro (lnum_RiportoR1) + "(*)</font></td></tr>" ;
       lbool_printx = true;
   } else {
       lnum_RiportoR1 = 0;
       lstr_resultsR1 += "<tr><td align=right colspan=5>" + lmsg_desc[18][lnum_item] + "</td><td align=right>" + displayEuro (lnum_TotDetrR1) + "</td><td align=right>" + displayEuro (lnum_TotVersR1) + "</td></tr>" ;
   }

   if (lnum_RiportoR1 > 0 ) {
       lnum_TotVersR2 += lnum_RiportoR1;
       lstr_resultsR2 += "<tr><td align=right colspan=5>" + lmsg_desc[18][lnum_item] + "</td><td align=right>" + displayEuro (lnum_TotDetrR2) + "</td><td align=right><font color=red>" + displayEuro (lnum_TotVersR2) + "</font></td></tr>" ;
       if (lnum_TotVersR2 <= lnum_minValue) {
           lstr_resultsR2 += "<tr><td align=right colspan=5>&nbsp;</td><td align=right colspan=2>"+  lmsg_desc[20][lnum_item] + " (*)</td></tr>" ;
           lbool_printx = true;
       } else {
           lstr_resultsR2 += "<tr><td align=right colspan=5>&nbsp;</td><td align=right colspan=2> € " + displayEuro (lnum_TotVersR2 - lnum_RiportoR1) + " + </td></tr>" ;
           lstr_resultsR2 += "<tr><td align=right colspan=5>&nbsp;</td><td align=right colspan=2> € " + displayEuro (lnum_RiportoR1) + lmsg_desc[21][lnum_item] +"</td></tr>" ;
       }
   } else {
		if (lnum_TotVersR2 <= lnum_minValue) {
		    lstr_resultsR2 += "<tr><td align=right colspan=5>" + lmsg_desc[18][lnum_item] + "</td><td align=right>" + displayEuro (lnum_TotDetrR2) + "</td><td align=right><font color=red>" + displayEuro (lnum_TotVersR2) + "</font> (*)</td></tr>" ;
		    lbool_printx = true;
		} else {
		    lstr_resultsR2 += "<tr><td align=right colspan=5><FONT FACE=ARIAL><B>" + lmsg_desc[18][lnum_item] + "</b></font></td><td align=right>" + displayEuro (lnum_TotDetrR2) + "</td><td align=right><FONT FACE=ARIAL><B>" + displayEuro (lnum_TotVersR2) + "</b></font></td></tr>" ;
		}
   }

  lstr_resultsR1 += "</table>";
  lstr_resultsR2 += "</table>";


//===================   
   lstr_Report = "<html><head><style>.rowheader { FONT-FAMILY: arial; FONT-SIZE: 12px; FONT-weight: bold;  background-color: #37558b; color:#FFFFFF; }</style></head><body bgcolor=#93b4d0>" ;
   lstr_Report += lstr_resultsR1; 
   lstr_Report += "<br><br>"; 
   lstr_Report += lstr_resultsR2; 
   
   lstr_Report += "<br>"+ lmsg_desc[23][lnum_item] + "<br>";
   lstr_Report += "<table><tr><td align=right><FONT FACE=ARIAL><B>" + lmsg_desc[24][lnum_item] + "</b></font></td><td align=right><FONT FACE=ARIAL><B>";
   lstr_Report += displayEuro (lnum_TotDetrR1+lnum_TotDetrR2) + "</b></font></td></tr>";
   lstr_Report += "<tr><td align=right><FONT FACE=ARIAL><B>" + lmsg_desc[25][lnum_item] + "</b></font></td><td align=right><FONT FACE=ARIAL><B>" ;
   lstr_Report += displayEuro (lnum_TotVersR1+lnum_TotVersR2) + "</b></font></td></tr></table>";
   
   if (lbool_printx) {
   lstr_Report += "<br>" + lmsg_desc[19][lnum_item]
   
   }
   
   lstr_Report += "<br><br><form><input type=button value=\"" + lmsg_desc[22][lnum_item] + "\" onClick=\"window.close();\"></form>"; 
   lstr_Report += "</body></html>"; 

   lobj_win = window.open();
   lobj_win.document.open();
   lobj_win.document.write( lstr_Report );
   lobj_win.document.close();
}

function displayEuro ( lnum_data ) {
var lnum_Number = parseFloat(lnum_data);
var lstr_tmp    = "";
var lstr_result = "";

    if (!isNaN(lnum_Number)) {
        lstr_tmp = Math.round ( lnum_Number * 100).toString();
        if (Math.abs(parseInt(lstr_tmp)) < 100) {
           if (parseInt(lstr_tmp) == 0) {
               lstr_result = "0.00";
           } else {
              lstr_result = lstr_tmp.substr(0,lstr_tmp.length -2) + "0." + lstr_tmp.substr(lstr_tmp.length -2,2);
           }
        } else {   
           lstr_result = lstr_tmp.substr(0,lstr_tmp.length -2) + "." + lstr_tmp.substr(lstr_tmp.length -2,2);
        }
    }
    return (lstr_result);
}


//  Compute Taxable value
//
function get_BaseImponibile (lnum_interest, lnum_coeff ){
var lnum_result = 0.0;
     //
     // For areas, there is no need of an increase of 5%
     // by Ghost! 15.04.2003   Call of Dr. Musillo MERAN
     if (lnum_coeff == 1 ) 
     {
         lnum_result = lnum_interest ;  
     }
     else 
     {
         lnum_result = Math.round (lnum_interest * lnum_coeff * 100 * lnum_Rival) / 100;
     }
    return (lnum_result);
}





function calcolaRate(theForm, lstr_lang){
var lnum_error       = 0;   //  1: Err in ImpostaBase1
                            //  2: Err. Quota poss. 1
                            //  4: Mesi totali1 > 12, <= 0 
                            //  8: Nr. Proprietari non valido
                            // 16:  Err in ImpostaBase2
                            // 32:  Err. Quota poss. 2
                            // 64:  Err. Mesi totali2 > 12, <= 0 

var larr_errors = new Array();
var lnum_rendita1 ;
var lnum_Renditap1 ;
var lnum_Renditap2 ;
var lnum_Renditap3 ;
var lnum_TotalDeduction;
var lnum_impostaBase1;
var lnum_impostaSpettanza1;
var lnum_impostalorda1;

var lnum_impostaBasep1;
var lnum_impostaSpettanzap1;
var lnum_impostalordap1;

var lnum_impostaBasep2;
var lnum_impostaSpettanzap2;
var lnum_impostalordap2;

var lnum_impostaBasep3;
var lnum_impostaSpettanzap3;
var lnum_impostalordap3;


var lnum_tempIndex    = 0;

    inagibileChecked(theForm);
    detrazioneChecked(theForm);

if (lobj_current.index != -1) {
   lnum_tempIndex = lobj_current.index;
   lobj_current = new GhComputation(); 
   lobj_current.index = lnum_tempIndex;
}

// reload values....
// =============


// Some general check  on selected category
if (theForm.elements.Categoria.selectedIndex != -1 ) {
  if (larr_defaults[theForm.elements.Categoria.selectedIndex][4] != null  && larr_defaults[theForm.elements.Categoria.selectedIndex][4] != theForm.elements.inagibile.checked ) {
       larr_errors[larr_errors.length] = 4;
  }   
  if (larr_defaults[theForm.elements.Categoria.selectedIndex][3] != null  && larr_defaults[theForm.elements.Categoria.selectedIndex][3] != theForm.elements.detrazione.checked ) {
       larr_errors[larr_errors.length] = 5;
  }   
} else { larr_errors[larr_errors.length] = 0; }


// check Taxable 1

 if (isNaN (SIAG_parseNumber(theForm.elements.Rendita1.value) ) || SIAG_parseNumber(theForm.elements.Rendita1.value) == 0 ) {
   // Errore non vale per la categoria di solo Pertinenza.
   if (theForm.elements.Categoria.selectedIndex != 1) {
	   larr_errors[larr_errors.length] = 3;
	   lobj_current.Taxable1 = 0;
   }
 } else {
   if ( theForm.elements.Categoria.selectedIndex != -1) {
      lobj_current.interest1 = SIAG_parseNumber(theForm.elements.Rendita1.value);
      lobj_current.Taxable1 = get_BaseImponibile (lobj_current.interest1,larr_defaults[theForm.elements.Categoria.selectedIndex][5] );
   };
 } ;

// Errore non vale per la categoria di solo Pertinenza e nel caso sia indicato valore VA TOLTO!!!!
if (theForm.elements.Categoria.selectedIndex == 1) 
   {  
     theForm.elements.Rendita1.value = "0";
     lobj_current.interest1 = 0 ;
     lobj_current.Taxable1 = 0;
     lobj_current.TotalDeduction =0;
   }




 // Taxablep1
 if (isNaN (SIAG_parseNumber(theForm.elements.Renditap1.value) ) || SIAG_parseNumber(theForm.elements.Renditap1.value) == 0) {
   lobj_current.Taxablep1 = 0;
   lobj_current.interestp1 = 0;
 } else {
      lobj_current.interestp1 = SIAG_parseNumber(theForm.elements.Renditap1.value);
      lobj_current.Taxablep1  = get_BaseImponibile (lobj_current.interestp1,100 );

      lobj_current.Quotap1    = SIAG_parseNumber(theForm.elements.Quotap1.value);
	  if (isNaN(lobj_current.Quotap1) || lobj_current.Quotap1 <= 0 || lobj_current.Quotap1 > 100 ) {
		 larr_errors[larr_errors.length] = 8;
      }
 } ;

 // Taxablep2
 if (isNaN (SIAG_parseNumber(theForm.elements.Renditap2.value) ) || SIAG_parseNumber(theForm.elements.Renditap2.value) == 0) {
   lobj_current.Taxablep2 = 0;
   lobj_current.interestp2 = 0;
 } else {
      lobj_current.interestp2 = SIAG_parseNumber(theForm.elements.Renditap2.value);
      lobj_current.Taxablep2  = get_BaseImponibile (lobj_current.interestp2,100 );

      lobj_current.Quotap2    = SIAG_parseNumber(theForm.elements.Quotap2.value);
	  if (isNaN(lobj_current.Quotap2) || lobj_current.Quotap2 <= 0 || lobj_current.Quotap2 > 100 ) {
		 larr_errors[larr_errors.length] = 8;
      }
 } ;
 
// Taxablep3
 if (isNaN (SIAG_parseNumber(theForm.elements.Renditap3.value) ) || SIAG_parseNumber(theForm.elements.Renditap3.value) == 0) {
   lobj_current.Taxablep3 = 0;
   lobj_current.interestp3 = 0;
 } else {
      lobj_current.interestp3 = SIAG_parseNumber(theForm.elements.Renditap3.value);
      lobj_current.Taxablep3  = get_BaseImponibile (lobj_current.interestp3,100 );

      lobj_current.Quotap3    = SIAG_parseNumber(theForm.elements.Quotap3.value);
	  if (isNaN(lobj_current.Quotap3) || lobj_current.Quotap3 <= 0 || lobj_current.Quotap3 > 100 ) {
		 larr_errors[larr_errors.length] = 8;
      }
 } ; 
 
 
 if ( theForm.elements.Categoria.selectedIndex != -1) {
      lobj_current.Percentage = SIAG_parseNumber(larr_defaults[theForm.elements.Categoria.selectedIndex][2]);
      lobj_current.Category   = theForm.elements.Categoria.selectedIndex;
 } else {
      // error already logged!
      lobj_current.Percentage = 0;
      lobj_current.Category   = 0;
 }
 
 
 lobj_current.Quota1       = SIAG_parseNumber(theForm.elements.Quota1.value);
 if (isNaN(lobj_current.Quota1) || lobj_current.Quota1 <= 0 || lobj_current.Quota1 > 100 ) {
     larr_errors[larr_errors.length] = 1;
 }
 
 lobj_current.fromMonth1 = theForm.elements.dalMese1.selectedIndex + 1;
 lobj_current.toMonth1   = theForm.elements.alMese1.selectedIndex + 1;
 
 if ( lobj_current.toMonth1 < lobj_current.fromMonth1 || lobj_current.fromMonth1 <= 0 ){
    larr_errors[larr_errors.length] = 2;
 }

 // checks on month 
 lobj_current.fromMonthp1 = theForm.elements.dalMesep1.selectedIndex + 1;
 lobj_current.toMonthp1   = theForm.elements.alMesep1.selectedIndex + 1;
 if ( lobj_current.toMonthp1 < lobj_current.fromMonthp1 || lobj_current.fromMonthp1 <= 0 ){
    larr_errors[larr_errors.length] = 7;
 }
 lobj_current.fromMonthp2 = theForm.elements.dalMesep2.selectedIndex + 1;
 lobj_current.toMonthp2   = theForm.elements.alMesep2.selectedIndex + 1;
 if ( lobj_current.toMonthp2 < lobj_current.fromMonthp2 || lobj_current.fromMonthp2 <= 0 ){
    larr_errors[larr_errors.length] = 7;
 }
 lobj_current.fromMonthp3 = theForm.elements.dalMesep3.selectedIndex + 1;
 lobj_current.toMonthp3   = theForm.elements.alMesep3.selectedIndex + 1;
 if ( lobj_current.toMonthp3 < lobj_current.fromMonthp3 || lobj_current.fromMonthp3 <= 0 ){
    larr_errors[larr_errors.length] = 7;
 }




 lobj_current.Month1       = (lobj_current.toMonth1 > 6 ? 6:lobj_current.toMonth1) - lobj_current.fromMonth1 + 1;
 if (lobj_current.Month1 < 0 ) lobj_current.Month1 = 0;
 
 lobj_current.TotalMonth1  = lobj_current.toMonth1 - lobj_current.fromMonth1 + 1;
 
 lobj_current.hasDeduction = theForm.elements.detrazione.checked;
 lobj_current.hasReduction = theForm.elements.inagibile.checked;
 
 
 lobj_current.Monthp1       = (lobj_current.toMonthp1 > 6 ? 6:lobj_current.toMonthp1) - lobj_current.fromMonthp1 + 1;
 if (lobj_current.Monthp1 < 0 ) lobj_current.Monthp1 = 0; 
 lobj_current.toMonthp1  = lobj_current.toMonthp1 - lobj_current.fromMonthp1 + 1;
 lobj_current.Monthp2       = (lobj_current.toMonthp2 > 6 ? 6:lobj_current.toMonthp2) - lobj_current.fromMonthp2 + 1;
 if (lobj_current.Monthp2 < 0 ) lobj_current.Monthp2 = 0; 
 lobj_current.toMonthp2  = lobj_current.toMonthp2 - lobj_current.fromMonthp2 + 1;
 lobj_current.Monthp3       = (lobj_current.toMonthp3 > 6 ? 6:lobj_current.toMonthp3) - lobj_current.fromMonthp3 + 1;
 if (lobj_current.Monthp3 < 0 ) lobj_current.Monthp3 = 0; 
 lobj_current.toMonthp3  = lobj_current.toMonthp3 - lobj_current.fromMonthp3 + 1;




 lobj_current.NumOwners    = parseInt(theForm.elements.NrProp.value);
 if (isNaN (lobj_current.NumOwners) || lobj_current.NumOwners <= 0 ) {
     larr_errors[larr_errors.length] = 6;
 }



	// First step : compute Base value for Tax
	if ( isNaN (lobj_current.Taxable1) || isNaN(lobj_current.Percentage) ) {
	    // this is first exception!!!!
   	    lnum_impostaBase1 = 0 ;
	} else {
	    lnum_impostaBase1 = Math.round(lobj_current.Taxable1 * 100 * lobj_current.Percentage / 1000) / 100;
	}
	
	
    // compute annual tax for quota
	if (!( isNaN (lobj_current.Quota1) || lobj_current.Quota1 <= 0 || lobj_current.Quota1 > 100 )) {
	   lnum_impostaSpettanza1 = Math.round (  lnum_impostaBase1 * lobj_current.Quota1 )  / 100; 
	}
	
	// compute annual tax for time 
	if (!( isNaN (lobj_current.TotalMonth1) || lobj_current.TotalMonth1 <= 0 || lobj_current.TotalMonth1 > 12 )) {
	   lnum_impostalorda1 =  Math.round( lnum_impostaSpettanza1 * lobj_current.TotalMonth1 * 100 / 12) / 100 ; 
	}
	
	if (lobj_current.hasReduction && !isNaN(lnum_impostalorda1) ) {
	   // Apply 50% Reduction!!!!
	   lnum_impostalorda1 = Math.round( (lnum_impostalorda1 * 100) * lnum_Reduction ) / 100;
	}
	
	
	
	lnum_TotalDeduction = 0;
	lnum_impostalordap1  = 0;
	lnum_impostalordap2  = 0;
	lnum_impostalordap3  = 0;
        
	
	
	//
	//
	//   BIG CHANGES ARE HERE!!!!!
	//   =========================
	//
	//
	
	
	
	if (lobj_current.hasDeduction) {
	    // compute quote for deduction 
		if ( !isNaN (lobj_current.NumOwners) && lobj_current.NumOwners > 0 ) {
		   lnum_TotalDeduction = Math.round( lnum_deduction * 100 / lobj_current.NumOwners) / 100 ; 
		}
	    // Compute deduction for time
	    
	    lobj_current.TotalDeduction = Math.round( lnum_TotalDeduction * lobj_current.TotalMonth1  / 12 * 100) / 100 ;
	} else {
            lobj_current.TotalDeduction = 0 ; 
        };
	
	//
	//
	//
	//
	//
		    
	    // Compute eventually "PERTINENZA1"
	    // ================================
		// First step : compute Base value for Tax
		lnum_impostaBasep1 = Math.round( lobj_current.Taxablep1 * 100 * lobj_current.Percentage  / 1000) /100;
		// compute annual tax for quota
		if (!( isNaN (lobj_current.Quotap1) || lobj_current.Quotap1 <= 0 || lobj_current.Quotap1 > 100 )) {
 	       lnum_impostaSpettanzap1 = Math.round (  lnum_impostaBasep1 * lobj_current.Quotap1 )  / 100; 
		}
		// compute annual tax for time 
		if (!( isNaN ( lobj_current.toMonthp1 ) || lobj_current.toMonthp1 <= 0 || lobj_current.toMonthp1 > 12 )) {
  	       lnum_impostalordap1 =  Math.round( lnum_impostaSpettanzap1 * lobj_current.toMonthp1 * 100 / 12) / 100 ; 
		}

	    // Compute eventually "PERTINENZA2"
	    // ================================
		// First step : compute Base value for Tax
		lnum_impostaBasep2 = Math.round( lobj_current.Taxablep2 * 100 * lobj_current.Percentage  / 1000) /100;
		// compute annual tax for quota
		if (!( isNaN (lobj_current.Quotap2) || lobj_current.Quotap2 <= 0 || lobj_current.Quotap2 > 100 )) {
 	       lnum_impostaSpettanzap2 = Math.round (  lnum_impostaBasep2 * lobj_current.Quotap2 )  / 100; 
		}
		// compute annual tax for time 
		if (!( isNaN ( lobj_current.toMonthp2 ) || lobj_current.toMonthp2 <= 0 || lobj_current.toMonthp2 > 12 )) {
  	       lnum_impostalordap2 =  Math.round( lnum_impostaSpettanzap2 * lobj_current.toMonthp2 * 100 / 12) / 100 ; 
		}
	    // Compute eventually "PERTINENZA3"
	    // ================================
		// First step : compute Base value for Tax
		lnum_impostaBasep3 = Math.round( lobj_current.Taxablep3 * 100 * lobj_current.Percentage  / 1000) /100;
		// compute annual tax for quota
		if (!( isNaN (lobj_current.Quotap3) || lobj_current.Quotap3 <= 0 || lobj_current.Quotap3 > 100 )) {
 	       lnum_impostaSpettanzap3 = Math.round (  lnum_impostaBasep3 * lobj_current.Quotap3 )  / 100; 
		}
		// compute annual tax for time 
		if (!( isNaN ( lobj_current.toMonthp3 ) || lobj_current.toMonthp3 <= 0 || lobj_current.toMonthp3 > 12 )) {
  	       lnum_impostalordap3 =  Math.round( lnum_impostaSpettanzap3 * lobj_current.toMonthp3 * 100 / 12) / 100 ; 
		}

	
    if  ( larr_errors.length == 0 ) {
        // Totals....
        lobj_current.TotalTax = Math.round( (lnum_impostalorda1 * 100)  + (lnum_impostalordap1 * 100)  + (lnum_impostalordap2 * 100) + (lnum_impostalordap3 * 100) ) / 100  ;
        
        
//		alert ("Lordo principale: " + lnum_impostalorda1 + "\n" +
//		       "Lordo P 1       :" + lnum_impostalordap1 + "\n" +
//		       "Lordo P 2       :" + lnum_impostalordap2 + "\n" +
//		       "Lordo P 3       :" + lnum_impostalordap3 + "\n" +
//		       "Totale Tassa    :" + lobj_current.TotalTax );
//      
        
				
	    // First Rate Computation
	    lobj_current.TaxValue1  = Math.round(lnum_impostalorda1 * 100 / lobj_current.TotalMonth1 * lobj_current.Month1 )  / 100 ;

		if ( !isNaN(lnum_impostalordap1) &&  lnum_impostalordap1 != 0) {
		   lobj_current.TaxValue1 +=  Math.round(lnum_impostalordap1 * 100 / lobj_current.toMonthp1 * lobj_current.Monthp1 ) / 100;
		} 
		if ( !isNaN(lnum_impostalordap2) &&  lnum_impostalordap2 != 0) {
		   lobj_current.TaxValue1 +=  Math.round(lnum_impostalordap2 * 100 / lobj_current.toMonthp2 * lobj_current.Monthp2 ) / 100;
		} 
		if ( !isNaN(lnum_impostalordap3) &&  lnum_impostalordap3 != 0) {
		   lobj_current.TaxValue1 +=  Math.round(lnum_impostalordap3 * 100 / lobj_current.toMonthp3 * lobj_current.Monthp3 ) / 100;
		} 
		
		
		
		lobj_current.DeductionRate1 = Math.round(lobj_current.TotalDeduction  * 100 / lobj_current.TotalMonth1 * lobj_current.Month1) / 100  ;
     
        lobj_current.TaxRate1 = Math.round( (lobj_current.TaxValue1 * 100) - (lobj_current.DeductionRate1 * 100)) / 100;

        // if (lobj_current.TaxRate1 <= lnum_minValue) {
        // 
        // Round to mimal value is done when doing report of all data!!!!
        // 10.05.2002 By Ghost!   20.10 It´s Late but someone should do this!!!! :-( 
        if (lobj_current.TaxRate1 <= 0) {
           lobj_current.TaxToPayRate1 = 0
        } else {
           lobj_current.TaxToPayRate1 = lobj_current.TaxRate1;
        }
        
        
        lobj_current.TaxValue2      = Math.round( (lobj_current.TotalTax  * 100) - (lobj_current.TaxValue1 * 100) ) /100;
		lobj_current.DeductionRate2 = Math.round( (lobj_current.TotalDeduction * 100) - (lobj_current.DeductionRate1 * 100)) / 100;
        lobj_current.TaxRate2       = Math.round( (lobj_current.TaxValue2   * 100) - (lobj_current.DeductionRate2 * 100)) / 100;
        lobj_current.TaxToPayRate2  = Math.round( (lobj_current.TotalTax  * 100) - (lobj_current.TotalDeduction * 100) - ( lobj_current.TaxToPayRate1 * 100)) / 100;

        //if (lobj_current.TaxToPayRate2 <= lnum_minValue) {
        //By Ghost! Same as above!!
        if (lobj_current.TaxToPayRate2 <= 0 ) {
            lobj_current.TaxToPayRate2 = 0
        }

        theForm.elements.ImpostaR1.value = displayEuro(lobj_current.TaxValue1);
        theForm.elements.ImpostaR2.value = displayEuro(lobj_current.TaxValue2);
        theForm.elements.DetrazioneR1.value = displayEuro(lobj_current.DeductionRate1);
        theForm.elements.DetrazioneR2.value = displayEuro(lobj_current.DeductionRate2);
        theForm.elements.TotaleR1.value     = displayEuro(lobj_current.TaxRate1);
        theForm.elements.TotaleR2.value     = displayEuro(lobj_current.TaxRate2);
        theForm.elements.VersamentoR1.value = displayEuro(Math.round(lobj_current.TaxToPayRate1));
        theForm.elements.VersamentoR2.value = displayEuro(Math.round(lobj_current.TaxToPayRate2));
        //theForm.elements.VersamentoR1.value = displayEuro(lobj_current.TaxToPayRate1);
        //theForm.elements.VersamentoR2.value = displayEuro(lobj_current.TaxToPayRate2);

    } else  {
       alert ( parseErrors(larr_errors,lstr_lang) );
    }
}



// ================================================================================
// DATA DECLARATION
// ================================================================================
// ================================================================================
// DATA DECLARATION
// ================================================================================
