function compare_systems_table(household_sizes, spending_levels, householdType,caption,cellfunc) {
	// Specify the row labels and data.
	var rformatfunc = function(input) { return formatNumber(input,"$,##.##"); }
	var rd = new RowDef(spending_levels,rformatfunc,"Income/Spending($)");
	
	// Specify the col labels and data.
	var cformatfunc = function(input) { return input; }
	var hht_formatfunc = function(input) {
		if(householdType == married) return "Married"; 
		return "Single/Head of Household"; 
	}
	var cd_htt_array = new Array(1);
	cd_htt_array[0] = householdType;
	var cd_hht = new ColDef(cd_htt_array,hht_formatfunc);
	var cd_hhs = new ColDef(household_sizes,cformatfunc);
	
	var cd_type = new ColDef(Array("Current","FairTax","Diff"),cformatfunc);
	if(cellfunc == compare_systems_bp_cell)
		var cd_type = new ColDef(Array("FairTax","Current","Diff"),cformatfunc);
	
	
	// Specify the table info
 	var td = new TableDef(rd,Array(cd_hht,cd_hhs,cd_type),cellfunc,caption);
 	var st = new SmartTable(td);
 	return st.getNode();
}

function compare_systems_rate_cell() {
	var income = arguments[0];
	var householdType = arguments[1];
	var household_size = arguments[2]; 
	var type = arguments[3];

	if(type == "Current") return current_system_rate_cell(income,householdType,household_size);
	if(type == "FairTax") return fairtax_rate_cell(income,householdType,household_size);

	var isMarried = true;
	if(householdType == single) isMarried = false;

	if (isMarried == true && household_size == 1) return detailedCell("N/A");			
	
	var title = "Click for details";
  
    
  // Add text to cell
  var eftr = new EffectiveFairTaxRate(income,household_size,isMarried);
  var etr = new EffectiveTaxRate(income,household_size,
        		  					  				 householdType);
  var diff = etr.rate - eftr.rate();
  var text = formatNode(diff,"%##.##");
  var onclick = function() {revealDetails(this,diffRateDescription(etr,eftr));}
	var cell = detailedCell(diff,"%##.##",title,onclick);
	var attr = document.createAttribute("class");
	attr.value = "highlight";
	cell.setAttributeNode(attr);
  return cell;
}

function compare_systems_credits_disabled_rate_cell() {
	var income = arguments[0];
	var householdType = arguments[1];
	var household_size = arguments[2]; 
	var type = arguments[3];

	if(type == "Current") return current_system_credits_disabled_rate_cell(income,householdType,household_size);
	if(type == "FairTax") return fairtax_rate_cell(income,householdType,household_size);

	var isMarried = true;
	if(householdType == single) isMarried = false;

	if (isMarried == true && household_size == 1) return detailedCell("N/A");			
	
	var title = "Click for details";
  
    
  // Add text to cell
  var eftr = new EffectiveFairTaxRate(income,household_size,isMarried);
  var etr = new EffectiveTaxRate(income,household_size,
        		  					  				 householdType,true);
  var diff = etr.rate - eftr.rate();
  var text = formatNode(diff,"%##.##");
  var onclick = function() {revealDetails(this,diffRateDescription(etr,eftr));}
	var cell = detailedCell(diff,"%##.##",title,onclick);
	var attr = document.createAttribute("class");
	attr.value = "highlight";
	cell.setAttributeNode(attr);
  return cell;
}

function compare_systems_bp_cell() {
	var income = arguments[0];
	var householdType = arguments[1];
	var household_size = arguments[2]; 
	var type = arguments[3];

	if(type == "Current") return current_system_bp_cell(income,householdType,household_size);
	if(type == "FairTax") return fairtax_bp_cell(income,householdType,household_size);

	var isMarried = true;
	if(householdType == single) isMarried = false;

	if (isMarried == true && household_size == 1) return detailedCell("N/A");			
	
	var title = "Click for details";
  
    
  // Add text to cell
  var eftr = new EffectiveFairTaxRate(income,household_size,isMarried);
  var etr = new EffectiveTaxRate(income,household_size,
        		  					  				 householdType);
  var diff = eftr.buyingPower() - etr.buyingPower;
  var text = formatNode(diff,"%##.##");
  var onclick = "revealDetails(this,diffBuyingPowerDescription(new EffectiveTaxRate(" + income + "," + household_size + "," + householdType + "),new EffectiveFairTaxRate(" + income + "," + household_size + "," + isMarried + ")))";
	var cell = detailedCell(diff,"%##.##",title,onclick); 
	var attr = document.createAttribute("class");
	attr.value = "highlight";
	cell.setAttributeNode(attr);
  return cell;
}


function diffRateDescription(etr,eftr) {
	// Create a DescriptionNode
	var dn = new DescriptionNode();

	// Create a new DescriptionSectionNode
 	var dsn = dn.addSection();
 	
 	dsn.addBoldLine("Comparison Between Current and FairTax Systems");
 	
 	dsn.addText("cr = Current System Effective Tax Rate = ");
 	dsn.addNode(formatNode(etr.rate,"%##.##"));
 	dsn.addLine("");
 	
 	dsn.addText("fr = FairTax Effective Tax Rate = ");
 	dsn.addNode(formatNode(eftr.rate(),"%##.##"));
 	dsn.addLine("");
 	
 	dsn.addText("d = Difference = cr - fr = ");
 	dsn.addNode(formatNode(etr.rate,"%##.##")); 
 	dsn.addText(" - ");
 	if(eftr.rate() < 0) dsn.addText("(");
 	dsn.addNode(formatNode(eftr.rate(),"%##.##"));
 	if(eftr.rate() < 0) dsn.addText(")");
 	dsn.addText(" = ");
 	dsn.addNode(formatNode(etr.rate - eftr.rate(),"%##.##"));
 	dsn.addLine("");
 	
 	return dn.getNode();
} 

function diffBuyingPowerDescription(etr,eftr) {
	// Create a DescriptionNode
	var dn = new DescriptionNode();

	// Create a new DescriptionSectionNode
 	var dsn = dn.addSection();
 	
 	var text = "cbp = Current System Buying Power = ";
 	text = text + formatNumber(etr.buyingPower,"%##.##");
 	dsn.addLine(text);
 	
 	text = "fbp = FairTax Buying Power = ";
 	text = text + formatNumber(eftr.buyingPower(),"%##.##");
 	dsn.addLine(text);
 	
 	text = "d = Difference = fbp - cbp = ";
 	text = text + formatNumber(eftr.buyingPower(),"%##.##") + " - ";
 	text = text + formatNumber(etr.buyingPower,"%##.##");
 	text = text + " = " + formatNumber(eftr.buyingPower() - etr.buyingPower,"%##.##");
 	dsn.addLine(text);
 	
 	return dn.getNode();
} 