




function init_values()
{
	for(var i = 0; i < lipp_jobs.length; i = i + 1)
	{
		document.lipp_calc.jobs_list.options[i] = new Option(lipp_jobs[i].name, i, false);
	}
	document.lipp_calc.jobs_list.options[lipp_jobs.length] = new Option("Other", lipp_jobs.length, true);
	jobs_list_onchange(lipp_jobs.length);
}

function jobs_list_onchange(test)
{
	document.lipp_calc.lstRaise.options.length = 0;
	document.lipp_calc.txtStartingSalary.value = "";
	for(var i = 0; i < apis.length; i=i+1)
	{
		document.lipp_calc.lstRaise.options[i] = new Option((apis[i]*100).toFixed(2) + '%', apis[i], false); 
	}
	document.lipp_calc.lstRaise.options[0].selected = true;
	if(test == lipp_jobs.length) return;
	document.lipp_calc.txtStartingSalary.value = lipp_jobs[test].salary;
	var name = (lipp_jobs[test].api*100) + '% (' + lipp_jobs[test].name + ')';
	document.lipp_calc.lstRaise.options[apis.length] = new Option(name, lipp_jobs[test].api, true);
}


// Helper functions
function isNumberFloat(inputString)
{
  return (!isNaN(parseFloat(inputString))) ? true : false;
}


function isNumberInt(inputString)
{
  return (!isNaN(parseInt(inputString))) ? true : false;
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}


function get_value(name){
	var all = getElementsByName('input', name);
	all = all.concat(getElementsByName('select', name));
	if(all.length > 0) {
		for (var x = 0; x < all.length; x++){
			if(all[x].checked){
				return all[x].value;
			}
		}
	}
	//alert(all[0].type)
	if(all[0] && all[0].type != 'checkbox' && all[0].type != 'radio'){
		return all[0].value;
	} else {
		return null;
	}
}

function getElementsByName(tag, name) {
     
     var elem = document.getElementsByTagName(tag);
     var arr = new Array();
     for(i = 0,iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute("name");
          if(att == name) {
               arr[iarr] = elem[i];
               iarr++;
          }
     }
     return arr;
}

function set_field(field, num_value) 
	{
		//alert(field);
		document.getElementById(field).innerHTML = addCommas(num_value.toFixed(2));
	}
	
function set_field_p(field, num_value,p) 
	{
		//alert(field);
		document.getElementById(field).innerHTML = addCommas(num_value.toFixed(p));
	}


function LippBenefitsClass() 
{
	var inputs = new Object();
	
	var  results_div= document.getElementById("results_div");
	
	var res_table= document.getElementById("resultsTable");
	
	results_div.removeChild(res_table);
	results_div.innerHTML = "";
	
	this.calculate = function()
	{
		if(!this.get_inputs())
		{
			return false;
		}	
		var s_thresh = salary_thresholds.slice();
		var s_rates = salary_rates.slice();
		/*for(j = 0; j < salary_thresholds.length; j = j + 1)
			{
				alert(salary_thresholds[j]);
			}*/
		// Update the limits
		var year_until_grad = inputs['grad_year'] - year_zero;
		var tmp = Math.pow(1+base_rate, year_until_grad);
		
		for(var i = 0; i < s_thresh.length; i++)
		{
			s_thresh[i] *= tmp;	
		}

		
		var monthly_rate = interest_rate / 12;
		var num_payments = 10 * 12;
		
		var hls_debt = inputs['hls_debt'];
		var lipp_eligible = inputs['lipp_debt'];
		var lipp_ineligible = hls_debt - lipp_eligible;
		
		// Deal with other debt
		var other_debt = inputs['other_debt'];
		if(other_debt <= max_other_debt)
		{
			lipp_eligible = lipp_eligible + other_debt;
		} 
		else
		{
			lipp_eligible = lipp_eligible + max_other_debt;
			lipp_ineligible = lipp_ineligible + other_debt - max_other_debt;
		}
		
		var total_debt = lipp_eligible + lipp_ineligible;
		
		var lipp_el_mp = ((lipp_eligible * monthly_rate) / 
							(1 - Math.pow(1 + monthly_rate, -1*num_payments)));
		
		var lipp_in_mp = ((lipp_ineligible * monthly_rate) / 
							(1 - Math.pow(1 + monthly_rate, num_payments * -1)));
		var total_mp = lipp_el_mp + lipp_in_mp;
		
		var lipp_el_ap = 12*lipp_el_mp;
		var lipp_in_ap = 12*lipp_in_mp;
		
		
		var salary = inputs['starting_salary'];
		
		var your_total = 0;
		var lipp_total = 0;
		var years_in_lipp = 0;
		
		for(var year = 0; year < inputs['lipp_years']; year = year + 1)
		{
			
			var exp_contrib;
			var your_payment;
			
			exp_contrib = 0;
			for(var j = 0; j < s_thresh.length; j = j + 1)
			{
				
				if(salary > s_thresh[j])
				{
					var s_cap = salary;
					if(j < s_thresh.length - 1)
					{
						if(salary > s_thresh[j+1])
						{
							s_cap = s_thresh[j+1];	
						} 
					}
					exp_contrib += (s_cap - s_thresh[j])*s_rates[j]; 
				} 
			}
			//alert(exp_contrib);
			
			var lipp_asst
			if(lipp_el_ap > exp_contrib)
			{
				lipp_asst = lipp_el_ap - exp_contrib;
			} else {
				lipp_asst = 0;
			}
			
			if(lipp_asst > 0)
			{
				years_in_lipp++;	
			} else {
				break;	
			}
		
			your_payment = lipp_el_ap - lipp_asst + lipp_in_ap;
			
			your_total = your_total + your_payment;
			lipp_total = lipp_total + lipp_asst;
			
			
			for(var i = 0; i < s_thresh.length; i++)
			{
				s_thresh[i] *= (1 + base_rate);	
			}
				
			salary = salary * (1 + inputs['salary_increase']);
		}
		
		var years_after = 10 - years_in_lipp;
		
		var payments_made = years_in_lipp * 12;
		
		//var remaining_debt =  (lipp_in_ap + lipp_el_ap)* years_after;
		var big_r = Math.pow(1+monthly_rate, payments_made);
		var remaining_debt =  total_debt * big_r - ( (total_mp / monthly_rate)*(big_r-1));
								
		
		if(results_div.innerHTML == "")
			results_div.appendChild(res_table);
		
		var chart = new BarChart();
		chart.addValue("Total payments while in LIPP",your_total + lipp_total,"red");
		chart.addValue("Paid by you",your_total,"green");
		chart.addValue("Paid by LIPP",lipp_total,"navy");
		chart.barWidth=200;
		chart.barHeight=15;
		chart.barHOrientation = "left";
		// Set the caption and its alignment
		//chart.setCaption("LIPP Benefits Summary","Bottom");
		chart.formatLabel("left");
		chart.unitLabel = "$";
		chart.bgColor = "lightblue";
		document.getElementById('lipp_graph').innerHTML = chart.draw();
		
		var ap = lipp_el_ap;
		var tsf = 0;
		var j;
		for(j = 0; j < salary_thresholds.length - 1; j = j + 1)
			{
				//alert(salary_thresholds[j+1]);
				var nxt = (salary_thresholds[j+1] - salary_thresholds[j])*salary_rates[j];
				if(tsf + nxt >= ap)
				{
					break;	
				}
				tsf += nxt;
				
			}
		var t_rate = 0;
		if(salary_rates[j] == 0) 
		{
			t_rate = 0;
		} else {
			t_rate = (ap - tsf) / salary_rates[j];
		}
		var max_sal = t_rate + salary_thresholds[j];
		
		/*
		for(j = 0; j < s_thresh.length; j = j + 1)
			{
				alert(s_thresh[j]);
			}
			*/
		
		set_field_p("lipp_years", years_in_lipp,0);
		set_field_p("total_benefits", lipp_total,0);
		set_field_p("remaining_debt", remaining_debt,0);
		set_field_p("max_salary", max_sal,0);
		
		
		
	}
	
	this.get_inputs = function()
	{		
			inputs['hls_debt'] = get_value('txtTotalDebt');
			inputs['lipp_debt'] = get_value('txtLippDebt');
			inputs['other_debt'] = get_value('txtOtherDebt');
			inputs['lipp_years'] = get_value('lstLippYears');
			inputs['starting_salary'] = get_value('txtStartingSalary');
			inputs['salary_increase'] = parseFloat(get_value('lstRaise'));
			inputs['grad_year'] = parseInt(get_value('lstGradYear'));
			
			if(!isNumberFloat(inputs['hls_debt'])){
				alert("Please enter a valid number for your total debt");
				return false;
			}
			inputs['hls_debt'] = parseFloat(inputs['hls_debt']);
			
			if(!isNumberFloat(inputs['lipp_debt'])){
				alert("Please enter a valid number for your eligible lipp debt");
				return false;
			}
			inputs['lipp_debt'] = parseFloat(inputs['lipp_debt']);
			
			if(!isNumberFloat(inputs['other_debt'])){
				alert("Please enter a valid number for your eligible other debt");
				return false;
			}
			inputs['other_debt'] = parseFloat(inputs['other_debt']);
			
			if(!isNumberFloat(inputs['starting_salary'])){
				alert("Please enter a valid number for your eligible starting salary");
				return false;
			}
			inputs['starting_salary'] = parseFloat(inputs['starting_salary']);
			
			if(inputs['hls_debt'] - inputs['lipp_debt'] < 0)
			{
				alert("Your lipp eligible debt cannot be greater than your total hls debt");
				return false;	
			}
			
			
			return true;
	}
	
}


//  THIS IS THE BAR CHART CODE PASTED INTO THIS FILE

/* The BarChart can be reused as long as the
   copyright notice is not removed:

   BarChart Object - Copyright 1999 InsideDHTML.com, LLC
   For more information, see www.insideDHTML.com
*/

function BarChart_AddValue(label, value,color ) {
	var newItem = this.valueList[this.valueList.length] = new Object
	newItem.label = label
	newItem.value = value
	newItem.color = color ? color : "black"
	return newItem
}

function BarChart_HTMLLabel(barItem,label,format) {
	str ="<TD nowrap valign=middle><FONT FACE='" + format.fontFace + "' SIZE='" + format.fontSize + "'>&nbsp;" + barItem.label 
	str +=" ($" + addCommas(barItem.value.toFixed(0)) + ")&nbsp;"
	str +="</FONT></TD>"
	return str
}

function BarChart_Draw() {
	var height = (this.barHeight+1)*this.valueList.length + 2 + 25;
	var str = "<TABLE HEIGHT=" + height + " CELLSPACING=0 BORDER=0 CELLPADDING=1 "
	if (this.bgColor!="")
		str+=" BGCOLOR='" + this.bgColor + "'"
	str+=">"
	if (this.caption.value!="") str+="<CAPTION ALIGN='" + this.caption.alignment + "'><FONT FACE='" + this.caption.fontFace + "'>" + this.caption.value + "</A></CAPTION>"
	var totalValue = 0
	for (var i=0;i<this.valueList.length;i++) 
		totalValue+=this.valueList[i].value
	str+="<TD ROWSPAN=" + this.valueList.length+1 + "></TD>"
	var iPercent
	for (var i=0;i<this.valueList.length;i++) {
		str+="<TR>"
		if (this.label.orientation!="right")
			str+=BarChart_HTMLLabel(this.valueList[i],this.unitLabel,this.label)
		str+="<TD ALIGN='" + this.barHOrientation + "' valign=middle>"
		iPercent = this.valueList[i].value/totalValue
		str+="<TABLE BGCOLOR='" + this.valueList[i].color + "' CELLSPACING=0 CELLPADDING=0 HEIGHT=" + this.barHeight + " WIDTH=" + Math.round(iPercent*this.barWidth)+ "><TR><TD><FONT SIZE=1>&nbsp;</FONT></TD></TR></TABLE>"
		str +="</TD>"
		if (this.label.orientation=="right")
			str+=BarChart_HTMLLabel(this.valueList[i],this.unitLabel, this.label)
		str +="</TR>"
	}

	str +="</TABLE>"
	return str
}

function BarChart_SetCaption(caption, alignment, fontFace) {
	this.caption.value = caption
	
	this.caption.alignment = alignment ? alignment : "left"
	if (fontFace)
		this.caption.fontFace = fontFace
	return this.caption
}

function BarChart_FormatLabel(orientation, fontSize, fontFace) {
	this.label.orientation = orientation
	if (fontSize!=null)
		this.label.fontSize = fontSize
	if (fontFace)
		this.label.fontFace = fontFace
	return this.label
}

function BarChart() {
	this.label = this.caption = new Object

	this.valueList = new Array()
	this.addValue = BarChart_AddValue
	this.barWidth = 200
	this.barHeight=20
	this.bgColor=""
	this.barHOrientation = "left"

	this.formatLabel = BarChart_FormatLabel
	this.formatLabel("left","-1","Arial")
	this.setCaption = BarChart_SetCaption
	this.setCaption("","top","Arial")
	this.draw = BarChart_Draw
}

