//Input
var ANNUAL_LAPAROSCOPIC_PROCEDURES = "#annualLaparoscopicProcedures";
var NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS = "#numberLaparoscopicInstrumentSets";
var ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT = "#annualRepairCostForLaparoscopicInstrument";
var AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE = "#averageNumber11or12mmTrocarsPerCase";
var AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE = "#averageNumber5mmTrocarsPerCase";
//Output
var ESTIMATED_SAVINGS_WITH_SSI = "#calculatedValue";
//Buttons
var CALCULATE_BUTTON = "#calculateButton";
var RESET_BUTTON = "#clearButton"


//We will use this to determine if we have the needed values to do a calculation
$.readyToCalculate= function() {
	if( $.checkValue(ANNUAL_LAPAROSCOPIC_PROCEDURES) && $.checkValue(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS) 
		&& $.checkValue(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT) && $.checkValue(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE) && $.checkValue(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE) ) {
	$(CALCULATE_BUTTON).attr("disabled","");
	return(Boolean(true));
	}
	
	$(CALCULATE_BUTTON).attr("disabled","disabled");
	$(".calculatorTableOutput").hide();
	return(Boolean(false));
};

$.checkValue= function(nameOrId) {
	if($(nameOrId).val() == "" || $(nameOrId).val() == "-") {
		//alert("check value false");
		$(nameOrId).siblings().show();
		return(Boolean(false));
	}
	else {
		//alert("check value true");
		$(nameOrId).siblings().hide();
		return(Boolean(true));
	}
};

$.initCalculator= function() {
	
	$(CALCULATE_BUTTON).click(function () {
		calculate();
	});
	
	$(RESET_BUTTON).click(function () {
		$(ANNUAL_LAPAROSCOPIC_PROCEDURES).val("-");
		$(ANNUAL_LAPAROSCOPIC_PROCEDURES).siblings().show();
		$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).val("-");
		$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).siblings().show();
		$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).val("-");
		$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).siblings().show();
		$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).val("-");
		$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).siblings().show();
		$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).val("-");
		$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).siblings().show();
		
		$(ESTIMATED_SAVINGS_WITH_SSI).text("0.00");
		$(".calculatorTableOutput").hide();
		$(CALCULATE_BUTTON).attr("disabled","disabled");
	});


	$(ANNUAL_LAPAROSCOPIC_PROCEDURES).focus(function () { 
		if(!$.checkValue(ANNUAL_LAPAROSCOPIC_PROCEDURES)) {
			$(ANNUAL_LAPAROSCOPIC_PROCEDURES).val("");
		}
		else {
			$(ANNUAL_LAPAROSCOPIC_PROCEDURES).select();
		}
	});
	
	$(ANNUAL_LAPAROSCOPIC_PROCEDURES).blur(function () { 
		if(!$.checkValue(ANNUAL_LAPAROSCOPIC_PROCEDURES)) {
			$(ANNUAL_LAPAROSCOPIC_PROCEDURES).val("-");
		}
		$.readyToCalculate();
	});
	
	$(ANNUAL_LAPAROSCOPIC_PROCEDURES).keyup(function () { 
		$.readyToCalculate(); 
	});
	

	$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).focus(function () { 
		if(!$.checkValue(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS)) {
			$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).val("");
		}
		else {
			$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).select();
		}
	});
	
	$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).blur(function () { 
		if(!$.checkValue(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS)) {
			$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).val("-");
		}
		$.readyToCalculate();
	});
	
	$(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).keyup(function () { 
		$.readyToCalculate(); 
	});
	

	$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).focus(function () { 
		if(!$.checkValue(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT)) {
			$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).val("");
		}
		else {
			$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).select();
		}
	});
	
	$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).blur(function () { 
		if(!$.checkValue(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT)) {
			$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).val("-");
		}
		$.readyToCalculate();
	});

	$(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).keyup(function () { 
		$.readyToCalculate(); 
	});
	

	$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).focus(function () { 
		if(!$.checkValue(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE)) {
			$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).val("");
		}
		else {
			$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).select();
		}
	});
	
	$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).blur(function () { 
		if(!$.checkValue(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE)) {
			$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).val("-");
		}
		$.readyToCalculate();
	});

	$(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).keyup(function () { 
		$.readyToCalculate(); 
	});
	

	$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).focus(function () { 
		if(!$.checkValue(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE)) {
			$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).val("");
		}
		else {
			$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).select();
		}
	});
//};

	$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).blur(function () { 
		if(!$.checkValue(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE)) {
			$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).val("-");
		}
		$.readyToCalculate();
	});
	
	$(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).keyup(function () { 
		$.readyToCalculate(); 
	});



//$.initOnLeave= function() {

};

/***********************************************************
* Details of cae sizes + costs associated
* Found on Sheet2 columns F/G/H
************************************************************/
var allTrocars_caseDetails = {
	numberOfCases:5,
	case1:{
		caseMin:250,
		caseMax:499,
		caseCost:280
	},
	case2:{
		caseMin:500,
		caseMax:999,
		caseCost:272
	},
	case3:{
		caseMin:1000,
		caseMax:1499,
		caseCost:269
	},
	case4:{
		caseMin:1500,
		caseMax:1999,
		caseCost:267
	},
	case5:{
		caseMin:2000,
		caseMax:null,
		caseCost:266
	}
};

var noTrocars_caseDetails = {
	numberOfCases:5,
	case1:{
		caseMin:250,
		caseMax:499,
		caseCost:193
	},
	case2:{
		caseMin:500,
		caseMax:999,
		caseCost:183
	},
	case3:{
		caseMin:1000,
		caseMax:1499,
		caseCost:180
	},
	case4:{
		caseMin:1500,
		caseMax:1999,
		caseCost:179
	},
	case5:{
		caseMin:2000,
		caseMax:null,
		caseCost:178
	}
};

var only11_12Trocars_caseDetails = {
	numberOfCases:5,
	case1:{
		caseMin:250,
		caseMax:499,
		caseCost:275
	},
	case2:{
		caseMin:500,
		caseMax:999,
		caseCost:268
	},
	case3:{
		caseMin:1000,
		caseMax:1499,
		caseCost:264
	},
	case4:{
		caseMin:1500,
		caseMax:1999,
		caseCost:263
	},
	case5:{
		caseMin:2000,
		caseMax:null,
		caseCost:262
	}
};

var only5mmTrocars_caseDetails = {
	numberOfCases:5,
	case1:{
		caseMin:250,
		caseMax:499,
		caseCost:205
	},
	case2:{
		caseMin:500,
		caseMax:999,
		caseCost:198
	},
	case3:{
		caseMin:1000,
		caseMax:1499,
		caseCost:194
	},
	case4:{
		caseMin:1500,
		caseMax:1999,
		caseCost:193
	},
	case5:{
		caseMin:2000,
		caseMax:null,
		caseCost:192
	}
};


/***********************************************************
* Details of insturments -- null values will be calculated based on user input
* Found on Sheet2 columns B/C
************************************************************/
var instrumentDetails = {
	item11_12Trocar:{
		each:60,
		cost:null
	},
	itemSucIrrig:{
		each:40,
		cost:40
	},
	itemShear:{
		each:69,
		cost:69
	},
	item5mmTrocar:{
		each:48,
		cost:null
	}
};


/***********************************************************
* Constants to be used in calculating PAC
* Found on PAC sheet 
************************************************************/
var PACConstants = {
	totalAnnualInstrumentCharge:{
		multiplier:15000, //Calculation In A3
		yearsLife:3 //C3
	},
	processingCostsAdministrative:{
		hourlyRate:20, //A6
		divisor:250, //Calculation In C6
		weeks:52 //F6
	},
	sterileProcessingCosts:{
		hourlyRate:14, //A9
		hoursPerTray:1, //C9
		multiplier:0.8 //Calculation In E9
	},
	instrumentLossReplacement:{
		divisor:100, //Calculation In A14
		perItem:600 //D14
	}
};


/***********************************************************
* Remove any commas / $ symbols and then round to 2 decial places
************************************************************/
function round2(aNumber) {
	var stripped = aNumber.toString().replace(",","").replace("$","");
	
	return(Math.round(stripped*100)/100);
}

/***********************************************************
* Add commas into number
************************************************************/
function addCommas(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;
}


/***********************************************************
* This will do the actual calculating 
************************************************************/
function calculate() {
	
	if(!$.readyToCalculate()) {
		$(ESTIMATED_SAVINGS_WITH_SSI).text("0.00");
		$(".calculatorTableOutput").hide();
		return;
	}
	
	//We get the current values entered by the user
	var annualLaparoscopicProcedures = round2($(ANNUAL_LAPAROSCOPIC_PROCEDURES).val());
	var numberLaparoscopicInstrumentSets = round2($(NUMBER_LAPAROSCOPIC_INSTRUMENT_SETS).val());
	var annualRepairCostForLaparoscopicInstrument = round2($(ANNUAL_REPAIR_COST_FOR_LAPAROSCOPIC_INSTRUMENT).val());
	var averageNumber11or12mmTrocarsPerCase = round2($(AVERAGE_NUMBER_11_OR_12_MM_TROCARS_PER_CASE).val());
	var averageNumber5mmTrocarsPerCase = round2($(AVERAGE_NUMBER_5_MM_TROCARS_PER_CASE).val());
	
	/***********************************************************
	* START OF CALCULATIONS FROM PAC SHEET
	************************************************************/
	var totalAnnualInstrumentCharge = round2((numberLaparoscopicInstrumentSets * PACConstants.totalAnnualInstrumentCharge.multiplier) / PACConstants.totalAnnualInstrumentCharge.yearsLife);
	//alert("totalAnnualInstrumentCharge " + totalAnnualInstrumentCharge );
	
	var processingCostsAdministrative = round2(PACConstants.processingCostsAdministrative.hourlyRate * (annualLaparoscopicProcedures / PACConstants.processingCostsAdministrative.divisor) * PACConstants.processingCostsAdministrative.weeks);
	//alert("processingCostsAdministrative "+processingCostsAdministrative );
	
	var sterileProcessingCosts = round2(PACConstants.sterileProcessingCosts.hourlyRate * PACConstants.sterileProcessingCosts.hoursPerTray * (annualLaparoscopicProcedures * PACConstants.sterileProcessingCosts.multiplier));
	//alert("sterileProcessingCosts" + sterileProcessingCosts);
	
	//alert("repair costs "+annualRepairCostForLaparoscopicInstrument);
	
	var instrumentLossReplacement = round2((annualLaparoscopicProcedures / PACConstants.instrumentLossReplacement.divisor) * PACConstants.instrumentLossReplacement.perItem);
	//alert("instrumentLossReplacement "+instrumentLossReplacement );
	
	
	var totalAnnualReusableInstrumentCost = round2((totalAnnualInstrumentCharge + processingCostsAdministrative + sterileProcessingCosts + annualRepairCostForLaparoscopicInstrument + instrumentLossReplacement));
	//alert("totalAnnualReusableIntrumentCost "+totalAnnualReusableInstrumentCost );
	
	//This is the PAC from Sheet2 D6
	var totalAnnualReusableIntrumentCostPerProcedure = round2(totalAnnualReusableInstrumentCost / annualLaparoscopicProcedures);
	//alert(totalAnnualReusableIntrumentCostPerProcedure);

	/***********************************************************
	* END OF CALCULATIONS FROM PAC SHEET
	************************************************************/

	/***********************************************************
	* START OF CALCULATIONS FROM SHEET2
	************************************************************/
	
	//Calculating the instrument costs based off user inputs
	instrumentDetails.item11_12Trocar.cost = round2(averageNumber11or12mmTrocarsPerCase * instrumentDetails.item11_12Trocar.each);
	//alert("item11_12Trocar: "+instrumentDetails.item11_12Trocar.cost );
	instrumentDetails.item5mmTrocar.cost = round2(averageNumber5mmTrocarsPerCase * instrumentDetails.item5mmTrocar.each);
	//alert("item5mmTrocar: "+instrumentDetails.item5mmTrocar.cost);
	
	var totalHospCost= round2(totalAnnualReusableIntrumentCostPerProcedure + instrumentDetails.item11_12Trocar.cost + instrumentDetails.itemSucIrrig.cost + instrumentDetails.itemShear.cost + instrumentDetails.item5mmTrocar.cost);
	//alert("totalHospCost: "+totalHospCost);
	var SSIFee = 0;
	
	var caseGroup = "";
	
	//We determine which case we are using based on user input
	if(averageNumber11or12mmTrocarsPerCase == 0 && averageNumber5mmTrocarsPerCase == 0) {
		caseGroup = "noTrocars_"
	}
	else if(averageNumber11or12mmTrocarsPerCase == 0 && averageNumber5mmTrocarsPerCase != 0) {
		caseGroup = "only5mmTrocars_";
	}
	else if(averageNumber11or12mmTrocarsPerCase != 0 && averageNumber5mmTrocarsPerCase == 0) {
		caseGroup = "only11_12Trocars_";
	}
	else {
		caseGroup = "allTrocars_";
	}
	
	for(var i=1; i<=eval(caseGroup+"caseDetails.numberOfCases"); i++) {		
		var theCase = eval(caseGroup+"caseDetails.case"+i);
		
		if(theCase.caseMax != null) {
			if(annualLaparoscopicProcedures <= theCase.caseMax) {
				SSIFee = round2(theCase.caseCost);
				break;
			}
		}
		else {			
				SSIFee = round2(theCase.caseCost);
				break;			
		}
	}
	
	//alert("SSI Fee: "+SSIFee);
	
	var savings = round2(totalHospCost - SSIFee);
	//alert("savings: "+savings);

	/***********************************************************
	* END OF CALCULATIONS FROM SHEET2
	************************************************************/

	var estimatedSavingsFromSSI = round2(savings * annualLaparoscopicProcedures);
	
	if(isNaN(estimatedSavingsFromSSI)) {
		$(ESTIMATED_SAVINGS_WITH_SSI).text("0.00");
		$(".calculatorTableOutput").fadeIn("slow");
	}
	else {
		$(ESTIMATED_SAVINGS_WITH_SSI).text(addCommas(estimatedSavingsFromSSI));
		$(".calculatorTableOutput").fadeIn("slow");
	}
}