﻿/* VSI Title Insurance Premium Calculator
Copyright 2009, 2010. Robert H. Walker. All Rights Reserved.
Title Insurance Premium Calculator designed for Village Settlements, Inc. - Live on December 21, 2009.
Based on Commonwealth Land Title Insurance Co. rates for Maryland effective June 19, 2009.
MODIFIED March 25, 2010 to use First American TIC rates
*/

// accept only numberic input
function testVal(x) {
  if (isNaN(x)) {
    window.alert ('Please enter a whole dollar amount without \n dollar signs or commas (i.e., 500000).\n Thank you.');
    }
  return;
  }

//round the purchase price up to the nearest thousand
function nextNearest(value, number) {
//	var value = Math.ceil(value);
	var remainder = value % number;
	if (remainder > 0){
		value = ((value - remainder) + number);
		}
else if (remainder = 0){ value = parseInt(value, 10);}

	return value;
}


//******* RATES *********************************
// these rates from First American Title Insurance Company
// first index set to 0 and not used - done to match tier number 
var ownerRate = [0, 4.75, 4.05, 3.45, 3.00, 1.80, 1.80];
var lenderRate = [0, 2.65, 2.10, 1.85, 1.60, 1.25, 2.00];
var minOwnerPrem = 150.00;
var minLenderPrem = 150.00;
var simultaneousRate = 150.00;

//************************************************

var ownerPremium;
var lenderPremium;
var altLenderPremium;
var supLenderPremium;
var loanRounded;
var priceRounded;
var inputLoan;
var inputPrice;

// MAIN FUNCTION - 
function calcPrem(){
var inputLoan = document.getElementById("loanAmount").value;
var inputPrice = document.getElementById("purchPrice").value;

var a= document.getElementById("loanAmount").value;
testVal(a);

var b= document.getElementById("purchPrice").value;
testVal(b);

// no input, no run
if (inputLoan == "" && inputPrice == ""){ 
	alert("Please enter a Purchase Price and/or a Loan Amount. Thank you.")
	return false;}

	// the following loop necessary to overcome computation limitation
	// this operation commented out on March 30, 2010 - 
	if (inputLoan !== "" && inputPrice == "") {
		var loanAmount = inputLoan;
	//	var loanAmount = inputLoan - 1;
		var purchPrice = inputPrice;
	} 
	else if (inputLoan == "" && inputPrice !== ""){
		var loanAmount = inputLoan;
		var purchPrice = inputPrice;
	//	var purchPrice = inputPrice - 1;
	}

	else{
		var loanAmount = eval(inputLoan);
	//	var loanAmount = inputLoan - 1;
		var purchPrice = eval(inputPrice);
	//	var purchPrice = inputPrice - 1;
	};

var priceRounded = nextNearest(purchPrice, 1000);
var loanRounded = nextNearest(loanAmount, 1000);
var ownerMinThreshold = 31000; //(minOwnerPrem / ownerRate[1]) * 1000;  //31000; 
var lenderMinThreshold = 57000; //(minLenderPrem / lenderRate[1]) * 1000;  //57000; 


// FOR OWNER PREMIUM
// calculate for FIRST tier up to 250000

if (priceRounded <= ownerMinThreshold){
		var ownerPremium = minOwnerPrem;
		var altLenderPremium = ((priceRounded / 1000) * lenderRate[1]);
}

else if (priceRounded > ownerMinThreshold && priceRounded <= 250000){
		var ownerPremium = ((priceRounded / 1000) * ownerRate[1]);
// to allow for rare case of loan larger than price
		var altLenderPremium = ((priceRounded / 1000) * lenderRate[1]);
}

// calculate for SECOND tier 250000 to 500000
else if (priceRounded > 250000 && priceRounded <= 500000){
		var baseAmount = 250000;
		var ownerBaseRate = (250 * ownerRate[1]);
		var priceAdjusted = priceRounded - baseAmount;
		var ownerPremium = (((priceAdjusted / 1000) * ownerRate[2]) + ownerBaseRate);

// to allow for rare case of loan larger than price
		var lenderBaseRate = (250 * lenderRate[1]);	
		var altLenderPremium = (((priceAdjusted / 1000) * lenderRate[2]) + lenderBaseRate);
}

// calculate for THIRD tier 500000 to 1000000
else if (priceRounded > 500000 && priceRounded <= 1000000){
		var baseAmount = 500000;
		var ownerBaseRate = ((250 * ownerRate[1]) + (250 * ownerRate[2]));
		var priceAdjusted = priceRounded - baseAmount;
		var ownerPremium = (((priceAdjusted / 1000) * ownerRate[3]) + ownerBaseRate);

// to allow for rare case of loan larger than price
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]));
		var altLenderPremium = (((priceAdjusted / 1000) * lenderRate[3]) + lenderBaseRate);
}
		
// calculate for FORTH tier 1000000 to 5000000
else if (priceRounded > 1000000 && priceRounded <= 5000000){
		var baseAmount = 1000000;
		var ownerBaseRate = (((250 * ownerRate[1]) + (250 * ownerRate[2]) + (500 * ownerRate[3])));
		var priceAdjusted = priceRounded - baseAmount;
		var ownerPremium = (((priceAdjusted / 1000) * ownerRate[4]) + ownerBaseRate);
// to allow for rare case of loan larger than price
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]) + (500 * lenderRate[3]));
		var altLenderPremium = (((priceAdjusted / 1000) * lenderRate[4]) + lenderBaseRate);
}

// calculate for FIFTH tier 5000000 to 15000000
else if (priceRounded > 5000000 && priceRounded <= 15000000){
		var baseAmount = 5000000;
		var ownerBaseRate = ((250 * ownerRate[1]) + (250 * ownerRate[2]) + (500 * ownerRate[3]) + (4000 * ownerRate[4]));
		var priceAdjusted = priceRounded - baseAmount;
		var ownerPremium = (((priceAdjusted / 1000) * ownerRate[5]) + ownerBaseRate);
// to allow for rare case of loan larger than price
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]) + (500 * lenderRate[3]) + (4000 * lenderRate[4]));
		var altLenderPremium = (((priceAdjusted / 1000) * lenderRate[5]) + lenderBaseRate);
}

// calculate for SIXTH tier >15000000
else if (priceRounded > 15000000){
		var baseAmount = 15000000;
		// baseRate = price for first 15000000 of purchase price
		var ownerBaseRate = ((250 * ownerRate[1]) + (250 * ownerRate[2]) + (500 * ownerRate[3]) + (4000 * ownerRate[4]) + (10000 * ownerRate[5]));
		var priceAdjusted = priceRounded - baseAmount;
		var ownerPremium = (((priceAdjusted / 1000) * ownerRate[6]) + ownerBaseRate);
// to allow for rare case of loan larger that price
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]) + (500 * lenderRate[3]) + (4000 * lenderRate[4] )  + (10000 * lenderRate[5]));
		var loanAdjusted = loanRounded - baseAmount;
		var altLenderPremium = (((priceAdjusted / 1000) * lenderRate[6]) + lenderBaseRate);

}


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// FOR LENDER PREMIUM
// calculate for FIRST tier up to 250000

if (loanRounded <= lenderMinThreshold){
		var lenderPremium = minLenderPrem;
		var supLenderPremium = ((loanRounded / 1000) * lenderRate[1]);
}
else if (loanRounded > lenderMinThreshold && loanRounded <= 250000){
		var lenderPremium = ((loanRounded / 1000) * lenderRate[1]);
}
// calculate for SECOND tier 250000 to 500000
else if (loanRounded > 250000 && loanRounded <= 500000){
		var baseAmount = 250000;
		var lenderBaseRate = (250 * lenderRate[1]);	
		var loanAdjusted = loanRounded - baseAmount;
		var lenderPremium = (((loanAdjusted / 1000) * lenderRate[2]) + lenderBaseRate);
}

// calculate for THIRD tier 500000 to 1000000
else if (loanRounded > 500000 && loanRounded <= 1000000){
		var baseAmount = 500000;
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]));
		var loanAdjusted = loanRounded - baseAmount;
		var lenderPremium = (((loanAdjusted / 1000) * lenderRate[3]) + lenderBaseRate);
}
		
// calculate for FORTH tier 1000000 to 5000000
else if (loanRounded > 1000000 && loanRounded <= 5000000){
		var baseAmount = 1000000;
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]) + (500 * lenderRate[3]));	
		var loanAdjusted = loanRounded - baseAmount;
		var lenderPremium = (((loanAdjusted / 1000) * lenderRate[4]) + lenderBaseRate);
}

// calculate for FIFTH tier 5000000 to 15000000
else if (loanRounded > 5000000 && loanRounded <= 15000000){
		var baseAmount = 5000000;
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]) + (500 * lenderRate[3]) + (4000 * lenderRate[4]));
		var loanAdjusted = loanRounded - baseAmount;
		var lenderPremium = (((loanAdjusted / 1000) * lenderRate[5]) + lenderBaseRate);
}

// calculate for SIXTH tier >15000000
else if (loanRounded > 15000000){
		var baseAmount = 15000000;
		var lenderBaseRate = ((250 * lenderRate[1]) + (250 * lenderRate[2]) + (500 * lenderRate[3]) + (4000 * lenderRate[4])  + (10000 * lenderRate[5]));
		var loanAdjusted = loanRounded - baseAmount;
		var lenderPremium = (((loanAdjusted / 1000) * lenderRate[6]) + lenderBaseRate);
}

// * * * * * * Calculate and output the numbers * * * * * * * * * * * * * * * * * * * * * * * 
// alerts are for debugging purposes
//if (priceRounded > loanRounded){alert("purchase is more")};
//if (loanRounded > priceRounded){alert("loan is more")};
//if (priceRounded === loanRounded){alert("amounts are equal");};


//if (true) {} else{};


if (purchPrice !== ""  && loanAmount == ""){
		if (purchPrice <= ownerMinThreshold){ 
			document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2); 
			document.getElementById("totalPremium").value = (ownerPremium).toFixed(2);
// alert("one");
			return;}
		else {
		document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
		document.getElementById("totalPremium").value = (ownerPremium).toFixed(2);
// alert("two");
		return;}
}
else if (loanAmount !== "" && purchPrice == "") {
		if (loanAmount <= lenderMinThreshold){
			document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
			document.getElementById("totalPremium").value = (lenderPremium).toFixed(2);
// alert("three");
			return;}
		else{
		document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
		document.getElementById("totalPremium").value = (lenderPremium).toFixed(2);
// alert("four");
	return;}
}


// * * * * * * * * * * * * * * * * * * * *


if (purchPrice !== "" &&  loanAmount !== ""){ // simultaneous issue adds $150 fee


	// purchase price MORE THAN  or EQUAL TO loan amount
	if(priceRounded >= loanRounded){

			if (priceRounded <= ownerMinThreshold && loanRounded <= lenderMinThreshold){
				var totalPremium = minOwnerPrem + simultaneousRate;
				var ownerPremium = totalPremium - supLenderPremium;

				document.getElementById("lenderPremium").value = (supLenderPremium).toFixed(2);
				document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
				document.getElementById("totalPremium").value = (totalPremium).toFixed(2);
				//	alert("one: price min - loan min");
				return;}

			if (priceRounded <= ownerMinThreshold && loanRounded > lenderMinThreshold){
				var totalPremium = (lenderPremium - altLenderPremium) + minOwnerPrem + simultaneousRate;
				var ownerPremium = totalPremium - lenderPremium;

				document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
				document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
				document.getElementById("totalPremium").value = (totalPremium).toFixed(2);
				//	alert("two: price min - loan above min");
				return;}

			if (priceRounded > ownerMinThreshold && loanRounded <= lenderMinThreshold){
				var totalPremium = minLenderPrem + ownerPremium;
				var ownerPremium = totalPremium - supLenderPremium;

				document.getElementById("lenderPremium").value = (supLenderPremium).toFixed(2);
				document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
				document.getElementById("totalPremium").value = (totalPremium).toFixed(2);
				//	alert("three: price above min - loan min");
				return;}

			if (priceRounded > ownerMinThreshold && loanRounded > lenderMinThreshold){
			var totalPremium = ownerPremium + simultaneousRate;

			document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
			document.getElementById("ownerPremium").value = (totalPremium - lenderPremium).toFixed(2);
			document.getElementById("totalPremium").value = (totalPremium).toFixed(2);

			//	alert("four: price above min - loan above min");
			return;}
		}

	// purchase price LESS THAN loan amount

	if (loanRounded > priceRounded){

			if (priceRounded <= ownerMinThreshold && loanRounded <= lenderMinThreshold){
				var difference = (supLenderPremium - altLenderPremium);
				var totalPremium = minOwnerPrem + simultaneousRate + difference;
				var ownerPremium = totalPremium - supLenderPremium;

				document.getElementById("lenderPremium").value = (supLenderPremium).toFixed(2);
				document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
				document.getElementById("totalPremium").value = (totalPremium).toFixed(2);
				//	alert("five: price < loan - both min");
				return;}

			if (priceRounded <= ownerMinThreshold && loanRounded > lenderMinThreshold){
				var totalPremium = (lenderPremium - altLenderPremium) + minOwnerPrem + simultaneousRate;
				var ownerPremium = totalPremium - lenderPremium;

				document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
				document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
				document.getElementById("totalPremium").value = (totalPremium).toFixed(2);
				//	alert("six: price < loan - price min - loan above" );
				return;}

			if (priceRounded > ownerMinThreshold && loanRounded <= lenderMinThreshold){
				var totalPremium = minLenderPrem + ownerPremium;
				var ownerPremium = totalPremium - supLenderPremium;

				document.getElementById("lenderPremium").value = (supLenderPremium).toFixed(2);
				document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
				document.getElementById("totalPremium").value = (totalPremium).toFixed(2);
				//	alert("seven: price < loan - price above - loan min");
				return;}

		else{
			var difference = ownerPremium - altLenderPremium;
			var newOwnerPremium = difference + simultaneousRate;
			var totalPremium = lenderPremium + newOwnerPremium;

			document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
			document.getElementById("ownerPremium").value = (newOwnerPremium).toFixed(2);
			document.getElementById("totalPremium").value = (totalPremium).toFixed(2);

			//	alert("eight: price < loan - both above");
			return;}

		}
	}
}


