
var watts = 2400;
var leaseCosts;
var purchaseCosts;
var inputFields = document.getElementById('costs').getElementsByTagName('input');
var classNames = new Array();

String.prototype.trim = function()
{
	return this.replace(/^\s*(\S+)\s*$/, '$1');
}

for(var i = 0; i < inputFields.length; i++)
	{
		inputFields[i].onblur = function()
		{
			if(!this.value) this.value = 0;

			this.value = this.value.replace(/^\$?\s*[0$]?\s*\$?(\S+)\s*$/, '$1').replace(',','');

			if(isNaN(this.value) || !this.value.match(/^\d{1,3}([,]?\d{3})*(\.\d+)?$/)) flagError(this);
			else this.className = this.className.replace(/\s*data_error/, '');

			switch(this.className)
			{
				case 'cents':
					while(this.value.length < 2) { this.value += '0'; }
					break;

				case 'floating_point':
					var fieldID = this.getAttribute('id');

					if((fieldID == 'print_rate' && this.value > 1000) // Adjust to actual maximum
						 || (fieldID == 'printing_hours' && (this.value == 0 || this.value > 24))
						 || (fieldID == 'working_days' && (this.value == 0 || this.value > 31))
						 || (fieldID == 'waste_dollars' && this.value > 100))
					{
						flagError(this);
					}
					break;

				default: // Whole dollars
					this.value = !this.value ? 0 : parseInt(this.value);
					break;
			}
		}
	}







function flagError(inputField)
{
	inputField.className += inputField.className.indexOf('data_error') != -1 ? '' : ' data_error';
	document.getElementById('calculate').setAttribute('disabled','disabled');
}

function estimate()
{	
	with(document.forms[0])
	{
			var ownership = terms.value;
			var printerPrice;
			var inkUnitCost = ink_dollars.value + "." + ink_cents.value;
			var purchasePrice = purchase_dollars.value + "." + purchase_cents.value;
			var leasePrice = lease_dollars.value + "." + lease_cents.value;			
			var averageSellingPrice = avg_selling_dollars.value + "." + avg_selling_cents.value;
			var mediaCost = media_dollars.value + "." + media_cents.value;
			var laborRate = labor_dollars.value + "." + labor_cents.value;
			var electricityRate = kwh_dollars.value + "." + kwh_cents.value;

			// Output Revenue Estimates
			var totalPrintedMedia = print_rate.value * printing_hours.value * working_days.value;
			var sellableOutput = totalPrintedMedia * (1 - (waste_integer.value + "." + waste_tenth.value) / 100);
			var monthlyGrossRevenue = sellableOutput * averageSellingPrice;

			// Overhead Estimates
			var monthlyInkCost = totalPrintedMedia * (inkUnitCost * 1.5);
			var monthlyMediaCost = totalPrintedMedia * mediaCost;
			var monthlyElectricityCost = (((watts * printing_hours.value) / 1000) * electricityRate) * working_days.value;
			var totalProductionHours = printing_hours.value * working_days.value;
			
			//createTextNode(laborRate);
			var monthlyLaborCost = laborRate * totalProductionHours;
			var totalCosts;
			leaseCosts = parseFloat(leasePrice) + monthlyInkCost + monthlyMediaCost + monthlyElectricityCost + monthlyLaborCost;
			purchaseCosts = monthlyInkCost + monthlyMediaCost + monthlyElectricityCost + monthlyLaborCost;
			var purchaseMonthlyProfit = monthlyGrossRevenue - purchaseCosts;
			var leaseMonthlyProfit = monthlyGrossRevenue - leaseCosts;
			var breakEven =  (purchasePrice / purchaseMonthlyProfit);
			
	}
	
			//Define Fields to Insert Data
			id('total_printed_media').innerHTML = commaFormatNumber(totalPrintedMedia);
			id('sellable_output').innerHTML = commaFormatNumber(Math.round(sellableOutput));
			id('monthly_gross_revenue').innerHTML = commaFormat(monthlyGrossRevenue);
			id('monthly_ink_cost').innerHTML = commaFormat(monthlyInkCost);
			id('hourly_labor_rate').innerHTML = (" (@ " + commaFormat(laborRate) + " Eur/h)");
			id('monthly_media_cost').innerHTML = commaFormat(monthlyMediaCost);
			id('monthly_electricity_cost').innerHTML = commaFormat(monthlyElectricityCost);
			id('monthly_labor_cost').innerHTML = commaFormat(monthlyLaborCost);
			id('total_production_hours').innerHTML = (" (@ " + totalProductionHours + " h/Monat)");
			id('purchase_monthly_profit').innerHTML = commaFormat(purchaseMonthlyProfit);
			id('lease_monthly_profit').innerHTML = commaFormat(leaseMonthlyProfit);
			id('break_even').innerHTML = getRound(breakEven);
			id('lease_payments').innerHTML = commaFormat(leasePrice);
			
			if(id('lease').checked)
			{id('total_costs').innerHTML = commaFormat(leaseCosts);}
			else
			{id('total_costs').innerHTML = commaFormat(purchaseCosts);}
			
			leaseCosts = commaFormat(leaseCosts);
			purchaseCosts = commaFormat(purchaseCosts);
}


function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp('(^|\\\\s)' + className + '(\\\\s|$)');
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;

	for(var i = 0; i < length; i++)
	{
		current = elements[i];
		if(testClass.test(current.className)) returnElements.push(current);
	}
	return returnElements;
}

function id(name)
{
	return document.getElementById(name);
}

function getRound(amount)
{
	amount = amount.toPrecision(2);
	return amount;	
}

//Currency Format
function currency(amount)
{
	var i = parseFloat(amount);
		if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}

function commaFormat(amount)
{
	amount = currency(amount);
	var delimiter = "."; // replace comma if desired
	var a = amount.split('.',2)
	var d = a[1];
	var i = parseInt(a[0]);
	if(isNaN(i)) { return ''; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	if(d.length < 1) { amount = n; }
	else { amount = n + ',' + d; }
	amount = minus + amount;
	return amount;
}

function commaFormatNumber(number) 
	{
	number = '' + number;
	if (number.length > 3) {
	var mod = number.length % 3;
	var output = (mod > 0 ? (number.substring(0,mod)) : ',');
	for (i=0 ; i < Math.floor(number.length / 3); i++) {
	if ((mod == 0) && (i == 0))
	output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
	else
	output+= '.' + number.substring(mod + 3 * i, mod + 3 * i + 3);
	}
	return (output);
	}
	else return number;
}






