// JavaScript Document

function IsNumeric(sText) {
	var ValidChars = "0123456789.";
	var IsNumber = true;
	var Char;
	
	for (i = 0; i < sText.length && IsNumber == true; i++) { 
		Char = sText.charAt(i);
		
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	
	return IsNumber;
}

function IsDate(sourceDate) {
	var myDayStr = sourceDate.getDate();
	var myMonthStr = sourceDate.getMonth();
	var myYearStr = sourceDate.getYear();
	var myDateStr = myDayStr + ' ' + myMonthStr + ' ' + myYearStr;
	
	/* Using form values, create a new date object
	which looks like "Wed Jan 1 00:00:00 EST 1975". */
	var myDate = new Date(myDateStr);
	
	// Convert the date to a string so we can parse it.
	var myDate_string = myDate.toGMTString();
	
	/* Split the string at every space and put the values into an array so,
	using the previous example, the first element in the array is "Wed", the
	second element is "Jan", the third element is "1", etc. */
	var myDate_array = myDate_string.split(' ');
	
	/* If we entered "Feb 31, 1975" in the form, the "new Date()" function
	converts the value to "Mar 3, 1975". Therefore, we compare the month
	in the array with the month we entered into the form. If they match,
	then the date is valid, otherwise, the date is NOT valid. */
	if (myDate_array[2] != myMonthStr ) {
		return false;
	}
	else {
		return true;
	}
}

function CalculateAll() {
	CalculateDinars(1);
	CalculateDinars(2);
	CalculateDinars(3);
}

function CalculateDinars(index) {
	var a = document.spread.a;
	var e = document.spread.e;
	var customRate = document.spread.customRate.value;
	var purchDate = document.spread.purchDate;
	var years = document.spread.years;
	var days = document.spread.days;
	var saleDate = document.spread.saleDate;
	
	switch (index) {
		case 1:
			var b = document.spread.b1;
			var c = document.spread.c1;
			var d = document.spread.d1;
			var f = document.spread.f1;
			var g = document.spread.g1;
			var h = document.spread.h1;
			
			var fvRateUser = document.spread.fv1RateUser;
			var fvRate3 = document.spread.fv1Rate3;
			var fvRate5 = document.spread.fv1Rate5;
			var fvRate7 = document.spread.fv1Rate7;
			var fvRate10 = document.spread.fv1Rate10;
			var fvRate15 = document.spread.fv1Rate15;
			var fvRate25 = document.spread.fv1Rate25;
			
			var arRateUser = document.spread.ar1RateUser;
			var arRate3 = document.spread.ar1Rate3;
			var arRate5 = document.spread.ar1Rate5;
			var arRate7 = document.spread.ar1Rate7;
			var arRate10 = document.spread.ar1Rate10;
			var arRate15 = document.spread.ar1Rate15;
			var arRate25 = document.spread.ar1Rate25;
			
			break;
			
		case 2:
			var b = document.spread.b2;
			var c = document.spread.c2;
			var d = document.spread.d2;
			var f = document.spread.f2;
			var g = document.spread.g2;
			var h = document.spread.h2;
			
			var fvRateUser = document.spread.fv2RateUser;
			var fvRate3 = document.spread.fv2Rate3;
			var fvRate5 = document.spread.fv2Rate5;
			var fvRate7 = document.spread.fv2Rate7;
			var fvRate10 = document.spread.fv2Rate10;
			var fvRate15 = document.spread.fv2Rate15;
			var fvRate25 = document.spread.fv2Rate25;
			
			var arRateUser = document.spread.ar2RateUser;
			var arRate3 = document.spread.ar2Rate3;
			var arRate5 = document.spread.ar2Rate5;
			var arRate7 = document.spread.ar2Rate7;
			var arRate10 = document.spread.ar2Rate10;
			var arRate15 = document.spread.ar2Rate15;
			var arRate25 = document.spread.ar2Rate25;
			
			break;
			
		case 3:
			var b = document.spread.b3;
			var c = document.spread.c3;
			var d = document.spread.d3;
			var f = document.spread.f3;
			var g = document.spread.g3;
			var h = document.spread.h3;
			
			var fvRateUser = document.spread.fv3RateUser;
			var fvRate3 = document.spread.fv3Rate3;
			var fvRate5 = document.spread.fv3Rate5;
			var fvRate7 = document.spread.fv3Rate7;
			var fvRate10 = document.spread.fv3Rate10;
			var fvRate15 = document.spread.fv3Rate15;
			var fvRate25 = document.spread.fv3Rate25;
			
			var arRateUser = document.spread.ar3RateUser;
			var arRate3 = document.spread.ar3Rate3;
			var arRate5 = document.spread.ar3Rate5;
			var arRate7 = document.spread.ar3Rate7;
			var arRate10 = document.spread.ar3Rate10;
			var arRate15 = document.spread.ar3Rate15;
			var arRate25 = document.spread.ar3Rate25;
			
			break;
	}
	
	CalcTotalDinarPurchaseAmount(b, c, d);
	CalcValueOfDinarBasedOnAuction(a, e, f);
	CalcMarkupPaidOverAuctionValueDollars(d, f, g);
	CalcMarkupPaidOverAuctionValuePercent(f, g, h);
	
	YearsToDays(years, days);
	CalcExpectedSaleDate(purchDate, days, saleDate);
	
	CalcFV(customRate, years, d, fvRateUser);
	CalcAR(years, f, fvRateUser, arRateUser);
	
	CalcFV(3, years, d, fvRate3);
	CalcAR(years, f, fvRate3, arRate3);
	
	CalcFV(5, years, d, fvRate5);
	CalcAR(years, f, fvRate5, arRate5);
	
	CalcFV(7, years, d, fvRate7);
	CalcAR(years, f, fvRate7, arRate7);
	
	CalcFV(10, years, d, fvRate10);
	CalcAR(years, f, fvRate10, arRate10);
	
	CalcFV(15, years, d, fvRate15);
	CalcAR(years, f, fvRate15, arRate15);
	
	CalcFV(25, years, d, fvRate25);
	CalcAR(years, f, fvRate25, arRate25);
}

function CalcTotalDinarPurchaseAmount(b, c, d) {
	if (IsNumeric(b.value) && IsNumeric(c.value)) {
		var total = Number(b.value) + Number(c.value);
		d.value = total.toFixed(2);
	}
	else {
		d.value = "n/a";
	}
	
	return d.value;
}

function CalcValueOfDinarBasedOnAuction(a, e, f) {
	if (IsNumeric(a.value) && IsNumeric(e.value)) {
		if (e.value > 0) {
			var total = Number(a.value) / Number(e.value);
			f.value = total.toFixed(2);
		}
		else {
			f.value = "n/a";
		}
	}
	else {
		f.value = "n/a";
	}
	
	return f.value;
}

function CalcMarkupPaidOverAuctionValueDollars(d, f, g) {
	if (IsNumeric(d.value) && IsNumeric(f.value)) {
		var total = Number(d.value) - Number(f.value);
		g.value = total.toFixed(2);
	}
	else {
		g.value = "n/a";
	}
	
	return g.value;
}

function CalcMarkupPaidOverAuctionValuePercent(f, g, h) {
	if (IsNumeric(f.value) && IsNumeric(g.value)) {
		var total = (Number(g.value) / Number(f.value)) * 100;
		h.value = total.toFixed(2);
	}
	else {
		h.value = "n/a";
	}
	
	return h.value;
}

function YearsToDays(years, days) {
	if (IsNumeric(years.value)) {
		var total = Number(years.value) * 365.25;
		days.value = total.toFixed(0);
	}
	else {
		days.value = "n/a";
	}
	
	return days.value
}

function CalcExpectedSaleDate(purchDate, days, saleDate) {
	/*if (!IsDate(purchDate)) {
		return "n/a";
	}*/
	
	if (IsNumeric(days.value)) {
		var dateArray = purchDate.value.split("/");
		var total = new Date(dateArray[2], (dateArray[0] - 1), dateArray[1], 0, 0, 0, 0);
		
		total.setDate(total.getDate() + Number(days.value));
		
		var totalDay = total.getDate();
		var totalMonth = total.getMonth() + 1;
		var totalYear;
		
		if (total.getYear() < 2000) {
			totalYear = total.getYear() + 1900;
		}
		else {
			totalYear = total.getYear();
		}
		
		if (IsNumeric(totalMonth) && IsNumeric(totalDay) && IsNumeric(totalYear)) {
			saleDate.value = totalMonth + "/" + totalDay + "/" + totalYear;
		}
		else {
			saleDate.value = "n/a";
		}
	}
	else {
		saleDate.value = "n/a";
	}
	
	return saleDate.value;
}

function CalcFV(rate, years, amount, fv) {
	if (IsNumeric(rate) && IsNumeric(years.value) && IsNumeric(amount.value)) {
		var p = Number(amount.value);
		var r = Number(rate);
		var n = Number(years.value);
		
		if (r > 1) {
			r = r / 100;
		}
		
		//Calculate FV
		var total = p * Math.pow(1 + r, n);
		
		fv.value = total.toFixed(2);
	}
	else {
		fv.value = "n/a";
	}
	
	return fv.value;
}

function CalcAR(years, pv, fv, ar) {
	if (IsNumeric(years.value) && IsNumeric(pv.value) && IsNumeric(fv.value)) {
		var n = Number(years.value);
		var v = Number(pv.value);
		var f = Number(fv.value);
		
		if (v != 0 && n != 0) {
			var total = Math.pow(f / v, 1 / n) - 1;
			total *= 100;
			
			ar.value = total.toFixed(2);	
		}
		else {
			ar.value = "n/a";
		}
	}
	else {
		ar.value = "n/a";
	}
	
	return ar.value;
}

