// JavaScript Document

nextfield = "SellingPrice"; // name of first box on page
netscape = "";
ver = navigator.appVersion; len = ver.length;
for(iln = 0; iln < len; iln++) if (ver.charAt(iln) == "(") break;
netscape = (ver.charAt(iln+1).toUpperCase() != "C");

function keyDown(DnEvents) { // handles keypress
// determines whether Netscape or Internet Explorer
k = (netscape) ? DnEvents.which : window.event.keyCode;
if (k == 13) { // enter key pressed
if (nextfield == 'done') return true; // submit, we finished all fields
else { // we're not done yet, send focus to next box
eval('document.BreakEvenForm.' + nextfield + '.focus()');
return false;
      }
   }
}
document.onkeydown = keyDown; // work together to analyze keystrokes
if (netscape) document.captureEvents(Event.KEYDOWN|Event.KEYUP);


function SelectFieldOnFocus(thisfield) { 
	eval('document.BreakEvenForm.' + thisfield + '.select()');
	return false;
}


function showdetails(form){
	
  var wBreakEven = 0;
  var wTotalRevenue = 0;
  var wTotalCost = 0;
  var wProfit = 0;
  var wCSP1 = 0;
  var wCSU1 = 0;
  var wMaxC1 = 0;
  var wEPD1 = 0;
  var wFixedCost = 0;
  var wVC1 = 0;
  var wMaxCapSelect = 1;
  var wA = 0;
  var wB = 0;  
  var content = "";
  
  wVC1 = (form.VarCostPerUnit.value != '') ? eval(form.VarCostPerUnit.value) : 0;
  wFixedCost = (form.FixedCost.value != '') ? eval(form.FixedCost.value) : 0;
  wCSP1 = (form.CurrentSellingPrice.value != '') ? eval(form.CurrentSellingPrice.value) : 0;
  wCSU1 = (form.CurrentSellingUnits.value != '') ? eval(form.CurrentSellingUnits.value) : 0;
  wMaxC1 = (form.MaximumCapUnits.value != '') ? eval(form.MaximumCapUnits.value) : 0;
  wEPD1 = (form.PriceElasticity.value != '') ? eval(form.PriceElasticity.value) : 0;
  
  var wMaxCapSelect = form.MaximumCapOption.value;
  
  wA = wCSU1*(1+Math.abs(wEPD1));

  wB = (wCSU1*(Math.abs(wEPD1)))/wCSP1;
  
  
  wPriceCurrent = wCSP1;
  wUnitsCurrent = wCSU1;
  wSalesCurrent = wPriceCurrent*wUnitsCurrent;
  wCostCurrent = wFixedCost + wUnitsCurrent*wVC1;
  wProfitCurrent = wSalesCurrent - wCostCurrent;
  
  wPriceOptimal = (wA + wB*wVC1)/(2*wB);
  wUnitsOptimal = (wA - wB*wVC1)/2;
  wSalesOptimal = wPriceOptimal*wUnitsOptimal;
  wCostOptimal = wFixedCost + wUnitsOptimal*wVC1;
  wProfitOptimal = wSalesOptimal - wCostOptimal;
  
  wPriceUnitsConstr = (wA - wMaxC1)/wB;
  wUnitsUnitsConstr = wMaxC1;
  wSalesUnitsConstr = wPriceUnitsConstr*wUnitsUnitsConstr;
  wCostUnitsConstr = wFixedCost + wUnitsUnitsConstr*wVC1;
  wProfitUnitsConstr = wSalesUnitsConstr - wCostUnitsConstr;
  
  wPriceFinConstr = (wA - ((wMaxC1-wFixedCost)/wVC1))/wB;
  wUnitsFinConstr = (wMaxC1 - wFixedCost)/wVC1;
  wSalesFinConstr = wPriceFinConstr*wUnitsFinConstr;
  wCostFinConstr = wMaxC1;
  wProfitFinConstr = wSalesFinConstr - wCostFinConstr;
  
  
  if ((wVC1 != 0) && (wFixedCost != 0) && (wCSP1 != 0) && (wCSU1 != 0) && (wMaxC1 != 0) && (wEPD1 != 0))
    {
  		if (wMaxCapSelect == 1)
			{
  				if (wUnitsOptimal > wMaxC1)
					{
wOptimalPriceRep = "$ " + formatNumber(wPriceUnitsConstr,2,',','.','','','-','');
wOptimalUnitsRep = formatNumber(wUnitsUnitsConstr,2,',','.','','','-','');  
wTotalRevenueRep = "$ " + formatNumber(wSalesUnitsConstr,2,',','.','','','-','');  
wTotalCostRep = "$ " + formatNumber(wCostUnitsConstr,2,',','.','','','-','');
wProfitRep = "$ " + formatNumber(wProfitUnitsConstr,2,',','.','','','-','');
					}
  				else
					{
wOptimalPriceRep = "$ " + formatNumber(wPriceOptimal,2,',','.','','','-','');
wOptimalUnitsRep = formatNumber(wUnitsOptimal,2,',','.','','','-','');  
wTotalRevenueRep = "$ " + formatNumber(wSalesOptimal,2,',','.','','','-','');  
wTotalCostRep = "$ " + formatNumber(wCostOptimal,2,',','.','','','-','');
wProfitRep = "$ " + formatNumber(wProfitOptimal,2,',','.','','','-','');
					}
			}
  		else if (wMaxCapSelect == 2)
			{
  				if (wCostOptimal > wMaxC1)
					{
wOptimalPriceRep = "$ " + formatNumber(wPriceFinConstr,2,',','.','','','-','');
wOptimalUnitsRep = formatNumber(wUnitsFinConstr,2,',','.','','','-','');  
wTotalRevenueRep = "$ " + formatNumber(wSalesFinConstr,2,',','.','','','-','');  
wTotalCostRep = "$ " + formatNumber(wCostFinConstr,2,',','.','','','-','');
wProfitRep = "$ " + formatNumber(wProfitFinConstr,2,',','.','','','-','');
					}
  				else
					{
wOptimalPriceRep = "$ " + formatNumber(wPriceOptimal,2,',','.','','','-','');
wOptimalUnitsRep = formatNumber(wUnitsOptimal,2,',','.','','','-','');  
wTotalRevenueRep = "$ " + formatNumber(wSalesOptimal,2,',','.','','','-','');  
wTotalCostRep = "$ " + formatNumber(wCostOptimal,2,',','.','','','-','');
wProfitRep = "$ " + formatNumber(wProfitOptimal,2,',','.','','','-','');
					}
			}
  		else
			{
			  wOptimalPriceRep = "$ 0.00";
			  wOptimalUnitsRep = "0.00";  
			  wTotalRevenueRep = "$ 0.00";  
			  wTotalCostRep = "$ 0.00";
			  wProfitRep = "$ 0.00";
			}
	}
  else
    {
	  wOptimalPriceRep = "$ 0.00";
	  wOptimalUnitsRep = "0.00";  
	  wTotalRevenueRep = "$ 0.00";  
	  wTotalCostRep = "$ 0.00";
	  wProfitRep = "$ 0.00";
	}

wCurrentPriceRep = "$ " + formatNumber(wPriceCurrent,2,',','.','','','-','');
wCurrentUnitsRep = formatNumber(wUnitsCurrent,2,',','.','','','-','');  
wCurrentTotalRevenueRep = "$ " + formatNumber(wSalesCurrent,2,',','.','','','-','');  
wCurrentTotalCostRep = "$ " + formatNumber(wCostCurrent,2,',','.','','','-','');
wCurrentProfitRep = "$ " + formatNumber(wProfitCurrent,2,',','.','','','-','');
  


	
	content = "<strong> Optimal Price Analysis - Current vs. Optimal: </strong>";
	content = content + "<br /><br />";
	
	content = content + "<table border='2' cellpadding='5' cellspacing='0'>";
	
	content = content + "<tr align='center'>";
	content = content + "<td>&nbsp;</td>";
	content = content + "<td><strong>Current</strong></td>";
	content = content + "<td><strong>Optimal</strong></td>";
	content = content + "</tr>";
	
	
	content = content + "<tr align='center'>";
	content = content + "<td align='left'><strong>Price</strong></td>";
	content = content + "<td>" + wCurrentPriceRep + "</td>";
	content = content + "<td>" + wOptimalPriceRep + "</td>";
	content = content + "</tr>";
	
	content = content + "<tr align='center'>";
	content = content + "<td align='left'><strong>Units</strong></td>";
	content = content + "<td>" + wCurrentUnitsRep + "</td>";
	content = content + "<td>" + wOptimalUnitsRep + "</td>";
	content = content + "</tr>";
	
	content = content + "<tr align='center'>";
	content = content + "<td align='left'><strong>Total Revenue</strong></td>";
	content = content + "<td>" + wCurrentTotalRevenueRep + "</td>";
	content = content + "<td>" + wTotalRevenueRep + "</td>";
	content = content + "</tr>";
	
	content = content + "<tr align='center'>";
	content = content + "<td align='left'><strong>Total Cost</strong></td>";
	content = content + "<td>" + wCurrentTotalCostRep + "</td>";
	content = content + "<td>" + wTotalCostRep + "</td>";
	content = content + "</tr>";
	
	content = content + "<tr align='center'>";
	content = content + "<td align='left'><strong>Profit</strong></td>";
	content = content + "<td><strong>" + wCurrentProfitRep + "</strong></td>";
	content = content + "<td><strong>" + wProfitRep + "</strong></td>";
	content = content + "</tr>";
	
	content = content + "</table>";
	
	contentfinal = content + "<br /><br />";
	
  if ((wVC1 != 0) && (wFixedCost != 0) && (wCSP1 != 0) && (wCSU1 != 0) && (wMaxC1 != 0) && (wEPD1 != 0))
    {
	writeNewPage(contentfinal);
	}
  else
  	{
	writeNewPage("In order to see the detail report, all the fields " + "<strong>" + "MUST" + "</strong>" + " be filled in.");
	}


}


function writeNewPage(content) {
 top.pageRef=window.open('','detailspage',
  'width=750,height=500'
   +',menubar=0'
   +',toolbar=1'
   +',status=0'
   +',scrollbars=1'
   +',resizable=1')
 top.pageRef.document.writeln(
  '<html><head><title>Optimal Price Analysis - report</title></head>'
   +'<body bgcolor="white">'
   +content
   +'</body></html>'
 )
 top.pageRef.document.close()
}




function calculateBE(form){
	
  var wBreakEven = 0;
  var wTotalRevenue = 0;
  var wTotalCost = 0;
  var wProfit = 0;
  var wCSP1 = 0;
  var wCSU1 = 0;
  var wMaxC1 = 0;
  var wEPD1 = 0;
  var wFixedCost = 0;
  var wVC1 = 0;
  var wMaxCapSelect = 1;
  var wA = 0;
  var wB = 0;  
  
  wVC1 = (form.VarCostPerUnit.value != '') ? eval(form.VarCostPerUnit.value) : 0;
  wFixedCost = (form.FixedCost.value != '') ? eval(form.FixedCost.value) : 0;
  wCSP1 = (form.CurrentSellingPrice.value != '') ? eval(form.CurrentSellingPrice.value) : 0;
  wCSU1 = (form.CurrentSellingUnits.value != '') ? eval(form.CurrentSellingUnits.value) : 0;
  wMaxC1 = (form.MaximumCapUnits.value != '') ? eval(form.MaximumCapUnits.value) : 0;
  wEPD1 = (form.PriceElasticity.value != '') ? eval(form.PriceElasticity.value) : 0;
  
  var wMaxCapSelect = form.MaximumCapOption.value;
  
  wA = wCSU1*(1+Math.abs(wEPD1));

  wB = (wCSU1*(Math.abs(wEPD1)))/wCSP1;
  
  
  wPriceOptimal = (wA + wB*wVC1)/(2*wB);
  wUnitsOptimal = (wA - wB*wVC1)/2;
  wSalesOptimal = wPriceOptimal*wUnitsOptimal;
  wCostOptimal = wFixedCost + wUnitsOptimal*wVC1;
  wProfitOptimal = wSalesOptimal - wCostOptimal;
  
  
  wPriceUnitsConstr = (wA - wMaxC1)/wB;
  wUnitsUnitsConstr = wMaxC1;
  wSalesUnitsConstr = wPriceUnitsConstr*wUnitsUnitsConstr;
  wCostUnitsConstr = wFixedCost + wUnitsUnitsConstr*wVC1;
  wProfitUnitsConstr = wSalesUnitsConstr - wCostUnitsConstr;
  
  
  wPriceFinConstr = (wA - ((wMaxC1-wFixedCost)/wVC1))/wB;
  wUnitsFinConstr = (wMaxC1 - wFixedCost)/wVC1;
  wSalesFinConstr = wPriceFinConstr*wUnitsFinConstr;
  wCostFinConstr = wMaxC1;
  wProfitFinConstr = wSalesFinConstr - wCostFinConstr;
  
  
  if ((wVC1 != 0) && (wFixedCost != 0) && (wCSP1 != 0) && (wCSU1 != 0) && (wMaxC1 != 0) && (wEPD1 != 0))
    {
  		if (wMaxCapSelect == 1)
			{
  				if (wUnitsOptimal > wMaxC1)
					{
document.getElementById('OptimalPrice').innerHTML = "$ " + formatNumber(wPriceUnitsConstr,2,',','.','','','-','');
document.getElementById('OptimalUnits').innerHTML = formatNumber(wUnitsUnitsConstr,2,',','.','','','-','');  
document.getElementById('TotalRevenue').innerHTML = "$ " + formatNumber(wSalesUnitsConstr,2,',','.','','','-','');  
document.getElementById('TotalCost').innerHTML = "$ " + formatNumber(wCostUnitsConstr,2,',','.','','','-','');
document.getElementById('Profit').innerHTML = "$ " + formatNumber(wProfitUnitsConstr,2,',','.','','','-','');
					}
  				else
					{
document.getElementById('OptimalPrice').innerHTML = "$ " + formatNumber(wPriceOptimal,2,',','.','','','-','');
document.getElementById('OptimalUnits').innerHTML = formatNumber(wUnitsOptimal,2,',','.','','','-','');  
document.getElementById('TotalRevenue').innerHTML = "$ " + formatNumber(wSalesOptimal,2,',','.','','','-','');  
document.getElementById('TotalCost').innerHTML = "$ " + formatNumber(wCostOptimal,2,',','.','','','-','');
document.getElementById('Profit').innerHTML = "$ " + formatNumber(wProfitOptimal,2,',','.','','','-','');
					}
			}
  		else if (wMaxCapSelect == 2)
			{
  				if (wCostOptimal > wMaxC1)
					{
document.getElementById('OptimalPrice').innerHTML = "$ " + formatNumber(wPriceFinConstr,2,',','.','','','-','');
document.getElementById('OptimalUnits').innerHTML = formatNumber(wUnitsFinConstr,2,',','.','','','-','');  
document.getElementById('TotalRevenue').innerHTML = "$ " + formatNumber(wSalesFinConstr,2,',','.','','','-','');  
document.getElementById('TotalCost').innerHTML = "$ " + formatNumber(wCostFinConstr,2,',','.','','','-','');
document.getElementById('Profit').innerHTML = "$ " + formatNumber(wProfitFinConstr,2,',','.','','','-','');
					}
  				else
					{
document.getElementById('OptimalPrice').innerHTML = "$ " + formatNumber(wPriceOptimal,2,',','.','','','-','');
document.getElementById('OptimalUnits').innerHTML = formatNumber(wUnitsOptimal,2,',','.','','','-','');  
document.getElementById('TotalRevenue').innerHTML = "$ " + formatNumber(wSalesOptimal,2,',','.','','','-','');  
document.getElementById('TotalCost').innerHTML = "$ " + formatNumber(wCostOptimal,2,',','.','','','-','');
document.getElementById('Profit').innerHTML = "$ " + formatNumber(wProfitOptimal,2,',','.','','','-','');
					}
			}
  		else
			{
			  document.getElementById('OptimalPrice').innerHTML = "$ 0.00";
			  document.getElementById('OptimalUnits').innerHTML = "0.00";  
			  document.getElementById('TotalRevenue').innerHTML = "$ 0.00";  
			  document.getElementById('TotalCost').innerHTML = "$ 0.00";
			  document.getElementById('Profit').innerHTML = "$ 0.00";
			}
	}
  else
    {
	  document.getElementById('OptimalPrice').innerHTML = "$ 0.00";
	  document.getElementById('OptimalUnits').innerHTML = "0.00";  
	  document.getElementById('TotalRevenue').innerHTML = "$ 0.00";  
	  document.getElementById('TotalCost').innerHTML = "$ 0.00";
	  document.getElementById('Profit').innerHTML = "$ 0.00";
	}



}



function calculatePED(form){

  var wP1 = 0;
  var wP2 = 0;
  var wQ1 = 0;
  var wQ2 = 0;
  var wPEDresult1 = 0;
  var wPEDresult = 0;
  
  wP1 = (form.PriceED1.value != '') ? eval(form.PriceED1.value) : 0;
  wP2 = (form.PriceED2.value != '') ? eval(form.PriceED2.value) : 0;
  wQ1 = (form.QuantityED1.value != '') ? eval(form.QuantityED1.value) : 0;
  wQ2 = (form.QuantityED2.value != '') ? eval(form.QuantityED2.value) : 0;
  
  
  if ((wP1 != 0) && (wP2 != 0) && (wQ1 != 0) && (wQ2 != 0))
    {
  	if (wP2>wP1)
		{
  			wPEDresult1=(((wQ2-wQ1)/wQ1)/((wP2-wP1)/wP1));
		}
	else
		{
			wPEDresult1=(((wQ1-wQ2)/wQ2)/((wP1-wP2)/wP2));
		}
  
  wPEDresult = Math.abs(wPEDresult1);
  	if (wP1 != wP2)
		{
  		document.getElementById('PriceEDresult').innerHTML = formatNumber(wPEDresult,2,',','.','','','-','');
		}
	else
		{
  		document.getElementById('PriceEDresult').innerHTML = wPEDresult;
		}
	}
  else
    {
  document.getElementById('PriceEDresult').innerHTML = "0.00";  
	}


}


function resetBE(form){

  var image = document.getElementById('imageHU');
  var title = document.getElementById('TitleSwitch');
  var element = document.getElementById('elementToShow');
  
  var wMaxCapSelect = form.MaximumCapOption.value;
  
  form.VarCostPerUnit.value = "";
  form.FixedCost.value = "";
  form.CurrentSellingPrice.value = "";
  form.CurrentSellingUnits.value = "";
  form.MaximumCapUnits.value = "";
  form.PriceElasticity.value = "";
  form.MaximumCapOption.value = 1;
  
  document.getElementById('OptimalPrice').innerHTML = "$ 0.00";
  document.getElementById('OptimalUnits').innerHTML = "0.00";  
  
  document.getElementById('TotalRevenue').innerHTML = "$ 0.00";  
  document.getElementById('TotalCost').innerHTML = "$ 0.00";
  document.getElementById('Profit').innerHTML = "$ 0.00";
  
  document.getElementById('TitleSwitch').innerHTML = "Change to Maximum financing capacity ($)";
  document.getElementById('MaximumCapLabel').innerHTML = "Maximum capacity (Units):";
  
  form.PriceED1.value = "";
  form.PriceED2.value = "";
  form.QuantityED1.value = "";
  form.QuantityED2.value = "";
  
  document.getElementById('PriceEDresult').innerHTML = "0.00";  
  
  image.src = "../images/unhide.png";
  element.style.display = "none";

}


function HideUnhide(form) {
		
		var image = document.getElementById('imageHU');
		var element = document.getElementById('elementToShow');
		
		if (element.style.display == "none"){
			image.src = "../images/hide.png";
			element.style.display = "block";
		}
		else
		{
			image.src = "../images/unhide.png";
			element.style.display = "none";
		}
		
	}


function SwitchMaxCap() {
  
  var wMaxCapSelect = document.getElementById('MaximumCapOption').value;
  
  document.getElementById('TitleSwitch').innerHTML = "Maximum capacity (Units):";
  
		if (wMaxCapSelect == 1)
			{
	document.getElementById('MaximumCapOption').value=2;
	document.getElementById('MaximumCapLabel').innerHTML = "Maximum financing capacity:";
	document.getElementById('TitleSwitch').innerHTML = "Change to Maximum capacity (Units)";
			}
		else
			{
	document.getElementById('MaximumCapOption').value=1;
	document.getElementById('MaximumCapLabel').innerHTML = "Maximum capacity (Units):";
	document.getElementById('TitleSwitch').innerHTML = "Change to Maximum financing capacity ($)";
			}
		
		
	}


// number formatting function
// copyright Stephen Chapman 24th March 2006, 22nd August 2008
// permission to use this function is granted provided
// that this copyright notice is retained intact
// num=number; dec=nr of decimals; thou=thousand separator; pnt=decimal separator; curr=currency; n1,n2=the symbols to place around the number when the value is negative.

function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) {
	var x = Math.round(num * Math.pow(10,dec));
	if (x >= 0) n1=n2='';
	var y = (''+Math.abs(x)).split('');
	var z = y.length - dec; 
	
	if (z<0) z--; 
	for(var i = z; i < 0; i++) y.unshift('0'); 
	if (z<0) z = 1; 
	y.splice(z, 0, pnt); 
	if(y[0] == pnt) y.unshift('0'); 
	while (z > 3) {z-=3; y.splice(z,0,thou);}
	var r = curr1+n1+y.join('')+n2+curr2;return r;}


