$(function(){
	
	ROICalc.render.update();
	
	$("#num-employees").numeric();
	$("#avg-ann-salary").numeric();
	$("#turn-train-costs").numeric();
	$("#hc-cost-per-emp").numeric();
	$("#unsched-abs").numeric();
	$("#avg-pfw").numeric();
	$("#cost-per-emp").numeric();
		
	$("#num-employees").focus();

	$("#12_assumptions").click(function(){
		var assumptions = window.open("", "assumptionsWindow", "width=450,height=300,scrollbars=yes,toolbar=no,resizable=yes,status=yes");
		assumptions.document.open();
		assumptions.document.write("<html><head><title>12 ROI Assumptions</title><style>body{ margin:10px; padding:10px; border:5px solid #AFAFAF; font-family:Arial, sans-serif; font-size:13px; } li{ padding-bottom:10px }</style></head><body>" + $("#assumptions").html() + "</body></html>");
		assumptions.document.close();
		assumptions.focus();
		return false;
	});
	
	//bind form input onchange events
	$("#num-employees").bind("blur", function(){
		ROICalc.events.numEmployeesChange($(this));
	});
	$("#avg-ann-salary").bind("blur", function(){
		ROICalc.events.avgSalaryChange($(this));
	});
	$("#turn-train-costs").bind("blur", function(){
		ROICalc.events.turnTrainCostsChange($(this));
	});
	$("#hc-cost-per-emp").bind("blur", function(){
		ROICalc.events.healthCareCostsChange($(this));
	});
	$("#unsched-abs").bind("blur", function(){
		ROICalc.events.unschedAbsensesChange($(this));
	});
	$("#avg-pfw").bind("blur", function(){
		ROICalc.events.avgPFWChange($(this));
	});		
	$("#cost-per-emp").bind("change keyup", function(){
		ROICalc.events.costPerEmployeeChange($(this));
	});
	
	//request report button event handler
	$("form#requestReportForm").submit(function(){
		ROICalc.events.requestReportSubmit();
		return false;
	});
	$("#requestReport").click(function(){
		ROICalc.events.requestReportSubmit();
		return false;	
	});
});

ROICalc = {};

//variables
ROICalc.numEmployees = 1000;
ROICalc.avgSalary = 45000;
ROICalc.turnTrainCosts = 11250;
ROICalc.healthCareCosts = 9660;
ROICalc.unschedAbsenses = 7;
ROICalc.avgPFW = 6;
ROICalc.costPerEmployee = 150;

ROICalc.PERCENT_GARNISH = .06;

ROICalc.math = {};
ROICalc.math.getTurnTrainCosts = function(){
	var retVal = parseInt((ROICalc.avgSalary * .25) * 100 / 100);
	return retVal;
};
ROICalc.math.getNumberOfEmployeesAffected = function(){
	var retVal = parseInt(ROICalc.numEmployees * .3);
	//console.log("NumberOfEmployeesAffected=" + retVal);
	return retVal;	
};
ROICalc.math.getWorkTimeWasted = function(){
	var retVal = parseInt(Math.round(ROICalc.avgSalary / 52 / 5 * ROICalc.unschedAbsenses));
	//console.log("WorkTimeWasted=" + retVal);
	return retVal;	
};
ROICalc.math.getLowPFW = function(){
	//var retVal = parseFloat(ROICalc.avgPFW / 10);
	var retVal = .3;
	//console.log("LowPFW=" + retVal);
	return retVal;	
};
ROICalc.math.getMidPFW = function(){
	//var retVal = parseFloat(ROICalc.avgPFW / 20);
	var retVal = .28;
	//console.log("MidPFW=" + retVal);
	return retVal;	
};
ROICalc.math.getHighPFW = function(){
	//var retVal = parseFloat(ROICalc.avgPFW / 30);
	var retVal = .42;
	//console.log("HighPFW=" + retVal);
	return retVal;	
};

ROICalc.math.getActualWorkTimeWasted = function(){
	//console.log("numEmployeesAffected=" + ROICalc.math.getNumberOfEmployeesAffected());
	var retVal = parseInt(Math.round(ROICalc.math.getNumberOfEmployeesAffected() * .33 * ROICalc.math.getWorkTimeWasted() * .2));	
	//console.log("ActualWorkTimeWasted=" + retVal);
	return retVal;
};
ROICalc.math.getActualDaysAbsent = function(){
	return 6.4;
};
ROICalc.math.getActualAbsenteeism = function(){
	var retVal = parseInt(Math.round(ROICalc.math.getNumberOfEmployeesAffected() * ROICalc.math.getActualDaysAbsent() * .1 * ROICalc.avgSalary / 52 / 40 * 8));
	//console.log("ActualAbsenteeism=" + retVal);
	return retVal;
};
ROICalc.math.getActualTurnover = function(){
	var retVal = parseInt(Math.round(ROICalc.math.getNumberOfEmployeesAffected() * .2 * .3 * ROICalc.turnTrainCosts));
	//console.log("ActualTurnover=" + retVal);
	return retVal;	
};
ROICalc.math.getActualJobPerformanceRating = function(){
	var eq1 = parseInt(Math.round(ROICalc.math.getNumberOfEmployeesAffected() * ROICalc.avgSalary * .2 * .1 * ROICalc.math.getLowPFW()));
	var eq2 = parseInt(Math.round(ROICalc.math.getNumberOfEmployeesAffected() * ROICalc.avgSalary * .2 * .25 * ROICalc.math.getMidPFW()));
	var eq3 = parseInt(Math.round(ROICalc.math.getNumberOfEmployeesAffected() * ROICalc.avgSalary * .05 * .05 * ROICalc.math.getHighPFW()));
	
	var retVal = eq1 + eq2 + eq3;
	
	if(ROICalc.avgPFW <= 4){
		retVal *= .85;
	}
	else if(ROICalc.avgPFW > 6){
		retVal *= .8;
	}
	
	//console.log("ActualJobPerformanceRating=" + retVal);
	return retVal;
};
ROICalc.math.getActualHealthCareCosts = function(){
	var retVal = parseInt(Math.round(ROICalc.math.getNumberOfEmployeesAffected() * .33 * ROICalc.healthCareCosts * .05));	
	//console.log("ActualHealthCareCosts=" + retVal);
	return retVal;
};
ROICalc.math.getActualHealthCarePremium = function(){
	var retVal = parseInt(Math.round(ROICalc.numEmployees * .1 * 500));
	//console.log("ActualHealthCarePremium=" + retVal);
	return retVal;	
};
ROICalc.math.getActualHealthCareSpending = function(){
	var retVal = parseInt(Math.round(ROICalc.numEmployees * .1 * 1200 * .0765));
	//console.log("ActualHealthCareSpending=" + retVal);
	return retVal;	
};
ROICalc.math.getActualDependentCareSpending = function(){
	var retVal = parseInt(Math.round(ROICalc.numEmployees * .01 * 3600 * .0765));
	//console.log("ActualDependentCareSpending=" + retVal);
	return retVal;	
};
ROICalc.math.getActualWorkersCompClaims = function(){
	var retVal = parseInt(Math.round(ROICalc.numEmployees * .005 * 400));
	//console.log("ActualWorkersCompClaims=" + retVal);
	return retVal;	
};
ROICalc.math.getActualGarnishments = function(){
	var retVal = parseInt(Math.round(ROICalc.numEmployees * ROICalc.PERCENT_GARNISH * .25 * 600 / 2));
	//console.log("ActualGarnishments=" + retVal);
	return retVal;
};
ROICalc.math.getActualTotalOfFirstFourFactors = function(){
	var retVal = parseInt(Math.round(ROICalc.math.getActualWorkTimeWasted() + ROICalc.math.getActualTurnover() + ROICalc.math.getActualJobPerformanceRating() + ROICalc.math.getActualHealthCareCosts()));
	//console.log("total of first 4 factors=" + retVal);
	return retVal;
};
ROICalc.math.getActualTotalOfOtherFactors = function(){
	var retVal = parseInt(Math.round(ROICalc.math.getActualAbsenteeism() + ROICalc.math.getActualHealthCarePremium() + ROICalc.math.getActualHealthCareSpending() + ROICalc.math.getActualDependentCareSpending() + ROICalc.math.getActualWorkersCompClaims() + ROICalc.math.getActualGarnishments()));
	//console.log("total of other factors=" + retVal);
	return retVal;	
};
ROICalc.math.getActualTotalImprovement = function(){
	var retVal = parseInt(ROICalc.math.getActualTotalOfFirstFourFactors() + ROICalc.math.getActualTotalOfOtherFactors());
	//console.log("ActualTotalImprovement=" + retVal);
	return retVal;
};
ROICalc.math.getActualTotalCostOfFinancialEducationProgram = function(){
	var retVal = parseInt(Math.round(ROICalc.numEmployees * ROICalc.costPerEmployee));
	//console.log("ActualTotalCostOfFinancialEducationProgram=" + retVal);
	return retVal;
};
ROICalc.math.getActualBenefitToCostRatio = function(){
	var retVal = parseFloat(ROICalc.math.getActualTotalImprovement() / ROICalc.math.getActualTotalCostOfFinancialEducationProgram());
	
	//round to one decimal place
	retVal = Math.round(retVal*10)/10;
	
	if(retVal == "Infinity" || isNaN(retVal) || retVal > 500){
		retVal = ">500";
	}	
	
	return retVal + ":1";
}
ROICalc.math.getActualROI = function(){
	var retVal = parseInt(Math.round( (ROICalc.math.getActualTotalImprovement() - ROICalc.math.getActualTotalCostOfFinancialEducationProgram()) / ROICalc.math.getActualTotalCostOfFinancialEducationProgram() * 100));
	if(retVal == "Infinity" || isNaN(retVal) || retVal > 500){
		retVal = "500%+";
	}
	return retVal + ":1";	
};
ROICalc.math.getActualROIRatio = function(){
	var retVal = parseFloat((ROICalc.math.getActualTotalImprovement() - ROICalc.math.getActualTotalCostOfFinancialEducationProgram()) / ROICalc.math.getActualTotalCostOfFinancialEducationProgram());

	//round to one decimal place
	retVal = Math.round(retVal*10)/10;

	if(ROICalc.avgPFW > 6){
		retVal *= .8;
		retVal = Math.round(retVal*10)/10;
	}
	else if(ROICalc.avgPFW < 5.4){
		retVal *= 1.4;
		retVal = Math.round(retVal*10)/10;
	}
	
	if(retVal == "Infinity" || isNaN(retVal) || retVal > 100){
		retVal = ">100";
	}
	
	return retVal;	
};
ROICalc.math.getActualReturn = function(){
	return parseFloat(ROICalc.math.getActualROI() / 100);
}


ROICalc.render = {};
ROICalc.render.update = function(){

	//update chart
	ROICalc.render.chart();
	
	//update "Your Return on Investment"
	//$(".return .number").html(ROICalc.math.getActualROI() + "%");
	$(".return .number").html(ROICalc.math.getActualROIRatio());
	
	//update "Employer cost of program"
	$("#employer_cost_of_program").html("$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalCostOfFinancialEducationProgram()));
	
	//update "Employer savings due to financial education"
	$("#employer_savings").html("$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalImprovement()));

	//update starburst
	$("#starburst").html("Employer savings<br /><span>$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalImprovement()) + "</span>");

	//update "Costs without financial education"
	//$("#costs_without_education").html("$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalImprovement()));
			
	//update "Reduced costs after financial education"
	//$("#costs_after_education").html("$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalImprovement()));
		
};
ROICalc.render.chart = function(){

	var heightInPx = 320;

	var jobPerformance = ROICalc.math.getActualJobPerformanceRating();
	var turnover = ROICalc.math.getActualTurnover();
	var healthCare = ROICalc.math.getActualHealthCareCosts();
	var workTimeWasted = ROICalc.math.getActualWorkTimeWasted();
	var projectedSavings = ROICalc.math.getActualTotalOfOtherFactors();

	var total = jobPerformance + turnover + healthCare + workTimeWasted + projectedSavings; 

	var jobPerformanceEle = $("#column2 .graph-container .job-performance a");
	jobPerformanceEle.html("<span>Job performance</span> $" + ROICalc.utils.addCommas(jobPerformance));
	var jobPerformancePercent = Math.floor(jobPerformance / total * 100) / 100;
	var jobPerformancePx = Math.floor(jobPerformancePercent  * heightInPx);
	if(jobPerformancePx < 15){
		jobPerformancePx = 15;
	}
	else if(jobPerformancePx > 100){
		jobPerformancePx -= 13;
	}
	jobPerformanceEle.css("height", jobPerformancePx + "px");
	
	var turnoverEle = $("#column2 .graph-container .turnover a");
	turnoverEle.html("<span>Turnover</span> $" + ROICalc.utils.addCommas(turnover));
	var turnoverPercent = Math.floor(turnover / total * 100) / 100;
	var turnoverPx = Math.floor(turnoverPercent * heightInPx);
	if(turnoverPx < 15){
		turnoverPx = 15;
	}
	else if(turnoverPx > 100){
		turnoverPx -= 13;
	}	
	turnoverEle.css("height", turnoverPx + "px");
	
	var healthCareEle = $("#column2 .graph-container .health-care a");
	healthCareEle.html("<span>Health care costs</span> $" + ROICalc.utils.addCommas(healthCare));
	var healthCarePercent = Math.floor(healthCare / total * 100) / 100;
	var healthCarePx = Math.floor(healthCarePercent  * heightInPx);
	if(healthCarePx < 15){
		healthCarePx = 15;
	}
	else if(healthCarePx > 100){
		healthCarePx -= 13;
	}	
	healthCareEle.css("height", healthCarePx + "px");
	
	var workTimeWastedEle = $("#column2 .graph-container .work-time-wasted a");
	workTimeWastedEle.html("<span>Work time wasted</span> $" + ROICalc.utils.addCommas(workTimeWasted));
	var workTimeWastedPercent = Math.floor(workTimeWasted / total * 100) / 100;
	var workTimeWastedPx = Math.floor(workTimeWastedPercent * heightInPx);
	if(workTimeWastedPx < 15){
		workTimeWastedPx = 15;
	}
	else if(workTimeWastedPx > 100){
		workTimeWastedPx -= 13;
	}	
	workTimeWastedEle.css("height", workTimeWastedPx  + "px");
	
	var projectedSavingsEle = $("#column2 .graph-container .projected-savings a");
	projectedSavingsEle.html("<span>Other work outcomes</span> $" + ROICalc.utils.addCommas(projectedSavings));
	var projectedSavingsPercent = Math.floor(projectedSavings / total * 100) / 100;
	var projectedSavingsPx = Math.floor(projectedSavingsPercent * heightInPx);
	if(projectedSavingsPx < 15){
		projectedSavingsPx = 15;
	}
	else if(projectedSavingsPx > 100){
		projectedSavingsPx -= 13;
	}	
	projectedSavingsEle.css("height", projectedSavingsPx + "px");
		
	return false;	
};
ROICalc.render.freeReport = function(){
	//save info into database
	ROICalc.async.saveRequestReportSubmit();	
		
	//build report
	var wrapper = $("<div></div>");
	
	//heading
	var greeting = $("<p>Hello " + $("#first-name").attr("value") + " " + $("#last-name").attr("value") + ",</p>");
	wrapper.append(greeting);
	
	var p1 = $("<p>Thank you for entering your information to complete the online form &quot;Employer's Project ROI for Quality Financial Program&trade;.&quot; The program calculates how much employee financial distress costs you and estimates the employer's return-on-investment for providing workers with quality a workplace financial program. The PFEEF ROI Calculator provides a general overview of the assumptions and calculations, and the results are below.</p>");
	wrapper.append(p1);
	
	//12 assumptions
	var assumptions = $("#assumptions").html();
	wrapper.append("<style type='text/css'>li{font-size:12px}li strong{margin-top:15px;display:block;}li br{display:none}</style>" + assumptions + "<br />");
	
	//left table
	var leftTableHeading = $("<p class='heading'>You Inputted the Following Figures:</p>");
	wrapper.append(leftTableHeading);	
	
	var leftTable = $("<table class='printable' cellpadding='5' cellspacing='0' border='0'><tbody></tbody></table>");
	wrapper.append(leftTable);
	
	var numberOfEmployees = $("<tr><td class='label'>Number of employees</td><td class='value'>" + ROICalc.utils.addCommas(ROICalc.numEmployees) + "</td></tr>");
	leftTable.append(numberOfEmployees);
	
	var averageSalary = $("<tr><td class='label'>Average annual salary plus benefits</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.avgSalary) + "</td></tr>");
	leftTable.append(averageSalary);
	
	var turnTrainCosts = $("<tr><td class='label'>Turnover and training costs to replace an employee</td><td class='value'>" + ROICalc.utils.addCommas(ROICalc.turnTrainCosts) + "</td></tr>");
	leftTable.append(turnTrainCosts);
	
	var workTimeWasted = $("<tr><td class='label'>Work time wasted by seriously financially distressed workers per employee per year</td><td class='value'>" + ROICalc.unschedAbsenses + " days</td></tr>");
	leftTable.append(workTimeWasted);
	
	var pfwScore = $("<tr><td class='label'>Personal Financial Wellness (PFW) score for all employees</td><td class='value'>" + ROICalc.avgPFW + " score</td></tr>");
	leftTable.append(pfwScore);
	
	var employersCost = $("<tr><td class='label'>Employer's cost of financial program per employee</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.costPerEmployee) + "</td></tr>");
	leftTable.append(employersCost);
	
	//middle table
	var middleTableHeading = $("<p class='heading'>Areas and Amount of Cost Savings:</p>");
	wrapper.append(middleTableHeading);	
	
	var middleTable = $("<table class='printable' cellpadding='5' cellspacing='0' border='0'><tbody></tbody></table>");
	wrapper.append(middleTable);

	var turnoverCosts = $("<tr><td class='label'>Turnover costs</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.math.getActualTurnover()) + "</td></tr>");
	middleTable.append(turnoverCosts);
	
	var healthCareCosts = $("<tr><td class='label'>Health care costs</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.math.getActualHealthCareCosts()) + "</td></tr>");
	middleTable.append(healthCareCosts);
	
	var workTimeWastedCosts = $("<tr><td class='label'>Work time wasted costs</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.math.getActualWorkTimeWasted()) + "</td></tr>");
	middleTable.append(workTimeWastedCosts);
	
	var jobPerformanceCosts = $("<tr><td class='label'>Job performance costs</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.math.getActualJobPerformanceRating()) + "</td></tr>");
	middleTable.append(jobPerformanceCosts);
	
	var otherWorkOutcomesCosts = $("<tr><td class='label'>Other work outcomes costs</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalOfOtherFactors()) + "</td></tr>");
	middleTable.append(otherWorkOutcomesCosts);
	
	//right table
	var rightTableHeading = $("<p class='heading'>Your Return on Investment:</p>");
	wrapper.append(rightTableHeading);
	
	var rightTable = $("<table class='printable' cellpadding='5' cellspacing='0' border='0'><tbody></tbody></table>");
	wrapper.append(rightTable);
	
	var totalEmployerCost = $("<tr><td class='label'>Total employer cost for program</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalCostOfFinancialEducationProgram()) + "</td></tr>");
	rightTable.append(totalEmployerCost);
	
	var employerFirstYearSavings = $("<tr><td class='label'>Employer's first-year savings due to financial program</td><td class='value'>$" + ROICalc.utils.addCommas(ROICalc.math.getActualTotalImprovement()) + "</td></tr>");
	rightTable.append(employerFirstYearSavings);
	
	var returnOnInvestment = $("<tr><td class='label'>Your return on Investment (ROI)</td><td class='value'>" + ROICalc.math.getActualROIRatio() + "</td></tr>");
	rightTable.append(returnOnInvestment);

	var p2 = $("<p>When we create an employer-specific projected ROI, both the financial program provider and the employer participate in making each and every assumption as well as adjusting the calculations as needed for their situation. Then the human resources professional or wellness director will be able to take PFEEF's 40-page written report to his/her management team and say, &quot;Here are the PFEEF ROI assumptions and calculations that I made along with our financial education provider and the Foundation, and I believe you will agree they are quite conservative and fit our organization. The 'PFEEF Projected ROI' for one year is X:1.&quot;</p>");
	wrapper.append(p2);
	
	var p3 = $("<p>We encourage you to contact one of PFEEF's &quot;Best Providers&quot; who can help you conduct a survey to benchmark the financial wellness of your employees, use 10 or more of your costs for job-outcomes, and prepare a written report that details a projected return on investment suitable for presentation to your management team.</p>");
	wrapper.append(p3);
	
	var p4 = $("<p>Please contact PFEEF for more information as additional details are available upon request.</p>");
	wrapper.append(p4);
	
	//footer
	var regards = $("<p>Regards,</p>");
	wrapper.append(regards);
	
	var phd = $("<p>A.D. Prawitz, Ph.D.</p>");
	wrapper.append(phd);
	
	var directorSignature = $("<p>Director of Research, Personal Finance Employee Education Foundation</p>");
	wrapper.append(directorSignature);
	
	//print
	//$("#printableReport").html("").append(wrapper).show();
	//window.print();	
	//$("#popup-form").hide();
	
	var calculatorWindow = window.open("", "calculatorWindow", "width=826,height=623,scrollbars=yes,toolbar=no,menubar=no,resizable=yes,status=yes'");
	calculatorWindow.document.open();
	calculatorWindow.document.write("<html><head><title>Employer's Projected ROI for Quality Financial Program - Free Report</title><link type='text/css' href='../styles/calculator.css' rel='stylesheet' /></head><body style='background:#FFFFFF;font-size:13px;padding:10px;color:#1F1F1F'>");
	calculatorWindow.document.write(wrapper.html());
	calculatorWindow.document.write("</body></html>");
	calculatorWindow.document.close();	
	calculatorWindow.print();
	return false;
};


ROICalc.async = {};
ROICalc.async.saveRequestReportSubmit = function(){
	var params = "firstName=" + encodeURIComponent($("#first-name").attr("value"));
	params += "&lastName=" + encodeURIComponent($("#last-name").attr("value"));
	params += "&jobTitle=" + encodeURIComponent($("#job-title").attr("value"));
	params += "&companyName=" + encodeURIComponent($("#company").attr("value"));
	params += "&organizationType=" + encodeURIComponent($("#organizationType").attr("value"));
	params += "&phone=" + encodeURIComponent($("#phone").attr("value"));
	params += "&emailAddress=" + encodeURIComponent($("#email").attr("value"));
	params += "&recommendedBy=" + encodeURIComponent($("#recommended-by").attr("value"));
	params += "&comments=" + encodeURIComponent($("#comments").attr("value"));
	
	if($("input.checkbox[value='WorkshopsSeminars']").is(":checked")){
		params += "&workshopsSeminars=Y";
	}
	else{
		params += "&workshopsSeminars=N";
	}
	if($("input.checkbox[value='OnlineEducation']").is(":checked")){
		params += "&onlineEducation=Y";
	}
	else{
		params += "&onlineEducation=N";
	}
	if($("input.checkbox[value='FinancialAdvice']").is(":checked")){
		params += "&financialAdvice=Y";
	}
	else{
		params += "&financialAdvice=N";
	}
	if($("input.checkbox[value='MoneyCoaching']").is(":checked")){
		params += "&moneyCoaching=Y";
	}
	else{
		params += "&moneyCoaching=N";
	}
	if($("input.checkbox[value='CreditCounseling']").is(":checked")){
		params += "&creditCounseling=Y";
	}
	else{
		params += "&creditCounseling=N";
	}
	
	//roi calculator inputs
	params += "&numberOfEmployees=" + encodeURIComponent(ROICalc.numEmployees);
	params += "&averageAnnualSalary=" + encodeURIComponent(ROICalc.avgSalary);
	params += "&turnoverAndTraining=" + encodeURIComponent(ROICalc.turnTrainCosts);
	params += "&workTimeWasted=" + encodeURIComponent(ROICalc.unschedAbsenses);
	params += "&pfwScore=" + encodeURIComponent(ROICalc.avgPFW);
	params += "&employersCostPerEmployee=" + encodeURIComponent(ROICalc.costPerEmployee);
	params += "&turnoverCosts=" + encodeURIComponent(ROICalc.math.getActualTurnover());
	params += "&healthCareCosts=" + encodeURIComponent(ROICalc.math.getActualHealthCareCosts());
	params += "&workTimeWastedCosts=" + encodeURIComponent(ROICalc.math.getActualWorkTimeWasted());
	params += "&jobPerformanceCosts=" + encodeURIComponent(ROICalc.math.getActualJobPerformanceRating());
	params += "&otherWorkOutcomesCosts=" + encodeURIComponent(ROICalc.math.getActualTotalOfOtherFactors());
	params += "&totalEmployerCostForProgram=" + encodeURIComponent(ROICalc.math.getActualTotalCostOfFinancialEducationProgram());
	params += "&employersFirstYearSavings=" + encodeURIComponent(ROICalc.math.getActualTotalImprovement());
	params += "&returnOnInvestment=" + encodeURIComponent(ROICalc.math.getActualBenefitToCostRatio());	
	
	
	$.ajax({
		type: "POST",
		url: "requestReport.html",
		data: params,
		timeout: 1000000,
		success: function(xml_msg){
			
		},
		error: function(xml_msg){
			
		}
	});	
						
	return false;
};

ROICalc.events = {};
ROICalc.events.requestReportSubmit = function(){
	if(ROICalc.utils.notEmpty($("#first-name").attr("value")) && ROICalc.utils.notEmpty($("#last-name").attr("value")) && ROICalc.utils.notEmpty($("#job-title").attr("value")) && ROICalc.utils.notEmpty($("#company").attr("value")) && ROICalc.utils.notEmpty($("#phone").attr("value")) && ROICalc.utils.notEmpty($("#email").attr("value"))){
		ROICalc.render.freeReport();
	}
	else{
		alert("All fields except comments are required.");
	}	
	return false;		
};
ROICalc.events.numEmployeesChange = function(ele){
	ROICalc.numEmployees = ROICalc.utils.convertToInt(ele.attr("value"));
	ROICalc.render.update();	
	//console.log("numEmployees=" + ROICalc.numEmployees);
};
ROICalc.events.avgSalaryChange = function(ele){
	ROICalc.avgSalary = ROICalc.utils.convertDollarsToInt(ele.attr("value"));
	//update turnover and training cost
	$("#turn-train-costs").attr("value", ROICalc.math.getTurnTrainCosts());
	ROICalc.render.update();
	//console.log("avgSalary=" + ROICalc.avgSalary);
};
ROICalc.events.turnTrainCostsChange = function(ele){
	ROICalc.turnTrainCosts = ROICalc.utils.convertDollarsToInt(ele.attr("value"));
	ROICalc.render.update();
	//console.log("turnTrainCosts=" + ROICalc.turnTrainCosts);
};
ROICalc.events.healthCareCostsChange = function(ele){
	ROICalc.healthCareCosts = ROICalc.utils.convertDollarsToInt(ele.attr("value"));
	ROICalc.render.update();
	//console.log("healthCareCosts=" + ROICalc.healthCareCosts);
};
ROICalc.events.unschedAbsensesChange = function(ele){
	ROICalc.unschedAbsenses = ROICalc.utils.convertToInt(ele.attr("value"));
	ROICalc.render.update();
	//console.log("unschedAbsenses=" + ROICalc.unschedAbsenses);
};
ROICalc.events.avgPFWChange = function(ele){
	ROICalc.avgPFW = ROICalc.utils.convertToFloat(ele.attr("value"));
	if(ROICalc.avgPFW < 1 || ROICalc.avgPFW > 10) {
		alert("Only scores between 1 and 10 are acceptable.");
		ROICalc.avgPFW = 7;
		$("#avg-pfw").attr("value", "7");
	}
	ROICalc.render.update();
};
ROICalc.events.costPerEmployeeChange = function(ele){
	ROICalc.costPerEmployee = ROICalc.utils.convertDollarsToInt(ele.attr("value"));
	ROICalc.render.update();
	//console.log("costPerEmployee=" + ROICalc.costPerEmployee);
};







ROICalc.utils = {};
ROICalc.utils.notEmpty = function(str){
	return str != null && typeof str != 'undefined' && $.trim(str) != '';
};
ROICalc.utils.convertToInt = function(val){
	var retVal = parseInt(val);

	if(isNaN(retVal)){
		retVal = 0;
	}
	
	return retVal;
};
ROICalc.utils.convertToFloat = function(val){
	var retVal = parseFloat(val);

	if(isNaN(retVal)){
		retVal = 0.0;
	}
	
	return retVal;	
};
ROICalc.utils.convertDollarsToInt = function(val){
	//trim leading dollar sign
	//val = val.substring(1, val.length);
	
	//replace all commas
	val = val.replace(/,/, "");

	//replace all underscores (if there are any from our input masks)
	val = val.replace(/_/, "");

	var retVal = parseInt(val);
	if(isNaN(retVal)){
		//alert("Please enter a valid number.");
		retVal = 0;
	}
	
	return retVal;
};
ROICalc.utils.addCommas = function(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;	
};
ROICalc.utils.toggleGetFreeReport = function(){
	$("#popup-form").toggle("fast");
};
ROICalc.utils.findSWF = function(movieName) {
	if(navigator.appName.indexOf("Microsoft") != -1) {
    	return window[movieName];
	} 
	else {
		return document[movieName];
	}
}