var reqEeContribPercen = 0;
var reqEeContrib = 0;
var reqEePerPeriodContrib = 0;
var trinAnnualMatchContrib = 0;
var biweeklyDeferral = 0;
var totalContrib = 0;
var newTrinAnnualContrib=0;
var salaryCap = 245000;

//strips out non-numeric junk
//including $ and commas
function cleanCurrency(str) {
    var cleanNum = '';
    var start = 0;
    if (str.charAt(start)=='$') start=1;
    for(i = start; i < str.length; i++) {
	if(str.charAt(i)!=',') cleanNum += str.charAt(i);
    }
    //alert (str + " -> " + cleanNum);//DEBUG
    return cleanNum;
}

//test string to make sure that it's a valid $ amount
function validCurrency(str){
    var re=/^\d*\.?\d+$/;
    var result=re.test(str);
    if (!result) alert("'"+str+"' is not a valid dollar amount.");
    return result;
}



  function twoDigit(n) {
    var str=(n-1+1.005).toString();
    return str.substring(0,str.indexOf('.')+3);
  }


function stripInitialWhitespace(s) {   
     var i = 0; 
     var whitespace=" \t\r\n";
     while ((i < s.length) && charInString (s.charAt(i), whitespace))
            i++;
     return s.substring(i, s.length);
} 


function formatCurrency(num) {
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
cents = num%100;
num = Math.floor(num/100).toString();
if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+','+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function formatPercent(num) {
    num = Math.round(num * 10000.00)/100.00;
    return num;
}

function calcMatching(eeAnnualSalary, employerMaxMatchPercen, matchAboveFirst500) {
    if(eeAnnualSalary > salaryCap) eeAnnualSalary = salaryCap;
    reqEeContribPercen = (((((((eeAnnualSalary * employerMaxMatchPercen) - 500) / matchAboveFirst500) + 500) / eeAnnualSalary) * eeAnnualSalary > 500)  ? ((((eeAnnualSalary * employerMaxMatchPercen) - 500) / matchAboveFirst500) + 500) / eeAnnualSalary :500 / eeAnnualSalary);   
    annualContrib = eeAnnualSalary *  reqEeContribPercen;
    newTrinAnnualContrib= (eeAnnualSalary * employerMaxMatchPercen > 500) ? eeAnnualSalary * employerMaxMatchPercen : 500;   
    trinAnnualMatchContrib =(eeAnnualSalary * employerMaxMatchPercen > 500) ? eeAnnualSalary * employerMaxMatchPercen : 500;
    biweeklyDeferral =  (Math.round((annualContrib / 26) * 100))/100;
    	totalContrib = annualContrib + newTrinAnnualContrib;
}


function runCalc() {
    
    if(document.matchCalcForm.eeAnnualSalaryField.value.length==0) document.matchCalcForm.eeAnnualSalaryField.value =  formatCurrency(calcAnnualSalary(document.matchCalcForm.eeHourlyWageField.value,document.matchCalcForm.eeHoursPerWeekField.value,document.matchCalcForm.eeOTHoursPerWeekField.value));
    if(validCurrency(cleanCurrency(document.matchCalcForm.eeAnnualSalaryField.value))) {
	calcMatching(cleanCurrency(document.matchCalcForm.eeAnnualSalaryField.value),
		     document.matchCalcForm.employerMaxMatchPercenField.value,
		     document.matchCalcForm.matchAboveFirst500Field.value);
	document.matchCalcForm.eeAnnualSalaryField.value = formatCurrency(document.matchCalcForm.eeAnnualSalaryField.value);
	document.resultsForm.annualContribField.value=formatCurrency(annualContrib);
	document.resultsForm.annualContribPercenField.value=formatPercent(reqEeContribPercen);
	document.resultsForm.totalContribField.value=formatCurrency(totalContrib);
	document.resultsForm.annualTriniContribField.value=formatCurrency(newTrinAnnualContrib);
	document.resultsForm.biweeklyDeferralField.value=formatCurrency(biweeklyDeferral); 

    } else {
        document.matchCalcForm.eeAnnualSalaryField.value =  '?? ' + document.matchCalcForm.eeAnnualSalaryField.value + ' ??';
	document.resultsForm.annualContribField.value='';
	document.resultsForm.totalContribField.value='';
	document.resultsForm.biweeklyDeferralField.value=''; 
    }
}



function calcAnnualSalary(hourlyWage, avgeHoursPerWeek, avgeOTHoursPerWeek) {
	return 52 * ((avgeHoursPerWeek * hourlyWage) + (avgeOTHoursPerWeek * hourlyWage * 1.5));
}

function runAnnualSalCalc() {
	var hourlyWage = 0;
	var avgeHoursPerWeek = 0;
	
	var annlSal = calcAnnualSalary(hourlyWage, avgeHoursPerWeek);
	document.resultsForm.eeAnnualSalaryField.value = formatCurrency(annSal);
}



function clearForms() {
    document.matchCalcForm.eeHourlyWageField.value='';
    document.matchCalcForm.eeHoursPerWeekField.value='';
    document.matchCalcForm.eeOTHoursPerWeekField.value='';
    //document.matchCalcForm.employerMaxMatchPercenField.value='';
    document.matchCalcForm.eeAnnualSalaryField.value ='';
    document.resultsForm.annualContribField.value='';
    document.resultsForm.annualContribPercenField.value='';
    document.resultsForm.totalContribField.value='';
    document.resultsForm.annualTriniContribField.value='';
    document.resultsForm.biweeklyDeferralField.value=''; 
    
}








