function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function getPreviousElement (node) {
	if (node.previousSibling.nodeType == 1) {
		return node.previousSibling;
	}
	if (node.previousSibling.previousSibling) {
		return getPreviousElement (node.previousSibling);
	}
	return null;
}


function chatOnline() {
	if (!document.getElementById("chat-link") && !document.getElementById("chat-button")) return false;
	if (document.getElementById("chat-link")) {
		var chatlink = document.getElementById("chat-link");
		chatlink.onclick = function() {
			window.open('chat-online.html','Plugoo','width=180,height=380;');
			return false;
		}
	}
	if (document.getElementById("chat-button")) {
		var chatbutton = document.getElementById("chat-button");
		chatbutton.onclick = function() {
			window.open('chat-online.html','Plugoo','width=180,height=380;');
			return false;
		}
	}
}

addLoadEvent(chatOnline);

if (navigator.appName == "Microsoft Internet Explorer") {
	addLoadEvent(addHover);
}

// Function to replace the li:hover pseudo class
function addHover() {
	if (document.getElementById("menu")) {
		var allMenuItems = document.getElementById("menu").getElementsByTagName("LI");
		for (i=0;i<allMenuItems.length;i++) {
			allMenuItems[i].onmouseover = function() {
				if (!this.className) {
					this.className = "hover";
				} else {
					this.className = this.className+" hover";
				}
			}
			allMenuItems[i].onmouseout = function() {
				this.className = this.className.replace(/\s?hover/,"");
			}
		}
	}
}

addLoadEvent(mmConverter);

function helpPopup() {
	if (!document.getElementsByTagName) return false;
	if (!document.getElementsByTagName("A")) return false;
	var anchors = document.getElementsByTagName("A");
	for (i=0;i<anchors.length;i++) {
		if (anchors[i].className.indexOf("popup") != -1) {
			anchors[i].onclick = function(e) {
				// Find click position
				var evt=window.event || e //evt evaluates to window.event or inexplicit e object, depending on which one is defined
				if( typeof( window.innerWidth ) == 'number' ) {
					//Non-IE
					width = window.innerWidth;
					height = window.innerHeight;
				} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
				//IE 6+ in 'standards compliant mode'
					width = document.documentElement.clientWidth;
					height = document.documentElement.clientHeight;
				} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
				//IE 4 compatible
					width = document.body.clientWidth;
					height = document.body.clientHeight;
				}
				if (evt.clientX+200 > width) {
				    var pos_x = (width-224)+"px";
				} else {
					var pos_x = evt.clientX+"px";
				}
			    var pos_y = (height-evt.clientY)+"px";
				// Add new div absolutely positioned there
				var helpBox = document.createElement("DIV");
				helpBox.className = "helpbox";
				helpBox.style.bottom = pos_y;
				helpBox.style.left = pos_x;
				// Create box to put content in (else Ajax writes over all the box, inc. Close button!
				var helpBoxContents  = document.createElement("DIV");
				urlBits = this.href.split("/");
				idName = urlBits[urlBits.length-1];
				helpBoxContents.setAttribute("id", idName);
				helpBox.appendChild(helpBoxContents);
				//Add contents of this.href
				var addContent = ajaxRequest(this.href,"",idName);
				// Add a 'close' link
				var closeButton = document.createElement("A");
				var closeText = document.createTextNode("Close");
				closeButton.appendChild(closeText);
				closeButton.setAttribute("class","close");
				closeButton.setAttribute("href",window.location.href);
				helpBox.appendChild(closeButton);
				document.body.appendChild(helpBox)
				return false;
			}
		}
		if (anchors[i].className.indexOf("close") != -1) {
			anchors[i].onclick = function() {
				// Find parent div and remove it
				body.removeChild(this.parentNode);
				return false;
			}
		}
	}
}

addLoadEvent(helpPopup);

// Function for the markup/margin converter

function mmConverter() {
	if (!document.getElementById("margin-result")) return false;
	if (!document.getElementById("markup-result")) return false;
	var marginresult = document.getElementById("margin-result");
	marginresult.innerHTML = "Your mark-up is <span id=\"margin-resulttext\">0</span>%.";
	var markupresult = document.getElementById("markup-result");
	markupresult.innerHTML = "Your margin is <span id=\"markup-resulttext\">0</span>%.";
	var marginamount = document.getElementById("margin-amount");
	marginamount.onblur = function() {
		calculateMM(this.value,"margin");
	}
	var markupamount = document.getElementById("markup-amount");
	markupamount.onblur = function() {
		calculateMM(this.value,"markup");
	}
}

function calculateMM(number,type) {
	if (type == "margin") {
		if (isNaN(number)) {
			document.getElementById("margin-result").innerHTML = "Please only enter numbers.";
		} else if (number < 100) {
			document.getElementById("margin-result").innerHTML = "Your mark-up is <span id=\"margin-resulttext\">0</span>%.";
			document.getElementById("margin-resulttext").innerHTML = displayNumber(((number*100)/(100-number)),0,'');
		} else {
			document.getElementById("margin-result").innerHTML = "Your margin cannot be more than 100%!";
		}
	} else if (type == "markup") {
		if (isNaN(number)) {
			document.getElementById("markup-result").innerHTML = "Please only enter numbers.";
		} else {
			document.getElementById("markup-result").innerHTML = "Your margin is <span id=\"markup-resulttext\">0</span>%.";
			//document.getElementById("markup-resulttext").innerHTML = displayNumber(((number*100)/(100+number)),0,'');
			divisor = Number(number)+100;
			document.getElementById("markup-resulttext").innerHTML = displayNumber(((number*100)/divisor),0,'');
		}
	}
}

// For break even tool

function breakEven() {
	if (!document.getElementById("be-result")) return false;
	clearOther("be-margin","be-markup");
	// Replace be-result with Results text
	result = document.getElementById("be-result")
	holdingText = document.createTextNode("Value of Sales Needed Each Month to Break-Even: ");
	result.replaceChild(holdingText,result.firstChild);
	// If you type in any input, call the calculateBE() function
	document.getElementById("be-overheads").onblur = function() { result = calculateBE(); }
	document.getElementById("be-repayments").onblur = function() { result = calculateBE(); }
	document.getElementById("be-directorspay").onblur = function() { result = calculateBE(); }
	document.getElementById("be-markup").onblur = function() { result = calculateBE(); }
	document.getElementById("be-margin").onblur = function() { result = calculateBE(); }
}

addLoadEvent(breakEven);

function calculateBE() {
	overheads = displayValue("be-overheads");
	repayments = displayValue("be-repayments");
	directorspay = displayValue("be-directorspay");
	markup = displayValue("be-markup");
	margin = displayValue("be-margin");
	if (margin != '') {
		divisor = margin/100;
	} else if (markup != '') {
		divisor = markup/(100+markup);
	}
	resultNumber = (overheads+repayments+directorspay)/divisor;
	if (margin > 100) {
		resultText = document.createTextNode("Your margin cannot be greater than 100%.");
	} else if (isNaN(resultNumber)) {
		resultText = document.createTextNode("Please only enter numbers.");
	} else {
		resultText = document.createTextNode("Value of Sales Needed Each Month to Break-Even: "+displayNumber(resultNumber,0,''));
	}
	result = document.getElementById("be-result");
	result.replaceChild(resultText, result.firstChild);
}

function priceVolume() {
	if (!document.getElementById("pv-result-min")) return false;
	if (!document.getElementById("pv-result-max")) return false;
	// If you fill in a value in pv-margin, clear pv-markup, and vice versa - except if a tab is pressed (keycode 9)!
	clearOther("pv-margin-min", "pv-markup-min")
	clearOther("pv-margin-max", "pv-markup-max")
	// Replace pv-result-max and -min with Results text
	resultmin = document.getElementById("pv-result-min");
	holdingTextMin = document.createTextNode("Minimum Extra Sales Volume needed to compensate for the loss in Gross Margin: 0.0%");
	resultmin.replaceChild(holdingTextMin,resultmin.firstChild);
	resultmax = document.getElementById("pv-result-max");
	holdingTextMax = document.createTextNode("Maximum Loss in Sales Volume you can sustain before you are worse off: 0.0%");
	resultmax.replaceChild(holdingTextMax,resultmax.firstChild);
	// If you type in any input, call the calculatePV() function
	document.getElementById("pv-price-discount").onblur = function() { result = calculatePV("min"); }
	document.getElementById("pv-markup-min").onblur = function() { result = calculatePV("min"); }
	document.getElementById("pv-margin-min").onblur = function() { result = calculatePV("min"); }
	document.getElementById("pv-price-rise").onblur = function() { result = calculatePV("max"); }
	document.getElementById("pv-markup-max").onblur = function() { result = calculatePV("max"); }
	document.getElementById("pv-margin-max").onblur = function() { result = calculatePV("max"); }
}

addLoadEvent(priceVolume);

function calculatePV(type) {
	markup = Number(document.getElementById("pv-markup-"+type).value);
	margin = Number(document.getElementById("pv-margin-"+type).value);
	if (margin != '') {
		divisor = margin;
	} else if (markup != '') {
		divisor = markup*100/(100+markup);
	}
	if (type == "min") {
		priceNumber = Number(document.getElementById("pv-price-discount").value);
		resultNumber = (priceNumber*100)/(divisor-priceNumber);
		resultText = "Minimum Extra Sales Volume needed to compensate for the loss in Gross Margin: ";
	} else if (type == "max") {
		priceNumber = Number(document.getElementById("pv-price-rise").value);
		resultNumber = (priceNumber*100)/(divisor+priceNumber);
		resultText = "Maximum Loss in Sales Volume you can sustain before you are worse off: ";
	}
	if (margin > 100) {
		resultTextNode = document.createTextNode("Your margin cannot be greater than 100%.");
	} else if ((priceNumber >= divisor) && (type == "min")) {
		resultTextNode = document.createTextNode("You will not be able to make a profit with those figures.");
	} else if (isNaN(resultNumber)) {
		resultTextNode = document.createTextNode("Please only enter numbers into the table.");
	} else {
		resultNumber = displayNumber(resultNumber,1,'%');
		resultTextNode = document.createTextNode(resultText+resultNumber);
	}
	result = document.getElementById("pv-result-"+type);
	result.replaceChild(resultTextNode, result.firstChild);
}

function newBusiness() {
	if (!document.getElementById("nb-result")) return false;
	clearOther("nb-margin", "nb-markup")
	// Replace nb-result with Results text
	result = document.getElementById("nb-result");
	holdingText = document.createTextNode("Discount at which you earn same Gross Margin (in value terms) as before: ");
	result.replaceChild(holdingText,result.firstChild);
	// If you type in any input, call the calculatePV() function
	document.getElementById("nb-extra-business").onblur = function() { result = findResult("nb-",""); }
	document.getElementById("nb-markup").onblur = function() { result = findResult("nb-",""); }
	document.getElementById("nb-margin").onblur = function() { result = findResult("nb-",""); }
}

addLoadEvent(newBusiness);

function overheadsChanges() {
	if (!document.getElementById("oc-result-drop")) return false;
	if (!document.getElementById("oc-result-rise")) return false;
	clearOther("oc-margin-drop", "oc-markup-drop");
	clearOther("oc-margin-rise", "oc-markup-rise");
	// Replace oc-result-rise and -drop with Results text
	resultdrop = document.getElementById("oc-result-drop");
	holdingTextdrop = document.createTextNode("Maximum Loss in Sales Revenue you can Suffer: ");
	resultdrop.replaceChild(holdingTextdrop,resultdrop.firstChild);
	resultrise = document.getElementById("oc-result-rise");
	holdingTextrise = document.createTextNode("Minimum Extra Sales Revenue Needed to Compensate: ");
	resultrise.replaceChild(holdingTextrise,resultrise.firstChild);
	// If you type in any input, call the calculatePV() function
	document.getElementById("oc-overheads-drop").onblur = function() { result = findResult("oc-","-drop"); }
	document.getElementById("oc-markup-drop").onblur = function() { result = findResult("oc-","-drop"); }
	document.getElementById("oc-margin-drop").onblur = function() { result = findResult("oc-","-drop"); }
	document.getElementById("oc-overheads-rise").onblur = function() { result = findResult("oc-","-rise"); }
	document.getElementById("oc-markup-rise").onblur = function() { result = findResult("oc-","-rise"); }
	document.getElementById("oc-margin-rise").onblur = function() { result = findResult("oc-","-rise"); }
}

addLoadEvent(overheadsChanges);

function salesChanges() {
	if (!document.getElementById("sc-result-drop")) return false;
	if (!document.getElementById("sc-result-rise")) return false;
	clearOther("sc-margin-drop", "sc-markup-drop")
	clearOther("sc-margin-rise", "sc-markup-rise")
	// Replace sc-result-rise and -drop with Results text
	resultdrop = document.getElementById("sc-result-drop");
	holdingTextdrop = document.createTextNode("Minimum Drop in Overheads Needed: ");
	resultdrop.replaceChild(holdingTextdrop,resultdrop.firstChild);
	resultrise = document.getElementById("sc-result-rise");
	holdingTextrise = document.createTextNode("Maximum Rise in Overheads that can be Sustained: ");
	resultrise.replaceChild(holdingTextrise,resultrise.firstChild);
	// If you type in any input, call the calculatePV() function
	document.getElementById("sc-sales-drop").onblur = function() { result = findResult("sc-", "-drop"); }
	document.getElementById("sc-markup-drop").onblur = function() { result = findResult("sc-", "-drop"); }
	document.getElementById("sc-margin-drop").onblur = function() { result = findResult("sc-", "-drop"); }
	document.getElementById("sc-sales-rise").onblur = function() { result = findResult("sc-", "-rise"); }
	document.getElementById("sc-markup-rise").onblur = function() { result = findResult("sc-", "-rise"); }
	document.getElementById("sc-margin-rise").onblur = function() { result = findResult("sc-", "-rise"); }
}

addLoadEvent(salesChanges)

function findResult(prefix, suffix) {
	markup = Number(document.getElementById(prefix+"markup"+suffix).value);
	margin = Number(document.getElementById(prefix+"margin"+suffix).value);
	if (margin != '') {
		divisor = margin/100;
	} else if (markup != '') {
		divisor = markup/(100+markup);
	} else {
		divisor = 1;
	}
	switch (prefix) {
		case "sc-":
			if (suffix == "-drop") {
				priceNumber = displayValue("sc-sales-drop");
				resultText = "Minimum Drop in Overheads Needed: ";
			} else if (suffix == "-rise") {
				priceNumber = displayValue("sc-sales-rise");
				resultText = "Maximum Rise in Overheads that can be Sustained: ";
			}
			resultNumber = priceNumber*divisor;
			break;
		case "oc-":
			if (suffix == "-drop") {
				priceNumber = displayValue("oc-overheads-drop");
				resultText = "Maximum Loss in Sales Revenue you can Suffer: ";
			} else if (suffix == "-rise") {
				priceNumber = displayValue("oc-overheads-rise");
				resultText = "Minimum Extra Sales Revenue Needed to Compensate: ";
			}
			resultNumber = priceNumber/divisor;
			break;
		case "nb-":
			extraBusiness = Number(document.getElementById("nb-extra-business").value);
			resultNumber = (divisor*100) * (extraBusiness/(extraBusiness+100));
			resultText = "Discount at which you earn same Gross Margin (in value terms) as before: ";
		break;
	}
	
	if (margin > 100) {
		resultTextNode = document.createTextNode("Your margin cannot be greater than 100%.");
	} else if (isNaN(resultNumber)) {
		resultTextNode = document.createTextNode("Please only enter numbers into the table.");
	} else {
		switch (prefix) {
			case "sc-":
			case "oc-":
			default:
				resultNumber = displayNumber(resultNumber,0,'');
			break;
			case "nb-":
				resultNumber = displayNumber(resultNumber,2,'%');
			break;
		}
		resultTextNode = document.createTextNode(resultText+resultNumber);
	}
	result = document.getElementById(prefix+"result"+suffix);
	result.replaceChild(resultTextNode, result.firstChild);
}

function onePercent() {
	if (!document.getElementById("op-result")) return false;
	// Replace op-result and  with Results text
	result = document.getElementById("op-result");
	holdingText = document.createTextNode("Maximum you Can Invest in Overhead to Secure a 1% Increase in Sales Price:  ");
	result.replaceChild(holdingText,result.firstChild);
	// If you type in any input, call the calculateOP() function
	document.getElementById("op-sales").onblur = function() { result = calculateOP(); }
	document.getElementById("op-costs").onblur = function() { result = calculateOP(); }
	document.getElementById("op-overheads").onblur = function() { result = calculateOP(); }
}

addLoadEvent(onePercent);

function calculateOP() {
	sales = displayValue("op-sales");
	costs = displayValue("op-costs");
	overheads = displayValue("op-overheads");
	margin = document.getElementById("op-margin");
	profit = document.getElementById("op-profit");
	profitpercent = document.getElementById("op-profitpercent");
	result = document.getElementById("op-result");
	
	if (isNaN(sales) || isNaN(costs) || isNaN(overheads))
	{
		// Replace op-result and  with error text (if needed)
		resultTextNode = document.createTextNode("Please only enter numbers into the table.");
		margin.value = '';
		profit.value = '';
	}
	else if ((sales != '') && (costs != ''))
	{
		marginvalue = Number(sales-costs);
		margin.value = displayNumber(marginvalue,0,'');
		if (overheads != '')
		{
				profit.value = displayNumber((marginvalue-overheads),0,'');
				profitpercent.value = displayNumber((((marginvalue-overheads)*100)/sales),1,'%');
				resultNumber = ((((overheads*sales)/marginvalue) * ((Number(marginvalue)+(sales/100))/(1.01*sales))) - overheads) / (overheads/100);
				resultNumber = displayNumber(resultNumber,2,'%');
				resultTextNode = document.createTextNode('Maximum you Can Invest in Overhead to Secure a 1% Increase in Sales Price: '+resultNumber);
		}
	}
	result.replaceChild(resultTextNode,result.firstChild);
}

function onePercentOptions() {
	if (!document.getElementById("opo-result")) return false;
	// Hide 'Calculate button'
	document.getElementById("opo-result").style.display = "none";
	// If you type in any input, call the calculateOP() function
	document.getElementById("opo-sales").onblur = function() { result = calculateOPO(); }
	document.getElementById("opo-costs").onblur = function() { result = calculateOPO(); }
	document.getElementById("opo-overheads").onblur = function() { result = calculateOPO(); }
}

addLoadEvent(onePercentOptions);

function calculateOPO() {
	sales = displayValue("opo-sales");
	costs = displayValue("opo-costs");
	overheads = displayValue("opo-overheads");
	margin = document.getElementById("opo-margin");
	profit = document.getElementById("opo-profit");
	profitpc = document.getElementById("opo-profitpc");
	salesprice = document.getElementById("opo-sales-price");
	salesvolume = document.getElementById("opo-sales-volume");
	costsreduction = document.getElementById("opo-costs-reduction");
	overheadsreduction = document.getElementById("opo-overheads-reduction");

	if (isNaN(sales) || isNaN(costs) || isNaN(overheads))
	{
		// Replace op-result and  with error text (if needed)
		result = document.getElementById("opo-result");
		resultTextNode = document.createTextNode("Please only enter numbers into the table.");
		result.replaceChild(resultTextNode,result.firstChild);
		result.style.display = "block";
	}
	else if ((sales != '') && (costs != ''))
	{
		marginvalue = Number(sales-costs);
		margin.value = displayNumber(marginvalue,0,'');
		if (overheads != '')
		{
				document.getElementById("opo-result").style.display = "none";
				profit.value = displayNumber((marginvalue-overheads),0,'');
				profitpc.value = displayNumber((((marginvalue-overheads)*100)/sales),1,'%');
				newprofit = document.getElementById("opo-newprofit");
				newprofit.innerHTML = 'to '+displayNumber((((marginvalue-overheads)*100)/sales)+1,1,'%')+' of the original sales value.';
				salesvolumeresult = sales/marginvalue;
				costreductionresult = sales/costs;
				overheadsreductionresult = sales/overheads;
				salesprice.value = '1%'; // Not right!
				salesvolume.value = displayNumber(salesvolumeresult,2,'%');
				costsreduction.value = displayNumber(costreductionresult,2,'%');
				overheadsreduction.value = displayNumber(overheadsreductionresult,2,'%');
		}
	}
}

function onePercentSensitivity() {
	if (!document.getElementById("ops-result")) return false;
	// Hide 'Calculate button'
	document.getElementById("ops-result").style.display = "none";
	// If you type in any input, call the calculateOP() function
	document.getElementById("ops-sales").onblur = function() { result = calculateOPS(); }
	document.getElementById("ops-costs").onblur = function() { result = calculateOPS(); }
	document.getElementById("ops-overheads").onblur = function() { result = calculateOPS(); }
}

addLoadEvent(onePercentSensitivity);

function calculateOPS() {
	sales = displayValue("ops-sales");
	costs = displayValue("ops-costs");
	overheads = displayValue("ops-overheads");
	margin = document.getElementById("ops-margin");
	profit = document.getElementById("ops-profit");
	salesprice = document.getElementById("ops-sales-price");
	salesvolume = document.getElementById("ops-sales-volume");
	costsreduction = document.getElementById("ops-costs-reduction");
	overheadsreduction = document.getElementById("ops-overheads-reduction");

	if (isNaN(sales) || isNaN(costs) || isNaN(overheads))
	{
		// Replace op-result and  with error text (if needed)
		result = document.getElementById("ops-result");
		resultTextNode = document.createTextNode("Please only enter numbers into the table.");
		result.replaceChild(resultTextNode,result.firstChild);
		result.style.display = "block";
	}
	else if ((sales != '') && (costs != ''))
	{
		marginvalue = Number(sales-costs);
		margin.value = displayNumber(marginvalue,0,'');
		if (overheads != '')
		{
			document.getElementById("ops-result").style.display = "none";
			profitvalue = marginvalue-overheads;
			profit.value = displayNumber(profitvalue,0,'');
			salespriceresult = (profitvalue*100)/sales;
			salesvolumeresult = (profitvalue*100)/marginvalue;
			costreductionresult = (profitvalue*100)/costs;
			overheadsreductionresult = (profitvalue*100)/overheads;
			salesprice.value = displayNumber(salespriceresult,2,'%');
			salesvolume.value = displayNumber(salesvolumeresult,2,'%');
			costsreduction.value = displayNumber(costreductionresult,2,'%');
			overheadsreduction.value = displayNumber(overheadsreductionresult,2,'%');
		}
	}
}

function daySalesOutstanding() {
	if (!document.getElementById("dso-result")) return false;
	// Replace dso-result with Results text
	result = document.getElementById("dso-result");
	holdingText = document.createTextNode("4. Days Sales Outstanding: ");
	result.replaceChild(holdingText,result.firstChild);
	result2 = document.getElementById("dso-result2");
	holdingText2 = document.createTextNode('5. Collect 1 day quicker and your bank balance will improve by: ');
	result2.appendChild(holdingText2,result2.firstChild);
	
	date = Array(12);
	date[12] = Array('December', 31);
	date[11] = Array('November', 30);
	date[10] = Array('October', 31);
	date[9] = Array('September', 30);
	date[8] = Array('August', 31);
	date[7] = Array('July', 31);
	date[6] = Array('June', 30);
	date[5] = Array('May', 31);
	date[4] = Array('April', 30);
	date[3] = Array('March', 31);
	date[2] = Array('February', 28);
	date[1] = Array('January', 31);

	// If you type in any input, call the calculateDSO() function
	document.getElementById("dso-monthend").onchange = function() { result = changeMonths(); result2 = calculateDSO(); }
	document.getElementById("dso-balance").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value01").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value02").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value03").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value04").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value05").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value06").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value07").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value08").onblur = function() { result = calculateDSO(); }
	document.getElementById("dso-value09").onblur = function() { result = calculateDSO(); }
}

addLoadEvent(daySalesOutstanding);

function changeMonths() {
	// Change dso-value0x to month name based on entry in monthend
	monthend = Number(document.getElementById("dso-monthend").value);
	
	for (i=0;i<9;i++) {
		if (document.getElementById("dso-value0"+(i+1)))
		{
			elem = getPreviousElement(document.getElementById("dso-value0"+(i+1)));
			if (i < monthend) {
				month = monthend - i;
			} else {
				month = 12 + monthend - i;
			}
			//alert(month);
			monthText = document.createTextNode(String(date[month][0]))
			elem.replaceChild(monthText, elem.firstChild)
		}
	}
	
}

function calculateDSO() {
	monthend = Number(document.getElementById("dso-monthend").value);
	balance = displayValue("dso-balance");
	values = Array();
	values[0] = displayValue("dso-value01");
	values[1] = displayValue("dso-value02");
	values[2] = displayValue("dso-value03");
	values[3] = displayValue("dso-value04");
	values[4] = displayValue("dso-value05");
	values[5] = displayValue("dso-value06");
	values[6] = displayValue("dso-value07");
	values[7] = displayValue("dso-value08");
	values[8] = displayValue("dso-value09");
	result = document.getElementById("dso-result");
	result2 = document.getElementById("dso-result2");

	var resultNumber = 0;
	var newbalance = balance;
	
	if (isNaN(balance)) {
		resultTextNode = document.createTextNode("Please only enter numbers into the table.");
		resultTextNode2 = document.createTextNode("");
	} else {
		for (i=0; i<values.length; i++) {
			if (i < monthend) {
				month = monthend - i;
			} else {
				month = 12 + monthend - i;
			}
	
			if (values[i] != '') {
				if (isNaN(values[i])) {
					resultTextNode = document.createTextNode("Please only enter numbers into the table.");
					resultTextNode2 = document.createTextNode("");
					break;
				} else {
					if (newbalance > values[i]){
						resultNumber = resultNumber + Number(date[month][1]);
						resultTextNode = document.createTextNode('4. Days Sales Outstanding: ');
					} else {
						resultNumber = resultNumber + ((newbalance/values[i]) * Number(date[month][1]));
						resultNumber = displayNumber(resultNumber,0,'');
						resultTextNode = document.createTextNode('4. Days Sales Outstanding: '+resultNumber);
						resultTextNode2 = document.createTextNode('5. Collect 1 day quicker and your bank balance will improve by: '+displayNumber((balance/resultNumber),0,''));
						break;
					}
					newbalance = newbalance - values[i];
				}
			} else {
				resultTextNode = document.createTextNode('4. Days Sales Outstanding: ');				
				resultTextNode2 = document.createTextNode('5. Collect 1 day quicker and your bank balance will improve by: ');
			}
		}
	}
	
	result = document.getElementById("dso-result");
	result.replaceChild(resultTextNode, result.firstChild);
	result2 = document.getElementById("dso-result2");
	result2.replaceChild(resultTextNode2, result2.firstChild);
}

function printLink() {
	if (!document.getElementsByTagName("A")) return false;
	links = document.getElementsByTagName("A");
	for (i=0; i<links.length; i++) {
		if (links[i].className.indexOf('printicon') >= 0) {
			links[i].onclick = function() {
				window.print();
				return false;
			};
		}
	}
}

addLoadEvent (printLink);

function displayNumber(number,decimals,suffix) {
	// Make sure 'number' is a number, else return NaN
	if(isNaN(number)) return 'NaN';
	if(isNaN(decimals)) return 'NaN';
	// set toFixed
	display = number.toFixed(decimals)
	// add commas to thousands
	display = addCommas(display);
	// add suffix if required
	display+= suffix;
	// if negative, remove '-' and put brackets around
	if (number < 0) display = '('+display.replace(/-/,'')+')';
	// return number
	return display;	
}

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;
}


function ajaxRequest(url, sending, receiving, method) {
	// OK HERE COMES THE AJAX!!!
	var ajaxRequest;
	try {
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try {
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("There was a problem with your browser");
				return false;
			}
		}
	}
	// Function that will receive data sent from the server
	ajaxRequest.onreadystatechange = function() {
		if(ajaxRequest.readyState == 4){
			var ajaxDisplay = document.getElementById(receiving);
			ajaxDisplay.innerHTML = ajaxRequest.responseText;
		}
	}
	if (method == "POST") {
		ajaxRequest.open("POST", url, true);
		ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajaxRequest.send(sending);
	} else {
		ajaxRequest.open("GET", url+"?"+sending, true);
		ajaxRequest.send(null);
	}
	return true;
}

function point_it(event){
    pos_x = event.offsetX?(event.offsetX):event.pageX-document.getElementById("pointer_div").offsetLeft;
    pos_y = event.offsetY?(event.offsetY):event.pageY-document.getElementById("pointer_div").offsetTop;
}

// If you fill in a value in one element, clear another - except if a tab is pressed (keycode 9)!

function clearOther(firstID, secondID) {
	document.getElementById(firstID).onkeydown = function(e) {
		if (e == null) { // ie
			keycode = event.keyCode;
		} else { // mozilla
			keycode = e.which;
		}
		if (keycode != 9) document.getElementById(secondID).value = "";
	}
	document.getElementById(secondID).onkeydown = function(e) {
		if (e == null) { // ie
			keycode = event.keyCode;
		} else { // mozilla
			keycode = e.which;
		}
		if (keycode != 9) document.getElementById(firstID).value = "";
	}
}

function displayValue(elementID) {
	number = Number(document.getElementById(elementID).value.replace(/,/g,'')); 
	if (number > 0) document.getElementById(elementID).value = displayNumber(number,0,'');
	return number;
}