// current machine defaults
var curr_acc = 20;
var curr_dec = 20;
var curr_Vop = 500;
var curr_Vmax = 1500;
var curr_rollLength = 1000;
var curr_indexTime = 10;
var curr_downTime = 0;

var opSpeedDesc = "Speed setpoint for run";
var maxSpeedDesc = "Max speed of machine";

var curr_windingTime;		// calculated field
var curr_totalCycleSeconds; // calculated field
var curr_totalCycleMinutes; // calculated field

var curr_cutsPerCycle = 1;
var curr_finishedRollsPerHour;
var curr_rollsPerCase = 12;
var curr_lengthOfMaster = 15000;
var curr_cyclesPerMaster;
var curr_timeToRunMaster;
var curr_masterTimeChange = 5;

var curr_finishedMastersPerHour; // calculated field

var curr_numKnifeSetupsPerShift = 0;
var curr_avgKnifeSetupTime = 0;
var curr_shiftTime = 10;

var curr_masterRollsPerShift;	// calculated field
var curr_casesPerHour;			// calculated field
var curr_casesPerShift;			// calculated field

var curr_rewindRollsPerShift;	// calculated field
var curr_footagePerShift;		// calculated field

// new machine defaults
var new_acc = 20;
var new_dec = 20;
var new_Vop = 500;
var new_Vmax = 1500;
var new_rollLength = 1000;
var new_indexTime = 10;
var new_downTime = 0;

var new_windingTime;		// calculated field
var new_totalCycleSeconds;	// calculated field
var new_totalCycleMinutes;	// calculated field

var new_cutsPerCycle = 1;
var new_finishedRollsPerHour;
var new_rollsPerCase = 12;
var new_lengthOfMaster = 15000;
var new_cyclesPerMaster;
var new_timeToRunMaster;
var new_masterTimeChange = 5;

var new_finishedMastersPerHour; // calculated field

var new_numKnifeSetupsPerShift = 0;
var new_avgKnifeSetupTime = 0;
var new_shiftTime = 10;

var new_masterRollsPerShift;	// calculated field
var new_casesPerHour;			// calculated field
var new_casesPerShift;			// calculated field

var new_rewindRollsPerShift;	// calculated field
var new_footagePerShift;		// calculated field

// difference vars
var diff_windingTime;
var diff_totalCycleSeconds;
var diff_totalCycleMinutes;
var diff_finishedRollsPerHour;
var diff_finishedMastersPerHour;
var diff_timeToRunMaster;
var diff_masterTimeChange;
var diff_masterRollsPerShift;
var diff_casesPerHour;
var diff_casesPerShift;
var diff_rewindRollsPerShift;
var diff_footagePerShift;

function setInputDefaults()
{
	// check to see if form is visible or hidden before trying to set defaults
	if (document.getElementById("curr_acc"))
	{
		// current 
		document.getElementById("curr_acc").value = curr_acc;
		document.getElementById("curr_dec").value = curr_dec;
		document.getElementById("curr_Vop").value = curr_Vop;
		document.getElementById("curr_Vmax").value = curr_Vmax;
		document.getElementById("curr_rollLength").value = curr_rollLength;
		document.getElementById("curr_indexTime").value = curr_indexTime;
		document.getElementById("curr_downTime").value = curr_downTime;
		document.getElementById("curr_cutsPerCycle").value = curr_cutsPerCycle;
		document.getElementById("curr_rollsPerCase").value = curr_rollsPerCase;
		document.getElementById("curr_lengthOfMaster").value = curr_lengthOfMaster;
		document.getElementById("curr_masterTimeChange").value = curr_masterTimeChange;
		document.getElementById("curr_numKnifeSetupsPerShift").value = curr_numKnifeSetupsPerShift;
		document.getElementById("curr_avgKnifeSetupTime").value = curr_avgKnifeSetupTime;
		document.getElementById("curr_shiftTime").value = curr_shiftTime;
		
		// new
		document.getElementById("new_acc").value = new_acc;
		document.getElementById("new_dec").value = new_dec;
		document.getElementById("new_Vop").value = new_Vop;
		document.getElementById("new_Vmax").value = new_Vmax;
		document.getElementById("new_rollLength").value = new_rollLength;
		document.getElementById("new_indexTime").value = new_indexTime;
		document.getElementById("new_downTime").value = new_downTime;
		document.getElementById("new_cutsPerCycle").value = new_cutsPerCycle;
		document.getElementById("new_rollsPerCase").value = new_rollsPerCase;
		document.getElementById("new_lengthOfMaster").value = new_lengthOfMaster;
		document.getElementById("new_masterTimeChange").value = new_masterTimeChange;
		document.getElementById("new_numKnifeSetupsPerShift").value = new_numKnifeSetupsPerShift;
		document.getElementById("new_avgKnifeSetupTime").value = new_avgKnifeSetupTime;
		document.getElementById("new_shiftTime").value = new_shiftTime;
		
		// disable all calculated fields
		/*
		for(var i = 0; i < document.forms[0].elements.length; i++)
		{
			var elem = document.forms[0].elements[i];
			if (elem.type == 'text' && elem.className == 'calctxtgray')
			{
				elem.disabled = true;
			}
		}
		*/
		
		performCalculations();
	}
}

function displayResults()
{
	// check values for operating and max speed entries
	if (Math.sqrt( (2*curr_rollLength*curr_Vmax*60)/(curr_acc+curr_dec)) <= curr_Vop)
		opSpeedDesc = "REDUCE 1st RUN OPERATING SPEED OR ACC/DEC";
	else
		opSpeedDesc = "Speed setpoint for run";
		
	if (Math.sqrt( (2*new_rollLength*new_Vmax*60)/(new_acc+new_dec)) <= new_Vop)
		maxSpeedDesc = "REDUCE 2nd RUN OPERATING SPEED OR ACC/DEC";
	else
		maxSpeedDesc = "Max speed of machine";
		
	document.getElementById("lblOpSpeedDesc").innerHTML = opSpeedDesc;
	document.getElementById("lblMaxSpeedDesc").innerHTML = maxSpeedDesc;
	
	// current
	document.getElementById("curr_windingTime").innerHTML = curr_windingTime;
	document.getElementById("curr_totalCycleSeconds").innerHTML = curr_totalCycleSeconds;
	document.getElementById("curr_totalCycleMinutes").innerHTML = curr_totalCycleMinutes;
	document.getElementById("curr_finishedRollsPerHour").innerHTML = curr_finishedRollsPerHour;
	document.getElementById("curr_cyclesPerMaster").innerHTML = curr_cyclesPerMaster;
	document.getElementById("curr_timeToRunMaster").innerHTML = curr_timeToRunMaster;
	document.getElementById("curr_finishedMastersPerHour").innerHTML = curr_finishedMastersPerHour;
	document.getElementById("curr_masterRollsPerShift").innerHTML = curr_masterRollsPerShift;
	document.getElementById("curr_casesPerHour").innerHTML = curr_casesPerHour;
	document.getElementById("curr_casesPerShift").innerHTML = curr_casesPerShift;
	document.getElementById("curr_rewindRollsPerShift").innerHTML = curr_rewindRollsPerShift;
	document.getElementById("curr_footagePerShift").innerHTML = curr_footagePerShift;
	
	// new
	document.getElementById("new_windingTime").innerHTML = new_windingTime;
	document.getElementById("new_totalCycleSeconds").innerHTML = new_totalCycleSeconds;
	document.getElementById("new_totalCycleMinutes").innerHTML = new_totalCycleMinutes;
	document.getElementById("new_finishedRollsPerHour").innerHTML = new_finishedRollsPerHour;
	document.getElementById("new_cyclesPerMaster").innerHTML = new_cyclesPerMaster;
	document.getElementById("new_timeToRunMaster").innerHTML = new_timeToRunMaster;
	document.getElementById("new_finishedMastersPerHour").innerHTML = new_finishedMastersPerHour;
	document.getElementById("new_masterRollsPerShift").innerHTML = new_masterRollsPerShift;
	document.getElementById("new_casesPerHour").innerHTML = new_casesPerHour;
	document.getElementById("new_casesPerShift").innerHTML = new_casesPerShift;
	document.getElementById("new_rewindRollsPerShift").innerHTML = new_rewindRollsPerShift;
	document.getElementById("new_footagePerShift").innerHTML = new_footagePerShift;
	
	// differences
	document.getElementById("diff_windingTime").innerHTML = diff_windingTime;
	document.getElementById("diff_totalCycleSeconds").innerHTML = diff_totalCycleSeconds;
	document.getElementById("diff_totalCycleMinutes").innerHTML = diff_totalCycleMinutes;
	document.getElementById("diff_finishedRollsPerHour").innerHTML = diff_finishedRollsPerHour;
	document.getElementById("diff_timeToRunMaster").innerHTML = diff_timeToRunMaster;
	document.getElementById("diff_masterTimeChange").innerHTML = diff_masterTimeChange;
	document.getElementById("diff_masterRollsPerShift").innerHTML = diff_masterRollsPerShift;
	document.getElementById("diff_casesPerHour").innerHTML = diff_casesPerHour;
	document.getElementById("diff_casesPerShift").innerHTML = diff_casesPerShift;
	document.getElementById("diff_rewindRollsPerShift").innerHTML = diff_rewindRollsPerShift;
	document.getElementById("diff_footagePerShift").innerHTML = diff_footagePerShift;
}

function performCalculations()
{
	// current calculations
	curr_windingTime = roundIt( (curr_Vop/curr_Vmax)*(curr_acc+curr_dec)+(60*curr_rollLength-0.5*(curr_Vop*curr_Vop/curr_Vmax*(curr_acc+curr_dec)))/curr_Vop );
	curr_totalCycleSeconds = roundIt( curr_indexTime + curr_downTime + curr_windingTime );
	curr_totalCycleMinutes = roundIt(curr_totalCycleSeconds/60 );
	curr_finishedRollsPerHour = roundIt( (curr_cutsPerCycle * 3600 / curr_totalCycleSeconds * 1) ,2);
	curr_cyclesPerMaster = roundIt( curr_lengthOfMaster / curr_rollLength , 2 );
	curr_timeToRunMaster = roundIt( (curr_cyclesPerMaster * curr_totalCycleSeconds) / 60 );
	curr_finishedMastersPerHour = roundIt( 60 / (curr_timeToRunMaster + curr_masterTimeChange), 2);
	curr_masterRollsPerShift = roundIt( ( (7 - (curr_numKnifeSetupsPerShift * curr_avgKnifeSetupTime / 60)) * curr_finishedMastersPerHour), 2 );
	curr_casesPerHour = roundIt( curr_finishedRollsPerHour / curr_rollsPerCase, 2 );
	curr_casesPerShift = roundIt( (curr_cyclesPerMaster*curr_masterRollsPerShift * (curr_cutsPerCycle/curr_rollsPerCase)), 2 );
	curr_rewindRollsPerShift = roundIt( curr_finishedRollsPerHour * (curr_shiftTime - curr_masterRollsPerShift * curr_masterTimeChange / 60) , 2 );
	curr_footagePerShift = roundIt( curr_masterRollsPerShift * curr_lengthOfMaster , 2 );
	
	// new machine calculations
	new_windingTime = roundIt( (new_Vop/new_Vmax)*(new_acc+new_dec)+(60*new_rollLength-0.5*(new_Vop*new_Vop/new_Vmax*(new_acc+new_dec)))/new_Vop );
	new_totalCycleSeconds = roundIt( new_indexTime + new_downTime + new_windingTime );
	new_totalCycleMinutes = roundIt( new_totalCycleSeconds / 60 );
	new_finishedRollsPerHour = roundIt( (new_cutsPerCycle * 3600 / new_totalCycleSeconds * 1) , 2);
	new_cyclesPerMaster = roundIt( new_lengthOfMaster / new_rollLength , 2)
	new_timeToRunMaster = roundIt( (new_cyclesPerMaster * new_totalCycleSeconds) / 60 );
	new_finishedMastersPerHour = roundIt( 60 / (new_timeToRunMaster + new_masterTimeChange), 2 );
	new_masterRollsPerShift = roundIt( ( (7 - (new_numKnifeSetupsPerShift * new_avgKnifeSetupTime / 60)) * new_finishedMastersPerHour ), 2 );
	new_casesPerHour = roundIt( new_finishedRollsPerHour / new_rollsPerCase, 2 );
	new_casesPerShift = roundIt( (new_cyclesPerMaster*curr_masterRollsPerShift * (new_cutsPerCycle/new_rollsPerCase)), 2 );
	new_rewindRollsPerShift = roundIt( new_finishedRollsPerHour * (new_shiftTime - new_masterRollsPerShift * new_masterTimeChange / 60)  , 2 );
	new_footagePerShift = roundIt( new_masterRollsPerShift * new_lengthOfMaster , 2 );
	
	// differences
	diff_windingTime = roundIt( (new_windingTime - curr_windingTime), 2);
	diff_totalCycleSeconds = roundIt( (new_totalCycleSeconds - curr_totalCycleSeconds), 2);
	diff_totalCycleMinutes = roundIt( (new_totalCycleMinutes - curr_totalCycleMinutes), 2);
	diff_finishedRollsPerHour = roundIt( (new_finishedRollsPerHour - curr_finishedRollsPerHour), 2);
	diff_timeToRunMaster = roundIt( (new_timeToRunMaster - curr_timeToRunMaster), 2);
	diff_masterTimeChange = roundIt( (new_masterTimeChange - curr_masterTimeChange), 2);
	diff_finishedMastersPerHour = roundIt( (new_finishedMastersPerHour - curr_finishedMastersPerHour), 2);
	diff_masterRollsPerShift = roundIt( (new_masterRollsPerShift - curr_masterRollsPerShift), 2);
	diff_casesPerHour = roundIt( (new_casesPerHour - curr_casesPerHour), 2);
	diff_casesPerShift = roundIt( (new_casesPerShift - curr_casesPerShift), 2);
	diff_rewindRollsPerShift = roundIt( (new_rewindRollsPerShift - curr_rewindRollsPerShift), 2);
	diff_footagePerShift = roundIt( (new_footagePerShift - curr_footagePerShift), 2);
	
	displayResults();
}

function updateValues()
{
	// current
	curr_acc = parseFloat(document.getElementById("curr_acc").value);
	curr_dec = parseFloat(document.getElementById("curr_dec").value);
	curr_Vop = parseFloat(document.getElementById("curr_Vop").value);
	curr_Vmax = parseFloat(document.getElementById("curr_Vmax").value);
	curr_rollLength = parseFloat(document.getElementById("curr_rollLength").value);
	curr_indexTime = parseFloat(document.getElementById("curr_indexTime").value);
	curr_downTime = parseFloat(document.getElementById("curr_downTime").value);
	curr_cutsPerCycle = parseFloat(document.getElementById("curr_cutsPerCycle").value);
	curr_rollsPerCase = parseFloat(document.getElementById("curr_rollsPerCase").value);
	curr_lengthOfMaster = parseFloat(document.getElementById("curr_lengthOfMaster").value);
	curr_masterTimeChange = parseFloat(document.getElementById("curr_masterTimeChange").value);
	curr_numKnifeSetupsPerShift = parseFloat(document.getElementById("curr_numKnifeSetupsPerShift").value);
	curr_avgKnifeSetupTime = parseFloat(document.getElementById("curr_avgKnifeSetupTime").value);
	curr_shiftTime = parseFloat(document.getElementById("curr_shiftTime").value);
	
	// new
	new_acc = parseFloat(document.getElementById("new_acc").value);
	new_dec = parseFloat(document.getElementById("new_dec").value);
	new_Vop = parseFloat(document.getElementById("new_Vop").value);
	new_Vmax = parseFloat(document.getElementById("new_Vmax").value);
	new_rollLength = parseFloat(document.getElementById("new_rollLength").value);
	new_indexTime = parseFloat(document.getElementById("new_indexTime").value);
	new_downTime = parseFloat(document.getElementById("new_downTime").value);
	new_cutsPerCycle = parseFloat(document.getElementById("new_cutsPerCycle").value);
	new_rollsPerCase = parseFloat(document.getElementById("new_rollsPerCase").value);
	new_lengthOfMaster = parseFloat(document.getElementById("new_lengthOfMaster").value);
	new_masterTimeChange = parseFloat(document.getElementById("new_masterTimeChange").value);
	new_numKnifeSetupsPerShift = parseFloat(document.getElementById("new_numKnifeSetupsPerShift").value);
	new_avgKnifeSetupTime = parseFloat(document.getElementById("new_avgKnifeSetupTime").value);
	new_shiftTime = parseFloat(document.getElementById("new_shiftTime").value);
	
	performCalculations();
}

function roundIt(num)
{
	return roundIt(num, 1);
}
function roundIt(num, decimalPlaces)
{
	switch(decimalPlaces)
	{
		case 1:
			return Math.round(10*num)/10;
			break;
		case 2: 
			return Math.round(100*num)/100;
			break;
		default:
			return Math.round(10*num)/10;
	}
	return Math.round(10*num)/10;
}


