//********************************Calculate***************************
// These are the steps to calculate the results
function calculate()
{
	validate();								//validate input fields
	var x = netincome();					//calculate net income
	x = serviceability(x);					//calculate serviceability factor
	x = costs(x);							//deduct ccard & loans
	presentvalue(x);						//calculate present value
	maxcanborrow(x);						//calculate the max based on deposit		
	//document.calcform.surplus.value = x;	//result on form ** remove for final **
	put_cookies();							//store values in a cookie
	location="results.asp";					//show results
}

// ******************calculate net income******************************
// 							cost per adult
// 							cost per child
// 							tax from income
function netincome()
{
	var borrowers = parseFloat(document.calcform.borrowers.value);	
	var children = parseFloat(document.calcform.children.value);
	var term = parseFloat(document.calcform.term.value);
	var income1 = 0;
	var income2 = 0;
	var income3 = 0;	
	var equityincome = 0;
	var business = 0;
	
	// get first income
	income1 = parseFloat(document.calcform.income1.value);
	// net income ofter tax for first applicant
	income1= tax(income1);
	
	// get second income
	if (borrowers >=2)
	{
		income2 = parseFloat(document.calcform.income2.value);
		if (income2 >=1){
			// net income ofter tax for second applicant
			income2= tax(income2);
		}	
	}
	
	
	// get third income
	if (borrowers >=3)
	{
		income3 = parseFloat(document.calcform.income3.value);
		if (income3 >=1){
			// net income ofter tax for second applicant
			income2= tax(income2);
		}		
		// net income ofter tax for third applicant
		income3= tax(income3);	
	}

	business = parseFloat(document.calcform.business.value);
	
	//equityincome = parseFloat(document.calcform.equityincome.value);
	var surplus = income1 + income2 + income3 + business; //+ equityincome;
	//alert("surplus = " + surplus)
	// Adults
	if (borrowers >= 1)
	{
		surplus = surplus - ((( borrowers - 1 ) * 4200) + 11200);
	}
	// children
	if (children >= 1)
	{
		surplus = surplus - (((children -1) * 2000) + 3000);
	}	
	//alert("after cost of living "+surplus);
	return surplus;
}
//*************************** Calculate and Deduct TAX **************************************
// based on (income)
// returns income - tax
function tax (income)
{
	var result1=0;
	var result2=0;
	var result3=0;
	// 0-6000 do nothing
	// 6001 - 20000 = 17.5
	var bracket1 = (income -6001) * .175;
	////alert (bracket1);
	// 20001 - 50000 = 31.5
	var bracket2 = ((income - 20001) * .315) + 2449.82;
	////alert (bracket2);
	result1 = Math.max(bracket1,bracket2);
	// 50001 - 65000 = 44.5
	var bracket3 = ((income - 50001) * .445) + 11899.50;
	////alert (bracket3);
	result2 = Math.max(bracket2,bracket3);
	// 65001 + = 48.5
	var bracket4 = ((income - 65001) * .485) + 18574.05;
	////alert (bracket4);
	result3 = Math.max (bracket3,bracket4);
	result1 = Math.max (result1,result2);
	result1 = Math.max (result1,result3);
	income -= result1;
	//alert ("after tax "+income);
	return income;	
}

//************************** calculate net financial expense *********************************
//deduct ccard & loans
function costs (x)
{
	var ccard = parseFloat(document.calcform.cards.value * (3/100) * 12);
	var loans = parseFloat(document.calcform.otherloans.value * 12);
	x = x - ccard ;
	x= x - loans;
	////alert ("costs = " + x);
	return x;
	document.calcform.surplus.value = x;
}

//*************************** calculate present Value ****************************************
// Andrew Stone Style
function presentvalue1(x) //andrew
{	
	x = x / 1.25 / 12;
	var q = 0;					// The Present value of annuity - What we are after...
	var r = preint / 12;				// Rate 
	var n = (25 * -1 ) * 12;			// Term 

	// Function to calculate Present Value
	q = ( x - ( Math.pow (x + ( r / 100 ) , n ) ) ) / ( r / 100 );
	q = Math.round(q)/1
	document.cookie="presentvalue=" + q;
	
	//alert ("pv -"+ x);
	return q;
}

//*****************************	serviceability************************************
// 	calculates serviceability factor
//  returns value
function serviceability(x)
{
var serviceability = 1.25
x = x / serviceability;
////alert("serviceability ="  + x);
return x;
}

//**************************calculate present value******************************
// Calculations by Lisa Crew with assistance from Gerry Hodgson.
// takes in net income
function presentvalue(x) // Lisa
{
	var pv =  parseFloat(0);									// The Present value of annuity - What we are after...												// 'Frequency' of Payment
	var rate =  parseFloat(.0815/12);							// 'Rate' Per annum / Payment frequency
	var nper =  parseFloat(360);								// 'Term' Per annum * Payment frequency
	var type =  parseFloat(1);									// Loan Type 0 or 1
	var pmt =  parseFloat(x/12);								// Net 'Payment' amount
	
	var p = parseFloat(1+rate);
	var a = Math.pow (p,nper); //11.43563494
	var m = (pmt * (1+rate*type));
	var b = ( Math.pow ((1 + rate),nper) - 1) / rate;	//1536.53
	pv = m * b / a;
	
	+ "<br>" 
	//alert ("pv = "+ pv + "<br>" + " a = " + a+ "<br>"  + " b = " + b + "<br>" +  " m = " + m );	
	pv = Math.round(pv)/1;
	document.cookie="presentvalue="+pv;			// Save Present Value
	return pv;									// Return Present Value
}

function maxcanborrow(x)
{
	var maximum = 0;
	var d = parseFloat(document.calcform.deposit.value);
	var e = parseFloat(document.calcform.equity.value);
	maximum = (d + e) / .05;		// Minimum 5% deposit of amount to borrow
	if (maximum <= x) 
		{
			document.cookie="depositproblem=true";
			document.cookie="presentvalue="+maximum;
		}		
	
	document.cookie="maxcanborrow="+maximum;

	//alert ("max" + maximum)
}

//**************************validate form values*******************************************
// Takes values in form values
// validates values
//	removes letters - ie a,b,c
function validate()
{

	document.calcform.borrowers.value = extractDouble(document.calcform.borrowers.value);
	if (document.calcform.borrowers.value >= 4) {document.calcform.borrowers.value = 3};
	if (document.calcform.borrowers.value <= 0) {document.calcform.borrowers.value = 0};

	document.calcform.children.value = extractDouble(document.calcform.children.value);
	if (document.calcform.children.value <= 0) {document.calcform.children.value = 0};

	document.calcform.term.value = extractDouble(document.calcform.term.value);
	if (document.calcform.term.value <= 0) {document.calcform.term.value = 0};

	document.calcform.income1.value = extractDouble(document.calcform.income1.value);
	if (document.calcform.income1.value <= 0) {document.calcform.income1.value = 0};

	document.calcform.income2.value = extractDouble(document.calcform.income2.value);
	if (document.calcform.income2.value <= 0) {document.calcform.income2.value = 0};
	
	document.calcform.income3.value = extractDouble(document.calcform.income3.value);
	if (document.calcform.income3.value <= 0) {document.calcform.income3.value = 0};

	document.calcform.business.value = extractDouble(document.calcform.business.value);
	if (document.calcform.business.value <= 0) {document.calcform.business.value = 0};

	document.calcform.equity.value = extractDouble(document.calcform.equity.value);
	if (document.calcform.equity.value <= 0) {document.calcform.equity.value = 0};

	document.calcform.equityincome.value = extractDouble(document.calcform.equityincome.value);
	if (document.calcform.equityincome.value <= 0) {document.calcform.equityincome.value = 0};

	document.calcform.deposit.value = extractDouble(document.calcform.deposit.value);
	if (document.calcform.deposit.value <= 0) {document.calcform.deposit.value = 0};

	document.calcform.cards.value = extractDouble(document.calcform.cards.value);
	if (document.calcform.cards.value <= 0) {document.calcform.cards.value = 0};

	document.calcform.otherloans.value = extractDouble(document.calcform.otherloans.value);
	if (document.calcform.otherloans.value <= 0) {document.calcform.otherloans.value = 0};
}

//store data using name/value format
function put_cookies()
{	
	document.cookie="session=current";
	document.cookie="borrowers=" + document.calcform.borrowers.value;
	document.cookie="children=" + document.calcform.children.value;
	document.cookie="term=" + document.calcform.term.value;
	document.cookie="income1=" + document.calcform.income1.value;
	document.cookie="income2=" + document.calcform.income2.value;
	document.cookie="income3=" + document.calcform.income3.value;
	document.cookie="business=" + document.calcform.business.value;
	document.cookie="equity=" + document.calcform.equity.value;
	document.cookie="equityincome=" + document.calcform.equityincome.value;
	//document.cookie="surplus=" + document.calcform.surplus.value;
	document.cookie="deposit=" + document.calcform.deposit.value;
	document.cookie="cards=" + document.calcform.cards.value;
	document.cookie="otherloans=" + document.calcform.otherloans.value;
}

function fill()
{
	document.calcform.borrowers.value = get_cookie("borrowers");
	document.calcform.children.value = get_cookie("children");
	document.calcform.term.value = get_cookie("term");
	document.calcform.income1.value = get_cookie("income1");
	document.calcform.income2.value = get_cookie("income2");
	document.calcform.income3.value = get_cookie("income3");
	document.calcform.business.value = get_cookie("business");
	document.calcform.equity.value = get_cookie("equity");
	document.calcform.equityincome.value = get_cookie("equityincome");
	//document.calcform.surplus.value = get_cookie("surplus");
	document.calcform.deposit.value = get_cookie("deposit");
	document.calcform.cards.value = get_cookie("cards");
	document.calcform.otherloans.value = get_cookie("otherloans");
}


//Get cookie routine by Shelley Powers 
function get_cookie(Name) {
	var search = Name + "="
	var returnvalue = "";
	if (document.cookie.length > 0) 
	{
		offset = document.cookie.indexOf(search)
		// if cookie exists
		if (offset != -1) 
		{ 
			offset += search.length
			// set index of beginning of value
			end = document.cookie.indexOf(";", offset);
			// set index of end of cookie value
				if (end == -1) 
				{ 
					end = document.cookie.length;
				}
			returnvalue=unescape(document.cookie.substring(offset, end))
		}
	}
	return returnvalue;
} 
//********************************* extractInteger ****************************
//This function removes any non-numeric characters from a string
//This function is used for on-the-fly validation
function extractInteger(numberToExtract){
	var extractedNumber
	extractedNumber = ""
	
	//Loop through each character in string
	for(i=0; i < numberToExtract.length; i++) 
	{
		if(!(isNaN(numberToExtract.substring(i, i+1)) || numberToExtract.substring(i, i+1) == " "))
		{
			extractedNumber += numberToExtract.substring(i, i+1)
		}
	}
	return extractedNumber;
}
//**************************** extractDouble *****************************************
//This function removes any non-numeric characters from a string and
//only allows one decimal point; the first one in the string
function extractDouble(numberToExtract) {
	var extractedNumber
	extractedNumber = ""

	//Loop through each character in string
	for(i=0; i < numberToExtract.length; i++)
	{
		if((!isNaN(numberToExtract.substring(i, i+1)) && numberToExtract.substring(i, i+1) != " ") || (numberToExtract.substring(i, i+1) == "." && extractedNumber.indexOf(".") == -1))
		{
			extractedNumber += numberToExtract.substring(i, i+1);
		}
	}

	return extractedNumber;
}
