// http://alphaadv.net/njtitle/njgfe10tvt.js
<!-- New Jersey Title Insurance Good Faith Estimator -->
<!-- Thank you for finding this page interesting enough to view the source code. -->
<!-- Please respect my copyrights.  Thankx -->
<!-- Page written November 8, 1998, Last update November 15, 2010 -->

<!-- Using or -->
<!-- Changing the lines above or below is an invitation to Adventures in Legal Land -->

<!-- Activate Cloaking Device -->

function checkNumber(input, min, max, msg)
{
    msg = msg + " field has invalid data: " + input.value;

    var str = input.value;
    for (var i = 0; i < str.length; i++) {
        var ch = str.substring(i, i + 1)
        if ((ch < "0" || "9" < ch) && ch != '.') {
            alert(msg);
            return false;
        }
    }
    var num = parseFloat(str)
    if (num < min || max < num) {
        // alert(msg + " not in range [" + min + ".." + max + "]");
        return false;
    }
    input.value = str;
    return true;
}

function computeField(input)
{
    if (input.value != null && input.value.length != 0)
     input.value = "" + eval(input.value);
    computeForm(input.form);
}

function calcNJrates(form)
{

// tiamt = greater of saleprice or mortgageamount
     var tiamt = 0
     var sale = form.saleprice.value / 1
     var mtg = form.mtgamount.value / 1
     var previousmtg = form.previousmtgamount.value / 1
     if (sale >= mtg) {
     tiamt = form.saleprice.value
     }
     else {
     tiamt = form.mtgamount.value
     }
		 
// caclulate standard
     var std = 0;

     // Calculate rates at the sale price or mortgage amount
     amt = sale - mtg
     if (amt > 0)
     {
     // Calculate rates at the Sale Price
     std = standard(sale);
     // Calculate rates at the Mortgage Amount
     form.ostandard.value = standard(mtg);
     // alert("Calc form.ostandard.value = " + form.ostandard.value);
     // now Calculate the Owner's Rate
     form.ostandard.value = std - form.ostandard.value;
     // alert("Top form.ostandard.value = " + form.ostandard.value);
     form.lstandard.value = std - form.ostandard.value;
     // alert("Top form.lstandard.value = " + form.lstandard.value);

		 var lstd = form.lstandard.value;
		 // alert("lstd = " + lstd);
		 var ostd = form.ostandard.value;
		 // alert("ostd = " + ostd);
		 
     form.lstandard.value=roundit(form.lstandard.value)
     form.ostandard.value=roundit(form.ostandard.value)
     }

     // the Sale Price and Mortgage amount are the same
     else
     {
     // Calculate rates at the Sale Price
     form.lstandard.value = standard(tiamt);
		 var lstd = form.lstandard.value;
		 // alert("lstd = " + lstd);
		 
     // set Owner's policies to zero
     form.ostandard.value = "0";
     }	


// calculate refinance
// - A - full refinance, if the old mortgage amount is greater than the mortgage amount, else
// - B - refinance & standard, if the previous mortgage amount is less than the mortgage amount
     if (previousmtg >= mtg) {
     // A - full refinance
          form.refinance.value = refi(mtg)
     }

     // B - refinance up to the old mtg, then standard to new mtg
     else if (previousmtg < mtg) {
          // 1  refinance(previousmtg)
               var reficalc=0
               reficalc = refi(previousmtg)
							 form.refinance.value = reficalc
               form.refinance.value = roundit(form.refinance.value);
               // alert (reficalc)

          // 2 - standard(previousmtgamount)
               reficalc = reficalc - standard(previousmtg)
							 // alert (reficalc)
							 
          // 3 + standard(mtg)
               form.refinance.value = reficalc + standard(mtg)
							 // alert (reficalc)
     }

		 var refirate = form.refinance.value;
		 // alert("refirate = " + refirate);
		 
// calculate construction
     // var cons = 0;

     // Calculate rates at the sale price or mortgage amount
     // amt = sale - mtg
     // if (amt > 0)
     // {
     // Calculate rates at the Sale Price
     // cons = construction(sale);
     // Calculate rates at the Mortgage Amount
     // form.oconstruction.value = construction(mtg);
     // now Calculate the Owner's Rate
     // form.oconstruction.value =  cons - form.oconstruction.value;
     // form.lconstruction.value =  cons - form.oconstruction.value;
     // }
	 
     // the Sale Price and Mortgage amount are the same
     // else if (amt = 0) 
     // {
     // Calculate rates at the Sale Price
     // form.lconstruction.value = construction(sale);
     // set Owner's policies to zero
     // form.oconstruction.value = "";
     // }	


// test minimums for all 3 rates
// standard
     std = form.lstandard.value /1
		 amt = form.ostandard.value /1
     std = std + amt;
     if ( std < 200)
		 { form.lstandard.value = 200.00 - form.ostandard.value }

		 
// refinance
     if ( (form.refinance.value / 1) < 200)
		 { form.refinance.value = "200.00" }
     form.refinance.value=roundit(form.refinance.value);
		 
// construction
     // cons = form.lconstruction.value /1
		 // amt = form.oconstruction.value /1
     // cons = cons + amt;
     // if ( cons < 200)
		 // { form.lconstruction.value = 200.00 - form.oconstruction.value }
     // form.lconstruction.value=roundit(form.lconstruction.value)
     // form.oconstruction.value=roundit(form.oconstruction.value)

// TVT Totals
 		if (mtg > 0) {
		    if (sale > 0) {
				   // Sales with Mortgage
           // alert("lstd = " + lstd);
	         form.tlstandard.value = ( ( lstd / 1 ) + 565.50 + 375 );
        	 // alert("TVT tlstandard " + form.tlstandard.value);
           form.tostandard.value = ( ( ostd / 1 ) + 0 );
			     // alert("TVT tostandard " + form.tostandard.value);
    			 form.trefinance.value = ( ( refirate / 1 ) + 490.50 + 375 );
		    	 // alert("TVT trefinance " + form.trefinance.value);
			 
			     // TVT Recording Totals
    			 form.srecord.value = "      350.00"
		    	 form.stvttotal.value = roundit(( form.tlstandard.value / 1 ) + 350);
    			 form.stvttotal.value = "   " + form.stvttotal.value;

    			 form.orecord.value = ""
    			 form.otvttotal.value = "   " + roundit(ostd / 1);
					 
					 form.sorecord.value = "";
					 			 
		    	 form.rrecord.value = "      350.00";
    			 form.rtvttotal.value = roundit(( form.trefinance.value / 1 ) + 350);
		    	 form.rtvttotal.value = "   " + form.rtvttotal.value;
					 
					 form.tlstandard.value=roundit(form.tlstandard.value);
					 form.tostandard.value=roundit(form.tostandard.value);
					 form.trefinance.value=roundit(form.trefinance.value);
           }
		    else {
				   // Straight Refinance
					 // alert("Straight Refinance");
	         form.lstandard.value = "";
           form.ostandard.value = "";
					 
	         form.tlstandard.value = "";
           form.tostandard.value = "";
    			 // form.trefinance.value = roundit(( refirate / 1 ) + 490.50 + 375);
		    	 // alert("TVT trefinance " + form.trefinance.value);
					 form.trefinance.value = ( ( refirate / 1 ) + 490.50 + 375 );
		    	 // alert("TVT trefinance " + form.trefinance.value);
			 
			     // TVT Recording Totals
    			 form.srecord.value = "";
    			 form.stvttotal.value = "";
					 
					 form.sorecord.value = "";
					 
					 form.otvttotal.value = "";
			 
		    	 form.rrecord.value = "      350.00";
    			 form.rtvttotal.value = roundit(( form.trefinance.value / 1 ) +  + 350);
		    	 form.rtvttotal.value = "   " + form.rtvttotal.value;
					 // alert("TVT trefinance total " + form.rtvttotal.value);
					 
					 form.trefinance.value=roundit(form.trefinance.value);
           }
       }
		else {
       // Cash deals
	     form.lstandard.value = "";
			 form.refinance.value = "";
			 
			 form.tlstandard.value = "";
       form.tostandard.value = roundit( ( ostd / 1 ) + 245 );
			 // alert("TVT tostandard " + form.tostandard.value);
			 form.trefinance.value = "";

			 form.srecord.value = "";
			 form.sorecord.value = "     80.00";
			 form.orecord.value = "     80.00";
			 form.rrecord.value = "";
			 
			 form.stvttotal.value = "";
			 form.otvttotal.value = roundit( ( ostd / 1 ) + 245 + 80 );
			 form.rtvttotal.value = "";
        }

// Special calculation for Mortgage Amounts > Sale Price
   if (mtg > sale)
	 {
	 form.lstandard.value=roundit(form.lstandard.value);
	 form.ostandard.value = "";
	 form.tostandard.value = "";
	 form.sorecord.value = "";
	 form.otvttotal.value = "";
	 }
				
// NJ Transfer Taxes

// Standard NJ Transfer Tax
	  // alert("Transfer Taxes");
 		if (tiamt < 150000) {
     		amt1 = fivehundreds(tiamt, 0);
				form.trtax.value = amt1 * 2.00;
				form.trtax.value = roundit(form.trtax.value);
	     }
 		else if (tiamt < 200000) {
     		amt1 = fivehundreds(tiamt, 150000);
				form.trtax.value = (600 + (amt1 * 3.35));
				form.trtax.value = roundit(form.trtax.value);
	     }
 		else if (tiamt < 350000) {
     		amt1 = fivehundreds(tiamt, 200000);
				form.trtax.value = (935 + (amt1 * 3.90));
				form.trtax.value = roundit(form.trtax.value);
	     }
// Second Tier
 		else if (tiamt < 550000) {
     		amt1 = fivehundreds(tiamt, 350000);
				form.trtax.value = (2735 + (amt1 * 4.80));
				form.trtax.value = roundit(form.trtax.value);
	     }
 		else if (tiamt < 850000) {
     		amt1 = fivehundreds(tiamt, 550000);
				form.trtax.value = (4655 + (amt1 * 5.30));
				form.trtax.value = roundit(form.trtax.value);
	     }
 		else if (tiamt < 1000000) {
     		amt1 = fivehundreds(tiamt, 850000);
				form.trtax.value = (7835 + (amt1 * 5.80));
				form.trtax.value = roundit(form.trtax.value);
	     }
		else {
     		amt1 = fivehundreds(tiamt, 1000000);
				form.trtax.value = (9575 + (amt1 * 6.05));
				form.trtax.value = roundit(form.trtax.value);
        }

// Senior Citizen NJ Transfer Tax		 
 		if (tiamt < 150000) {
     		amt1 = fivehundreds(tiamt, 0);
				form.sstrtax.value = amt1 * 0.50;
				form.sstrtax.value = roundit(form.sstrtax.value);
	     }
 		else if (tiamt < 200000) {
     		amt1 = fivehundreds(tiamt, 150000);
				form.sstrtax.value = (150 + (amt1 * 1.25));
				form.sstrtax.value = roundit(form.sstrtax.value);
	     }
 		else if (tiamt < 350000) {
     		amt1 = fivehundreds(tiamt, 200000);
				form.sstrtax.value = (275 + (amt1 * 1.25));
				form.sstrtax.value = roundit(form.sstrtax.value);
	     }
// Second Tier
 		else if (tiamt < 550000) {
     		amt1 = fivehundreds(tiamt, 350000);
				form.sstrtax.value = (1280 + (amt1 * 2.15));
				form.sstrtax.value = roundit(form.sstrtax.value);
	     }
 		else if (tiamt < 850000) {
     		amt1 = fivehundreds(tiamt, 550000);
				form.sstrtax.value = (2140 + (amt1 * 2.65));
				form.sstrtax.value = roundit(form.sstrtax.value);
	     }
 		else if (tiamt < 1000000) {
     		amt1 = fivehundreds(tiamt, 850000);
				form.sstrtax.value = (3730 + (amt1 * 3.15));
				form.sstrtax.value = roundit(form.sstrtax.value);
	     }
		else {
     		amt1 = fivehundreds(tiamt, 1000000);
				form.sstrtax.value = (4675 + (amt1 * 3.40));
				form.sstrtax.value = roundit(form.sstrtax.value);
        }

// Non-Resident NJ Transfer Tax		 
form.nrtrtax.value = (tiamt * 0.02);
form.nrtrtax.value = roundit(form.nrtrtax.value);

// Millionaire Tax
 		if (tiamt < 1000000) {
        form.millionaire.value = 0;
        form.millionaire.value = roundit(form.millionaire.value);
        }
		else {
        amt1 = thousands(tiamt, 1000000);
        form.millionaire.value = (tiamt * 0.01);
        form.millionaire.value = roundit(form.millionaire.value);
        }
// end of overall calculation


// Align Decimals - top part
     var len = 0;
		 var len2 = 0;
		 len = form.lstandard.value.length
		 // len2 = form.lconstruction.value.length
		 // if ( ( len - len2 ) == 1  ) {
     // form.lconstruction.value = "  " + form.lconstruction.value;
		 // }
		 // else if ( ( len - len2 ) == 2  ) {
     // form.lconstruction.value = "   " + form.lconstruction.value;
		 // }
		 len = form.ostandard.value.length
		 // len2 = form.oconstruction.value.length
		 // if ( ( len - len2 ) == 1  ) {
     // form.oconstruction.value = "  " + form.oconstruction.value;
		 // }
		 // else if ( ( len - len2 ) == 2  ) {
     // form.oconstruction.value = "   " + form.oconstruction.value;
		 // }

// Align Decimals - bottom part, one at a time
		 len = form.nrtrtax.value.length
     // Transfer Tax
		 len2 = form.trtax.value.length
		 if ( ( len - len2 ) == 2  ) { form.trtax.value = "   " + form.trtax.value; }
		 else if ( ( len - len2 ) == 3  ) { form.trtax.value = "    " + form.trtax.value; }
		 else if ( ( len - len2 ) == 4  ) { form.trtax.value = "        " + form.trtax.value; }
		 else if ( ( len - len2 ) == 5  ) { form.trtax.value = "          " + form.trtax.value; }
		 else if ( ( len - len2 ) == 6  ) { form.trtax.value = "             " + form.trtax.value; }
     // Secnior citizen
		 len2 = form.sstrtax.value.length
		 if ( ( len - len2 ) == 2  ) { form.sstrtax.value = "   " + form.sstrtax.value; }
		 else if ( ( len - len2 ) == 3  ) { form.sstrtax.value = "    " + form.sstrtax.value; }
		 else if ( ( len - len2 ) == 4  ) { form.sstrtax.value = "        " + form.sstrtax.value; }
		 else if ( ( len - len2 ) == 5  ) { form.sstrtax.value = "          " + form.sstrtax.value; }
  	 else if ( ( len - len2 ) == 6  ) { form.sstrtax.value = "             " + form.sstrtax.value; }
     // Millionaire Tax
		 if ( form.millionaire.value = ".0" ) { form.millionaire.value = "0.00" }
		 len2 = form.millionaire.value.length
		 if ( ( len - len2 ) == 2  ) { form.millionaire.value = "   " + form.millionaire.value; }
		 else if ( ( len - len2 ) == 3  ) { form.millionaire.value = "    " + form.millionaire.value; }
		 else if ( ( len - len2 ) == 4  ) { form.millionaire.value = "        " + form.millionaire.value; }
		 else if ( ( len - len2 ) == 5  ) { form.millionaire.value = "          " + form.millionaire.value; }
		 else if ( ( len - len2 ) == 6  ) { form.millionaire.value = "             " + form.millionaire.value; }


     return;
}

function standard(amt)
{
     // if amount <= 100,000 - standard = 5.00/1000
     if (amt <= 100000) {
          amt1=thousands(amt, 0);
          standardrate = (amt1 * 5.00);
     }

     // if amount <= 500,000 - standard = 500 + 3.95 /1000 over 100,000
     else if (amt <= 500000) {
          amt1=thousands(amt, 100000);
          standardrate = (500 + (amt1 * 3.95));
     }

     // if amount <= 2,000,000 - standard = 2,080 + 2.65 /1000 over 500,000
     else if (amt <= 2000000) {
          amt1=thousands(amt, 500000);
					// alert("amt1 = " + amt1);
          standardrate = (2080 + (amt1 * 2.65));
					// alert("standardrate = " + standardrate);
     }

     // if amount > 2,000,000 - standard = 6,055 + 2.00 /1000 over 2,000,000
     else if (amt > 2000000) {
          amt1=thousands(amt, 2000000);
          standardrate = (6055 + (amt1 * 2.00));
     }

     // round - I need to remember rounding info
     return(standardrate);
}

function refi(amt)
{
     // if amount <= 100,000 - reissue = 2.50/1000
     if (amt <= 100000) {
          amt1=thousands(amt, 0);
          refirate = (amt1 * 2.50);
     }

     // if amount <= 500,000 - reissue = 250 + 2.25 /1000 over 100,000
     else if (amt <= 500000) {
          amt1=thousands(amt, 100000);
          refirate = (250 + (amt1 * 2.25));
     }

     // if amount <= 2,000,000 - reissue = 1,150 + 2.00 /1000 over 500,000
     else if (amt <= 2000000) {
          amt1=thousands(amt, 500000);
          refirate = (1150 + (amt1 * 2.00));
     }

     // if amount > 2,000,000 - reissue = 4,150 + 1.50 /1000 over 2,000,000
     else if (amt > 2000000) {
          amt1=thousands(amt, 2000000);
          refirate = (4150 + (amt1 * 1.50));
     }

     // round - I need to remember rounding info
     return(refirate);
}

function construction(amt)
{
     // if amount <= 100,000 - standard = 1.00/1000
     if (amt <= 100000) {
          amt1=thousands(amt, 0);
          standardrate = (0 + (amt1 * 1.00));
     }

     // if amount <= 500,000 - standard = 195 + 1.00 /1000 over 100,000
     else if (amt <= 500000) {
          amt1=thousands(amt, 100000);
          standardrate = (100 + (amt1 * 1.00));
     }

     // if amount <= 2,000,000 - standard = 595 + 1.00 /1000 over 500,000
     else if (amt <= 2000000) {
          amt1=thousands(amt, 500000);
          standardrate = (500 + (amt1 * 1.00));
     }

     // if amount > 2,000,000 - standard = 2, 095 + 1.00 /1000 over 2,000,000
     else if (amt > 2000000) {
          amt1=thousands(amt, 2000000);
          standardrate = (2000 + (amt1 * 1.00));
     }

     // round - I need to remember rounding info
     return(standardrate);
}

function fivehundreds(amt, base) {    
     var amt1 = ((amt - base) / 500)
     var amt2 = parseInt(((amt - base) / 500))
     if (amt1 > amt2) {
     amt1 = amt2 + 1
     }
     return (amt1);
}

function thousands(amt, base) {    
     var amt1 = ((amt - base) / 1000)
     var amt2 = parseInt(((amt - base) / 1000))
     if (amt1 > amt2) {
     amt1 = amt2 + 1
     }
     return (amt1);
}

function roundit(amt){  
     strDollars = "" + Math.round(amt * 100);
     len = strDollars.length;
     strRounded = strDollars.substring(0, len - 2) + "." + strDollars.substring(len - 2, len);
     len = strRounded.length;
		 		 
     if (len <= 6) {
          rounded = strRounded;
     }
     // Thousands
     else if (len <= 9) {
          rounded = strRounded.substring(0, len - 6) + "," + strRounded.substring(len - 6, len);
     }
     // Millions
     else {
          rounded = strRounded.substring(0, len - 9) + "," + strRounded.substring(len - 9, len - 6) + "," + strRounded.substring(len - 6, len);
     }
     return(rounded);
}

function clearForm(form)
{
     form.saleprice.value = "";
     form.mtgamount.value = "";
     form.previousmtgamount.value = "";

     form.lstandard.value = "";
     form.ostandard.value = "";
     form.refinance.value = "";
}

<!-- Deactivate Cloaking Device -->
