var numIncomeItems = 5;
var numExpenseItems = 9;
var incomeTotal = 0;
var expenseTotal = 0;
var savings = 0;
var difference = 0;

function calculateBudget(form){
	var incomeValuesArray = new Array(numIncomeItems + 1);
	var expenseValuesArray = new Array(numExpenseItems + 1);
	var errorPresent = false;
	var emptyIncomeCount = 0;
	var emptyExpenseCount = 0;
	
	// grab all income items and put their values into an array
	for (i = 1; i <= numIncomeItems; i++) {
		incomeItem = "form.incomeInput" + i;
		var value = eval(incomeItem + '.value');

		// if no value set to 0
		if (value == "" || value == undefined) {
			incomeValuesArray[i] = 0;
			emptyIncomeCount++;
			hideInline(eval('"incomeError' + i + '"'));
			hideInline(eval('"incomeErrorList' + i + '"'));
		} else {
			// validate value
			if(!isNaN(value) && parseInt(value) == value) {
				incomeValuesArray[i] = parseInt(value);
				hideInline(eval('"incomeError' + i + '"'));
				hideInline(eval('"incomeErrorList' + i + '"'));
			} else {
				showInline(eval('"incomeError' + i + '"'));
				showInline(eval('"incomeErrorList' + i + '"'));
				errorPresent = true;
			}
		}
	}

	// grab all expense items and put their values into an array
	for (i = 1; i <= numExpenseItems; i++) {
		expenseItem = "form.expenseInput" + i;
		var value = eval(expenseItem + '.value');

		// if no value set to 0
		if (value == "" || value == undefined) {
			expenseValuesArray[i] = 0;
			emptyExpenseCount++;
			hideInline(eval('"expenseError' + i + '"'));
			hideInline(eval('"expenseErrorList' + i + '"'));
		} else {
			// validate value
			if(!isNaN(value) && parseInt(value) == value) {
				expenseValuesArray[i] = parseInt(value);
				hideInline(eval('"expenseError' + i + '"'));
				hideInline(eval('"expenseErrorList' + i + '"'));
			} else {
				showInline(eval('"expenseError' + i + '"'));
				showInline(eval('"expenseErrorList' + i + '"'));
				errorPresent = true;
			}
		}
	}
	
	// make sure an income value is entered
	if (emptyIncomeCount == numIncomeItems) {
		showInline("noIncomeErrorList");
		errorPresent = true;
	} else {
		hideInline("noIncomeErrorList");
	}
	
	// make sure an expense value is entered
	if (emptyExpenseCount == numExpenseItems) {
		showInline("noExpenseErrorList");
		errorPresent = true;
	} else {
		hideInline("noExpenseErrorList");
	}
	
	// display error message list
	if (errorPresent) {
		window.scrollTo(0,250);
		showInline("error-list");
		hideInline("budget-results");
	} else {
		hideInline("error-list");
		getResults(incomeValuesArray,expenseValuesArray);

		// if no errors, display results
		form.totalIncomeDisplay.value = "$" +  CommaFormatted(incomeTotal) + ".00";
		form.totalExpenseDisplay.value = "$" + CommaFormatted(expenseTotal) + ".00";
		form.savingsDisplay.value = "$" + CommaFormatted(savings) + ".00";
		form.differenceDisplay.value = "$" + CommaFormatted(difference) + ".00";
		form.differenceDisplay2.value = "$" + CommaFormatted(difference) + ".00!";
		
		showInline("budget-results");
		
		if (difference > 0) {
			showInline("highResult");
			hideInline("equalResult");
			hideInline("lowResult");
		} else if (difference == 0) {
			showInline("equalResult");
			hideInline("highResult");
			hideInline("lowResult");
		} else if (difference < 0) {
			showInline("lowResult");
			hideInline("highResult");
			hideInline("equalResult");
		}
		
		window.scrollTo(0,900);
	}
	
	return false;
}

// calculates results
function getResults(incomeValuesArray,expenseValuesArray) {
	incomeTotal = 0;
	expenseTotal = 0;
	savings = expenseValuesArray[numExpenseItems];
	
	for (i = 1; i <= numIncomeItems; i++) {
		incomeTotal += incomeValuesArray[i];
	}
	
	for (i = 1; i < numExpenseItems; i++) {
		expenseTotal += expenseValuesArray[i];
	}
	
	difference = incomeTotal - expenseTotal - savings;
}

/**********************************************************************
* Modified from:
* William Bontrager Programmer/Publisher, "WillMaster Possibilities"
* http://www.web-source.net/web_development/currency_formatting.htm
* Puts commas in an integer
**********************************************************************/
function CommaFormatted(amount) {
	var delimiter = ",";
	var i = parseInt(amount);
	if(isNaN(i)) { return ''; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	amount = minus + n;
	return amount;
}

// hides element given an ID
function hideInline(itemName){
	document.getElementById(itemName).style.display = "none";
}

// shows element given an ID
function showInline(itemName){
	document.getElementById(itemName).style.display = "";
}