var CCalculator = {
	form: null,
	Form: { set: function(form) { CCalculator.form = form; } },
	setDealsPerYear: function(obj, dpy) { obj.dealsPerYear = dpy; },
	setCommission: function(obj, cpd) { obj.commission = cpd;	},
	Rentals: {
		TTF: new Array(
			new Array(1499, 200),
			new Array(2499, 400),
			new Array(4999, 600),
			new Array(50000, 800)
		),
		dealsPerYear: 0, commission: 0,
		setDealsPerYear: function(dpy) { CCalculator.setDealsPerYear(this, dpy); },
		setCommission: function(cpd) { CCalculator.setCommission(this, cpd); },
		toString: function() { return "Rentals" }
	},
	Sales: {
		TTF: new Array(
			new Array(1499000, 1000),
			new Array(1500000, 1000)			// The transaction fee for a deal over 1.5 million used to $2,000
		),
		dealsPerYear: 0, commission: 0,
		setDealsPerYear: function(dpy) { CCalculator.setDealsPerYear(this, dpy); },
		setCommission: function(cpd) { CCalculator.setCommission(this, cpd); },
		toString: function() { return "Sales" }
	},
	Data: {
		TTF: new Array(),
		totalCommission: new Array(),
		payIncrease: null,
		percentageIncrease: null,
		input: null,
		loadData: function() {
			this.input = new Array(
				CCalculator.Rentals.dealsPerYear,
				CCalculator.Rentals.commission,
				CCalculator.Sales.dealsPerYear,
				CCalculator.Sales.commission
			);
		}
	},
//	checkIfReady: function() {
//		if(checkFields(this.Sales) & checkFields(this.Rentals)) CCalculator.calculate();
//		function checkFields(obj) {
//			if((obj.dealsPerYear == 0) | (obj.commission == 0)) return false;
//			else return true;
//		}
//	},
	calculate: function() {		
		CCalculator.Data.loadData();		
		if(checkInput()) process();
		
		function checkInput() {
			var isValid = true;
			var ERROR_MSG = "Please make sure all entries are valid numbers and contain no spaces or commas.\t";
			var input = CCalculator.Data.input;
			for(var i = 0; i < input.length; i++) {
				var data = input[i];
				//if(data.toString().search(/\,/) > -1)
				//	data = data.toString().replace(/\,/g, "");
				if(!data) data = 0;
				else if(
					(data.toString().search(/[^0-9]/) > -1)
				) { alert(ERROR_MSG); isValid = false; }
			} return isValid;
		}
		
		function process() {
			
			var cc = CCalculator;
			var cc_data = cc.Data;
			
			///////////// BEGIN: HELPER FUNCTIONS /////////////
			function getActualTTF(obj) {
				var ttf = obj.TTF;
				for(var i = 0; i < ttf.length; i++) {
					if(i == ttf.length-1)
						if(obj.commission > ttf[i][0])
							return ttf[i][1];
					if(obj.commission <= ttf[i][0])
						return (ttf[i][1] * obj.dealsPerYear);
				}
			}
			
			function currencyFormat(num) {
				var t = reverseStringAsArray(num.toString());
				for(var i = 0, j = 0; i < t.length; i++, j++)
					if((i % 3 == 0) && (i != 0)) t[j] = ',' + t[j];
				t = reverseStringAsArray(t.join(''));
				function reverseStringAsArray(str) {
					var rStrArr = new Array();
					for(var i = (str.length-1); i >= 0; i--)
						rStrArr.push(str.substr(i, 1)); 
					return rStrArr;
				} return ('$' + t.join(''));				
			}
			///////////// END: HELPER FUNCTIONS ///////////////
			
			var sales_TTF			= getActualTTF(cc.Sales);
			var rentals_TTF		= getActualTTF(cc.Rentals);
			var general_payout, paripassu_payout;
			var pay_increase, percentage_increase;
			
			////////////////////////// BEGIN: CALCULATIONS //////////////////////////////
			paripassu_payout = (cc.Rentals.dealsPerYear * cc.Rentals.commission) - rentals_TTF;
			paripassu_payout = paripassu_payout + (
				(cc.Sales.dealsPerYear * cc.Sales.commission) - sales_TTF
			);
			
			general_payout = (cc.Rentals.dealsPerYear * cc.Rentals.commission);
			general_payout = (
				general_payout + (
					cc.Sales.dealsPerYear * cc.Sales.commission
				)
			) * .5;
			
			pay_increase = paripassu_payout - general_payout;
			
			percentage_increase = (
				(general_payout != 0) ? // don't divide by 1 and get a NaN
				((parseInt(((paripassu_payout / general_payout) - 1) * 100)) + '%') :
				(0 + '%')
			);
			////////////////////////// END: CALCULATIONS ////////////////////////////////
			
			// SET DATA INTO OBJECT
			cc_data.totalCommission["general"]		= currencyFormat(general_payout);
			cc_data.totalCommission["paripassu"]	= currencyFormat(paripassu_payout);
			cc_data.payIncrease										= currencyFormat(pay_increase);
			cc_data.percentageIncrease						= percentage_increase;
			
			displayData(); // DISPLAY DATA
			
		}
		
		function displayData() {
			var form = CCalculator.form;
			function output(field, value)
				{ eval("form." + field + ".value = CCalculator.Data." + value); }
			output("EARNED_general", "totalCommission['general']");
			output("EARNED_paripassu", "totalCommission['paripassu']");
			output("SUMMARY_raise", "payIncrease");
			output("SUMMARY_increase", "percentageIncrease");
		} return;		
	}
}
