// called on change of address fields - update corresponding labels
function updateReplacementAddress()
{
   var f = document.getElementById("form1");
   var addr = f.replacementAddress.value; 

   var cell = document.getElementById("repl1");
   cell.innerHTML = "<div align=left><font color=#435487 face=Verdana, Arial, Helvetica, sans-serif size=-1><strong>Purchase price of " + addr+"</strong></font></div>";
   cell = document.getElementById("repl2");
   cell.innerHTML = "<div align=left><font color=#435487 face=Verdana, Arial, Helvetica, sans-serif size=-1><strong>Net available for " + addr+"</strong></font></div>";
}

function updateRelinquishedAddress()
{
   var f = document.getElementById("form1");
   var addr = f.relinquishedAddress.value; 

   var cell = document.getElementById("relin1");
   cell.innerHTML = "<div align=left><font color=#435487 face=Verdana, Arial, Helvetica, sans-serif size=-1><strong>Original price of " + addr+"</strong></font></div>";
   cell = document.getElementById("relin2");
   cell.innerHTML = "<div align=left><font color=#435487 face=Verdana, Arial, Helvetica, sans-serif size=-1><strong>Capital Improvements to " + addr+"</strong></font></div>";
   cell = document.getElementById("relin3");
   cell.innerHTML = "<div align=left><font color=#435487 face=Verdana, Arial, Helvetica, sans-serif size=-1><strong>Adjusted basis of " + addr+"</strong></font></div>";
   cell = document.getElementById("relin4");
   cell.innerHTML = "<div align=left><font color=#435487 face=Verdana, Arial, Helvetica, sans-serif size=-1><strong>Sale price of " + addr+"</strong></font></div>";
}

// calculate all the calculated fields
function calc1()
{
   // form id
   var f = document.getElementById("form1");

   // get all input values - blanks will return as 0
   var origPrice      = readFloat(f.origPrice);
   var improvements   = readFloat(f.capImprov);
   var depreciation   = readFloat(f.deprec);
   var salePrice      = readFloat(f.salePrice);
   var fixup          = readFloat(f.fixup);
   var commRate       = readFloat(f.commRate) / 100;
   var loan           = readFloat(f.loan);
   var purchasePrice  = readFloat(f.purchasePrice);
   var fedBracket     = readFloat(f.fedBracket) / 100;
   var stateBracket   = readFloat(f.stateBracket) / 100; 

   // read two hidden values on form for tax exclusion 
   var claimExclusion = (f.claimExclusion.value == "y");
   var taxExclusion   = readFloat(f.taxExclusion);



   // calculated values - defaults
   var commission     = salePrice * commRate;
   var adjBasis     =  origPrice + improvements - depreciation;

   var adjSalePrice = 0;
   var amtRealized  = 0;
   var gain         = 0;
   var taxableGain  = 0;
   var deferredGain = 0;
   var fedCGTax     = 0;
   var stateCGTax   = 0;
   var totalTax     = 0;
   var netAvailable = 0;


   // calculate adjusted Sale Price, amount realized, gain
   if (salePrice > 0) {
      adjSalePrice = (salePrice-fixup) - commission;
      amtRealized  = adjSalePrice - loan;
      gain         = adjSalePrice - adjBasis;
   }

   // calculate taxable and deferred gain
   if (purchasePrice == 0)
   {
      taxableGain = gain;
   }
   else if (purchasePrice >= adjSalePrice)
   {
      taxableGain = 0;
   }
   else
   {
      taxableGain = Math.min(adjSalePrice-purchasePrice, gain);
   }

   if (taxableGain < gain)
      deferredGain = gain - taxableGain;


   // calculate taxes
   if (taxableGain > 0)
   {
       var taxableAmt;

       if (claimExclusion) 
          taxableAmt = Math.max(taxableGain - taxExclusion, 0);
       else
          taxableAmt = taxableGain; 

       fedCGTax   = taxableAmt * fedBracket;
       stateCGTax = taxableAmt * stateBracket;
   }

   totalTax = fedCGTax + stateCGTax;
   netAvailable = amtRealized - totalTax;

   // update display
   f.adjBasis.value       = moneyString(adjBasis);
   f.basis.value          = moneyString(adjBasis);
   f.adjSalePrice.value   = moneyString(adjSalePrice);
   f.amtRealized.value    = moneyString(amtRealized);
   f.gain.value           = moneyString(gain);
   f.taxableGain.value    = moneyString(taxableGain);
   f.deferredGain.value   = moneyString(deferredGain);
   f.fedCGTax.value       = moneyString(fedCGTax);
   f.stateCGTax.value     = moneyString(stateCGTax);
   f.totalTax.value       = moneyString(totalTax);
   f.netAvailable.value   = moneyString(netAvailable);
   
}


// return the specified float as a precision 2 decimal preceded by "$ "
function moneyString(num)
{
   var nf = new NumberFormat(num);

   nf.setCurrency(true);
   return nf.toFormatted();

   // return "$ " + num.toFixed(2);
}

// set focus to first input field
function forwardFocus()
{
   var f = document.getElementById("form1");
   f.origPrice.focus();
}

// read the text from an input field and return it as an int number
// blank input is returned as 0
function readInt(inp)
{
   var val = 0;
   if (trim(inp.value).length > 0)
      val = parseInt(inp.value);

  return val;
}


// use in onkeyup() or on keypress() event to insure that only
// int are entered. 
// inp is the input field that should contain a int
// note that blank input is valid

function validateInt(inp) {
  var instr = inp.value;
  var i;
  
  for (i=0; i < instr.length; i++) {
     if ("0123456789".indexOf(instr.charAt(i)) == -1) {
        // alert("Please enter an integer");
        inp.value="";
        inp.focus();
     }
  }
  return false;
}


// read the text from an input field and return it as a float number
// blank input is returned as 0
function readFloat(inp)
{
   var val = 0;
   if (trim(inp.value).length > 0)
      val = parseFloat(inp.value);

  return val;
}


// use in onkeyup() or on keypress() event to insure that only
// floats are entered. 
// inp is the input field that should contain a float
// note that blank input is valid

function validateFloat(inp) {
  var instr = inp.value;
  var i;
  
  for (i=0; i < instr.length; i++) {
     if (".0123456789".indexOf(instr.charAt(i)) == -1) {
        // alert("Please enter a number");
        inp.value="";
        inp.focus();
     }
  }
  return false;
}


// return a trimmed string
function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}






