// eload - Fluid Calulator


function cMaxFluid(preWWeight, preWWeightUnit, fIngested, fIngestedUnit, postWWeight, postWWeightUnit, lHour, lMin ) {
	
	// Determine pre-workout weight units entered by user and convert to kg
	switch (preWWeightUnit){
		case 'kg': preWWeight = (+preWWeight);
		break;

		case 'lbs': preWWeight = (+preWWeight) / 2.2046226 ;
		break;

	};	


	// Determine ingested fluid units entered by user and convert to litres
	switch (fIngestedUnit){
		case 'mL': fIngested = (+fIngested) / 1000;
		break;

		case 'L': fIngested = (+fIngested);
		break;

		case 'oz': fIngested = (+fIngested) / 33.8100;
		break;
	};


	// Determine post-workout weight units entered by user and convert to kg
	switch (postWWeightUnit){
		case 'kg': postWWeight = (+postWWeight);
		break;

		case 'lbs': postWWeight = (+postWWeight) / 2.2046226 ;
		break;

	};	

	// Check conversion
	//alert (preWWeight + ' ' + preWWeightUnit + ' ' + fIngested + ' ' + fIngestedUnit + ' ' + postWWeight + ' ' + postWWeightUnit + ' ' + lHour + ' ' + lMin);


	// Logic Validation
	if ((+preWWeight) + (+fIngested) < (+postWWeight)){
		//alert("The numbers entered do not appear to be accurate, as the sum of your pre-workout weight + the weight of your ingested fluids must be greater than or equal to your post workout weight.  Please try again after another trial.")
		return "ERROR";
		};

	var sMaxFluid = '';

	if (fIngestedUnit == 'oz'){
		// Return result in ounces/hour

		// Calculate result
		var vMaxFluid = 33.8100 *(((+preWWeight) + (+fIngested) - (+postWWeight)) / ((+lHour) + (+lMin)/60 ));
		// Round result
		vMaxFluid = round_decimals(vMaxFluid, 1);

		// Validate result
		if ((+postWWeight) > (+preWWeight)){
			if (vMaxFluid > 0){ 
				vMaxFluid = vMaxFluid * -1; 
				sMaxFluid = vMaxFluid;						
			}

			else if (vMaxFluid == 0){ 
				vMaxFluid = -33.8100 * (+fIngested) / ((+lHour) + (+lMin)/60 );
				vMaxFluid = round_decimals(vMaxFluid, 1);
				sMaxFluid = vMaxFluid;
			}; 
		}

		else {
			sMaxFluid = vMaxFluid;
		};
		
		var sMaxFluid =  sMaxFluid + ' oz/hr';
	};

	if (fIngestedUnit == 'mL'){
		// Return result in mL/hour

		// Calculate Result
		var vMaxFluid = 1000 * ((+preWWeight) + (+fIngested) - (+postWWeight)) / ((+lHour) + (+lMin)/60 );
		// Round Result
		vMaxFluid = round_decimals(vMaxFluid, 0);

		// Validate result
		if ((+postWWeight) > (+preWWeight)){
			if (vMaxFluid > 0){ 
				vMaxFluid = vMaxFluid * -1; 
				sMaxFluid = vMaxFluid;	
			} 

			else if (vMaxFluid == 0){ 
				vMaxFluid = -1000 * (+fIngested) / ((+lHour) + (+lMin)/60 );
				vMaxFluid = round_decimals(vMaxFluid, 0);
				sMaxFluid = vMaxFluid;
			}; 
		}

		else {
			sMaxFluid = vMaxFluid
		};

		sMaxFluid =  sMaxFluid + ' mL/hr';
	};


	if (fIngestedUnit == 'L'){
		// Return result in L/hour
		
		// Calculate result
		var vMaxFluid = ((+preWWeight) + (+fIngested) - (+postWWeight)) / ((+lHour) + (+lMin)/60 );		
		// Round result
		vMaxFluid = round_decimals(vMaxFluid, 2);

		// Validate result
		if ((+postWWeight) > (+preWWeight)){
			if (vMaxFluid > 0){ 
				vMaxFluid = vMaxFluid * -1; 
				sMaxFluid = vMaxFluid;						
			} 

			else if (vMaxFluid == 0){ 
				vMaxFluid = -(+fIngested) / ((+lHour) + (+lMin)/60 );
				vMaxFluid = round_decimals(vMaxFluid, 2);
				sMaxFluid = vMaxFluid;
			}; 
		}

		else {
			sMaxFluid = vMaxFluid;
		};

	
		sMaxFluid = sMaxFluid + ' L/hr';
	};

	//alert (sMaxFluid);

	return sMaxFluid;
	//return preWWeight + preWWeightUnit + fIngested + fIngestedUnit + postWWeight + postWWeightUnit + lHour + lMin
}



function cMinFluid(preRWeight, preRWeightUnit, lHour, lMin, maxFluid, maxFluidUnit) {
	
	//alert (preRWeight);
	//alert (preRWeightUnit);
	//alert (lHour);
	//alert (lMin);
	//alert (maxFluid);
	//alert (maxFluidUnit);


	// Determine pre-workout weight units entered by user and convert to kg
	switch (preRWeightUnit){
		case 'kg': preRWeight = (+preRWeight);
		break;

		case 'lbs': preRWeight = (+preRWeight) / 2.2046226 ;
		break;

	};	

	// Determine ingested fluid units entered by user and convert to litres
	switch (maxFluidUnit){
		case 'mL': maxFluid = (+maxFluid);
		break;

		case 'L': maxFluid = (+maxFluid) * 1000;
		break;

		case 'oz': maxFluid = (+maxFluid) / 33.8100 * 1000;
		break;
	};

	// Calculate min fluid requirement
	var vMinFluid = (+maxFluid) - ((+preRWeight) * 20 / ((+lHour) + (+lMin)/60 ));


	if (maxFluidUnit == 'oz'){
		// Return result in ounces/hour
		vMinFluid = 33.8100/1000 * (+vMinFluid);
		// Round result
		vMinFluid = round_decimals(vMinFluid, 0);
		vMinFluid =  vMinFluid + ' oz/hr';
		};

	if (maxFluidUnit == 'mL'){
		// Return result in mL/hour
		vMinFluid = (+vMinFluid);
		// Round result
		vMinFluid = round_decimals(vMinFluid, 0);
		vMinFluid =  (vMinFluid) + ' mL/hr';
		};

	if (maxFluidUnit == 'L'){
		// Return result in L/hour
		vMinFluid = vMinFluid / 1000;
		// Round result
		vMinFluid = round_decimals(vMinFluid, 2);
		vMinFluid = + vMinFluid + ' L/hr';
	};

	return vMinFluid;

}

function round_decimals(original_number, decimals) {
    var result1 = original_number * Math.pow(10, decimals)
    var result2 = Math.round(result1)
    var result3 = result2 / Math.pow(10, decimals)
    return pad_with_zeros(result3, decimals)
}

function pad_with_zeros(rounded_value, decimal_places) {

    // Convert the number to a string
    var value_string = rounded_value.toString()
    
    // Locate the decimal point
    var decimal_location = value_string.indexOf(".")

    // Is there a decimal point?
    if (decimal_location == -1) {
        
        // If no, then all decimal places will be padded with 0s
        decimal_part_length = 0
        
        // If decimal_places is greater than zero, tack on a decimal point
        value_string += decimal_places > 0 ? "." : ""
    }
    else {

        // If yes, then only the extra decimal places will be padded with 0s
        decimal_part_length = value_string.length - decimal_location - 1
    }
    
    // Calculate the number of decimal places that need to be padded with 0s
    var pad_total = decimal_places - decimal_part_length
    
    if (pad_total > 0) {
        
        // Pad the string with 0s
        for (var counter = 1; counter <= pad_total; counter++) 
            value_string += "0"
        }
    return value_string
}
