﻿/* VSI Title Insurance Premium Calculator
Copyright 2009. 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.
*/

// 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);}

	return value;
}


//******* RATES *********************************
// these rates from Commonwealth effective June 19, 2009
// first index set to 0 and not used - done to match tier number 
var ownerRate = [0, 3.89, 3.31, 2.78, 2.21, 1.84, 1.58];
var lenderRate = [0, 2.78, 2.21, 1.94, 1.68, 1.31, 1.05];
var minOwnerRate = 155.60;
var minLenderRate = 111.20;

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

var ownerPremium;
var lenderPremium;
var altLenderPremium;
var loanRounded;
var priceRounded;


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

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

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

// 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
if (inputLoan !== "" && inputPrice == "") {
	var loanAmount = inputLoan - 1;
	var purchPrice = inputPrice;
} 
else if (inputLoan == "" && inputPrice !== ""){
	var loanAmount = inputLoan;
	var purchPrice = inputPrice - 1;
}

else{
	var loanAmount = inputLoan - 1;
	var purchPrice = inputPrice - 1;
};

var priceRounded = nextNearest(purchPrice, 1000);
var loanRounded = nextNearest(loanAmount, 1000);



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

if (priceRounded <= 40000){
		var ownerPremium = minOwnerRate * 1.2;
		var altLenderPremium = minLenderRate;
}

else if (priceRounded > 40000 && priceRounded <= 250000){
		var ownerPremium = (((priceRounded / 1000) * ownerRate[1]) * 1.2);
// 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) * 1.2);

// 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) * 1.2);

// 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) * 1.2);
// 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){

//alert("Please contact Village Settlements, Inc. at 301-590-9300 for a premium quote. Thank you.")
//ownerPremium = "";
//}

		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) * 1.2);
// 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) * 1.2);
// 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 <= 40000){
		var lenderPremium = minLenderRate;
}

else if (loanRounded > 40000 && 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){

/*
alert("Please contact Village Settlements, Inc. at 301-590-9300 for a premium quote. Thank you.")
lenderPremium = "";
}
*/
		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);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - -

if (purchPrice !== ""  && loanAmount == ""){
		if (purchPrice <= 40000){ 
			alert("The minimum premium for an Owner's Advantage Residential Policy (i.e., written for $40,000.00 or less) shall be $186.72.")
			document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2); 
			document.getElementById("totalPremium").value = (ownerPremium).toFixed(2);
			}
		else {
		document.getElementById("ownerPremium").value = (ownerPremium).toFixed(2);
		document.getElementById("totalPremium").value = (ownerPremium).toFixed(2);
		}
}
else if (loanAmount !== "" && purchPrice == "") {
		if (loanAmount <= 40000){
			alert("The minimum premium for a loan policy (i.e., written for $40,000.00 or less) shall be $111.20.")
			document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
			document.getElementById("totalPremium").value = (lenderPremium).toFixed(2);
			}
		else{
		document.getElementById("lenderPremium").value = (lenderPremium).toFixed(2);
		document.getElementById("totalPremium").value = (lenderPremium).toFixed(2);
	}
}

else if (purchPrice !== "" &&  loanAmount !== ""){ // simultaneous issue adds $50 fee
/*
	if (loanAmount > purchPrice){
		alert("You have entered a Purchase Price lower that the Loan Amount. Please call Village Settlements, Inc. at 301-590-9300 for a premium quote. Thank you.")
		return false;
	}
*/
	if (loanAmount <= 40000){ alert("Minimum lender rate of $111.20 applies to Lender's premium.");
	
	}
	if (purchPrice <= 40000){ alert("Minimum Owner's Advantage Residential Policy rate of $186.72 applies to Owner's premium.");
	
	}



// retain this code for rewrite to calculate for this case
		if (loanAmount > purchPrice){   // rare but possible case

				var difference = ownerPremium - altLenderPremium;
				var newOwnerPremium = difference + 50;
				var totalPremium = lenderPremium + difference + 50;

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

				document.getElementById("altLenderPremium").value = (altLenderPremium).toFixed(2);
				}



	else{
			var totalPremium = (ownerPremium + 50);

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


	};
}


}