﻿//----------------------------------------------------------------------
function focus_field(box)
{
	temp_string = box.value;
	temp_string = temp_string.replace("$", "");
	while (temp_string.search(",") > 0) temp_string = temp_string.replace(",", "");
	box.value = temp_string;
	return temp_string;
}
//----------------------------------------------------------------------
function blur_field(box)
{
	temp_string = box.value;
	temp_string = temp_string.replace("$", "");
	while (temp_string.search(",") > 0) temp_string = temp_string.replace(",", "");
	if (temp_string == "") temp_string = "0";
	box.value = "$" + CommaFormatted(temp_string);
	return temp_string;
}
//----------------------------------------------------------------------
function get_amount(control_id)
{
	temp_string = document.getElementById(control_id).value;
	temp_string = temp_string.replace("$", "");
	while (temp_string.search(",") > 0) temp_string = temp_string.replace(",", "");
	return temp_string;
}
//-----------------------------------------------------------------------------------
function CommaFormatted(_amount)
{
	var amount = '' + _amount;
	var delimiter = ","; // replace comma if desired
	var a = amount.split('.', 2)
	var d = a[1];
	var i = parseInt(a[0]);
	if (isNaN(i)) { return ''; }
	var minus = '';
	if (i < 0) { minus = '-'; }
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while (n.length > 3)
	{
		var nn = n.substr(n.length - 3);
		a.unshift(nn);
		n = n.substr(0, n.length - 3);
	}
	if (n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	if (isNaN(d) || d.length < 1) { amount = n; }
	else { amount = n + '.' + d; }
	amount = minus + amount;
	return amount;
}
//-----------------------------------------------------------------------------------
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 FloatFormatted(amount)
{
	var i = parseFloat(amount);
	if (isNaN(i)) { i = 0.0; }
	var minus = '';
	if (i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .05) * 10);
	i = i / 10;
	s = new String(i);
	if (s.indexOf('.') < 0) { s += '.0'; }
	if (s.indexOf('.') == (s.length - 1)) { s += '0'; }
	s = minus + s;
	return s;
}
//---------------------------------------------------------------------------
function GetVehiclesArray()
{
    var arr = [];
    var value = 0;

    for (i = 0; i < 65; i++)
    {
        if (i < 25)
            value += 1;
        else if (i < 40)
            value += 5;
        else if (i < 50)
            value += 10;
        else if (i < 58)
            value += 25;
        else if (i < 60)
            value += 50;
        else if (i < 65)
            value += 100;

        arr.push(value);
    }
    
    return arr;
}
//---------------------------------------------------------------------------
var chart = 0;
//---------------------------------------------------------------------------
function OnCalcLoad()
{
  GenerateVehiclesAndEmployees();
  GenerateHourlyRate();
  GenerateAreMileageSaved();
  GenerateVehicleOperatingCost();
  GenerateGpsDiscount();
  
  document.getElementById('monthly_vehicle_insurance_cost').value = "$" + CommaFormatted('1500');
  
  Calculate();
}
//---------------------------------------------------------------------------
function GenerateVehiclesAndEmployees()
{
    var vehicles = document.getElementById('vehicles_number');
    var employees = document.getElementById('employees_number');
    
    var arr = GetVehiclesArray();

    for (i = 0; i < 57; i++)
    {
        var is_def_selected = false;
        var is_selected = false;
        
        if (arr[i] == 10)
        {
            is_def_selected = true;
            is_selected = true;
        }
        
        vehicles.options[i] = new Option(arr[i], arr[i], is_def_selected, is_selected); //Option("selection 1", "value 1");
        employees.options[i] = new Option(arr[i], arr[i], is_def_selected, is_selected);
    }
}
//---------------------------------------------------------------------------
function GenerateHourlyRate()
{
	var hourly_rates = document.getElementById('ave_hourly_rate');
	var value = 9;
	
	for (i = 0; i < 35; i++)
	{
		if (i < 31)
			value++;
		else
			value += 2;
		
		var is_def_selected = false;
        var is_selected = false;
        	
		if (value == 15)
		{
		    is_def_selected = true;
            is_selected = true;
		}

		hourly_rates.options[i] = new Option("$" + value, value, is_def_selected, is_selected);
	}
}
//---------------------------------------------------------------------------
function GenerateAreMileageSaved()
{
	var mileage_saved = document.getElementById('ave_mileage_saved');

	var arr = GetVehiclesArray();

	for (i = 0; i < 41; i++)
	{
	    var is_def_selected = false;
        var is_selected = false;
        	
		if (arr[i] == 20)
		{
		    is_def_selected = true;
            is_selected = true;
		}
		
		mileage_saved.options[i] = new Option(arr[i], arr[i], is_def_selected, is_selected);
	}
}
//---------------------------------------------------------------------------
function GenerateVehicleOperatingCost()
{
	var operating_cost = document.getElementById('vehicle_operating_cost');
	var value = 0.36;

	for (i = 0; i < 61; i++)
	{
		if (i < 31)
		{
			value += 0.02;
			if (i == 11)
				value += 0.02;
		}
		else if (i < 51)
			value += 0.05;
		else
			value += 0.1;
			
        value = Math.round(value*100)/100;			

        var is_def_selected = false;
        var is_selected = false;
        	
		if (value == 0.48)
		{
		    is_def_selected = true;
            is_selected = true;
		}
        
		operating_cost.options[i] = new Option("$" + CurrencyFormatted(value), value, is_def_selected, is_selected);
	}
}
//---------------------------------------------------------------------------
function GenerateGpsDiscount()
{
	var discount = document.getElementById('gps_discount');
	var value = 2;

	for (i = 0; i < 23; i++)
	{
		value ++;
		
		var is_def_selected = false;
        var is_selected = false;
        	
		if (value == 6)
		{
		    is_def_selected = true;
            is_selected = true;
		}
		
		discount.options[i] = new Option(value + "%", value/100, is_def_selected, is_selected);
	}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
function calc()
{
	var employees_number_value = document.getElementById('employees_number').value;
	var hours_saved_value = document.getElementById('hours_saved').value;
	var ave_hourly_rate_value = document.getElementById('ave_hourly_rate').value;

	var annual_labor_savings_value = GetAnnualLaborSavings(employees_number_value, hours_saved_value, 
																												 ave_hourly_rate_value, 'annual_labor_savings');

	var vehicles_number_value = document.getElementById('vehicles_number').value;
	var ave_mileage_saved_value = document.getElementById('ave_mileage_saved').value;
	var vehicle_operating_cost_value = document.getElementById('vehicle_operating_cost').value;

	var annual_excess_savings_value = GetAnnualExcessSavings(vehicles_number_value, ave_mileage_saved_value, 
																													 vehicle_operating_cost_value, 'annual_excess_savings');

	var monthly_vehicle_insurance_cost_value = get_amount('monthly_vehicle_insurance_cost');
	var gps_discount_value = document.getElementById('gps_discount').value;

	var annual_insurance_savings_value = GetAnnualInsuranceSavings(monthly_vehicle_insurance_cost_value,
																																 gps_discount_value, 'annual_insurance_savings');

	var total_annual_savings_value = GetTotalAnnualSavings(annual_labor_savings_value, annual_excess_savings_value,
																												 annual_insurance_savings_value, 'total_annual_savings');

	var initial_hardware_purchase = vehicles_number_value * 130;
	var annual_subscription = vehicles_number_value * 399;
	var year1_cost_for_adding_gps = initial_hardware_purchase + annual_subscription;

	var year1_savings_after_dtc_value = GetYear1SavingsAfterDtc(total_annual_savings_value, 
	                                    year1_cost_for_adding_gps,
	                                    'year1_savings_after_dtc');

	var subsequent_year_cost = annual_subscription;

	var subsequent_year_savings_after_tc_value = GetSubsequentYearSavingsAfterTc(total_annual_savings_value,
																																							 subsequent_year_cost,
																																							 'subsequent_year_savings_after_tc');
	var time_to_recover_investment_value;

	if (total_annual_savings_value > year1_savings_after_dtc_value)
	{
		time_to_recover_investment_value 
			= (initial_hardware_purchase + annual_subscription) / total_annual_savings_value * 12;
	}
	else if (subsequent_year_savings_after_tc_value > 0)
	{
		time_to_recover_investment_value 
			= 12 - year1_savings_after_dtc_value / subsequent_year_savings_after_tc_value * 12;
	}
	else
	{
		time_to_recover_investment_value = "Uncertain";
	}

	SetControlValue('time_to_recover_investment', FloatFormatted(time_to_recover_investment_value) + " months");

	var chart_data = GetChartData(annual_labor_savings_value, annual_excess_savings_value,
								  annual_insurance_savings_value, initial_hardware_purchase, 
								  annual_subscription, total_annual_savings_value, year1_cost_for_adding_gps,
								  annual_subscription);
								  
	return chart_data;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
function ReCalculate(chart_id, chart_data)
{
    var data = calc();
    UpdateChart(chart_id, chart_data);
}
//---------------------------------------------------------------------------
function Calculate()
{
    chart = new FusionCharts("FCF_StackedColumn3D.swf", "ChartId", "400", "500");
    var data = calc();
	chart.setDataXML(data);
    chart.render("chartdiv");
}
//---------------------------------------------------------------------------
function UpdateChart(chart_id, chart_data)
{
	//using updateChartXML method defined in FusionCharts JavaScript class
	updateChartXML(chart_id, chart_data);
}
//---------------------------------------------------------------------------
function GetChartData(annual_labor_savings, annual_excess_savings, annual_insurance_savings,
					  initial_hardware_purchase, annual_subscription, total_annual_savings, 
					  year1_cost_for_adding_gps, annual_subscription) 
{
	var data = "<graph caption='GPS Tracking Annual Savings & Cost' decimalPrecision='0' rotateNames='1' numDivLines='5' numberPrefix='$' showValues='0' formatNumberScale='0'>"
					 + "<categories>"
					 + "<category name='Annual Savings (" + "$" + CommaFormatted(Math.round(total_annual_savings)) + ")'/>"
					 + "<category name='Year 1 Cost (" + "$" + CommaFormatted(Math.round(year1_cost_for_adding_gps)) + ")'/>"
					 + "<category name='Year 2+ Cost (" + "$" + CommaFormatted(Math.round(annual_subscription)) + ")'/>"
					 + "</categories>"
					 + "<dataset seriesName='Labor' color='2490CD' showValues='0'>"
					 + "<set value='" + annual_labor_savings + "'/>"
					 + "<set />"
					 + "<set />"
					 + "</dataset>"
					 + "<dataset seriesName='Mileage' color='CD246C' showValues='0'>"
					 + "<set value='" + annual_excess_savings + "'/>"
					 + "<set />"
					 + "<set />"
					 + "</dataset>"
					 + "<dataset seriesName='Insurance' color='29A329' showValues='0'>"
					 + "<set value='" + annual_insurance_savings + "'/>"
					 + "<set />"
					 + "<set />"
					 + "</dataset>"
					 + "<dataset seriesName='Installation' color='724CB3' showValues='0'>"
					 + "<set />"
					 + "<set value='" + initial_hardware_purchase + "'/>"
					 + "<set />"
					 + "</dataset>"
					 + "<dataset seriesName='Service' color='CD7024' showValues='0'>"
					 + "<set />"
					 + "<set value='" + annual_subscription + "'/>"
					 + "<set value='" + annual_subscription + "'/>"
					 + "</dataset>"
					 + "</graph>";

	return data;
}
//---------------------------------------------------------------------------
function SetControlValue(control_id, value)
{
	if (control_id != null && document.getElementById(control_id) != null)
		document.getElementById(control_id).value = value;
}
//---------------------------------------------------------------------------
function GetAnnualLaborSavings(employees_number, hours_saved, ave_hourly_rate, control_id)
{
	var val = employees_number * hours_saved * ave_hourly_rate * 52;
	val = Math.round(val);
	SetControlValue(control_id, "$" + CommaFormatted(val));
	return val;
}
//---------------------------------------------------------------------------
function GetAnnualExcessSavings(vehicles_number, ave_mileage_saved, vehicle_operating_cost, control_id)
{
	var val = vehicles_number * ave_mileage_saved * vehicle_operating_cost * 52;
	val = Math.round(val);
	SetControlValue(control_id, "$" + CommaFormatted(val));
	return val;
}
//---------------------------------------------------------------------------
function GetAnnualInsuranceSavings(monthly_vehicle_insurance_cost, gps_discount_value, control_id)
{
	var val = monthly_vehicle_insurance_cost * gps_discount_value * 12;
	val = Math.round(val);
	SetControlValue(control_id, "$" + CommaFormatted(val));
	return val;
}
//---------------------------------------------------------------------------
function GetTotalAnnualSavings(annual_labor_savings, annual_excess_savings, annual_insurance_savings, control_id)
{
	var val = annual_labor_savings + annual_excess_savings + annual_insurance_savings;
	val = Math.round(val);
	SetControlValue(control_id, "$" + CommaFormatted(val));
	return val;
}
//---------------------------------------------------------------------------
function GetYear1SavingsAfterDtc(total_annual_savings, year1_cost_for_adding_gps, control_id)
{
	var val = total_annual_savings - year1_cost_for_adding_gps;
	val = Math.round(val);
	SetControlValue(control_id, "$" + CommaFormatted(val));
	return val;
}
//---------------------------------------------------------------------------
function GetSubsequentYearSavingsAfterTc(total_annual_savings, subsequent_year_cost, control_id)
{
	var val = total_annual_savings - subsequent_year_cost;
	val = Math.round(val);
	SetControlValue(control_id, "$" + CommaFormatted(val));
	return val;
}
