// Shared code for the modules
	
	var currencyChar = "FR";

	/***********************************
 	 * (Public) getObject
	 ***********************************/
	function getObject(id)
	{
		var obj = null;
		var curPageNum = document.getElementById("ctl00_ContentPlaceHolder1_hf_currentpageno").value;
		var pageDiv = document.getElementById("page"+curPageNum);
		
		//Edit: changed the calculater ID to be an unique value within the document.
		//dont have to target the div anymore.
		obj = document.getElementById("page"+curPageNum+"_"+id);

		return obj;
	}	
	
	/***********************************
 	 * (Private) setResult
	 ***********************************/
	function setResult(id, numb)
	{
		var obj = getObject(id);		
		var undefined;		
		if(obj != null)			
		{
			obj.innerHTML = numb;			
		}
	}
	
	/***********************************
	 * (Public) onlyNumbers
	 ***********************************/
	function onlyNumbers(event)
	{	
		if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;
	}
	

	
	/**************************************************
	 * (Private) getInputArray
	 * id = the id of the button at the bottom of the section
	 * fieldCount = the number of fields in this section
	 * ************************************************
	 * Starting from the button, runs upwards through the form
	 * collecting the input values and returns as an array.
	 * The array is in the correct top-down order of the page.
	 **************************************************/
	function getInputArray(startId, fieldCount)
	{
		var objForm = document.aspnetForm;
		var gotTheButton = false;						
		var intIndex = fieldCount - 1;
		var arrInput = new Array(fieldCount);

		var lng=0;

		for(var l=startId; l<=startId + intIndex; l++)
		{

			arrInput[lng++] = objForm.elements['a' + l.toString()].value;
		}
		return arrInput;
	}
	
	
	/**************************************************
	 * (Private) formatCurrency
	 * strCurr is the currency sign you wish to display
	 * This has been altered to write a tag which the XSL can pick up.	 
	 **************************************************/
	function formatCurrency(num, strCurr) 
	{		
		if(isNaN(num))
			num = "0";
		
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num * 100 + 0.50000000001);
		num = Math.floor(num / 100).toString();		
		for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
			num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
			
		return (((sign) ? '' : '-') + strCurr + num);
	}
	
	/**************************************************
	 * (Private) formatNumber
	 * strCurr is the currency sign you wish to display	 
	 **************************************************/
	function formatNumber(num, showDecimal, separate) 
	{
		if(isNaN(num))
			num = "0";
		sign = (num == (num = Math.abs(num)));		
		num = Math.floor(num * 100 + 0.50000000001);		
		if(showDecimal)
		{			
			var dec = num % 100;
			if(dec < 10)
				dec = "0" + dec;
		}
		
		num = Math.floor(num / 100).toString();	
	
		if(separate)
		{
			for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
				num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
		}
		return (((sign) ? '' : '-') + num + ((showDecimal) ? ('.' + dec) : ''));
	}

	/**************************************************************
 	 * (Public) canUAffordTwo
	 * strCurr = the character for the currency you wish to display
	 **************************************************************/

	function calcRevb(strCurr)
	{
		try {
			var objForm = document.aspnetForm;

			var intResult1, intResult2, intResult3;
			var strMsg = "Please complete all fields before calculation.";
		
			// Get field values
			var maxCustomers	= objForm.elements['a6'].value; 
			var daysOpen 		= objForm.elements['a7'].value; 
			var purchaseRate 	= objForm.elements['a8'].value;  
			var avgSales 		= objForm.elements['a9'].value; 
			var avgCost			= objForm.elements['a10'].value; 

			//Ensure all fields are valid
			if(maxCustomers=='' | daysOpen=='' | purchaseRate=='' | avgSales=='' | avgCost=='') {
				alert(strMsg);
			}
			else {
				objForm.elements['a7'].value=(daysOpen=(daysOpen>365)?365:daysOpen);
				objForm.elements['a8'].value=(purchaseRate=(purchaseRate>100)?100:purchaseRate);
	
				intResult1 = maxCustomers * daysOpen;			
				intResult2 = (intResult1 * (purchaseRate / 100));			
				intResult2 = formatNumber(intResult2, true, false);
				intResult3 = formatCurrency(intResult2 * (avgSales - avgCost), strCurr);		
				setResult('calcRevb_result1', formatNumber(intResult1, false, true));
				setResult('calcRevb_result2', formatNumber(intResult2, false, true));
				setResult('calcRevb_result3', intResult3);		
			}
		}
		catch(ex) {
			alert(strMsg);
		}
	}

	
	function calcReva(strCurr) 
	{
		try 
		{
		
			var objForm = document.aspnetForm;

			var intResult1, intResult2, intResult3;
			var strMsg = "Please complete all fields before calculation.";
			//alert(strMsg);
			// Get field values
			var rooms 			= objForm.elements['a1'].value; 
			var nightsPerYear = objForm.elements['a2'].value; 
			var occupancyRate = objForm.elements['a3'].value;  
			var avgRate 		= objForm.elements['a4'].value; 
			var avgCost			= objForm.elements['a5'].value; 
	
			//Ensure all fields are valid
	
			if(rooms=='' | nightsPerYear=='' | occupancyRate=='' | avgRate=='' | avgCost=='') 
			{
				alert(strMsg);
			}
			else 
			{
	
				objForm.elements['a2'].value=(nightsPerYear=(nightsPerYear>365)?365:nightsPerYear);
				objForm.elements['a3'].value=(occupancyRate=(occupancyRate>100)?100:occupancyRate);
	
				intResult1 = rooms * nightsPerYear;			
				intResult2 = (intResult1 * (occupancyRate / 100));			
				intResult2 = formatNumber(intResult2, true, false);
				intResult3 = formatCurrency(intResult2 * (avgRate - avgCost), strCurr);		
					
				setResult('calcReva_result1', formatNumber(intResult1, false, true));
				setResult('calcReva_result2', formatNumber(intResult2, false, true));
				setResult('calcReva_result3', intResult3);		
			}
		}
		catch(ex) 
		{
		}
	}

	
	function calcReve(strCurr) 
	{
		try 
		{
			var objForm = document.aspnetForm;
			var intResult1, intResult2, intResult3;
			var strMsg = "Please complete all fields before calculation.";
			
			// Get field values
			var sales 	  = objForm.elements['ctl00$ContentPlaceHolder1$a1'].value; 
			var purchases = objForm.elements['ctl00$ContentPlaceHolder1$a2'].value; 
			var avgAmount = objForm.elements['ctl00$ContentPlaceHolder1$a3'].value;  
	
			//Ensure all fields are valid	
			if(sales=='' | purchases=='' | avgAmount=='') 
			{
				alert(strMsg);
			}
			else 
			{	
				intResult1 = ((purchases / sales) * 100);
				intResult1 = intResult1 > 100 ? 100 : intResult1;	
				intResult2 = formatCurrency(purchases * avgAmount, "$");		

				setResult('calcReve_result1', formatNumber(intResult1, false, false) + '%');
				setResult('calcReve_result2', intResult2);
			}
		}
		catch(ex) 
		{
		}
	}
	
	function calcRevf(strCurr) 
	{
		try 
		{
			var objForm = document.aspnetForm;
			var intSales = 500000;		// this is a fixed value for this calc
			var intResult1, intResult2, intResult3;
			var strMsg = "Please complete all fields before calculation.";
			
			// Get field values
			var proPercentage = objForm.elements['ctl00$ContentPlaceHolder1$a1'].value; 
			var expPercentage = objForm.elements['ctl00$ContentPlaceHolder1$a2'].value; 
			
			objForm.elements['ctl00$ContentPlaceHolder1$a1'].value = (proPercentage = (proPercentage > 100) ? 100 : proPercentage);
			objForm.elements['ctl00$ContentPlaceHolder1$a2'].value = (expPercentage = (expPercentage > 100) ? 100 : expPercentage);
	
			//Ensure all fields are valid	
			if(proPercentage=='' | expPercentage=='') 
			{
				alert(strMsg);
			}
			else 
			{	
				intResult1 = ((intSales * proPercentage) / 100);
				intResult2 = ((intSales * expPercentage) / 100);

				setResult('calcRevf_result1', formatCurrency(intResult1, strCurr));
				setResult('calcRevf_result2', formatCurrency(intResult2, strCurr));
				setResult('calcRevf_result3', formatCurrency(intResult1 - intResult2, strCurr));
			}
		}
		catch(ex) 
		{
		}
	}
	
	function calcRevg(strCurr) 
	{
		try 
		{
			var objForm = document.aspnetForm;
			var objField;
			var intResult1, intValue = 0;
			var strMsg = "Please complete all fields before calculation.";
			var undefined;
			// Get field values						
			
			for(x = 4; x < 15; x++)
			{
				objField = objForm.elements['a' + x];
				var intVal = (objField.value == '') ? 0 : objField.value;
				intValue += parseInt(intVal);
			}
				
			setResult('calcRevg_result1', formatCurrency(intValue, strCurr));		
		}
		catch(ex) 
		{
			alert(ex.text);
		}
	}	
	
	function calcRevh(strCurr) 
	{
		try 
		{
			var objForm = document.aspnetForm;
			var strMsg = "Please complete all fields before calculation.";
			
			// Get field values
			var intCost = objForm.elements['a3'].value; 
			var intRate = objForm.elements['a4'].value; 
			
				//Ensure all fields are valid	
			if(intCost=='' | intRate=='') 
				alert(strMsg);
			else 
				setResult('calcRevg_result1', (intCost / intRate) / 50);
		}
		catch(ex) 
		{
		}
	}	
	
	function calcRevi(strCurr) 
	{
		try 
		{
			var objForm = document.aspnetForm;
			var strMsg = "Please complete all fields before calculation.";
			var intResult1, intResult2;
			// Get field values
			var intNumb = objForm.elements['ctl00$ContentPlaceHolder1$a1'].value; 
			var intRate = objForm.elements['ctl00$ContentPlaceHolder1$a2'].value; 
			
				//Ensure all fields are valid	
			if(intNumb=='' | intRate=='') 
				alert(strMsg);
			else 
			{
				intResult1 = intNumb * 50;
				intResult2 = intResult1 * intRate;
				setResult('calcRevi_result1', formatNumber(intResult1, false, true));
				setResult('calcRevi_result2', formatCurrency(intResult2, strCurr));
			}
		}
		catch(ex) 
		{
		}
	}	
	
	/***********************************
 	 * canUAffordjs2
	 * id = the name of the calling button
	 * strCurr = the character for the currency you wish to display
	 *
	 * Currently implmented to run off the button only. 	 
	 ***********************************/	
	function calcRevc(startId, strCurr)
	{ 
		var objForm = document.aspnetForm;
		var undefined;				
		var intResult1, intResult2, intResult3, intResult4, intResult5;
		var fieldCount = 18;
		var arrInput = getInputArray(startId, fieldCount);

		for(x = 0; x < fieldCount; x++)	// validate
		{			

			if((arrInput[x] == "") || (arrInput[x] == undefined))
				arrInput[x] = 0;
		}

		if(arrInput[0] != 0 && arrInput[1] != 0)
			intResult1 = arrInput[0] / arrInput[1];		
		else
			intResult1 = 0;
			
		if(arrInput[2] != 0 && arrInput[3] != 0)
			intResult2 = arrInput[2] / arrInput[3];		
		else
			intResult2 = 0;
			
		if(arrInput[4] != 0 && arrInput[5] != 0)
			intResult3 = arrInput[4] / arrInput[5];		
		else
			intResult3 = 0;	
		
		intResult4 = Math.round(intResult1 + intResult2 + intResult3);		
		
		intResult5 = 0;
		for(x = 6; x < arrInput.length; x++)
		{
			intResult5 += Number(arrInput[x]);			
		}
		intResult5 += intResult4;
		
		setResult('calcRevc_result1', formatCurrency(intResult4, strCurr));
		setResult('calcRevc_result2', formatCurrency(intResult5, strCurr));
	}		
	
	/***********************************
 	 * calcRevc_2
	 * startId = the starting field id
	 * fieldCount = number of fields to add up
	 * strCurr = the character for the currency you wish to display
	 *
	 * Currently implmented to run off the button only. 	
	 * Adds up the values of all the fields as currency. 
	 ***********************************/		
	function calcRevc_2(startId, fieldCount, strCurr, fieldTarget) {
		var objForm = document.aspnetForm;
		var undefined;				
		var intValue = 0;
		var intVal = 0;
		var arrInput = getInputArray(startId, fieldCount);

		for(x = 0; x < fieldCount; x++)	// validate
		{	
			intVal = arrInput[x];
			if(intVal == '')
				intVal = 0;

			intValue	+= parseInt(intVal);
		}

		setResult('calcRevc_2_result1', formatCurrency(intValue, strCurr));
		
		if (objForm['a' + fieldTarget] != undefined) {
		    objForm['a' + fieldTarget].value = intValue;
		}

		var objResult2 = getObject('calcRevc_2_result2');
		if(objResult2 != undefined)
		{
			
			// question:
			//		how do I get the figure from the previous page??
			
			// now strictly html and javascript. Can I pull a value from the previous page's form?
			// I don't think I can, so it either needs to be stored in a cookie, or passed through the querystring
			
			//setResult('result2', formatCurrency(intValue, strCurr));
			
			// innerText doesn't work in FF. use textContent for FF
			var resultPrevPage = document.getElementById('resultPrevPage').innerText;
			if(document.all){
				resultPrevPage = document.getElementById('resultPrevPage').innerText;
			} else{
				resultPrevPage = document.getElementById('resultPrevPage').textContent;
			}
			var monthlysum = intValue += parseInt(resultPrevPage);
			setResult('calcRevc_2_result2', formatCurrency(monthlysum, strCurr));	
			var annualSum = parseInt(intValue * 6);
			setResult('calcRevc_2_result3', formatCurrency(annualSum, strCurr));	
			
		}
	}		
	 
	 
	 /***********************************
	to calculate how much money you are making
	
	***************************************/
	function howMuchCalc(strCurr) 
	{
		try 
		{
			var objForm = document.aspnetForm;
			var intResult1, intResult2;
			var strMsg = "Please complete all fields before calculation.";
			
			// Get field values
			var marketWage = Number(objForm.elements['a1'].value); 
			var capital = Number(objForm.elements['a2'].value); 
			var interestRate = Number(objForm.elements['a3'].value);  
			var netProfit = Number(objForm.elements['a4'].value);  

			//Ensure all fields are valid	
			if(marketWage=='' | capital=='' | interestRate=='' | netProfit=='') 
			{
				alert(strMsg);
			}
			else 
			{	
			
				intResult1 = marketWage+(capital*(interestRate/100));
				intResult2 = netProfit-intResult1;
				//intResult1 = ((purchases / sales) * 100);
				//intResult1 = intResult1 > 100 ? 100 : intResult1;	
				//intResult2 = formatCurrency(purchases * avgAmount, "$");		
				setResult('howMuchCalc_result1', formatCurrency(intResult1, strCurr));
				setResult('howMuchCalc_result2', formatCurrency(intResult2, strCurr));
			}
		}
		catch(ex) 
		{
		}
	}
	
	/***********************************
 	 * (Private) collectValues
	 ***********************************/	 
	 function collectValues(groupID)
	 {	 
	 	var objForm = document.forms[0].elements;
		var intResult = 0;
		var rows = 8;	
		var cols = 5;
		var undefined;
		var arrChecked = new Array(rows);
		var intCount = 0;

		for(loop1 = 0; loop1 < objForm.length; loop1++)
		{
			for(loop2 = 1; loop2 <= rows; loop2++)
			{				
				if(objForm[loop1].name.indexOf(groupID + 'group' + loop2) > -1)
				{	
					if(objForm[loop1].checked)
					{
						arrChecked[loop2 - 1] = objForm[loop1].value;
						intCount++;
					}
				}					
			}
		}
		
		for(x = 0; x < arrChecked.length; x++)
		{
			if(arrChecked[x] == "" || arrChecked[x] == undefined)
				arrChecked[x] = 0;

			intResult += Number(arrChecked[x]);	
		}					
		return intResult;
	 }
	 
	/***********************************
 	 * (Private) calcRanking
	 ***********************************/
	function calcRanking(groupCount)
	{
//		var groupCount = 3;
		var undefined;
		var arrResult = new Array(groupCount);
		var arrTitle = new Array(groupCount);
		var arrSorted = new Array(groupCount);
		
		for(intGroup = 1; intGroup <= groupCount; intGroup++)
			arrResult[intGroup -1] = collectValues(intGroup);			

		for(intGroup = 1; intGroup <= groupCount; intGroup++)
			arrTitle[intGroup -1] = getInnerHTML('title' + intGroup);			 	

		for(x = 0; x < groupCount; x++)
			arrSorted[x] = arrResult[x];
		
		arrSorted.sort(sortNumbers);
		arrSorted.reverse();		
	
		for(loop1 = 0; loop1 < arrSorted.length; loop1++)
		{			
			for(loop2 = 0; loop2 < arrResult.length; loop2++)
			{				
				if((arrSorted[loop1] == arrResult[loop2]))
				{				
					setResult('titleRanked' + Number(loop1 +1), "<strong>" + Number(loop1 + 1) + ") " + "</strong>" + arrTitle[loop2]);										
					arrResult[loop2] = -1;					
					break;
				}
			}
		}		
		//getControls(groupCount, '+');
	}
	
	/***********************************
 	 * (Private) getInnerHTML
	 ***********************************/	
	function getInnerHTML(id)
	{
		var undefined;
		var strOut = "";		
		var obj = getObject(id);		
		
		if(obj != null)			
		{
			if(obj.innerHTML != undefined) 
				strOut = obj.innerHTML;							
		}
		
		if(strOut == undefined)
			strOut = "";	
			
		return strOut;
	}

	/***********************************
 	 * (Private) sortNumbers
	 ***********************************/
	function sortNumbers(a, b) { return a - b} 

	/***********************************
 	 * (Private) totalAdvertising
	 ***********************************/	
	function totalAdvertising()
	{		
		//if(onlyNumbers())
		var intResult = 0;		
		var intValue = 0;
		var intGroups = 3;
		var strCurr = "&#36;";
		
		for(x = 1; x <= intGroups; x++)
		{			
			intValue = totalUpGroup(x);				
			setResult('result' + x, formatCurrency(intValue, strCurr));			
			intResult += Number(intValue);
		}
		setResult('totalResult', formatCurrency(intResult, strCurr));
	}
	
	/***********************************
 	 * (Private) totalUpGroup
	 ***********************************/	
	function totalUpGroup(intGroup)
	{
		var intMonths = 6;
		var intResult = 0;
		var undefined;
		var objForm = document.aspnetForm.elements;
		var obj;
		
		for(y = 1; y <= intMonths; y++)
		{
			obj = objForm[intGroup + "txt" + y];
			if(obj != null && obj != undefined)
				intResult += Number(obj.value);				
		}	
		return intResult;
	}


	/***********************************
	 * focusjs
	 ***********************************/
	function focusjs()
	{ 
		try {
			var objForm = document.aspnetForm;


			var intHours =   (objForm.elements['a2'].value=='')?0:parseInt(objForm.elements['a2'].value);
			var intPercent = (objForm.elements['a3'].value=='')?0:parseInt(objForm.elements['a3'].value);


			if(intHours > 40)
			{
				objForm.elements['ctl00$ContentPlaceHolder1$a2'].value = 40;
				intHours = 40;
			}

		var intResult1 = new Number(Math.round((intHours / 40) * 100));
		setResult('result1', intResult1);
		
		if(intPercent > 100)
		{
			objForm.elements['ctl00$ContentPlaceHolder1$a3'].value = 100;
			intPercent = 100;
		}
		
		var intResult2 = new Number(Math.round((intPercent / 100) * 40));
		setResult('result2', intResult2);			

		}
		catch(ex)
		{
			//
		}
		
	}	
	
	/***********************************
	 * printPage
	 ***********************************/
	function printPage()
	{ 
		if (window.print) window.print();
	}
	
	/**********************************************
	* validateLength
	*********************************************/
	function validateLength(oSrc, args)
	{
		args.IsValid = (args.Value.length >= 5);
	}
	
	/**********************************************
	* Win
	*********************************************/
	function Win(url,winname,w2,h2,p2,p3,p4,p5)
	{
 		w1 = 0;
 		h1 = 0;
		params = "width=" + w2 + ",";
		params += "height=" + h2 + ",";
		params += "toolbar=" + p5 + ",";
		params += "directories=0,";
		params += "status=0,";
		params += "menubar=" + p2 + ",";
		params += "scrollbars=" + p3 + ",";
		params += "resizable=" + p4 + ",";
		params += "left=" + w1 + ",";
		params += "top=" + h1 + "";
		win = window.open(url, winname, params, w2, h2, p2, p3, p4, p5);
 		win.focus();
	}
	

	//===========================================================================
	//Ajax related.
	function CreateXmlHttpRequestObject()
	{
	    var xmlHttpObj;
	      
	    if (window.ActiveXObject)
	    {
	        try
	        {
	            xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
	        }
	        catch (e)
	        {
	            xmlHttpObj = new ActiveXObject("Msxm12.XMLHTTP");
	        }
	    }
	    else
	    {
	        xmlHttpObj = new XMLHttpRequest();
	    }
	    
	    return xmlHttpObj;
	}
	
	//SET cascading answers for previous questions
	function setCascadeAnswers(id, answersDisplayID)
    {
        var answer = document.getElementById('a'+id).value;
        var div = document.getElementById("answerDisplay"+answersDisplayID);
       if (div)
       {
        div.innerHTML = answer;
       }
       else
       {
        alert("Did not find div tag");
       }
    }
    
    //SET cascading answers for previous questions
	function setCascadeAnswers(id, answersDisplayID, answersDisplayID2)
    {
       var answer = document.getElementById('a'+id).value;
       var div = document.getElementById("answerDisplay"+answersDisplayID);
       if (div)
       {
         div.innerHTML = answer;
       }
       else
       {
         alert("Did not find div tag");
       }
       var div2 = document.getElementById("answerDisplay"+answersDisplayID2);
       if (div2)
       {
        div2.innerHTML = answer;
       }
       else
       {
        alert("Did not find div tag");
       }
    }