

// ensures that the given text input contains a whole number
function amountIsInt(elAmount)
{	
	var isInt = true;
	var defaultValue = 0;
	var resultValue = '';
	var errorMessage = 'The contribution amount must be a whole number with no punctuation.';
	var deductibleAmount = elAmount.value;
	var num = "$.,0123456789";
	
	if (elAmount.value.length == 0)
	{
		elAmount.value = defaultValue;
	}
	
	for(var i = 0; i < deductibleAmount.length; i++)
	{
		var currentCharacter = deductibleAmount.charAt(i);
		if (num.indexOf(currentCharacter) == -1)
		{
			// we just found a totally illegal character
			isInt = false;
			alert(errorMessage);
			resultValue = defaultValue;
			break;
		}
		else
		{
			if(currentCharacter == '.')
			{
				// we have a number so far, but we just hit a decimal point
				// fire the error message and replace the value with everything to
				// the left of the decimal point
				isInt = false;
				alert(errorMessage);
				break;
			}
			else if(currentCharacter != ',' && currentCharacter != '$')
			{
				// add each qualified character to our output string
				// we allow the user to enter a $ or a , but we simply omit them
				resultValue += currentCharacter;
			}
		}
	}
	elAmount.value = resultValue;
	return isInt;
}

function amountIsDec(elAmount)
{
	var isDec = true;
	var defaultValue = 5;
	var errorMessage = 'It must be a number with an optional decimal point and no other characters.';
	var amount = elAmount.value;
	var num = ".0123456789";

	if (elAmount.value.length == 0)
	{
		elAmount.value = defaultValue;
	}
	
	for(var i = 0; i < amount.length; i++)
	{
		var currentCharacter = amount.charAt(i);
		if (num.indexOf(currentCharacter) == -1)
		{
			// we just found a totally illegal character
			isDec = false;
			alert(errorMessage);
			break;
		}
	}
	return isDec;
}

function preventFormPost()
{
	return !(window.event && window.event.keyCode == 13);
}

// number must be an integer or decimal
function formatCurrency(number)
{
	var numString		= new String(number);
	var indexOfDecimal	= numString.indexOf('.');
	var retVal			= new String('$');
	
	var leftVal			= new String(numString);
	var rightVal		= new String('00');
	
	if(indexOfDecimal > -1)
	{
		leftVal		= numString.substr(0, indexOfDecimal);
		// there may only be one digit past the decimal, so tack on some zeros 
		// and then grab the left 2 digits
		rightVal	= numString.substr(indexOfDecimal + 1, numString.length) + '00';
		rightVal	= rightVal.substr(0, 2);
	}
			
	retVal += leftVal + '.' + rightVal;
	return retVal;
}

function calc_net()
{
	var var_contrib = document.calculator.contrib.value;
	var var_med_exp = document.calculator.med_exp.value;
	document.calculator.net_contribute.value = (var_contrib - var_med_exp);
} 

function CalcWithoutGEHA()
{
    calculate(0);
}

function CalcWithGEHA()
{
    calculate(1); 
}

function calculate(GEHA)
{
	// get variables 
	var var_geha = GEHA;
	var var_plan_type = document.calculator.planType.value
	var var_contrib = document.calculator.contrib.value;
	var var_med_exp = document.calculator.med_exp.value;
	var var_net_contribute_yearly = document.calculator.net_contribute.value;
	var var_duration = document.calculator.duration.value;
	var var_f_tax = document.calculator.f_tax.value;
	var var_s_tax = document.calculator.s_tax.value;
	var var_b_rate = document.calculator.b_rate.value;
	var var_b_return = document.calculator.b_return.value;
	var var_geha_amt = 0;
	var var_single_max = 2330;  //updated from 2180 per marketing request 3197 by D. Kairys on 09-09-09
	var var_family_max = 4710;  //updated from 4360 per marketing request 3197 by D. Kairys on 09-09-09
	
	if (var_plan_type == 1) //single
	{
		var_geha_amt = 720;
	}
	
	if (var_plan_type == 2) //family
	{
		var_geha_amt = 1440;
	}

    

	if ((var_geha == 0) && (var_plan_type == 1))
	{
		//single non-geha
		if (var_contrib > 3050) //max contribution is 3050, updated from 2900 per marketing request 3197 by D. Kairys on 09-09-09
		{
		    var_single_max = var_single_max + var_geha_amt;
		    window.alert("Your maximum annual contribution is $"+var_single_max);
		    document.calculator.contrib.value = 3050;  //updated from 2900 per marketing request 3197 by D. Kairys on 09-09-09
			//var_contrib = 3490 + var_geha_amt
		}
	}
	else if((var_geha == 0) && (var_plan_type == 2))
	{
		//family non-geha
	    if (var_contrib > 6150) //max contribution is 6150, changed from 5800 per marketing request 3197 by D. Kairys on 03-Sep-09 
		{
		    var_family_max = var_family_max + var_geha_amt;
		    window.alert("Your maximum annual contribution is $"+var_family_max);
		    document.calculator.contrib.value = 6150; //max contribution is 6150, changed from 5800 per marketing request 3197 by D. Kairys on 03-Sep-09
			//var_contrib = 3490 + var_geha_amt
		}
	}
	else if ((var_plan_type == 1) && (var_geha == 1)) 
	{
		//single geha
	    if (var_contrib > 2330)  //changed from 2180 per marketing request 3197 by D. Kairys on 09-09-09 
		{
		    window.alert("Your maximum annual member contribution is $"+var_single_max);
			document.calculator.contrib.value = 2330;  //next 2 lines updated by D. Kairys per marketing request 3197 on 09-09-09
			var_contrib = 2330 + var_geha_amt;
		}
			
	}
	else if ((var_geha == 1) && (var_plan_type == 2))
	{
		//family geha
		if (var_contrib > 4710) //changed from 5800 by D. Kairys on 09-09-09 per marketing request 3197 
		{
		    window.alert("Your maximum annual member contribution is $"+var_family_max);
		    document.calculator.contrib.value = 4710; //next 2 lines changed by D. Kairys on 09-09-09 per marketing request 3197, from a value of 4360
			var_contrib = 4710 + var_geha_amt
		}
	}
	
	//get net contributions
	calc_net();
	var_net_contribute_yearly = document.calculator.net_contribute.value;

	var var_net_contrib_amt = var_net_contribute_yearly * var_duration;

	if (var_geha == 1) //calculate with GEHA contrigbutions
	{
	    var_net_contrib_amt = var_duration * ((var_net_contribute_yearly*1)  + (var_geha_amt*1)) ;

	    var var_Bank_fv = fv(((var_net_contribute_yearly*1)  + (var_geha_amt*1)), var_b_rate/100, var_duration);
	    var var_Broke_fv = fv(((var_net_contribute_yearly*1)  + (var_geha_amt*1)), var_b_return/100, var_duration);
    }
	else 
	{
	    var var_Bank_fv = fv(var_net_contribute_yearly, var_b_rate/100, var_duration);
	    var var_Broke_fv = fv(var_net_contribute_yearly, var_b_return/100, var_duration);
    }

	var var_Bank_earnings = var_Bank_fv - var_net_contrib_amt;
	var var_Broke_earnings = var_Broke_fv - var_net_contrib_amt;
	
	var var_Bank_tax_save = var_Bank_earnings * ((var_f_tax/100) + (var_s_tax/100));
	var var_Broke_tax_save = var_Broke_earnings * ((var_f_tax/100) + (var_s_tax/100));

	document.calculator.b_contrib.value =  CurrencyFormatted((Math.round(var_net_contrib_amt*100)/100));
	document.calculator.b_earn.value =  CurrencyFormatted((Math.round(var_Bank_earnings*100)/100));
	document.calculator.b_tax.value =  CurrencyFormatted((Math.round(var_Bank_tax_save*100)/100));
	document.calculator.b_fv.value =  CurrencyFormatted((Math.round(var_Bank_fv*100)/100));
	document.calculator.i_contrib.value =  CurrencyFormatted((Math.round(var_net_contrib_amt*100)/100));
	document.calculator.i_earn.value =  CurrencyFormatted((Math.round(var_Broke_earnings*100)/100));
	document.calculator.i_tax.value =  CurrencyFormatted((Math.round(var_Broke_tax_save*100)/100));
	document.calculator.i_fv.value =  CurrencyFormatted((Math.round(var_Broke_fv*100)/100));
 
}
function powerup(base, con)
{
	for(x=1; x == con; x=x+1)
		{
		var final_res = base * base;
		}
	return final_res;
}

function CurrencyFormatted(amount)
{
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}
function futureValue(amount, interest, num_years)
{
	for(var i = 0; i < num_years; i++)
	{
		amount *= (1 + (interest/100));
	}
	return amount;
}


// calculate the future value fv = P(1+r)^n
function fv(P,r,n)
{       
     var fv = 0; 
     for (var i = 0; i < n; i++){
           fv = fv + (P * Math.pow((1+r),i))
     }
    return fv;
}