// JavaScript Document
// commute cost calculator functions

var vehicleTypes = new Array();
vehicleTypes[0] = new carTypeObj();
vehicleTypes[0].vehicleType = 'Small Sedan';
vehicleTypes[0].mpg = 30;
vehicleTypes[0].cpm = 0.340;
vehicleTypes[1] = new carTypeObj();
vehicleTypes[1].vehicleType = 'Medium Sedan';
vehicleTypes[1].mpg = 24;
vehicleTypes[1].cpm = 0.431;
vehicleTypes[2] = new carTypeObj();
vehicleTypes[2].vehicleType = 'Large Sedan';
vehicleTypes[2].mpg = 22;
vehicleTypes[2].cpm = 0.525;
vehicleTypes[3] = new carTypeObj();
vehicleTypes[3].vehicleType = 'SUV or Truck';
vehicleTypes[3].mpg = 17;
vehicleTypes[3].cpm = 0.540;
vehicleTypes[4] = new carTypeObj();
vehicleTypes[4].vehicleType = 'Minivan';
vehicleTypes[4].mpg = 21;
vehicleTypes[4].cpm = 0.470;

var daysInAvgMonth = (365.25/12);

function checkCommuteCalculator(form, setAlert) {
	var miles = form.txtRoundTrip;
	var days = form.txtCommuteDays;
	var parking = form.txtParkingCost;
	var mpg = form.txtMilesPerGallon;
	var ppg = form.txtPricePerGallon;
	var riders = form.txtRiders;
	var retval = true;
	var msg = '';

	if(!validate_required(miles) || !parseInt(miles.value)) {
		retval = false;
		msg = msg + 'Round-trip commute mileage\n';
	}

	if(!validate_required(days) || !parseInt(days.value)) {
		retval = false;
		msg = msg + 'Days per week you commute to work\n';
	}
	if(days > 7)
		days = 7;

	if(!validate_required(parking)) {
		retval = false;
		msg = msg + 'Daily parking fees\n';
	}

	if(!validate_required(mpg) || !parseInt(mpg.value)) {
		retval = false;
		msg = msg + 'Miles per Gallon\n';
	}

	if(!validate_required(ppg) || !parseFloat(ppg.value)) {
		retval = false;
		msg = msg + 'Price per Gallon\n';
	}

	if(!validate_required(riders) || !parseInt(riders.value)) {
		retval = false;
		msg = msg + 'Number of riders for cost sharing calculations\n';
	}
	if(setAlert) {
		if(msg.length > 0) {
			alert('Please complete the following:\n' + msg);	
		}
	}

	return retval;
}

function calculateCommute(form) {
	if(checkCommuteCalculator(form, false)) {
		// do calc
		var idx = form.ddlVehicleType.selectedIndex;
		//var vehicleType = ddl.options[idx].text;
		var miles = 0;
		if(validate_expression(form.txtRoundTrip, 'number') || validate_expression(form.txtRoundTrip, 'float')) 
			miles = new Number(form.txtRoundTrip.value);
		var days = 0;
		if(validate_expression(form.txtCommuteDays, 'number') || validate_expression(form.txtCommuteDays, 'float')) 
			days = new Number(form.txtCommuteDays.value);
		var parking = 0;
		if(validate_expression(form.txtParkingCost, 'number') || validate_expression(form.txtParkingCost, 'float')) 
			parking = new Number(form.txtParkingCost.value);
		var mpg = 0;
		if(validate_expression(form.txtMilesPerGallon, 'number') || validate_expression(form.txtMilesPerGallon, 'float')) 
			mpg = new Number(form.txtMilesPerGallon.value);
		var ppg = 0;
		if(validate_expression(form.txtPricePerGallon, 'number') || validate_expression(form.txtPricePerGallon, 'float')) 
			ppg = new Number(form.txtPricePerGallon.value);
		var riders = 0;
		if(validate_expression(form.txtRiders, 'number') || validate_expression(form.txtRiders, 'float')) 
			riders = new Number(form.txtRiders.value);

		/* 
		Formulae: 
		milesPerWeek = miles * days
		costPerMile = (mpg / ppg) / riders
		costPerDay = miles * costPerMile
		costPerWeek = costPerDay * days
		costPerMonth = daysInAvgMonth * (days / 7) * costPerDay
		costPerYear = costPerMonth * 12
		*/

		// do calcs without maint costs
		var milesPerWeek = miles * days;
		var costPerMile0 = (1 / (mpg / ppg)) / riders;
		var costPerDay0 = miles * costPerMile0;
		var costPerWeek0 = costPerDay0 * days;
		var costPerMonth0 = (daysInAvgMonth * (days / 7)) * costPerDay0;
		var costPerYear0 = costPerMonth0 * 12;
		form.perMile.value = costPerMile0.toFixed(2);
		form.perDay.value = costPerDay0.toFixed(2);
		form.perWeek.value = costPerWeek0.toFixed(2);
		form.perMonth.value = costPerMonth0.toFixed(2);
		form.perYear.value = costPerYear0.toFixed(2);

		// do calcs with maint costs
		//var milesPerWeek = miles x days;
		var costPerMile1 = (vehicleType.cpm) / riders;
		var costPerDay1 = miles * costPerMile1;
		var costPerWeek1 = costPerDay1 * days;
		var costPerMonth1 = (daysInAvgMonth * (days / 7)) * costPerDay1;
		var costPerYear1 = costPerMonth1 * 12;
		form.perMilePlus.value = costPerMile1.toFixed(2);
		form.perDayPlus.value = costPerDay1.toFixed(2);
		form.perWeekPlus.value = costPerWeek1.toFixed(2);
		form.perMonthPlus.value = costPerMonth1.toFixed(2);
		form.perYearPlus.value = costPerYear1.toFixed(2);
	}
}

function updateVehicleData(form) {
	var idx = form.ddlVehicleType.selectedIndex;
	vehicleType = vehicleTypes[idx];
	form.txtCostPerMile.value = vehicleType.cpm;
	form.txtMilesPerGallon.value = vehicleType.mpg;
}

function populateVehicles(form) {
	
	for (i = 0; i <= vehicleTypes.length - 1; i++)
	{
		var opt = document.createElement('option');
		opt.text = vehicleTypes[i].vehicleType;
		opt.value = vehicleTypes[i].vehicleType;
		try {
			form.ddlVehicleType.add(opt, null); // standards compliant; doesn't work in IE
		}
		catch(ex) {
			form.ddlVehicleType.add(opt); // IE only
		}
	}
	form.ddlVehicleType.selectedIndex = 1;
	updateVehicleData(form);
}

function carTypeObj(vehicleType, mpg, cpm) {
	this.vehicleType = vehicleType;
	this.mpg = mpg;
	this.cpm = cpm;
}

