/*
 * Code for calculate savings on airfield installation
 */


jQuery(document).ready(function(){
	
	/*
	 * Change these parameters according to whatever you like
	 */
	var oldCircuitLength	= 4000;
	var newCircuitLength	= 6000;
	var newCircuitRatio 	= 128;
	
	var avgSecLength 	= 40;
	var hoursOfOp 		= 16;
	var daysOfOp 		= 365;
	
	var cableConstant 	= 1.5;
	var diggingConstant = 1.6;
	
	var fittingConstant = 300;
	var meterConstant 	= 5000;
	
	
	/*
	 * Triggers the calculations from the front page
	 */
	jQuery("#calculate-button").click(function(){
		var nbrOfSegments = parseInt( jQuery("#segments-input").val() );
		var nbrOfFittings = parseInt( jQuery("#fittings-input").val() );
		
		//console.log("nbrOfSegments " + nbrOfSegments);
		//console.log("nbrOfFittings " + nbrOfFittings);
		
		var installationSavings = calculateInstallation(nbrOfSegments, nbrOfFittings, false);
		var powerSavings 		= calculatePower(nbrOfSegments, nbrOfFittings, false);
		
		jQuery("#installation-savings").html(installationSavings + " %");
		jQuery("#power-savings").html(powerSavings + " %");	
		
	});
	
	
	/*
	 * Trigg all calculations
	 * Will try to push out info in tables
	 */
	 jQuery.calculateAll = function(nbrOfSegments, nbrOfFittings){
	 	
		var installationSavings = calculateInstallation(nbrOfSegments, nbrOfFittings, true);
		var powerSavings = calculatePower(nbrOfSegments, nbrOfFittings, true)
		
		jQuery("td.red").each(function(){
			var presentVal = jQuery(this).html();
			jQuery(this).html( presentVal + "%");
		});
		
	};
	
	
	
	/*
	 * Calculates the percentage savings on installation costs
	 */
	function calculateInstallation(nbrOfSegments, nbrOfFittings, pushValues){
		
		var oldNbrOfCircuits = nbrOfSegments;
		var newNbrOfCircuits = Math.ceil(nbrOfFittings / newCircuitRatio) + 1;

		var oldCableCost = oldCircuitLength * oldNbrOfCircuits * cableConstant;
		var newCableCost = newCircuitLength * newNbrOfCircuits * cableConstant;
		
		var oldDiggingCost = (oldNbrOfCircuits * oldCircuitLength * diggingConstant) / 2;
		var newDiggingCost = (newNbrOfCircuits * newCircuitLength * diggingConstant) / 2;
		
		var oldAddCost = 0;
		var newAddCost = (nbrOfFittings * fittingConstant) + (newNbrOfCircuits * meterConstant);
		
		var oldTotalCost = oldCableCost + oldDiggingCost + oldAddCost;
		var newTotalCost = newCableCost + newDiggingCost + newAddCost;
		
		var savingsEuro 	= oldTotalCost - newTotalCost;
		var savingsPercent 	= Math.round( (savingsEuro / oldTotalCost) * 100 );
		
		if(pushValues){
			var values = { 
				"oldNbrOfCircuits"	: oldNbrOfCircuits, 
				"newNbrOfCircuits"	: newNbrOfCircuits,
				
				"oldCableCost"		: oldCableCost,
				"newCableCost"		: newCableCost,
				
				"oldDiggingCost"	: oldDiggingCost,
				"newDiggingCost"	: newDiggingCost,
				
				"oldAddCost"		: "-",
				"newAddCost"		: newAddCost,
				
				"oldTotalCost"		: oldTotalCost,
				"newTotalCost"		: newTotalCost,
				
				"blankEuro"			: "-", 
				"savingsEuro"		: savingsEuro,
				
				"blankPercent"		: "-",
				"savingsPercent"	: savingsPercent > 0 ? savingsPercent : 0
			};
			pushValuesToTable( values );
		}
		
		return savingsPercent > 0 ? savingsPercent : 0;
		
	};
	
	
	/*
	 * Pushes out the values to the detailed table
	 */
	function pushValuesToTable( values ){
		for(var val in values){
			jQuery("#" + val).html( thousandSeparator(values[val], " ") );
		}
	};
	
	/*
	 * Separates on thousands
	 */
	function thousandSeparator(n,sep) {
		  var sRegExp = new RegExp('(-?[0-9]+)([0-9]{3})'),sValue=n+"";
		  if (sep === undefined) {sep=',';}
		 	while(sRegExp.test(sValue)) {
		  		sValue = sValue.replace(sRegExp, '$1'+sep+'$2');
		  	}
		 return sValue;
	 }
	
	/*
	 * Calculates the procentual savings in power consumption
	 */
	function calculatePower(nbrOfSegments, nbrOfFittings, pushValues){
		var oldNbrOfCircuits = nbrOfSegments;
		var newNbrOfCircuits = Math.ceil(nbrOfFittings / newCircuitRatio) + 1;
		
		var halogenCableKm = (oldNbrOfCircuits * oldCircuitLength) / 1000;
		var newSafeCableKm = (newNbrOfCircuits * newCircuitLength) / 1000;
		
		var halogenCableLoss = ((halogenCableKm * 0.125 * 0.1) + (halogenCableKm * 0.0225 * 0.9) + (nbrOfFittings * 2 * avgSecLength * (0.00418 * (Math.pow(6.6, 2) * 0.1 + Math.pow(2.8, 2) * 0.9)) / 1000)) * hoursOfOp * daysOfOp;
		var newSafeCableLoss = hoursOfOp * daysOfOp * ((Math.pow(2, 2) * 3 * newSafeCableKm / 1000) + (nbrOfFittings * Math.pow(2, 2) * 0.00418 * 2 * avgSecLength / 1000));
		
		var halogenLightLoss = ((daysOfOp * hoursOfOp * nbrOfFittings * 4.5 * 0.9)+(daysOfOp * hoursOfOp * nbrOfFittings * 45 * 0.1)) / 1000;
		var newSafeLightLoss = ((daysOfOp * hoursOfOp * nbrOfFittings * 3.4 * 0.9)+(daysOfOp * hoursOfOp * nbrOfFittings * 8.9 * 0.1)) / 1000;
		
		var halogenTotKwh = halogenCableLoss + halogenLightLoss;
		var newSafeTotKwh = newSafeCableLoss + newSafeLightLoss;
		
		var halogenTotCost = halogenTotKwh * 0.1;
		var newSafeTotCost = newSafeTotKwh * 0.1;
		
		var savingsEuro = halogenTotCost - newSafeTotCost;
		var savingsPercent 	= Math.round( (savingsEuro / halogenTotCost) * 100 );
		
		
		if (pushValues) {
			
			/*The extra values for power consumption table*/
			var ledCableKm			= halogenCableKm;
			var safeCableKM 		= halogenCableKm;
			var newHalogenCableKm 	= newSafeCableKm;
			
			var ledCableLoss		= halogenCableLoss;
			var safeCableLoss		= hoursOfOp * daysOfOp * ((Math.pow(2, 2) * 3 * safeCableKM / 1000) + (nbrOfFittings * Math.pow(2, 2) * 0.00418 * 2 * avgSecLength / 1000));
			var newHalogenCableLoss	= ((newHalogenCableKm * 0.125 * 0.1) + (newHalogenCableKm * 0.0225 * 0.9) + (nbrOfFittings * 2 * avgSecLength * (0.00418 * (Math.pow(6.6, 2) * 0.1 + Math.pow(2.8, 2) * 0.9)) / 1000)) * hoursOfOp * daysOfOp;
			
			var ledLightLoss		= ((daysOfOp * hoursOfOp * nbrOfFittings * 2.5 * 0.9)+(daysOfOp * hoursOfOp * nbrOfFittings * 12.5 * 0.1)) / 1000;
			var safeLightLoss		= ((daysOfOp * hoursOfOp * nbrOfFittings * 3.4 * 0.9)+(daysOfOp * hoursOfOp * nbrOfFittings * 8.9 * 0.1)) / 1000;
			var newHalogenLightLoss	= ((daysOfOp * hoursOfOp * nbrOfFittings * 4.5 * 0.9)+(daysOfOp * hoursOfOp * nbrOfFittings * 45 * 0.1)) / 1000;
			
			var halogenLMS			= "N/A";
			var ledLMS				= "N/A";
			var safeLedLMS			= "N/A";
			var newHalogenLMS		= nbrOfFittings;
			var newSafeLedLMS		= "N/A";
			
			var halogenLMSLoss		= "N/A";
			var ledLMSLoss			= "N/A";
			var safeLedLMSLoss		= "N/A";
			var newHalogenLMSLoss	= ((daysOfOp * hoursOfOp * nbrOfFittings * 2.6 * 0.9) + (daysOfOp * hoursOfOp * nbrOfFittings * 10 * 0.1)) / 1000;
			var newSafeLedLMSLoss	= "N/A";
			
			
			var ledTotKwh	 		= ledCableLoss + ledLightLoss;
			var safeTotKwh	 		= safeCableLoss + safeLightLoss;
			var newHalogenTotKwh	= newHalogenCableLoss + newHalogenLightLoss + newHalogenLMSLoss;
			
			var ledTotCost 			= ledTotKwh * 0.1;
			var safeTotCost 		= safeTotKwh * 0.1;
			var newHalogenTotCost 	= newHalogenTotKwh * 0.1;
			
			var ledSavingsEuro 			= halogenTotCost - ledTotCost;
			var safeSavingsEuro 		= halogenTotCost - safeTotCost;
			var newHalogenSavingsEuro 	= halogenTotCost - newHalogenTotCost;
			
			var ledSavingsPercent 			= Math.round( (ledSavingsEuro / halogenTotCost) * 100 );
			var safeSavingsPercent 			= Math.round( (safeSavingsEuro / halogenTotCost) * 100 );
			var newHalogenSavingsPercent 	= Math.round( (newHalogenSavingsEuro / halogenTotCost) * 100 );
			
			var values = {
				"halogenCableKm"	: Math.round(halogenCableKm),
				"ledCableKm"		: Math.round(ledCableKm),
				"safeCableKM"		: Math.round(safeCableKM),
				"newHalogenCableKm"	: Math.round(newHalogenCableKm),
				"newSafeCableKm"	: Math.round(newSafeCableKm),
				
				"halogenCableLoss"	: Math.round(halogenCableLoss),
				"ledCableLoss"		: Math.round(ledCableLoss),
				"safeCableLoss"		: Math.round(safeCableLoss),
				"newHalogenCableLoss": Math.round(newHalogenCableLoss),
				"newSafeCableLoss"	: Math.round(newSafeCableLoss),
				
				"halogenLightLoss"	: Math.round(halogenLightLoss),
				"ledLightLoss"		: Math.round(ledLightLoss),
				"safeLightLoss"		: Math.round(safeLightLoss),
				"newHalogenLightLoss": Math.round(newHalogenLightLoss),
				"newSafeLightLoss"	: Math.round(newSafeLightLoss),
				
				"halogenLMS"		: "N/A",
				"ledLMS"			: "N/A",
				"safeLedLMS"		: "N/A",
				"newHalogenLMS"		: Math.round(newHalogenLMS),
				"newSafeLedLMS"		: "N/A",
				
				"halogenLMSLoss"	: "N/A",
				"ledLMSLoss"		: "N/A",
				"safeLedLMSLoss"	: "N/A",
				"newHalogenLMSLoss"	: Math.round(newHalogenLMSLoss),
				"newSafeLedLMSLoss"	: "N/A",
				
				"halogenTotKwh"		: Math.round(halogenTotKwh),
				"ledTotKwh"			: Math.round(ledTotKwh),
				"safeTotKwh"		: Math.round(safeTotKwh),
				"newHalogenTotKwh"	: Math.round(newHalogenTotKwh),
				"newSafeTotKwh"		: Math.round(newSafeTotKwh),
				
				"halogenTotCost"	: Math.round(halogenTotCost),
				"ledTotCost"		: Math.round(ledTotCost),
				"safeTotCost"		: Math.round(safeTotCost),
				"newHalogenTotCost"	: Math.round(newHalogenTotCost),
				"newSafeTotCost"	: Math.round(newSafeTotCost),
				
				"halogenSavingsEuro"	: "-",
				"ledSavingsEuro"		: Math.round(ledSavingsEuro),
				"safeSavingsEuro"		: Math.round(safeSavingsEuro),
				"newHalogenSavingsEuro"	: Math.round(newHalogenSavingsEuro),
				"newSafeSavingsEuro"	: Math.round(savingsEuro),
				
				"halogenSavingsPercent"		: "-",
				"ledSavingsPercent"			: Math.round(ledSavingsPercent),
				"safeSavingsPercent"		: Math.round(safeSavingsPercent),
				"newHalogenSavingsPercent"	: Math.round(newHalogenSavingsPercent),
				"newSafeSavingsPercent"		: Math.round(savingsPercent > 0 ? savingsPercent : 0)
				
				
			};
			pushValuesToTable( values );
		}
			
		
		return savingsPercent > 0 ? savingsPercent : 0;
	};
	
});




