// Andrew D Foster  28/11/2008
today = new Date();
forceYear = today.getFullYear();
forceMonth = today.getMonth();
forceDay = today.getDate();

// Global Variables
var ipt = 5.0;									// %
var policyFee = 15.0;							// £
var maxSI = 40000;

// Essentials...
var rates = new Array(2, 2.2, 2.4, 999);	// Relative to the Claims Drop-Down (selectedIndex)
var ratePer = 100.0								// rate per (above)
var maxSIess = 15000;								// Can't quote for anything over £20K
var minPrem = 75.00;							// This is checked prior to adding the ipt & policyFee
//  For every &pound;100...
//		0 Claims in last 3 years @ £2
//		1 Claim in last 3 years @ £2.20
//		2 Claims in last 3 years @ £2.40
//		3+ Claims in last 3 years = Refer
// + IPT
// + £10.00 fee


// Economy / Select
var eS_Per = 100.0								// rate per (below)
var eS_minPrem = 88.67;						// This is checked prior to adding the ipt & policyFee

// Economy
var e_Rate = 2.50;								// per £100 (above)
var e_PolicyFee = 17.5;							// Policy Fee
var e_CaravanAgeDecline = 20;					// Decline if greater than this
var e_CaravanYoungAgeDecline = 3;				// Can't quote for very young makes on this one

// Select
var s_Rate = 2.10;								// per £100 (above)
var s_PolicyFee = 17.5;							// Policy Fee
var s_CaravanAgeDecline = 5;					// Decline if greater than this
var s_AgeLoads = new Array(0, 10, 20, 30, 40, 50);	// %ge increase to SI prior to initial rating


// IMPORTANT!!!!
var formPos = 0;
var frm = null;


var nYearLast = "xx";
var nYear = 0;
var nClaimsLast = "xx";
var nClaims = 0;
var sInsuredLast = "xx";
var Insured = 0; 
var caravanAgeLast = "xx";
var caravanAge = 0;
var val = 0;

// Debugging funcs and data
var debugging = 0;
function innerRep(c, n)
{
	if(debugging == 1)
	{
		if(c == 1)
		{
			document.all.message.innerHTML = n + "<BR>";
		}
		else
		{
			document.all.message.innerHTML += n + "<BR>";
		}
	}
}

function calcEssentials()
{
	innerRep(0, "<BR>calcEssentials<BR>--------------");
	if(val == "")
	{
		// Can't quote yet!
		frm["N-Premium."].value = "";
		frm["N-IPT."].value = "";
		frm["N-TotalPayable."].value = "";
		innerRep(0, "Can't quote yet!");
	}
	else
	{
	    if (nClaims == "3+" || Number(val) > maxSIess)
		{
			frm["N-Premium."].value = "";
			frm["N-IPT."].value = "";
			frm["N-TotalPayable."].value = "";
			innerRep(0, "3+ Claims or Sum Insured > &pound;" + maxSIess + ".");
		}
		else
		{
			calcer = (Number(val) / ratePer) * rates[nClaims];
			innerRep(0, "Base Rate: (&pound;" + val + " / " + ratePer + ") * " + rates[nClaims] + " = &pound;" + calcer);
			if(calcer < minPrem)
			{	// Minimum Premium
				calcer = minPrem;
				innerRep(0, "Minimum Premium met: &pound;" + calcer);
			}
			frm["N-Premium."].value = formatNumber(calcer, 100, 2, 0, 0);
			iptVal = (calcer / 100.0) * ipt;
			frm["N-IPT."].value = formatNumber(iptVal, 100, 2, 0, 0);
			calcer = calcer + iptVal + policyFee;
			frm["N-TotalPayable."].value = formatNumber(calcer, 100, 2, 0, 0);
		}
	}
} // End calcEssentials function


function calcEconomy()
{
	innerRep(0, "<BR>calcEconomy<BR>-----------");
	if(val == "")
	{
		// Can't quote yet!
		frm["N-EconomyPremium."].value = "";
		frm["N-EconomyIPT."].value = "";
		frm["N-EconomyTotalPayable."].value = "";
		innerRep(0, "Can't quote yet!");
	}
	else
	{
		if(nClaims == "3+" || caravanAge > e_CaravanAgeDecline || caravanAge < e_CaravanYoungAgeDecline || Number(val) > maxSI)
		{
			frm["N-EconomyPremium."].value = "";
			frm["N-EconomyIPT."].value = "";
			frm["N-EconomyTotalPayable."].value = "";
			innerRep(0, "3+ Claims or Caravan Age > " + e_CaravanAgeDecline + " or Caravan Age < " + e_CaravanYoungAgeDecline + " or Sum Insured > &pound;" + maxSI + ".");
		}
		else
		{
			// Base Rate
			calcer = (Number(val) / eS_Per) * e_Rate;
			innerRep(0, "Base Rate: (&pound;" + val + " / " + eS_Per + ") * " + e_Rate + " = &pound;" + calcer);
			
			if(calcer < eS_minPrem)
			{	// Minimum Premium
				calcer = eS_minPrem;
				innerRep(0, "Minimum Premium met: &pound;" + calcer);
			}
			
			frm["N-EconomyPremium."].value = formatNumber(calcer, 100, 2, 0, 0);
			iptVal = (calcer / 100.0) * ipt;
			frm["N-EconomyIPT."].value = formatNumber(iptVal, 100, 2, 0, 0);
			calcer = calcer + iptVal + e_PolicyFee;
			frm["N-EconomyTotalPayable."].value = formatNumber(calcer, 100, 2, 0, 0);
		}
	}
} // End calcEconomy function


function calcSelect()
{
	innerRep(0, "<BR>calcSelect<BR>----------");
	if(val == "")
	{
		// Can't quote yet!
		frm["N-SelectPremium."].value = "";
		frm["N-SelectIPT."].value = "";
		frm["N-SelectTotalPayable."].value = "";
		innerRep(0, "Can't quote yet!");
	}
	else
	{
	    if (nClaims == "3+" || caravanAge > s_CaravanAgeDecline || Number(val) > maxSI)
		{
			frm["N-SelectPremium."].value = "";
			frm["N-SelectIPT."].value = "";
			frm["N-SelectTotalPayable."].value = "";
			innerRep(0, "3+ Claims or Caravan Age > " + s_CaravanAgeDecline + " or Sum Insured > &pound;" + maxSI + ".");
		}
		else
		{
			// Base Rate defined by caravan age & SI
			cAge = caravanAge;
			maxAgeLoad = s_AgeLoads.length-1;
			if(cAge > maxAgeLoad)
			{
				cAge = maxAgeLoad;
			}
			useVal = ((Number(val) / 100.0) * s_AgeLoads[cAge]);
			innerRep(0, "Loaded SI: (&pound;" + val + " + ((&pound;" + val + " / 100.0) * " + s_AgeLoads[cAge] + "% [" + cAge + " year(s)]) = &pound;" + val + " + &pound;" + useVal + " = &pound;" + (Number(val)+useVal));
			useVal = Number(val) + useVal;
			calcer = (Number(useVal) / eS_Per) * s_Rate;
			innerRep(0, "Base Rate: (&pound;" + useVal + " / " + eS_Per + ") * " + s_Rate + " = &pound;" + calcer);
			
			if(calcer < eS_minPrem)
			{	// Minimum Premium
				calcer = eS_minPrem;
				innerRep(0, "Minimum Premium met: &pound;" + calcer);
			}

			frm["N-SelectPremium."].value = formatNumber(calcer, 100, 2, 0, 0);
			iptVal = (calcer / 100.0) * ipt;
			frm["N-SelectIPT."].value = formatNumber(iptVal, 100, 2, 0, 0);
			calcer = calcer + iptVal + s_PolicyFee;
			frm["N-SelectTotalPayable."].value = formatNumber(calcer, 100, 2, 0, 0);
		}
	}
} // End calcSelect function


function getGlobals(quickQuote, big)
{
	frm["N-PolicyFee."].value = formatNumber(policyFee, 100, 2, 0, 0);

	if(big == 1)
	{
		frm["N-ePolicyFee."].value = formatNumber(e_PolicyFee, 100, 2, 0, 0);
		frm["N-sPolicyFee."].value = formatNumber(s_PolicyFee, 100, 2, 0, 0);
	}

	frm["N-IPTPerc."].value = ipt;
	if(quickQuote == 1)
	{
		// We are going to assume a lot of things based on the fact 
		// that this is a price indication and not a full quote
		nClaims = 0;
	}
	else
	{
		// Full Quote, check everything
		nClaims = frm["N-Claims"].value;
	}

	if(big == 1)
	{
		sYear = frm["N-YearOfManufacture"].value; 
		nYear = Number(formatNumber(sYear, 1, 0, 0, 1));
		if(frm["N-YearOfManufacture"].value != nYear)
		{
			//frm["N-YearOfManufacture."].value = nYear;
		}
		if(nYear != nYearLast)
		{
			if(forceYear-nYear < 0)
			{
				nYear = forceYear;
			}
		}
		if(nYear != 0)
		{
			//frm["N-YearOfManufacture."].value = nYear;
		}
		caravanAge = forceYear - nYear;
		if(caravanAge == forceYear)
		{
			caravanAge = 0;
		}
		frm["N-CaravanAge."].value = caravanAge;
	}
	else
	{
		nYear = 0;
		caravanAge = 0;
	}

	sInsured = frm["N-SumInsured."].value; 
	val = formatNumber(sInsured, 1, 0, 0, 1);
	if(frm["N-SumInsured."].value != val)
	{
		frm["N-SumInsured."].value = val;
	}

	if(nYear != nYearLast || caravanAgeLast != caravanAge || nClaims != nClaimsLast || sInsured != sInsuredLast)
	{
		innerRep(1, "getGlobals (" + Math.random() + ")...");
		innerRep(0, "Caravan age: " + caravanAge);
		innerRep(0, "Sum Insured = &pound;" + val);
		return true;
	}
	else
	{
		return false;
	}
}

function setNext()
{
	nYearLast = nYear;
	nClaimsLast = nClaims;
	sInsuredLast = sInsured; 
	caravanAgeLast = caravanAge;
}

function checkChanges(quickQuote, big, essentials, others)
{
	// Global Values
	gotter = getGlobals(quickQuote, big);
	if(gotter)
	{
		innerRep(0, "getGlobals(" + quickQuote + ", " + big + ") = " + gotter);
		// Calc All
		if(essentials == 1)
		{
			calcEssentials();
		}
		if(others == 1)
		{
			calcEconomy();
			calcSelect();
		}
		// Make read for next time round
		setNext();
	}
	window.setTimeout("checkChanges(" + quickQuote + ", " + big + ", " + essentials + ", " + others + ");", 100);
}

function check(big)
{
	// This function is called when the user clicks the Quote Button, we need it to ensure all the fields have been populated.
	errorText = "";
	document.all.errors.innerHTML = errorText;

	if(frm["N-Title"].value == "")
	{
		errorText += "<LI class='message'>Title is required.</LI>";
	}
	if(frm["N-First Name."].value == "")
	{
		errorText += "<LI class='message'>First Name(s) is required.</LI>";
	}
	if(frm["N-Surname."].value == "")
	{
		errorText += "<LI class='message'>Surname is required.</LI>";
	}

	if(frm["N-Email."].value == "")
	{
		errorText += "<LI class='message'>Email is required.</LI>";
	}
	if(frm["N-ContactNumber."].value == "")
	{
		errorText += "<LI class='message'>Contact Number is required.</LI>";
	}
	if(frm["N-SumInsured."].value == "")
	{
		errorText += "<LI class='message'>Current value (&pound;) is required.</LI>";
	}
	if(big == 1)
	{
		if(frm["N-YearOfManufacture"].value == "")
		{
			errorText += "<LI class='message'>Year of manufacture is required.</LI>";
		}
	}
	if(frm["N-Claims"].value == "")
	{
		errorText += "<LI class='message'>Number of claims is required.</LI>";
	}
	
	if(errorText == "")
	{
		return true;
	}
	else
	{
		document.all.push.focus();
		document.all.errors.innerHTML = "<BR><B>The following errors and/or ommissions were found...</B><TABLE><TR><TD align=left><OL>" + errorText + "</OL></TD></TR></TABLE>";
		top.focus();
		return false;
	}
}


// Onload = getMultiParameters(...)
function getMultiParameters(quickQuote)
{
	frm = document.forms[formPos];

	// Get any possible post parameters and populate...
	frm["N-SumInsured."].value = gup("N-SumInsured.");
	frm["N-Agent."].value = gup("N-Agent.");
	debugging = Number(gup("debug"));

	
	// Start the calculation routine
	checkChanges(quickQuote, 1, 1, 1);
}

// Onload = getParameters(...)
function getParameters(quickQuote)
{
	frm = document.forms[formPos];

	// Get any possible post parameters and populate...
	frm["N-SumInsured."].value = gup("N-SumInsured.");
	frm["N-Agent."].value = gup("N-Agent.");
	debugging = Number(gup("debug"));

	// Start the calculation routine
	checkChanges(quickQuote, 0, 1, 0);
}
