var oldUseStandby = 2;
var isModemIntern=true;
var inputSets = new Array();
var resultSets = new Array();
var resultHead = 0; // Index into inputsetarray for first result

for(var i=0; i<7; i++){
	inputSets[i] = new Array();
	resultSets[i] = new Object();
	resultSets[i].TCO = 0;
	resultSets[i].Electricity  = 0;
}

function openPrintWindow(){

	var printWindow = window.open('009print.htm', 'print', 'status=no,scrollbars');
}

function storeInput(n){

	var calculator = document.forms['calculator'];
	for(var i=0; i<calculator.length; i++){
		e = calculator.elements[i];
		if((e.type == 'text') || (e.type == 'hidden')){
			inputSets[n][i] = e.value;	
		} else if (e.type == 'select-one'){
			inputSets[n][i] = e.selectedIndex;
		} else if ((e.type == 'checkbox') || (e.type == 'radio')) {
			inputSets[n][i] = e.checked;
		}
	}
}

function restoreInput(values){

	var calculator = document.forms['calculator'];
	for(var i=0; i<calculator.length; i++){
		e = calculator.elements[i];
		if((e.type == 'text' || (e.type == 'hidden'))){
			e.value = values[i];	
		} else if (e.type == 'select-one'){
			e.selectedIndex = values[i];
		} else if ((e.type == 'checkbox') || (e.type == 'radio')) {
			e.checked = values[i];
		}
	}
}

function storeSet() {

	var calculator = document.forms['calculator'];
	storeInput(resultHead);
	resultSets[resultHead].TCO = calculator.editTCO.value;
	resultSets[resultHead].Electricity = calculator.editElectricity.value;

	resultHead++;
	if(resultHead == 6){
		resultHead = 0;
	}
	updateResultHistory();
}

function updateResultHistory(){

	var calculator = document.forms['calculator'];
	for(var i=0; i < 6; i++){
		index = (resultHead - i - 1);
		if(index < 0){
			index = 6 + index;
		}
		calculator['ResultTco' + i].value = resultSets[index].TCO;
		calculator['ResultElectricity' + i].value = resultSets[index].Electricity;
	}
}

function restoreSet(n){

	var index = resultHead - n - 1;
	if(index < 0){
		index = 6 + index;
	}
	if(inputSets[index][0]){
		restoreInput(inputSets[index]);
		updateResultHistory();
		Calculate();
	}
	return false;
}

function onChangeSelectPrinter() {

	var ecalculator = document.forms['calculator'];
	var Index = ecalculator.selectPrinter.selectedIndex + 1;
	switch(Index){
		case 0: 			// none
			ecalculator.editPrinterPrice.value = 0;
			ecalculator.editPrinterSleep.value = 0;
			ecalculator.editPrinterBwPages.value = 0;
			ecalculator.editPrinterColourPages.value = 0;
			ecalculator.editPrinterBwCosts.value = 0;
			ecalculator.editPrinterColourCosts.value = 0;
			ecalculator.ppmBW.value = 0;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 0;
			break;
		case 1: 			// Value inktjet
			ecalculator.editPrinterPrice.value = 55;
			ecalculator.editPrinterSleep.value = 1;
			ecalculator.editPrinterBwPages.value = 3;
			ecalculator.editPrinterColourPages.value = 1;
			ecalculator.editPrinterBwCosts.value = 5;
			ecalculator.editPrinterColourCosts.value = 14.9;
			ecalculator.ppmBW.value = 11;
			ecalculator.ppmColour.value = 4;
			ecalculator.editPrinterOn.value = 15;
			break;
		case 2: 			// inkjet duplex
			ecalculator.editPrinterPrice.value = 75;
			ecalculator.editPrinterSleep.value = 1;
			ecalculator.editPrinterBwPages.value = 3;
			ecalculator.editPrinterColourPages.value = 1;
			ecalculator.editPrinterBwCosts.value = 4.1;
			ecalculator.editPrinterColourCosts.value = 14;
			ecalculator.ppmBW.value = 11;
			ecalculator.ppmColour.value = 4;
			ecalculator.editPrinterOn.value = 15;
			break;
		case 3: 			// value laser
			ecalculator.editPrinterPrice.value = 130;
			ecalculator.editPrinterSleep.value = 7;
			ecalculator.editPrinterBwPages.value = 10;
			ecalculator.editPrinterColourPages.value = 0;
			ecalculator.editPrinterBwCosts.value = 4.3;
			ecalculator.editPrinterColourCosts.value = 0;
			ecalculator.ppmBW.value = 20;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 300;
			break;
		case 4: 			// laser
			ecalculator.editPrinterPrice.value = 200;
			ecalculator.editPrinterSleep.value = 3;
			ecalculator.editPrinterBwPages.value = 30;
			ecalculator.editPrinterColourPages.value = 0;
			ecalculator.editPrinterBwCosts.value = 3.0;
			ecalculator.editPrinterColourCosts.value = 0;
			ecalculator.ppmBW.value = 22;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 400;
			break;
		case 5: 			// laser duplex
			ecalculator.editPrinterPrice.value = 420;
			ecalculator.editPrinterSleep.value = 9;
			ecalculator.editPrinterBwPages.value = 30;
			ecalculator.editPrinterColourPages.value = 0;
			ecalculator.editPrinterBwCosts.value = 2.6;
			ecalculator.editPrinterColourCosts.value = 0;
			ecalculator.ppmBW.value = 22;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 550;
			break;
		case 6: 			// workgroup laser
			ecalculator.editPrinterPrice.value = 2000;
			ecalculator.editPrinterSleep.value = 40;
			ecalculator.editPrinterBwPages.value = 100;
			ecalculator.editPrinterColourPages.value = 0;
			ecalculator.editPrinterBwCosts.value = 2.1;
			ecalculator.editPrinterColourCosts.value = 0;
			ecalculator.ppmBW.value = 32;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 650;
			break;
		case 7: 			// workgroup laser duplex
			ecalculator.editPrinterPrice.value = 2500;
			ecalculator.editPrinterSleep.value = 40;
			ecalculator.editPrinterBwPages.value = 100;
			ecalculator.editPrinterColourPages.value = 0;
			ecalculator.editPrinterBwCosts.value = 1.4;
			ecalculator.editPrinterColourCosts.value = 0;
			ecalculator.ppmBW.value = 32;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 650;
			break;
		case 8: 			// value colour laser
			ecalculator.editPrinterPrice.value = 300;
			ecalculator.editPrinterSleep.value = 13;
			ecalculator.editPrinterBwPages.value = 25;
			ecalculator.editPrinterColourPages.value = 5;
			ecalculator.editPrinterBwCosts.value = 2.9;
			ecalculator.editPrinterColourCosts.value = 6.6;
			ecalculator.ppmBW.value = 16;
			ecalculator.ppmColour.value = 4;
			ecalculator.editPrinterOn.value = 200;
			break;
		case 9: 			// workgroup colour laser
			ecalculator.editPrinterPrice.value = 2200;
			ecalculator.editPrinterSleep.value = 13;
			ecalculator.editPrinterBwPages.value = 75;
			ecalculator.editPrinterColourPages.value = 15;
			ecalculator.editPrinterBwCosts.value = 2.9;
			ecalculator.editPrinterColourCosts.value = 5.8;
			ecalculator.ppmBW.value = 22;
			ecalculator.ppmColour.value = 22;
			ecalculator.editPrinterOn.value = 650;
			break;
		case 10: 			// value mfd (inkjet)
			ecalculator.editPrinterPrice.value = 200;
			ecalculator.editPrinterSleep.value = 4;
			ecalculator.editPrinterBwPages.value = 3;
			ecalculator.editPrinterColourPages.value = 1;
			ecalculator.editPrinterBwCosts.value = 5.0;
			ecalculator.editPrinterColourCosts.value = 14.9;
			ecalculator.ppmBW.value = 12;
			ecalculator.ppmColour.value = 6;
			ecalculator.editPrinterOn.value = 25;
			break;
		case 11: 			// mfd colour laser
			ecalculator.editPrinterPrice.value = 500;
			ecalculator.editPrinterSleep.value = 15;
			ecalculator.editPrinterBwPages.value = 20;
			ecalculator.editPrinterColourPages.value = 10;
			ecalculator.editPrinterBwCosts.value = 2.6;
			ecalculator.editPrinterColourCosts.value = 6.6;
			ecalculator.ppmBW.value = 12;
			ecalculator.ppmColour.value = 6;
			ecalculator.editPrinterOn.value = 600;
			break;
		case 12: 			// mfd duplex
			ecalculator.editPrinterPrice.value = 700;
			ecalculator.editPrinterSleep.value = 15;
			ecalculator.editPrinterBwPages.value = 20;
			ecalculator.editPrinterColourPages.value = 10;
			ecalculator.editPrinterBwCosts.value = 2.6;
			ecalculator.editPrinterColourCosts.value = 6.6
			ecalculator.ppmBW.value = 12;
			ecalculator.ppmColour.value = 6;
			ecalculator.editPrinterOn.value = 500;
			break;
		case 13: 			// mfd laser bw
			ecalculator.editPrinterPrice.value = 500;
			ecalculator.editPrinterSleep.value = 10;
			ecalculator.editPrinterBwPages.value = 30;
			ecalculator.editPrinterColourPages.value = 0;
			ecalculator.editPrinterBwCosts.value = 3.0;
			ecalculator.editPrinterColourCosts.value = 0;
			ecalculator.ppmBW.value = 15;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 500; 
			break;
		// case 14: 			// low-e mfd
			// ecalculator.editPrinterPrice.value = 250;
			// ecalculator.editPrinterSleep.value = 0.7;
			// ecalculator.editPrinterBwPages.value = 5;
			// ecalculator.editPrinterColourPages.value = 1;
			// ecalculator.editPrinterBwCosts.value = 5.0;
			// ecalculator.editPrinterColourCosts.value = 14.9;
			// ecalculator.ppmBW.value = 12;
			// ecalculator.ppmColour.value = 6;
			// ecalculator.editPrinterOn.value = 15;
			// break;
		case 14: 			// workgroup mfd laser bw
			ecalculator.editPrinterPrice.value = 10000;
			ecalculator.editPrinterSleep.value = 10;
			ecalculator.editPrinterBwPages.value = 80;
			ecalculator.editPrinterColourPages.value = 20;
			ecalculator.editPrinterBwCosts.value = 2.1;
			ecalculator.editPrinterColourCosts.value = 2.1;
			ecalculator.ppmBW.value = 25;
			ecalculator.ppmColour.value = 0;
			ecalculator.editPrinterOn.value = 1000;
			break;
		}
}


function CheckNumber(field, name){

	var value = parseFloat(field.value);
	if(isNaN(value)){
		alert(name + ' is not defined.');
	}
	return value;
}


function ResetForm(){

	var ecalculator = document.forms['calculator'];
	ecalculator.reset();
	// onChangeUseAlwaysOn();
	onChangeSelectPC();
}

function Calculate(){

	var DaysOn = 300;
	var UseOn,UseStandby,UseOff
	var ecalculator = document.forms['calculator'];
	var TCOSplitupEquipment = 0;
	var TCOSplitupConsumables = 0;
	var TCOSplitupElectricity = 0;
	var EnergySplitOn = 0;
	var EnergySplitOff = 0;
	var EnergySplitStandby = 0; 
	var EnergySplitAirco = 0;
	var TotalEnergy = 0;
	
	// reset values
	ecalculator.editTCO.value = '';
	ecalculator.editElectricity.value = '';
	
	var EnergyOn 
	var EnergyStandby
	var EnergyOff
	
	var MonthAirco = CheckNumber(ecalculator.editMonthsAirco, 'Months per year cooling is needed');
	if(isNaN(MonthAirco)){
		return false;
	}
	
	var ProductLife = CheckNumber(ecalculator.editProductLife, 'System product life');
	var EuroPerKWh = CheckNumber(ecalculator.editElectricityRate, 'Electricity rate');
	if(isNaN(ProductLife) || isNaN(EuroPerKWh)){
		return false;
	}

	// Printer
	var PrinterPrice = CheckNumber(ecalculator.editPrinterPrice, 'Printer price');
	var PrinterLease = CheckNumber(ecalculator.editPrinterLeasePrice, 'Printer lease price');
	var PrinterSleepUse = CheckNumber(ecalculator.editPrinterSleep, 'Print power consumption sleep-mode');
	var PrinterPagesBW = CheckNumber(ecalculator.editPrinterBwPages, 'Printer pages B/W');
	var PrinterPagesColour = CheckNumber(ecalculator.editPrinterColourPages, 'Printer pages colour');
	var PrinterBWCost = CheckNumber(ecalculator.editPrinterBwCosts, 'Printer cost per B/W page');
	var PrinterColourCost = CheckNumber(ecalculator.editPrinterColourCosts, 'Printer cost per colour page');
	if(isNaN(PrinterPrice) || isNaN(PrinterSleepUse) || isNaN(PrinterPagesBW) || isNaN(PrinterPagesColour)  || 
		isNaN(PrinterBWCost) || isNaN(PrinterColourCost)){
		return false;
	}

	// TODO energy is based on pages printed also for business version!
	var ppmBW = ecalculator.ppmBW.value;
	var ppmColour = ecalculator.ppmColour.value;
	EnergyOn = CheckNumber(ecalculator.editPrinterOn);
	EnergyStandby = CheckNumber(ecalculator.editPrinterSleep);
	var EnergyPerPageBW = ((60 / ppmBW) / 3600 * EnergyOn) / 1000;
	var EnergyPerPageColour;
	if(ppmColour==0){
		EnergyPerPageColour = 0;
	} else {
		EnergyPerPageColour = ((60 / ppmColour) / 3600 * EnergyOn) / 1000;
	}
	EnergySplitOn = PrinterPagesBW * 1000 * EnergyPerPageBW + PrinterPagesColour * 1000 * EnergyPerPageColour;
	EnergySplitOff = 0;
	EnergySplitStandby = PrinterSleepUse * (365*24) / 1000; 
	TotalEnergy = EnergySplitOn + EnergySplitOff + EnergySplitStandby + EnergySplitAirco;
	// Airco adds 30% per month of cooling
	EnergySplitAirco = (MonthAirco / 12) * (TotalEnergy / 3);
	TotalEnergy = TotalEnergy + (MonthAirco / 12) * (TotalEnergy / 3);

	TCOSplitupConsumables = (PrinterPagesBW * 1000 * PrinterBWCost + PrinterPagesColour * 1000 * PrinterColourCost) / 100;
	
	if(isNaN(EuroPerKWh)){
		return false;
	}
	var TCO = 0;
	var isLease = ecalculator.rbLease[1].checked;
	if(isLease){
		TCO = PrinterLease;
		TCOSplitupEquipment = TCO;
	} else {
		TCO = PrinterPrice / ProductLife; 
		TCOSplitupEquipment = TCO;
	}
	TCO = TCO + TCOSplitupConsumables;
	TCO = TCO + TotalEnergy * EuroPerKWh;

	TCOSplitupElectricity = TotalEnergy * EuroPerKWh;
	
	ecalculator.editTCO.value = parseInt(ProductLife * TCO * 10)/10;
	ecalculator.editElectricity.value = parseInt(TotalEnergy*10)/10;
	
	ecalculator.TcoSplitEquipment.value = parseInt(ProductLife * TCOSplitupEquipment * 10) / 10;
	ecalculator.TcoSplitEnergy.value = parseInt(ProductLife * TCOSplitupElectricity * 10) / 10;	
	ecalculator.TcoSplitConsumables.value = parseInt(ProductLife * TCOSplitupConsumables * 10) / 10;
	ecalculator.TcoSplitTotal.value = parseInt(ProductLife * (TCOSplitupEquipment+TCOSplitupElectricity+TCOSplitupConsumables) * 10)/10;
	
	ecalculator.EnergySplitOn.value = parseInt(EnergySplitOn * 10) / 10;
	ecalculator.EnergySplitStandby.value = parseInt(EnergySplitStandby * 10) / 10;
	ecalculator.EnergySplitOff.value = parseInt(EnergySplitOff * 10) / 10;
	ecalculator.EnergySplitAirco.value = parseInt(EnergySplitAirco * 10) / 10;
	ecalculator.EnergySplitTotal.value = parseInt((EnergySplitOn+EnergySplitStandby+EnergySplitOff+EnergySplitAirco) * 10) / 10;
	// ecalculator.editTotalTCO.value = parseInt((TCO + ModemTCO + PrinterTCO) * 10) / 10;
	// ecalculator.editTotalElectricity.value = parseInt((TotalEnergy + ModemEnergy + PrinterEnergy) * 10) / 10;
	
}

function onChangeEditUseOn(){
	
	var ecalculator = document.forms['calculator'];
	
	var UseOn = CheckNumber(ecalculator.editUseOn, 'Hours PC used in on-mode');
	var UseStandby = CheckNumber(ecalculator.editUseStandby, 'Hours PC used in standby');
	
	if(isNaN(UseOn) || isNaN(UseStandby)){
		return false;
	}
	var UseOff = 24 - UseOn - UseStandby;
	ecalculator.editUseOff.value = parseInt(UseOff*10) / 10;
}
