﻿		var amountHndl;
		var amountProp;

		function UpdateExpenseTotal(amount) {
			var isCurrency = /(^\d+$)|(^\d+\.\d+$)/
			var incTotal = 0;
			var curAmount = 0;
			var expTotal = 0;

			format(amount, 'number', 'currency', 2);
			expTotal = (parseFloat(document.getElementById("ExpenseTotal").innerText) * 1);
			expTotal += amount.value * 1;

			if (isCurrency.test(expTotal))
				document.getElementById("ExpenseTotal").innerText = expTotal;

			incTotal = parseFloat(document.getElementById("IncomeTotal").innerText);

			document.getElementById("DisposableIncome").innerHTML = (parseInt(parseFloat(incTotal - expTotal) * 100)) / 100;


			//document.getElementById("ExpenseTotal").innerHTML = (parseInt(parseFloat(expTotal) * 100)) / 100;
			//incTotal = parseFloat(document.getElementById("IncomeTotal").innerText);
			//document.getElementById("DisposableIncome").innerHTML = (parseInt(parseFloat(incTotal - expTotal) * 100)) / 100;

			UpdatePieChart();

			return;
		}

		function UpdateIncomeTotal(amount) {
			var isCurrency = /(^\d+$)|(^\d+\.\d+$)/
			var expTotal = 0;
			var income = 0;

			format(amount, 'number', 'currency', 2);
			income = amount.value;

			if (isCurrency.test(income))
				document.getElementById("IncomeTotal").innerText = income;

			expTotal = parseFloat(document.getElementById("ExpenseTotal").innerText);
			document.getElementById("DisposableIncome").innerHTML = (parseInt(parseFloat(income - expTotal) * 100)) / 100;

			UpdatePieChart();

			return;
		}

		function format(control, type, format, decimals, group) {
			var v;

			if (format == null) format = "";

			switch (type.toLowerCase()) {
				case "number":
					switch (format.toLowerCase()) {
						case "currency":
							v = getDecimals(decimals, getValue("[0-9.]", control.value), group);
							break;
						case "ssn":
							v = getValue("[0-9]", control.value);
							if (v.length >= 9) v = v.substring(0, 3) + "-" + v.substring(3, 5) + "-" + v.substring(5, 9);
							break;
						case "zipcode":
							v = getValue("[0-9]", control.value);
							v = (v.length > 5) ? (v.substring(0, 5) + "-" + v.substring(5, 9)) : (v.substring(0, 5));
							break;
						default:
							v = getValue("[0-9]", control.value);
							break;
					}
					break;
			}

			function getDecimals(len, value, group) {
				var a = value.split(".", 2);
				var v;

				if (len == null) len = 0;
				if ((isNaN(len)) || (len < 0)) len = 0;
				if (group != true) group = false;

				if (isNaN(parseInt(a[0]))) a[0] = 0;
				if (isNaN(parseInt(a[1]))) a[1] = 0;

				switch (len) {
					case 0: v = a[0]; break;
					default: v = a[0] + "." + zeroPad(len, a[1]); break;
				}

				return v;
			}

			function getValue(pattern, value) {
				var re = new RegExp(pattern, "g");
				var m = value.match(re);
				var v = (m != null) ? m.join("") : "";

				return v;
			}

			function zeroPad(len, value) {
				var v = String(value);

				if (len > v.length) while (v.length < len) v += "0";
				if (v.length > len) v = v.substring(0, len);

				return v;
			}

			control.value = v;
			return;
		}

		function pop(returnValue) {
			if (amountHndl != null) {
				switch (amountProp) {
					case 'value':
						amountHndl.value = returnValue;
						break;
				}
			}
		}

		function getInputAmount(ctrlName, property, url) {
			// Set our handle to the amount textbox
			amountHndl = GetElementByName(ctrlName);

			inputAmount = amountHndl.value;

			if (inputAmount != null) {
				url += inputAmount;
				amountProp = property; //Set the property name for future use

				if (url != '') {
					window.open(url, 'popReg', 'width=520,height=450,scrollbars=1');
				}
			}

			return;
		}

		function getControlValue(ctrl, property) {
			var controlValue;

			if (ctrl != null && property != null) {
				controlValue = eval("ctrl." + property);

				if (typeof (controlValue) == 'undefined') {
					alert("function: getControlValue received the following error:\n" +
				  "The Control: " + ctrl.id + " does not support \n" +
				  "Property: " + property + "\n" +
				  "Message: This property is not supported");
					return (null);
				}

				return (controlValue);
			}
			else { return (null); }
		}

		function GetElementByName(elementName) {
			for (i = 0; i < document.forms.length; i++) {
				for (j = 0; j < document.forms[i].elements.length; j++) {
					var formObj = document.forms[i].elements[j];
					if (formObj.name == elementName) {
						return (formObj);
					}
				}
			}

			return (null);
		}

		function checkCurrency(element) {
			var isCurrency = /(^\d+$)|(^\d+\.\d+$)/

			if (isCurrency.test(element.value))
				return (true)
			else
				return (false)
		}

		function UpdateCompareValues() {
			//var debtTotal = document.forms['budgetfrm'].elements['td'].value;
			//format(debtTotal, 'number', 'currency', 2);

			var debtTotal = parseFloat(document.getElementById("TotalDebt").value);

			var dsDown = debtTotal * 0.05;
			var dsMonthly;
			var ccMonthly;
			var dcMonthly;
			var mpMonthly;
			var dsPayments;
			var ccPayments;
			var dcPayments;
			var mpPayments;
			var dsTotal = dsDown + (dsMonthly * dsPayments);
			var ccTotal = debtTotal * 1.5;
			var dcTotal = debtTotal * 6.5;
			var mpTotal = debtTotal * 8.2;

			// Compute the minimum payment ramp
			// 18.5% interest, 2.5% balance payment, minimum $15
			pRate = periodizeRate(18.5, 12, 1);
			balance = debtTotal;
			paymentCount = 0;
			payoutTotal = 0.00;
			mpMonthly = 0.025 * balance;
			while (balance > 0.00) {
				interest = parseInt(balance) * pRate;
				thisPayment = 0.025 * balance;
				if (parseInt(thisPayment) < 15) {
					thisPayment = 15.0;
				}
				balance = parseInt(balance) + parseInt(interest) - parseInt(thisPayment);
				payoutTotal = payoutTotal + thisPayment;
				paymentCount++;
				//			alert('#' + paymentCount + ' payment=' + thisPayment + ' balance=' + balance);
			}

			mpPayments = paymentCount;
			mpTotal = Math.round(payoutTotal);

			// Compute the credit counseling ramp
			// 10% interest, 2.5% balance payment, minimum $15
			pRate = periodizeRate(10.0, 12, 1);
			balance = debtTotal;
			paymentCount = 0;
			payoutTotal = 0.00;
			thisPayment = balance / 50.0;
			while (balance > 0.00) {
				interest = parseInt(balance) * pRate;
				balance = parseInt(balance) + parseInt(interest) - parseInt(thisPayment);
				payoutTotal = payoutTotal + thisPayment;
				paymentCount++;
				//			alert('#' + paymentCount + ' payment=' + thisPayment + ' balance=' + balance);
			}

			ccPayments = paymentCount;
			ccTotal = Math.round(payoutTotal);

			// Compute the consolidation payment ramp
			// 16% interest, 2.5% balance payment, minimum $15
			pRate = periodizeRate(16.0, 12, 1);
			balance = debtTotal;
			paymentCount = 0;
			payoutTotal = 0.00;
			while (balance > 0.00) {
				interest = parseInt(balance) * pRate;
				thisPayment = 0.025 * balance;
				if (parseInt(thisPayment) < 15) {
					thisPayment = 15.0;
				}
				balance = parseInt(balance) + parseInt(interest) - parseInt(thisPayment);
				payoutTotal = payoutTotal + thisPayment;
				paymentCount++;
				//			alert('#' + paymentCount + ' payment=' + thisPayment + ' balance=' + balance);
			}

			dcPayments = paymentCount;
			dcTotal = Math.round(payoutTotal);

			var dsTTS = debtTotal * 0.4 * 1.2;

			// Compute the settlement payment ramp
			if (dsTTS < 8000) { dsDown = 560; dsMonthly = 30; dsPayments = 34; }
			else if (dsTTS < 10000) { dsMonthly = 35; dsPayments = 34; }
			else if (dsTTS < 15000) { dsMonthly = 45; dsPayments = 34; }
			else if (dsTTS < 20000) { dsMonthly = 60; dsPayments = 34; }
			else if (dsTTS < 25000) { dsMonthly = 75; dsPayments = 36; }
			else if (dsTTS < 30000) { dsMonthly = 95; dsPayments = 36; }
			else if (dsTTS < 35000) { dsMonthly = 110; dsPayments = 38; }
			else if (dsTTS < 40000) { dsMonthly = 125; dsPayments = 38; }
			else if (dsTTS < 45000) { dsMonthly = 140; dsPayments = 39; }
			else if (dsTTS < 50000) { dsMonthly = 160; dsPayments = 39; }
			else if (dsTTS < 60000) { dsMonthly = 185; dsPayments = 39; }
			else if (dsTTS < 70000) { dsMonthly = 220; dsPayments = 39; }
			else if (dsTTS < 80000) { dsMonthly = 250; dsPayments = 40; }
			else if (dsTTS < 90000) { dsMonthly = 285; dsPayments = 40; }
			else if (dsTTS < 100000) { dsMonthly = 320; dsPayments = 40; }
			else if (dsTTS < 125000) { dsMonthly = 375; dsPayments = 40; }
			else if (dsTTS < 150000) { dsMonthly = 460; dsPayments = 40; }
			else { dsMonthly = 500; dsPayments = 40; }

			var dsSavings = dsTTS / (dsPayments - 3);
			dsMonthly = dsMonthly + dsSavings;
			// alert(dsTTS + ' ' + dsSavings + ' ' + dsMonthly);

			dsTotal = dsDown + dsTTS;

			// Compute for 60% now
			var dsTTS60 = debtTotal * 0.6 * 1.2;
			var dsDown60 = debtTotal * 0.05;
			var dsTotal60;
			var dsMonthly60;
			var dsPayments60;

			// Compute the settlement payment ramp
			if (dsTTS60 < 8000) { dsDown60 = 560; dsMonthly60 = 30; dsPayments60 = 34; }
			else if (dsTTS60 < 10000) { dsMonthly60 = 35; dsPayments60 = 34; }
			else if (dsTTS60 < 15000) { dsMonthly60 = 45; dsPayments60 = 34; }
			else if (dsTTS60 < 20000) { dsMonthly60 = 60; dsPayments60 = 34; }
			else if (dsTTS60 < 25000) { dsMonthly60 = 75; dsPayments60 = 36; }
			else if (dsTTS60 < 30000) { dsMonthly60 = 95; dsPayments60 = 36; }
			else if (dsTTS60 < 35000) { dsMonthly60 = 110; dsPayments60 = 38; }
			else if (dsTTS60 < 40000) { dsMonthly60 = 125; dsPayments60 = 38; }
			else if (dsTTS60 < 45000) { dsMonthly60 = 140; dsPayments60 = 39; }
			else if (dsTTS60 < 50000) { dsMonthly60 = 160; dsPayments60 = 39; }
			else if (dsTTS60 < 60000) { dsMonthly60 = 185; dsPayments60 = 39; }
			else if (dsTTS60 < 70000) { dsMonthly60 = 220; dsPayments60 = 39; }
			else if (dsTTS60 < 80000) { dsMonthly60 = 250; dsPayments60 = 40; }
			else if (dsTTS60 < 90000) { dsMonthly60 = 285; dsPayments60 = 40; }
			else if (dsTTS60 < 100000) { dsMonthly60 = 320; dsPayments60 = 40; }
			else if (dsTTS60 < 125000) { dsMonthly60 = 375; dsPayments60 = 40; }
			else if (dsTTS60 < 150000) { dsMonthly60 = 460; dsPayments60 = 40; }
			else { dsMonthly60 = 500; dsPayments60 = 40; }

			var dsSavings60 = dsTTS60 / (dsPayments60 - 3);
			dsMonthly60 = dsMonthly60 + dsSavings60;
			// alert(dsTTS + ' ' + dsSavings + ' ' + dsMonthly);

			dsTotal60 = dsDown60 + dsTTS60;

			dsRange = Math.round((parseInt(parseFloat(dsTotal) * 100)) / 100);
			if (dsTotal60 > dsTotal) {
				dsRange += '-';
				dsRange += Math.round((parseInt(parseFloat(dsTotal60) * 100)) / 100);
			}
			dsmRange = Math.round(parseInt(dsPayments));
			if (dsPayments60 > dsPayments) {
				dsmRange += '-';
				dsmRange += Math.round(parseInt(dsPayments60));
			}
			dspRange = Math.round(parseInt(dsMonthly));
			if (dsMonthly60 > dsMonthly) {
				dspRange += '-';
				dspRange += Math.round(parseInt(dsMonthly60));
			}

			document.getElementById("dsTotal").innerHTML = dsRange;
			document.getElementById("dcTotal").innerHTML = Math.round((parseInt(parseFloat(dcTotal) * 100)) / 100);
			document.getElementById("ccTotal").innerHTML = Math.round((parseInt(parseFloat(ccTotal) * 100)) / 100);
			document.getElementById("mpTotal").innerHTML = Math.round((parseInt(parseFloat(mpTotal) * 100)) / 100);
			document.getElementById("dsMonths").innerHTML = dsmRange;
			//document.getElementById("dsMonths2").innerHTML = dsmRange;
			document.getElementById("dcMonths").innerHTML = Math.round(parseInt(dcPayments));
			document.getElementById("ccMonths").innerHTML = Math.round(parseInt(ccPayments));
			document.getElementById("mpMonths").innerHTML = Math.round(parseInt(mpPayments));

			//document.getElementById("dsMonthly").innerHTML = dspRange;
			//document.getElementById("dcMonthly").innerHTML = Math.round(parseInt(dcMonthly));
			//document.getElementById("ccMonthly").innerHTML = Math.round(parseInt(ccMonthly));
			//document.getElementById("mpMonthly").innerHTML = Math.round(parseInt(mpMonthly));

			//document.forms['budgetfrm'].elements['ds'].value = dsTotal;
			//document.forms['budgetfrm'].elements['ds60'].value = dsTotal60;
			//document.forms['budgetfrm'].elements['dc'].value = dcTotal;
			//document.forms['budgetfrm'].elements['cc'].value = ccTotal;
			//document.forms['budgetfrm'].elements['mp'].value = mpTotal;

			//document.forms['budgetfrm'].elements['td'].value = debtTotal;

			//UpdateLineChart();

			return false;
		}

		function UpdatePieChart() {
			var qs;

			// SMF
			return;

			qs = 'MonthlyIncome=' + document.forms['budgetfrm'].elements['MonthlyIncome'].value;
			for (var i = 0; i < document.forms['budgetfrm'].length; i++) {
				if (document.forms['budgetfrm'].elements[i].name.indexOf("Amt") != -1) {
					curAmount = document.forms['budgetfrm'].elements[i].value;
					qs += '&' + document.forms['budgetfrm'].elements[i].name + '=' + curAmount;
				}
			}

			document.images['piechart'].src = 'piechart.php?' + qs;

			return;
		}
		function UpdateLineChart() {
			var qs;

			qs = 'td=' + document.forms['budgetfrm'].elements['td'].value;
			qs += '&mp=' + document.forms['budgetfrm'].elements['mp'].value;
			qs += '&dc=' + document.forms['budgetfrm'].elements['dc'].value;
			qs += '&cc=' + document.forms['budgetfrm'].elements['cc'].value;
			qs += '&ds=' + document.forms['budgetfrm'].elements['ds'].value;
			qs += '&ds60=' + document.forms['budgetfrm'].elements['ds60'].value;

			//document.images['linechart'].src = 'barchart.php?' + qs;
			document.frames['linechart'].location.href = 'barchart.php?' + qs;

			return;
		}

		function periodizeRate(annualRate, compoundPerYear, decimalFlag) {
			if (decimalFlag == 1) periodicRate = annualRate / (compoundPerYear * 100);
			else periodicRate = annualRate / compoundPerYear;
			return periodicRate;
		}

		function calcTerm(balance, payment, pRate) {
			var interest, paymentCount;

			alert('b=' + balance + ' p=' + payment + ' r=' + pRate);
			paymentCount = 0;
			while (balance > 0.00) {
				interest = parseInt(balance) * pRate;
				if (parseInt(interest, 10) > payment) {
					alert("Your payments are not enough to cover the accumulated interest.  Try increasing the payments.");
					return "infinite";
				}
				balance = parseInt(balance, 10) + parseInt(interest, 10) - parseInt(payment, 10);
				paymentCount = paymentCount + 1;
				//    alert("balance: " + balance + " | pRate: " + pRate + " | interestAmount: " + interestAmount)
			}
			return paymentCount;
		}
		function togglecomments(postid) {
			var whichpost = document.getElementById(postid);
			if (whichpost.className == "commentshown") {
				whichpost.className = "commenthidden";
			} else {
				whichpost.className = "commentshown"; 
			}
		}
		function calculateresult() {
			var a = document.all.debts.value;
			var i = document.all.months.selectedIndex;

			// Validate debt and month fields
			if (document.all.debts.value == "0.00" || document.all.debts.value == "") {
				alert("Please enter your debt amount!")
				document.all.debts.focus()
				return false;
			}

			if (document.all.debts.value < 10000) {
				alert("We only settle debts of $10,000 or more")
				document.all.debts.focus()
				return false;
			}


			if (document.all.months.value == "") {
				alert("Please select number of months!")
				document.all.months.focus()
				return false;
			}

			// The following ensures that debt ammount corresponds with allowed term length
			if (document.all.debts.value < 20001 && document.all.months.value > 30) {
				alert("The maximum term for this debt is 30 months")
				return false;
			}

			if (document.all.debts.value > 20000 && document.all.debts.value < 30001 && document.all.months.value > 32) {
				alert("The maximum term for this debt is 32 months")
				return false;
			}

			if (document.all.debts.value > 30000 && document.all.debts.value < 40001 && document.all.months.value > 34) {
				alert("The maximum term for this debt is 34 months")
				return false;
			}

			if (document.all.debts.value > 40000 && document.all.debts.value < 50001 && document.all.months.value > 35) {
				alert("The maximum term for this debt is 35 months")
				return false;
			}

			if (document.all.debts.value > 50000 && document.all.debts.value < 70001 && document.all.months.value > 36) {
				alert("The maximum term for this debt is 34 months")
				return false;
			}

			if (document.all.debts.value > 70000 && document.all.months.value > 36) {
				alert("The maximum term for this debt is 36 months. However please contact us for exceptions.")
			}

			if (i == -1) return;
			var b = document.all.months.options[i].value;
			var c = (a / 100);
			var d = (c * 55);
			var result = (d / b);
			e = parseInt((result * 100)) / 100;
			document.all.current.value = e;
			//document.form1.months.value = b;
			document.all.current.innerHTML = a;
			document.all.newmo.innerHTML = e;
			document.all.dfreemo.innerHTML = b;
		}

		function resetdecimal() {
			document.all.debts.value = "0.00";
		}
		function MM_swapImgRestore() { //v3.0
			var i, x, a = document.MM_sr; for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) x.src = x.oSrc;
		}

		function MM_findObj(n, d) { //v4.01
			var p, i, x; if (!d) d = document; if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
				d = parent.frames[n.substring(p + 1)].document; n = n.substring(0, p);
			}
			if (!(x = d[n]) && d.all) x = d.all[n]; for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
			for (i = 0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n, d.layers[i].document);
			if (!x && d.getElementById) x = d.getElementById(n); return x;
		}

		function MM_swapImage() { //v3.0
			var i,
		j = 0,
		x,
		a = MM_swapImage.arguments;
			document.MM_sr = new Array;
			for (i = 0; i < (a.length - 2); i += 3)
				if ((x = MM_findObj(a[i])) != null) {
				document.MM_sr[j++] = x;
				if (!x.oSrc)
					x.oSrc = x.src;
				x.src = a[i + 2];
			}
		}
		function MM_swapButton() { //v3.0
			var i,
		j = 0,
		x,
		a = MM_swapImage.arguments;
			document.MM_sr = new Array;
			for (i = 0; i < (a.length - 2); i += 3)
				if ((x = MM_findObj(a[i])) != null) {
				x.Visible = false;
				if (!x.oSrc)
					x.oSrc = x.src;
				x.src = a[i + 2];
			}
		}
		// validation function

		function isValid(entry, a, b) {
			if (isNaN(entry.value) || (entry.value == null) || (entry.value == "") || (entry.value < a/2) || (entry.value > b)) {
				alert("Invalid entry. Your min payment should be between " + a/2 + " and " + b + ".")
				entry.focus()
				entry.select()
				return false
			}
			return true
		}

		// clear results fields when input values changed
		function clearCalcs(form) {
			form.num_months.value = ""
			form.total_pay.value = ""
			form.total_int.value = ""
		}

		function calculate(form) {
			// send entries to validation function
			// exit if not valid
			if (!isValid(form.balance, 0, 100000)) {
				return false
			} else if (!isValid(form.interest, 0, 30)) {
				return false
			} else {
				var init_bal = eval(form.balance.value);
			}
			if (!isValid(form.mnth_pay, init_bal * .02, init_bal)) {
				return false
			} else {
				// variables used in calculation
				var cur_bal = init_bal;                    // used in loop
				var interest = eval(form.interest.value / 100);
				var mnth_pay = eval(form.mnth_pay.value);
				var fin_chg = 0;                                  // finance charge
				var num_mnths = 0;
				var tot_int = 0;
			}

			while (cur_bal > 0) {
				fin_chg = cur_bal * interest / 12;
				cur_bal = cur_bal - mnth_pay + fin_chg;
				num_mnths++;
				if (num_mnths > 360) {
					alert("We are interrupting this process to prevent a hang which may result with a very high balance, high interest rate and low monthly payment.\n\nTry entering a higher monthly payment amount.")
					form.mnth_pay.focus()
					form.mnth_pay.select()
					return
				}
				tot_int += fin_chg;
			}

			// display result
			form.num_months.value = num_mnths;
			form.total_pay.value = "$" + round(init_bal + tot_int);
			form.total_int.value = "$" + round(tot_int);
		}

		// round to 2 decimal places
		function round(x) {
			return Math.round(x * 100) / 100;
		}