
	var secRate = 0.062;
	var medRate = 0.0145;
	var incRate = 0.06;
	var fedTaxRate = 25;
	var isNoSec = false;  // for 2008 compliance -jm
	
function checkEnter(e, type){ //e is event object passed from function invocation
var characterCode; //literal character code will be stored in this variable

if(e && e.which){ //if which property of event object is supported (NN4)
e = e
characterCode = e.which; //character code is contained in NN4's which property
}
else{
e = event;
characterCode = e.keyCode; //character code is contained in IE's keyCode property
}

if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)		
		
		switch (type)  // determine which field the enter button was typed on
		{		
			case 1:
				calcFed(1);
				break
			case 2:
				calcInc(1);
				break
			case 3:
				calcSec(1);
				break
			case 4:
				calcMed(1);
				break
			case 5:
				calculate();
				break
			case 6:
				var emp_num = document.getElementById('empnum');
				if(!validateForm(emp_num.value,7))
							   return false;
				if (emp_num.value < 1)
				{
					if(!validateForm("NULL",7))
							return false;
				}
				calculate();
				break
		}
	
return false;
}
else{
return true;
}

}

function calcFed(val){

	if (val == 1)
	{	
		var fedtext = document.getElementById('fedtxt');
		
			if (!validateForm(fedtext.value, 3))
			return false;
		calculate(1, parseInt(fedtext.value));
		
	}
	if (val == 2)
		{
			var fedtext = document.getElementById('fedtxt');
			var statetext = document.getElementById('statetxt');
			var sectext = document.getElementById('sectxt');
			var medtext = document.getElementById('medtxt');
				
				fedtext.value = "";
				statetext.value = "";
				sectext.value = "";
				medtext.value = "";
			
		var drop = document.getElementById('annualsalary');
			
			switch(drop.selectedIndex)
			{
				case 0:
					fedTaxRate = 25;
					isNoSec = false;
					break
				case 1:
					fedTaxRate = 10;
					isNoSec = false;
					break
				case 2:
					fedTaxRate = 15;
					isNoSec = false;
					break
				case 3:
					fedTaxRate = 25;
					isNoSec = false;
					break
				case 4:
					fedTaxRate = 28;
					isNoSec = false;
					break
				case 5:
					fedTaxRate = 28;
					isNoSec = true;
					break
				case 6:
					fedTaxRate = 33;
					isNoSec = true;
					break
				case 7:
					fedTaxRate = 35;
					isNoSec = true;
					break
				default:
					fedTaxRate = 0;
					isNoSec = false;
					break
			}
		
		}		
		if (isNoSec == false)
			{
				secRate = 0.062;
			}
		
		calculate('1',fedTaxRate,'1',secRate, isNoSec);
	
}
function calcInc(val) {
	if (val == 1)
	{
		var statetext = document.getElementById('statetxt');
		
		if (!validateForm(statetext.value, 4))
			return false;
			
		calculate(2, parseInt(statetext.value)/100);
	}
	if (val ==2) 
	{
		incRate = 0.06;
		calculate(2, incRate);
	}
}

function calcSec(val) {
	if (val == 1)
	{
		var sectext = document.getElementById('sectxt');
		
		if (!validateForm(sectext.value, 5))
			return false;
		calculate(3, parseInt(sectext.value)/100, 0);
	}
	if (val ==2) 
	{
		secRate = 0.062;
		calculate(3, secRate);
	}
}

function calcMed(val) {
	if (val == 1)
	{
		var medtext = document.getElementById('medtxt');
		if (!validateForm(medtext.value, 6))
			return false;
		calculate(4, parseInt(medtext.value)/100);
	}
	if (val ==2) 
	{
		medRate = 0.0145;
		calculate(4, medRate);
	}
}
function calculate( type, content, type2, content2, isNoSec) {

		if (type == 1)
		{
			var fedtext = document.getElementById('fedtxt');
			fedtext.value = "";
			fedTaxRate = content;
		}
		else if (type == 2)
		{
			var statetext = document.getElementById('statetxt');
			statetext.value = "";
			incRate = content;
		}
		else if (type == 3)
		{
			var sectext = document.getElementById('sectxt');
			sectext.value = "";
			secRate = content;
		}
		else if (type == 4)
		{
			var medtext = document.getElementById('medtxt');
			medtext.value = "";
			medRate = content;
		}
			
		if (type2 == 1)
		{
			medRate= 0.0145;
			incRate = 0.06;
			secRate = content2;
		}
		
		// NEW CODE TO HANDLE SOCIAL SECURITY TAX
		var drop = document.getElementById('annualsalary');
			
			switch(drop.selectedIndex)
			{
				case 0:
					isNoSec = false;
					break
				case 1:
					isNoSec = false;
					break
				case 2:
					isNoSec = false;
					break
				case 3:
					isNoSec = false;
					break
				case 4:
					isNoSec = false;
					break
				case 5:
					isNoSec = true;
					break
				case 6:
					isNoSec = true;
					break
				case 7:
					isNoSec = true;
					break
				default:
					isNoSec = false;
					break
			}
	// END NEW SOCIAL SEC TAX CODE
					
		
	 //1 - calculate the federal income tax saved 
		//populate variables from HTML elements
		
		var transexp = document.getElementById('transexp');
		var parkexp = document.getElementById('parkexp');
		
		
		if (!validateForm(transexp.value, 1))
			return false;
		if (!validateForm(parkexp.value, 2))
			return false;
			
		if (transexp.value > 230) //updated 02.16.09 -jm
			transexp.value = 230;
		if (parkexp.value > 230)
			parkexp.value = 230;
			
		var transportation = parseInt(transexp.value) *12;
		var parking = parseInt(parkexp.value) *12;
		
		
			
		//calculation variables
		
		var totalExpense = (parking + transportation);
	
		var fedIncomeTaxSaved;
		var socialSecurity = Math.round(secRate * totalExpense);
		var medicare = Math.round(medRate * totalExpense);
		var stateIncomeTaxSaved = Math.round(incRate * totalExpense);
		var totalAnnualSavings;
		var percentSaved;
	
			
		//calculate social security tax based on income and marital statusMath.round( secRate * totalExpense);
		if (isNoSec == false)
			{
				socialSecurity =  Math.round( secRate * totalExpense);
				var err3 = 0;
			}
		else	
		{
			secRate = 0;
			socialSecurity =  Math.round( secRate * totalExpense);
			var err3 = 1;
		}
			
		
		//calculate values for savings
		
		fedIncomeTaxSaved = Math.round((fedTaxRate / 100) * totalExpense);
		
		totalAnnualSavings = fedIncomeTaxSaved + socialSecurity + medicare + stateIncomeTaxSaved;
		percentSaved = (totalAnnualSavings / totalExpense) * 100;
		totalTaxRate = fedTaxRate + ((incRate*100)*100)/100 + ((secRate*100)*100)/100 + (medRate*100);
		
		update(fedTaxRate, incRate, secRate, medRate, totalTaxRate, totalExpense, err3);
		
			
}

function update(fedTaxRate, incRate, secRate, medRate, totalTaxRate, totalExpense, err3) {  // function for displaying updated text
	
	// populate the div's
		var fedRateDiv = document.getElementById('fedRate');
		var stateRateDiv = document.getElementById('stateRate');
		var secRateDiv = document.getElementById('secRate');
		var medRateDiv = document.getElementById('medRate');
		var sumDiv = document.getElementById('sum');
		var monthlyRate = document.getElementById('monthlyRate');
		var annualRate = document.getElementById('annualRate');
		var monthlyRate2 = document.getElementById('monthlyRate2');
		var annualRate2 = document.getElementById('annualRate2');
		
		var emp_num = document.getElementById('empnum');
		
		fedRateDiv.innerHTML = "<p>" + fedTaxRate + "%</p>";
		stateRateDiv.innerHTML = "<p>" + Math.round((incRate*100)*100)/100 + "%</p>";
		if (err3 == 0)
		secRateDiv.innerHTML = "<p>" + Math.round((secRate*100)*100)/100 + "%</p>";
		else if (err3 ==1)
		secRateDiv.innerHTML = "<p>" + Math.round((secRate*100)*100)/100 + "%</p>";
		
		medRateDiv.innerHTML = "<p>" + Math.round((medRate*100)*100)/100 + "%</p>";
		sumDiv.innerHTML = "<p>" + Math.round(totalTaxRate*100)/100 + "%</p>";
		
		var empSavingsRate = emp_num.value * (secRate + medRate);
		
		
		// these equations suck because the number is rounded after just about every operation.  The multiplies and divide's by 100 are for decimal place.
		
		monthlyRate.innerHTML = "<p>$" + Math.round(((Math.round((totalExpense/100 * (Math.round(totalTaxRate*100)/100))/12*100)/100) * 1)*100)/100 + "</p>";
		annualRate.innerHTML = "<p>$" + Math.round((Math.round(totalExpense/100 * (Math.round(totalTaxRate*100)/100)*100)/100) * 1*100)/100 + "</p>";
		
		monthlyRate2.innerHTML = "<p>$" + Math.round(((Math.round((totalExpense/100 * (Math.round(totalTaxRate*100)/100))/12*100)/100)) * empSavingsRate*100)/100 + "</p>";
		annualRate2.innerHTML = "<p>$" + Math.round(((Math.round(totalExpense/100 * (Math.round(totalTaxRate*100)/100)*100)/100)) * empSavingsRate*100)/100 + "</p>";
}

function validateForm(value, id){
		
		if (id == 1)  // validation ID for the monthly transportation exp
		{
			var er = document.getElementById('errormsg1');
			if(!IsNumeric(value))
				{
					
					er.innerHTML = '<h1 style="color:#FF0000; margin-bottom:5px;">Average transportation expenses per employee *</h1>';
					return false;
				}
			else
				{
					er.innerHTML = '<h1 style="margin-bottom:5px;">Average transportation expenses per employee</h1>';
					return true;
				}
		}
		
		if (id == 2)  // validation ID for the monthly parking expense
		{
			var er = document.getElementById('errormsg2');
			if(!IsNumeric(value))
				{
					
					er.innerHTML = '<h1 style="color:#FF0000; margin-bottom:5px;">Average parking expenses per employee *</h1>';
					return false;
				}
			else
				{
					er.innerHTML = '<h1 style="margin-bottom:5px;">Average parking expenses per employee</h1>';
					return true;
				}
		}
		
		if (id == 3)  // validation ID for the first percentage input
		{
			var er = document.getElementById('p1');
			if(!IsNumeric(value))
				{
					
					er.innerHTML = '<input  style="border-color:#FF0000;" value="' + value + '" type="text" id="fedtxt" class="TEXT" onKeyPress="checkEnter(event, 1)" maxlength="3" />';
					return false;
				}
			else
				{
					er.innerHTML = '<input  value="' + value + '" type="text" id="fedtxt" class="TEXT" onKeyPress="checkEnter(event, 1)" maxlength="3" />';
					return true;
				}
		}
		
		if (id == 4)  // validation ID for the second percentage input
		{
			var er = document.getElementById('p2');
			if(!IsNumeric(value))
				{
					
					er.innerHTML = '<input  style="border-color:#FF0000;" value="' + value + '" type="text" id="statetxt" class="TEXT" onKeyPress="checkEnter(event, 2)" maxlength="3" />';
					return false;
				}
			else
				{
					er.innerHTML = '<input  value="' + value + '" type="text" id="statetxt" class="TEXT" onKeyPress="checkEnter(event, 2)" maxlength="3" />';
					return true;
				}
		}
		if (id == 5)  // validation ID for the second percentage input
		{
			var er = document.getElementById('p3');
			if(!IsNumeric(value))
				{
					
					er.innerHTML = '<input  style="border-color:#FF0000;" value="' + value + '" type="text" id="sectxt" class="TEXT" onKeyPress="checkEnter(event, 3)" maxlength="3" />';
					return false;
				}
			else
				{
					er.innerHTML = '<input  value="' + value + '" type="text" id="sectxt" class="TEXT" onKeyPress="checkEnter(event, 3)" maxlength="3" />';
					return true;
				}
		}
		if (id == 6)  // validation ID for the second percentage input
		{
			var er = document.getElementById('p4');
			if(!IsNumeric(value))
				{
					
					er.innerHTML = '<input  style="border-color:#FF0000;" value="' + value + '" type="text" id="medtxt" class="TEXT" onKeyPress="checkEnter(event, 4)" maxlength="3" />';
					return false;
				}
			else
				{
					er.innerHTML = '<input  value="' + value + '" type="text" id="medtxt" class="TEXT" onKeyPress="checkEnter(event, 4)" maxlength="3" />';
					return true;
				}
		}
		if (id == 7) //validation ID for the number of employee's variable
		{
		    var er = document.getElementById('err4');
			if(!IsNumeric(value))
		    {
					er.innerHTML = '<h1 style="color:#FF0000; margin-bottom:5px;">How many employees?*</h1>';
					return false;
				}
			else
				{
					er.innerHTML = '<h1 style="margin-bottom:5px;">How many employees?</h1>';
					return true;
				}
	    }
}

function IsNumeric(sText)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;

	if (sText.length == 0 )
		IsNumber=false;
 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}
	
