	function calculatePay(formInput) 
	{
		
		var sIncomeSchedule = setIncomeSchedule(formInput);	
		
		var fYearlyPay = 0.0;
		var fGrossWeeklyPay = 0.0;
		
		var fTaxRate = setTaxRate(formInput);
		var fOtherDeductions = setOtherDeductions(formInput);
		
		if(sIncomeSchedule == 'PerHour')
		{
			var fHourlyRate = setHourlyRate(formInput);
			var fWeeklyHours = setWeeklyHours(formInput);
			var fOTPercent = setOTPercent(formInput);
			var fWeeklyOTHours = setWeeklyOTHours(formInput);
			var fHourlyOTRate = setHourlyOTRate(formInput, fHourlyRate);	
			
			fGrossWeeklyPay = numberToDecimal((fHourlyRate * fWeeklyHours) + (fHourlyOTRate * fWeeklyOTHours));
			
			populateTextBox('textHourlyRate', numberToDecimal(fHourlyRate));
			populateTextBox('textWeeklyHours', fWeeklyHours);	
			populateTextBox('textOTPercent', fOTPercent);	
			populateTextBox('textWeeklyOTHours', fOTPercent);
			populateTextBox('textHourlyOTRate', fHourlyOTRate);				
		}
		
		if (sIncomeSchedule == 'PerYear')
		{
			if(formInput.elements['textYearlyWage'])
			{
				fYearlyPay = formInput.elements['textYearlyWage'].value;
				fGrossWeeklyPay = numberToDecimal(fYearlyPay / 52);
			}
			else
			{
				alert('Critical error: Yearly Wage textbox required!');
			}
		}
		
		populateTextBox('textGrossPerWeek', fGrossWeeklyPay);
		
		var fGrossYearlyPay = setGrossYearlyPay(fGrossWeeklyPay);
		populateTextBox('textGrossPerYear', fGrossYearlyPay);

		
		var fYearlyDeductedTaxes = setYearlyDeductedTaxes(fGrossYearlyPay, fTaxRate);

		var fWeeklyDeductedTaxes = numberToDecimal(fYearlyDeductedTaxes / 52);
		populateTextBox('textWeeklyDeductedTaxes', fWeeklyDeductedTaxes);
		
		/////////////////////////////////////////////////////
		// ============ CALCULATE NET WEEKLY PAY ============ 
		fNetPerWeek = (fGrossWeeklyPay - fOtherDeductions) - fWeeklyDeductedTaxes;
		populateTextBox('textNetPerWeek', numberToDecimal(fNetPerWeek));
		
		// ============ CALCULATE NET MONTHLY PAY ============
		fNetPerMonth = fNetPerWeek * 4.33;
		populateTextBox('textNetPerMonth', numberToDecimal(fNetPerMonth));
		
		// ============ CALCULATE NET YEARLY PAY ============
		fNetPerYear = fNetPerWeek * 52;
		populateTextBox('textNetPerYear', numberToDecimal(fNetPerYear));
		
		if(document.getElementById('bReset'))
		{
			document.getElementById('bReset').style.display = 'inline';
		}
		
		populateTextBox('textYearlyWage', numberToDecimal(fYearlyPay));
		
		if(document.getElementById('divOutputs'))
		{
			setElementStyle('divOutputs', 'display', 'block');
		}
			
		if(formInput.elements['hidCalcLoan'].value == 1)
		{
			loanCheck(fGrossYearlyPay);
		}
	}
	
	
	
	
	
	
	
	
	
	
	
	
	////////////////////////////////////////////////////////////////////////
	////////// DEFINITIONS FOR ABOVE FUNCTION //////////////////////////////
	
	
	function setIncomeSchedule(formInput)
	{
		if(formInput.elements['radioIncomeSchedule'])
		{
			for (var i=0; i < formInput.radioIncomeSchedule.length; i++)
			{
				if (formInput.radioIncomeSchedule[i].checked)
				{
					var val = formInput.radioIncomeSchedule[i].value;
					return val;
				}
			}
		}
		else if(formInput.elements['hidIncomeSchedule'])
		{
			var val = formInput.elements['hidIncomeSchedule'].value;
			return val;
		}
		else
		{
			alert('MUST PROVIDE AN INCOME SCHEDULE TYPE: PERHOUR OR PERYEAR');
		}
	
	}
	
	function setTaxRate(formInput)
	{
		var val = 0.0
		
		if(formInput.elements['textTaxRate'])
		{
			var val = formInput.elements['textTaxRate'].value;
		}	
		
		val = numberToDecimal(val);
		
		return val;
	}
	
	function setOtherDeductions(formInput)
	{
		var val = 0.0;
		
		if(formInput.elements['textOtherDeductions'])
		{
			var val = formInput.elements['textOtherDeductions'].value;
		}
		
		val = numberToDecimal(val);
		
		return val;
	}
	
	function setHourlyRate(formInput)
	{
		if(formInput.elements['textHourlyRate'])
		{
			var val = formInput.elements['textHourlyRate'].value;
			
			if(val == 0 || val == "" || isNaN(val))
			{
				alert('Hourly rate required');
			}
			
			val = numberToDecimal(val);
			
			return val;
		}
	}
	
	function setWeeklyHours(formInput)
	{
		
		var val = 40;
		
		if(formInput.elements['textWeeklyHours'])
		{
			val = formInput.elements['textWeeklyHours'].value;
			
			if(val == 0 || val == "" || isNaN(val))
			{
				val = 40;
			}
		}
		
		val = numberToDecimal(val);
		
		return val;
		
	}
	
	function setOTPercent(formInput)
	{
		var val = 1.5;
		
		if(formInput.elements['textOTPercent'])
		{
			val = formInput.elements['textOTPercent'].value;
		}
		
		val = numberToDecimal(val);
		
		return val;
	}
	
	function setWeeklyOTHours(formInput)
	{
		var val = 0.0;
		
		if(formInput.elements['textWeeklyOTHours'])
		{
			val = formInput.elements['textWeeklyOTHours'].value;
		}
		
		val = numberToDecimal(val);

		return val;
	}
	
	function setHourlyOTRate(formInput, fHourlyRate)
	{
		var val = fHourlyRate * 1.5;
	
		if(formInput.elements['textHourlyOTRate'] && formInput.elements['textHourlyOTRate'] > 0 && !IsNaN(formInput.elements['textHourlyOTRate']))
		{
			val = formInput.elements['textHourlyOTRate'].value;
			
			if(val > (fHourlyRate * 1.5))
			{
				val = fHourlyRate * 1.5;
			}
		}
		
		val = numberToDecimal(val);
		
		return val;
	}
	
	function setGrossYearlyPay(fVal)
	{
		var val = numberToDecimal(fVal * 52);
		return val;
	}
	
	function setNetPerYear(fGrossYearlyPay, fYearlyTaxDeduction)
	{
		var val = (fGrossYearlyPay - fYearlyTaxDeduction);
		return val;
	}
	
	function setYearlyDeductedTaxes(fGrossYearlyPay, fTaxRate)
	{
//		alert(fGrossYearlyPay);
//		alert(fTaxRate);
		var calc = 0.0;
		if(fTaxRate > 0){
			//alert(fGrossYearlyPay);
			calc = (fGrossYearlyPay * fTaxRate);
		}
		else
		{
			aIncomeRange = new Array
				aIncomeRange[0] = 0.00
				aIncomeRange[1] = 7825.00
				aIncomeRange[2] = 31850.00
				aIncomeRange[3] = 77100.00
				aIncomeRange[4] = 160850.00
				aIncomeRange[5] = 349700.00;
			aTaxBracket = new Array
				aTaxBracket[0] = .10
				aTaxBracket[1] = .15
				aTaxBracket[2] = .25
				aTaxBracket[3] = .28
				aTaxBracket[4] = .33			
				aTaxBracket[5] = .35;
			aTaxAddition = new Array
				aTaxAddition[0] = 0
				aTaxAddition[1] = 782.50
				aTaxAddition[2] = 4386.20
				aTaxAddition[3] = 15698.20
				aTaxAddition[4] = 39148.75
				aTaxAddition[5] = 101469.25
				
			var lowBracketRange = 0.0;
			var excessOverLowRange = 0.0;
			var netYearCal = 0.0;
	
			for (x in aIncomeRange)
			{
				// WE NEED TO DECREMENT THE x COUNTER BY 1 TO GET THE LOW RANGE VALUE FOR THIS TAX BRACKET
				// THEN WE NEED TO INCREMENT IT AGAIN TO GET BACK IN THE CORRECT ITERATION
				if(fGrossYearlyPay > aIncomeRange[5])
				{
					lowBracketRange = aIncomeRange[5];
					excessOverLowRange = fGrossYearlyPay - lowBracketRange;
					calc = ((excessOverLowRange * aTaxBracket[5]) + aTaxAddition[5]);
					
					break;				
				}
				else if((fGrossYearlyPay > aIncomeRange[--x] && fGrossYearlyPay < aIncomeRange[++x]))
				{
						
					// DECREMENT X TO GET THE LOW RANGE OF THE TAX BRACKET
					lowBracketRange = aIncomeRange[--x];
					excessOverLowRange = fGrossYearlyPay - lowBracketRange;
					calc = ((excessOverLowRange * aTaxBracket[x]) + aTaxAddition[x]);
	
					break;
				}
			}
		}	
		
		calc = numberToDecimal(calc);
		
		return calc;
	}	
	
	function numberToDecimal(val)
	{
		val = Number(Math.round(Math.abs(val)*100)).toString();
		while(val.length < 2) val= '0'+val;
		var len = val.length;
		val = ( len == 2 ? '0' : val.substring(0,len-2) ) + '.' + val.substring(len-2,len+1);
		return val;		
	}	

	
	
	
	
	