// functions used by the 'what if' cost calculator
var avgMPG = -1;
var avgRate = -1;
var fuelSurcharge = -1;
var defaultMiles = -1;	
var defaultStopCost = -1;
var defaultLoadCost = -1;
var defaultUnloadCost = -1;
var defaultFlatCost = -1;
var defaultPercentCost = -1;

/** hook functions to update appropriate field based on what is changed **/
/* fuel surcharge or linehaul rpm */
function rpmUpdate() {

	init();
	
	var miles = document.getElementById('miles').value;
	
	var linehaulRPM = document.getElementById('linehaul_rev_mile').value;
	var fuelSurRPM = document.getElementById('fuel_surch_rev_mile').value;
	
	var tmp = linehaulRPM * miles;
	document.getElementById('linehaul_rev').value = tmp.toFixed(2);
	
	tmp = fuelSurRPM * miles; 
	document.getElementById('fuel_surch_rev').value = tmp.toFixed(2);
	
	var linehaulRev = document.getElementById('linehaul_rev').value;
	var fuelSurcRev = document.getElementById('fuel_surch_rev').value;
	
	if( linehaulRev > 0 ) {
		var percent = ( fuelSurcRev / linehaulRev ) * 100;
		document.getElementById('fuel_surch_rev_perc').value = percent.toFixed(0);
	} else {
		document.getElementById('fuel_surch_rev_perc').value = 0;
	}
	
	calculate();

}

/*  fuel surcharge or linehaul revenue update */
function revUpdate() {

	init();
	
	var miles = document.getElementById('miles').value;
	
	var linehaulRev = document.getElementById('linehaul_rev').value;
	var fuelSurRev = document.getElementById('fuel_surch_rev').value;
	
	if( miles > 0 ) {
		var tmp = linehaulRev / miles; 
		document.getElementById('linehaul_rev_mile').value = tmp.toFixed(2);
		tmp = fuelSurRev / miles;
		document.getElementById('fuel_surch_rev_mile').value = tmp.toFixed(2);
		
	} else {
		document.getElementById('linehaul_rev_mile').value = 0.00;
		document.getElementById('fuel_surch_rev_mile').value = 0.00;
	}
	
	var linehaulRev = document.getElementById('linehaul_rev').value;
	var fuelSurcRev = document.getElementById('fuel_surch_rev').value;
	
	if( linehaulRev > 0 ) {
		var percent = ( fuelSurcRev / linehaulRev ) * 100;
		document.getElementById('fuel_surch_rev_perc').value = percent.toFixed(0);
	} else {
		document.getElementById('fuel_surch_rev_perc').value = 0;
	}
	
	calculate();
}

function fsPercentUpdate() {

	if( document.getElementById('fuel_surch_rev_perc').value > 0 ) {
		
		var percent = document.getElementById('fuel_surch_rev_perc').value / 100;
		var tmp = document.getElementById('linehaul_rev').value * percent; 
		document.getElementById('fuel_surch_rev').value = tmp.toFixed(2);
	}
	else {
		document.getElementById('fuel_surch_rev').value = 0;
	}
	
	revUpdate();
}

function numStopsUpdate() {

	var numStops = parseFloat(  document.getElementById('num_stops').value );	
	document.getElementById('calcStopCost').value = numStops * defaultStopCost;
	
	calculate();
	
}

function accessorialUpdate() {

	// include costs?
	var bLoad = document.getElementById('load_yn').checked;
	var bUnload = document.getElementById('unload_yn').checked;
	var bOtherFlat = document.getElementById('other_flat_yn').checked;
	var bOtherPercent = document.getElementById('other_percent_yn').checked;
	
	if( bLoad )
		document.getElementById('calcLoadCost').value = defaultLoadCost;
	else
		document.getElementById('calcLoadCost').value = 0;
		
	if( bUnload )
		document.getElementById('calcUnloadCost').value = defaultUnloadCost;
	else
		document.getElementById('calcUnloadCost').value = 0;
		
	if( bOtherFlat )
		document.getElementById('calcOtherFlatCost').value = defaultFlatCost;
	else
		document.getElementById('calcOtherFlatCost').value = 0;
		
	if( bOtherPercent )	
		document.getElementById('calcOtherPercentageCost').value = defaultPercentCost;
	else
		document.getElementById('calcOtherPercentageCost').value = 0;

	calculate();
	
}


function initCalculation() {

	init();
		
	var miles = document.getElementById('miles').value;
	
	var tmp = parseFloat( avgRate );
	document.getElementById('linehaul_rev_mile').value = tmp.toFixed(2);
	
	tmp = avgRate * miles;
	document.getElementById('linehaul_rev').value = tmp.toFixed(2);
	
	tmp = parseFloat( fuelSurcharge );
	document.getElementById('fuel_surch_rev_mile').value = tmp.toFixed(2);
	
	tmp = fuelSurcharge * miles; 
	document.getElementById('fuel_surch_rev').value = tmp.toFixed(2);
	
	var linehaulRev = document.getElementById('linehaul_rev').value;
	var fuelSurcRev = document.getElementById('fuel_surch_rev').value;
	
	if( linehaulRev > 0 ) {
		var percent = ( fuelSurcRev / linehaulRev ) * 100;
		document.getElementById('fuel_surch_rev_perc').value = percent.toFixed(0);
	} else {
		document.getElementById('fuel_surch_rev_perc').value = 0;
	}
	
	resetCalculator();
			
	calculate();
}

function init() {

	if( avgMPG == -1 && avgRate == -1 && fuelSurcharge == -1 ) {
	
		avgMPG = document.getElementById('avg_mpg').value; 
		avgRate = document.getElementById('avg_rate').value; 
		fuelSurcharge = document.getElementById('fuel_surcharge').value; 		
		
	}
	
	if( defaultMiles == -1 ) {
		
		defaultMiles = parseFloat( document.getElementById('miles').value );	
	
	}
	
	// store default costs
	if( defaultStopCost == -1 && defaultLoadCost == -1 && defaultUnloadCost == -1 && defaultFlatCost == -1 && defaultPercentCost == -1 ) {
		
		defaultStopCost = parseFloat( document.getElementById('calcStopCost').value );
		defaultStopCost = defaultStopCost.toFixed(2);
		
		defaultLoadCost = parseFloat(  document.getElementById('calcLoadCost').value );
		defaultLoadCost = defaultLoadCost.toFixed(2);
		
		defaultUnloadCost = parseFloat(  document.getElementById('calcUnloadCost').value );
		defaultUnloadCost = defaultUnloadCost.toFixed(2);
		
		defaultFlatCost = parseFloat(  document.getElementById('calcOtherFlatCost').value );
		defaultFlatCost = defaultFlatCost.toFixed(2);
		
		defaultPercentCost = parseFloat(  document.getElementById('calcOtherPercentageCost').value );
		defaultPercentCost = defaultPercentCost.toFixed(2);
	}

	numStopsUpdate();
	
}

function calculate() {

	var miles = document.getElementById('miles').value;

	// revenue values		
	var linehaulRevObj = document.getElementById('linehaul_rev');
	var fuelSurcRevObj = document.getElementById('fuel_surch_rev');	
	
	var rate = document.getElementById('linehaul_rev_mile').value;
	var fuelSur = document.getElementById('fuel_surch_rev_mile').value;
	
	var marketRate = parseFloat( rate ) + parseFloat( fuelSur );
		
	// sum costs
	var numStops = parseFloat(  document.getElementById('num_stops').value );	
	var calcStopCost = parseFloat(  document.getElementById('calcStopCost').value );
	var calcLoadCost = parseFloat(  document.getElementById('calcLoadCost').value );
	var calcUnloadCost = parseFloat(  document.getElementById('calcUnloadCost').value );
	var calcOtherFlatCost = parseFloat(  document.getElementById('calcOtherFlatCost').value );
	var calcOtherPercentageCost = document.getElementById('calcOtherPercentageCost').value / 100.00; // it's a percentage
		
	// include costs?
	var bLoad = document.getElementById('load_yn').checked;
	var bUnload = document.getElementById('unload_yn').checked;
	var bOtherFlat = document.getElementById('other_flat_yn').checked;
	var bOtherPercent = document.getElementById('other_percent_yn').checked;
													
	// sum costs
	var calculatedCosts = calcStopCost
						  + ( ( bLoad == true )?calcLoadCost:0)
						  + ( ( bUnload == true )?calcUnloadCost:0)
						  + ( ( bOtherFlat == true )?calcOtherFlatCost:0);
			
	if( bOtherPercent == true ) {	
		// percentage only applies to linehaul revenue
		calculatedCosts += linehaulRevObj.value  * calcOtherPercentageCost;
	}						
	
		
	// calculate adjustable rates
	var tmp = ( marketRate * miles ) + calculatedCosts; 
	document.getElementById( 'total_rev' ).value = tmp.toFixed(2); 
		
	if( miles > 0 ) {
		tmp = document.getElementById( 'total_rev' ).value / miles;
		document.getElementById( 'total_rpm' ).value = tmp.toFixed(2);
	}
	else  {
		document.getElementById( 'total_rpm' ).value = 0;
	}	
	
	// set standard market rate per mile	
	tmp = ( ( parseFloat( avgRate ) + parseFloat( fuelSurcharge ) ) * miles ) + calculatedCosts;
	document.getElementById( 'market_rev' ).value = tmp.toFixed(2);
	
	if( miles > 0 ) {
		tmp = document.getElementById( 'market_rev' ).value / miles; 
		document.getElementById( 'market_rpm' ).value = tmp.toFixed(2);
	}
	else {
		document.getElementById( 'market_rpm' ).value = 0;
	}
																
	// calculate +/- market rate
	var marketRateObj = document.getElementById( 'market_rate_d' );
	tmp = document.getElementById( 'total_rev' ).value - document.getElementById( 'market_rev' ).value; 
	marketRateObj.value = tmp.toFixed(2);
	
	// change color to red if below market rate
	if( Number(marketRateObj.value) < 0 )
		marketRateObj.style.color='red';	
	else
		marketRateObj.style.color='black';
								
}

function resetCalculator() {

	document.getElementById('miles').value = defaultMiles;
	document.getElementById('num_stops').value = 0;
	document.getElementById('calcStopCost').value = 0;
	document.getElementById('calcLoadCost').value = 0;
	document.getElementById('calcUnloadCost').value = 0;
	document.getElementById('calcOtherFlatCost').value = 0;
	document.getElementById('calcOtherPercentageCost').value = 0;
	document.getElementById('load_yn').checked = false;
	document.getElementById('unload_yn').checked = false;
	document.getElementById('other_flat_yn').checked = false;
	document.getElementById('other_percent_yn').checked = false;
			
}




function toggleDisplay(){
	
	var rateworksheet = document.getElementById('rateworksheet'); 
	var costworksheet = document.getElementById('costworksheet');
	
	if( rateworksheet.style.display=="none" || rateworksheet.style.display == "" ){
		rateworksheet.style.display="block";
		costworksheet.style.display="none";
	}
	else {
		rateworksheet.style.display="none";
		costworksheet.style.display="block";
	}
}
			


