 // JavaScript Document
function Calculator()
{
	//////////////////////////////////////BEGIN EDIT CALC VALUES///////////////////////////////////////////////////////////
	//Basic EBITDA Multiplier
	var B2Range1 = new Number('5000000'); 
	var B2Mult1 = new Number('4');
	var B2Range2 = new Number('10000000'); 
	var B2Mult2 = new Number('5');
	var B2Range3 = new Number('20000000'); 
	var B2Mult3 = new Number('6');
	var B2Range4 = new Number('50000000'); 
	var B2Mult4 = new Number('7');
	var B2Range5 = new Number('100000000'); 
	var B2Mult5 = new Number('8');
	var B2Range6 = new Number('200000000'); 
	var B2Mult6 = new Number('9');
	var B2Range7 = new Number('500000000'); 
	var B2Mult7 = new Number('10');
	var B2Range8 = new Number('1000000000'); 
	var B2Mult8 = new Number('12');
	var B2Range9 = new Number('2000000001'); 
	var B2Mult9 = new Number('13');
	
	//Growth Modifier
	var B4AddValue = new Number('1');
	var B4PowerValue = new Number('5');
	
	//Customer Concentration Multiplier
	var B5Value1 = new Number('0.15');
	var B5Value2 = new Number('0');
	var B5Value3 = new Number('1');
	var B5Value4 = new Number('1');
	var B5Value5 = new Number('0.5');
	
	//Negative EBITDA Multiplier
	var B7Value1 = new Number('1');
	var B7Value2 = new Number('0.85');
	var B7Value3 = new Number('0.75');
	
	//Defense program mutiplier
	var B8Value1 = new Number('0.15');
	var B8Value2 = new Number('0.6');
	var B8Value3 = new Number('1');
	var B8Value4 = new Number('0.9');
	
	//Foreign Sales Multiplier
	var B9Value1 = new Number('0.15');
	var B9Value2 = new Number('0.6');
	var B9Value3 = new Number('1');
	var B9Value4 = new Number('0.9');
	
	//Loss of Key Executive Multiplier
	var B10Value1 = new Number('0.8');
	var B10Value2 = new Number('1');
	
	//Deal lead multiplier
	var B11Value1 = new Number('1');
	var B11Value2 = new Number('0.66');
	var B11Value3 = new Number('1');
	
	//Investment banker multiplier
	var B12Value1 = new Number('1.25');
	var B12Value2 = new Number('1');
	
	//Recession multiplier
	var B13Value1 = new Number('0');
	var B13Value2 = new Number('0.6');
	var B13Value3 = new Number('1');
	var B13Value4 = new Number('0.8');
	var B13Value5 = new Number('1');
	var B13Value6 = new Number('1');
	
	//Market Share multiplier
	var B14Value1 = new Number('0.5');
	var B14Value2 = new Number('1.25');
	var B14Value3 = new Number('0.3');
	var B14Value4 = new Number('1.125');
	var B14Value5 = new Number('0.1');
	var B14Value6 = new Number('1.06');
	var B14Value7 = new Number('1');
	
	//Intellectual Property Adder
	var B15Value1 = new Number('0.01');
	var B15Value2 = new Number('300000');
	var B15Value3 = new Number('0.05');
	var B15Value4 = new Number('100000');
	var B15Value5 = new Number('0');
	
	////Brand Multiplier
	var B16Value1 = new Number('1.125');
	var B16Value2 = new Number('1');
	
	////Credit Multiplier
	var B17Value1 = new Number('0.9');
	var B17Value2 = new Number('1');
	
	//////////////////////////////////////END EDIT CALC VALUES///////////////////////////////////////////////////////////
	
	var self = this;
	var formPath;
	var questionArray = new Array();
	questionArray[0] = 'What was the total Revenue over the last twelve months? $1,000,000 to $2,000,000,000'; //textArray[0]
	questionArray[1] = 'What was the total EBITDA over the last twelve months? 0 to $300,000,000'; //textArray[1]
	questionArray[2] = 'What is the average IRR Revenue Growth over the last five years?'; //selectArray[0]
	questionArray[3] = 'What is the highest percentage of revenue coming from one customer?'; //textArray[2]
	questionArray[4] = 'How many times has annual EBITDA been negative in the prior 2 Years?'; //selectArray[1]
	questionArray[5] = 'What is the current long term debt? 0 to $2,000,000,000'; //textArray[3]
	questionArray[6] = 'What percentage of your revenue is derived from defense programs?'; //textArray[4]
	questionArray[7] = 'What percentage of your revenue is derived from foreign sales?'; //textArray[5]
	questionArray[8] = 'Will a key executive be exiting the company within one year? ';  //choiceArray[0]
	questionArray[9] = 'Have you personally lead 3 or more deals in the last 3 years?'; //choiceArray[1]
	questionArray[10] = 'Have you engaged an Investment Banker to lead this deal?'; //choiceArray[2]
	questionArray[11] = 'How many years since the last domestic economy recession ended?'; //selectArray[2]
	questionArray[12] = 'What average market share does the company control?'; //textArray[6]
	questionArray[13] = 'How many market-critical patents does the company own?'; //selectArray[3]
	questionArray[14] = 'Do you own a product brand recognized as one of the top 2 in your market?'; //choiceArray[3]
	questionArray[15] = 'Have credit conditions significantly tightened in the last 6 months?'; //choiceArray[4]
	questionArray[16] = 'What Discount Rate is applicable to the company? e.g. 8%, 10%, 12%?'; //selectArray[4]
	
	//answer types are 1 = text; 2=select; 3=yes/no
	var answerTypeArray = new Array(1,1,2,1,2,1,1,1,3,3,3,2,1,2,3,3,2);
	var textArray = new Array();  //holds text answers
	var selectArray = new Array(); //holds select answers
	var radArray = new Array(); //holds yes-no answers
	var ans1, ans2, ans3, ans4, ans5, ans6, ans7, ans8, ans9, ans10, ans11, ans12, ans13, ans14, ans15, ans16, ans17;
	var calcAns1, calcAns2, calcAns3, calcAns4, calcAns5, calcAns6, calcAns7, calcAns8, calcAns9, calcAns10, calcAns11, calcAns12, calcAns13, calcAns14, calcAns15;
	var totalAns;
				
	Calculator.prototype.populateForm  = function()
	{
		self.formPath = document.calcForm;
		self.insertTable();
		self.setSelectBoxes(1, 30, "Ques0", 1);
		self.setSelectBoxes(0, 2, "Ques1", 0);
		self.setSelectBoxes(0, 10, "Ques2", 0);
		self.setSelectBoxes(0, 25, "Ques3", 0);
		self.setSelectBoxes(0, 20, "Ques4", 1);
		self.formPath.textQues0.focus();
	}
	
	Calculator.prototype.insertTable = function()
	{
		var formContents = "<table style = 'width:585px; border-collapse:collapse' >";
		formContents = formContents + "<tr><td style='width:.5px; border:none'></td>";
		formContents = formContents + "<td style='width:445px; border:none'></td>";
		formContents = formContents + "<td style='width:100px; border:none'></td></tr>";
		var textTemp = "";
		var selectTemp = "";
		var tdCount = 0;
		var radTemp = "";
		var format;
		var padNum;
		
		var i;
		for(i = 0; i < questionArray.length; i++)
		{
			if(i == 0)
			{
				padNum = '6px';
			}
			else
			{
				padNum = '11px';
			}
			formContents = formContents + "<tr><td style='border:none; vertical-align:top; padding:0px; padding-top:" + padNum + "; padding-right:3px; text-align:right'><img src='images/shared/bullet-blue-square.gif' /></td>";
			formContents = formContents + "<td class='question'>" + questionArray[i] + "</td>";
			switch(answerTypeArray[i])
			{
				case 1:
					textTemp = "textQues" + textArray.length;
					textArray[textArray.length] = textTemp;
					if(textArray.length == 1 || textArray.length == 4)
					{
						format = '0,000,000,000';
					}
					else if(textArray.length == 2)
					{
						format = '000,000,000';
					}
					else
					{
						format = '0 - 100%';
					}
					formContents = formContents + "<td class='formitem'><input type='text' id='" + textTemp  + "' class='input' value='" + format + "'/></td></tr>";
					break;
				case 2:
					selectTemp = "Ques" + tdCount;
					tdCount = parseInt(tdCount) + 1;
					formContents = formContents + "<td class='formitem' id='" + selectTemp + "'></select></td></tr>";
					break;
				case 3:
					radTemp = "radQues" + radArray.length;
					radArray[radArray.length] = radTemp;
					formContents = formContents + "<td class='formitem' ><input type='radio' name ='" + radTemp  + "' value='Yes' />Yes&nbsp;&nbsp;&nbsp;<input type='radio' name='" + radTemp  + "' value='No' checked='checked' />No</td></tr>";
					break;
			}		
		}	
		
		formContents = formContents + "<tr><td colspan='3' class='btnStyle'><input type='reset' value='Reset' class='button' onclick='return calculator.clearText()'/>&nbsp;&nbsp;&nbsp;&nbsp;<input type='button' value='Submit' onclick='return calculator.loadData()' class='button'/></td></tr>";
				
		formContents = formContents + "<td colspan = '3' class='output' id='lowValueText'></td></tr>";
		
		formContents = formContents + "<td colspan = '3' class='output' id='highValueText'></td></tr>";
		
		formContents = formContents + "</table>";
		self.formPath.innerHTML = formContents;
	}
	 
	Calculator.prototype.setSelectBoxes = function(startNum, endNum, tdID, percent)
	{
		var counter;
		var tdSelect = document.getElementById(tdID);
		var selname = 'select' + tdID;
		selectArray[selectArray.length] = selname;
		var displayString = "<select name='" + selname + "' style='text-align:center'>";
		for (counter = startNum; counter <= endNum; counter++)
		{
			if (percent == 0)
			{
				displayString = displayString + "<option value = " + counter + ">" + counter + "</option>";
			}
			else
			{
				displayString = displayString + "<option value = " + counter + ">" + counter + "%</option>";
			}			
		}
		var displayString = displayString + "</select> ";
		tdSelect.innerHTML = displayString ;
	}
	
	Calculator.prototype.loadData = function()
	{
		//ans 1
		ans1 = self.processTextAnswer(self.formPath.textQues0, '[\\$\\s,]', '^\\d{7,10}$', '1000000', '2000000000', 'Please enter your total revenue using a range of 1,000,000 to 2,000,000,000.', false);
		
		if(ans1 == -1)
		{
			return;	
		}
		
		//ans2
		ans2 = self.processTextAnswer(self.formPath.textQues1, '[\\$\\s,]', '^\\d{1,9}$', '0', '300000000', 'Please enter your total EBITDA over the last twelve months using a range of 0 to 300,000,000.', false);
		
		if(ans2 == -1)
		{
			return;	
		}	
		
		//ans3
		ans3 = self.formPath.selectQues0.options[self.formPath.selectQues0.selectedIndex].value
		ans3 = ans3/100;
		
		//ans4
		ans4 = self.processTextAnswer(self.formPath.textQues2, '[\\$\\s,%]', '^\\d{1,3}(\\.)*(\\d)*$', '0', '100', 'Please enter highest percentage of revenue coming from one customer using values of 0 to 100%.', true);
		
		if(ans4 == -1)
		{
			return;	
		}
		
		//ans5
		ans5 = self.formPath.selectQues1.options[self.formPath.selectQues1.selectedIndex].value
		
		//ans6
		ans6 = self.processTextAnswer(self.formPath.textQues3, '[\\$\\s,]', '^\\d{1,10}$', '0', '2000000000', 'Please enter your current long term debt using a range of 0 to 2,000,000,000.', false);
		
		if(ans6 == -1)
		{
			return;	
		}
		
		//ans7
		ans7 = self.processTextAnswer(self.formPath.textQues4, '[\\$\\s,%]', '^\\d{1,3}(\\.)*(\\d)*$', '0', '100', 'Please enter the percentage of your revenue derived from defense programs using values of 0 to 100%.', true);
		
		if(ans7 == -1)
		{
			return;	
		}
		
		//ans8
		ans8 = self.processTextAnswer(self.formPath.textQues5, '[\\$\\s,%]', '^\\d{1,3}(\\.)*(\\d)*$', '0', '100', 'Please enter the percentage of your revenue derived from foreign sales using values of 0 to 100%.', true);
		
		if(ans8 == -1)
		{
			return;	
		}
		
		//ans9
		ans9 = self.processRadioAnswer('radQues0');
		
		//ans10
		ans10 = self.processRadioAnswer('radQues1');
		
		//ans11
		ans11 = self.processRadioAnswer('radQues2');
		
		//ans12
		ans12 = self.formPath.selectQues2.options[self.formPath.selectQues2.selectedIndex].value
		
		//ans13
		ans13 = self.processTextAnswer(self.formPath.textQues6, '[\\$\\s,%]', '^\\d{1,3}(\\.)*(\\d)*$', '0', '100', 'Please enter highest percentage of revenue coming from one customer using values of 0 to 100%.', true);
		
		if(ans13 == -1)
		{
			return;	
		}
		
		//ans14
		ans14 = self.formPath.selectQues3.options[self.formPath.selectQues3.selectedIndex].value
		
		//ans15
		ans15 = self.processRadioAnswer('radQues3');
		
		//ans16
		ans16 = self.processRadioAnswer('radQues4');
		
		//ans17
		ans17 = self.formPath.selectQues4.options[self.formPath.selectQues4.selectedIndex].value
		ans17 = ans17/100;
		
		self.calculateFinalAnswers();
						
		/*DEBUG all values
		alert('ans1 is ' + ans1 + ' ans2 is ' + ans2 + ' ans3 is ' + ans3 + ' ans4 is ' + ans4 + ' ans5 is ' + ans5 + ' ans6 is ' + ans6 + ' ans7 is ' + ans7 + ' ans8 is ' + ans8 + ' ans9 is ' + ans9 + ' ans10 is ' + ans10 + ' ans11 is ' + ans11 + ' ans12 is ' + ans12 + ' ans13 is ' + ans13 + ' ans14 is ' + ans14 + ' ans15 is ' + ans15 + ' ans16 is ' + ans16 + ' ans17 is ' + ans17);*/
		
	}
	
	Calculator.prototype.processTextAnswer = function(docObj, stripPattern, checkPattern, lowRange, highRange, errorMsg, isPercent)
	{
		var ansNum;
		ansNum = self.stripValue(docObj.value, stripPattern, 'g');
		if((!self.checkPattern(ansNum, checkPattern, '')) || (!self.checkRange(ansNum, lowRange, highRange))) 
		{
			alert(errorMsg);
			docObj.focus();
			docObj.select();
			ansNum = -1;
		}
		
		if(ansNum != -1)
		{
			if(isPercent)
			{
				ansNum = ansNum/100;
			}
		}		
		return ansNum;
	}
	
	Calculator.prototype.checkPattern = function(stringText, regexString, stringOptions)
	{
		//for debugging//alert('stringText is ' + stringText + ' regexString is  ' + regexString + ' stringOptions is ' + stringOptions);
		regex = new RegExp(regexString, stringOptions) ;
		return regex.test(stringText);
	}	
	
	Calculator.prototype.stripValue = function(stringText, regexString, stringOptions)
	{
		regex = new RegExp(regexString, stringOptions) ;
		return stringText.replace(regex, '');			
	}	
	
	Calculator.prototype.checkRange = function(number, lowRange, highRange)
	{
		return (Number(number) >= Number(lowRange) && Number(number) <= Number(highRange));
	}	
	
	Calculator.prototype.processRadioAnswer = function(quesNum)
	{
		var collection = document.getElementsByName(quesNum);
		var i;
		var valueChosen;
		for (i = 0; i < collection.length; i++)
		{
			if(collection[i].checked)
			{
				valueChosen = collection[i].value;
				break;
			}
		}
		
		return valueChosen;
	}
	
	Calculator.prototype.calculateFinalAnswers = function()
	{
		//Basic EBITDA Multiplier
		switch (true)
		{
			case (ans1 < B2Range1):
				calcAns1 = B2Mult1;
				break;
			case (ans1 < B2Range2):
				calcAns1 = B2Mult2;
				break;
			case (ans1 < B2Range3):
				calcAns1 = B2Mult3;
				break;
			case (ans1 < B2Range4):
				calcAns1 = B2Mult4;
				break;
			case (ans1 < B2Range5):
				calcAns1 = B2Mult5;
				break;
			case (ans1 < B2Range6):
				calcAns1 = B2Mult6;
				break;
			case (ans1 < B2Range7):
				calcAns1 = B2Mult7;
				break;
			case (ans1 < B2Range8):
				calcAns1 = B2Mult8;
				break;
			case (ans1 < B2Range9):
				calcAns1 = B2Mult9;
				break;				
		}
		
		//Growth modifier
		calcAns2 = Math.pow((1 + (ans3 - ans17)),5);
				
		//Customer Concertration Multiplier
		if((ans4 - B5Value1) < B5Value2)
		{
			calcAns3 = B5Value3;
		}
		else
		{
			calcAns3 = (B5Value4 - ans4 * B5Value5);
		}
		
		//Negative EBITDA Multiplier
		switch(ans5)
		{
			case '0':
				calcAns4 = B7Value1;
				break;
			case '1':
				calcAns4 = B7Value2;
				break;
			case '2':
				calcAns4 = B7Value3;
				break;
		}
		
		//Debt subtracter
		calcAns5 = -ans6;
		
		//Defense program mutiplier
		if((ans7 > B8Value1) && (ans7 < B8Value2))
		{
			calcAns6 = B8Value3;
		}
		else
		{
			calcAns6 = B8Value4;
		}
		
		//Foreign Sales Multiplier
		if((ans8 > B9Value1) && (ans8 < B9Value2))
		{
			calcAns7 = B9Value3;
		}
		else
		{
			calcAns7 = B9Value4;
		}
		
		//Loss of Key Executive Multiplier
		if(ans9 == 'Yes')
		{
			calcAns8 = B10Value1;
		}
		else
		{
			calcAns8 = B10Value2;
		}
		
		//Deal lead multiplier
		if(ans10 == 'Yes')
		{
			calcAns9 = B11Value1;
		}
		else
		{
			if(ans11 == 'No')
			{
				calcAns9 = B11Value2;
			}
			else
			{
				calcAns9 = B11Value3;
			}
		}
		
		//Investment banker multiplier
		if(ans11 == 'Yes')
		{
			calcAns10 = B12Value1;
		}
		else
		{
			calcAns10 = B12Value2;
		}
		
		//Recession multiplier
		switch(true)
		{
			case (Number(ans12) == B13Value1):
				calcAns11 = B13Value2;
				break;
			case (Number(ans12) == B13Value3):
				calcAns11 = B13Value4;
				break;
			case (Number(ans12) > B13Value5):
				calcAns11 = B13Value6;
				break;
		}
		
		//Market Share multiplier
		switch(true)
		{
			case (ans13 > B14Value1):
				calcAns12 = B14Value2;
				break;
			case (ans13 > B14Value3):
				calcAns12 = B14Value4;
				break;
			case (ans13 > B14Value5):
				calcAns12 = B14Value6;
				break;
			default:
				calcAns12 = B14Value7;
				break;
		}
		
		//Intellectual Property Adder
		switch(true)
		{
			case ((ans2/ans1) < B15Value1):
				calcAns13 = Number(ans14) * B15Value2;
				break;
			case ((ans2/ans1) < B15Value3):
				calcAns13 = Number(ans14) * B15Value4;
				break;			
			default:
				calcAns13 = B15Value5;
				break;
		}
		
		//Brand Multiplier
		if (ans15 == 'Yes')
		{
			calcAns14 = B16Value1;
		}
		else
		{
			calcAns14 = B16Value2;
		}
		
		//Credit Multiplier
		if (ans16 == 'Yes')
		{
			calcAns15 = B17Value1;
		}
		else
		{
			calcAns15 = B17Value2;
		}		
		
		self.setHighLowTotals();		
	}
	
	Calculator.prototype.roundNumber =  function(num, decPlaces)
	{
		var rounded = Math.round(num*Math.pow(10, decPlaces))/Math.pow(10, decPlaces);
		return rounded;
	}	
	
	Calculator.prototype.setHighLowTotals = function()
	{
		var subAnswer = new Number();
		var lowAnswer = new Number();
		var highAnswer = new Number();
		
		subAnswer = self.roundNumber(ans2 * calcAns1 * calcAns2 * calcAns3 * calcAns4 * calcAns6 * calcAns7 * calcAns8 * calcAns9 * calcAns10 * calcAns11 * calcAns12 * calcAns14 * calcAns15 + calcAns5 + calcAns13, 2);
		
		lowAnswer = self.formatMoney(self.roundNumber(subAnswer * 0.9, 2));
		highAnswer = self.formatMoney(self.roundNumber(subAnswer * 1.1, 2));		
		
		document.getElementById('lowValueText').innerHTML = 'Your Possible Low Sales Value Net of Debt is ' + lowAnswer;
		document.getElementById('highValueText').innerHTML = 'Your Possible High Sales Value Net of Debt is ' + highAnswer;
	}
	
	Calculator.prototype.formatMoney = function(numberValue)
	{
		var valueString = new String(numberValue);
		var finalAmount = '';
		var delimiter = ',';
		var minus = '';
		var decimalNum;
		var dollarNum;
		
		if (valueString.indexOf(".") == -1)  
		{
			//there is no decimal point
			decimalNum = '00';
			dollarNum = valueString;
		}
		else
		{
			var valueArray = valueString.split('.', 2);
			decimalNum = valueArray[1];
			dollarNum = parseInt(valueArray[0]);
		}		
		
		if(isNaN(dollarNum))
		{
			return finalAmount;
		}
		if(dollarNum < 0) 
		{
			minus = '-';
		}
		dollarNum = Math.abs(dollarNum);
		var tempAmount = new String(dollarNum);
		valueArray = [];
		while(tempAmount.length > 3)
		{
			var temp = tempAmount.substr(tempAmount.length - 3);
			valueArray.unshift(temp);
			tempAmount = tempAmount.substr(0, tempAmount.length - 3);
		}
		
		if (tempAmount.length > 0)
		{
			valueArray.unshift(tempAmount);
		}
		
		tempAmount = valueArray.join(delimiter);
		
		if (decimalNum.length < 1)
		{
			decimalNum = '00';
		}	
		
		if (decimalNum.length < 2)
		{
			decimalNum = decimalNum + '0';
		}
		
		finalAmount = '$' + minus + tempAmount + '.' + decimalNum;
				
		return finalAmount;
	}
	
	Calculator.prototype.clearText = function()
	{
		document.getElementById('lowValueText').innerHTML = '';
		document.getElementById('highValueText').innerHTML = '';
		
		return true;
	}
}
