// Input.js
// By Michael Hackerott
// Copyright © 1999-2004, Michael Hackerott, All Rights Reserved.

//
// MODULE VARIABLES
//

//
// PUBLIC FUNCTIONS
//

function Help()
{
	parent.location = "InputHelp.html";
}

function SetCookie(name, value, expire)
{
	document.cookie = name + "=" + escape(value) + 
		((expire == null) ? "" : ("; expiration=" + expire.toGMTString()));
}

// Object Constructor
function CounterObject()
{
	this.i = 0;
	this.n = 0;
}

// Object Constructor
function PtObject()
{
	this.v = 0;
	this.h = 0;
}

// Object Constructor
function RectObject()
{
	this.t = 0;
	this.l = 0;
	this.b = 0;
	this.r = 0;
}

// Object Constructor
function StepObject()
{
	this.t = 0;
	this.l = 0;
	this.b = 0;
	this.r = 0;
	this.c = "";
}

function Calculate(form)
{
	
	//
	// DECLARE VARIABLES
	//
	
	var dieLayout = new PtObject();
	var dieSize = new PtObject();
	var dieSizeUnits = "";
	var dieSpace = new PtObject();
	var dieSpaceUnits = "";
	var html = "";
	var insideExOnly = true;
	var noPartialRet = true;
	var resultsUnits = "";
	var retSpace = new RectObject();
	var retSpaceUnits = new RectObject();
	var temp = 0;
	var wfrDiameter = 0;
	var wfrRadius = 0;
	var xWidth = 0;
	var xWidthUnits = "";
	
	//
	// GET INPUT PARAMETERS
	//

	// get the wfrDiameter
	wfrDiameter = form.wfrDiamList.selectedIndex;
	wfrDiameter = parseFloat(form.wfrDiamList.options[wfrDiameter].value);
	// get the exclusion width parameters
	xWidth = parseFloat(form.xWidthFld.value);
	xWidthUnits = form.xWidthList.selectedIndex;
	xWidthUnits = form.xWidthList.options[xWidthUnits].value;
	// get the reticle space parameters
	retSpace.t = parseFloat(form.retSpaceTFld.value);
	retSpaceUnits.t = form.retSpaceTUnitsList.selectedIndex;
	retSpaceUnits.t = form.retSpaceTUnitsList.options[retSpaceUnits.t].value;
	// get the reticle space parameters
	retSpace.l = parseFloat(form.retSpaceLFld.value);
	retSpaceUnits.l = form.retSpaceLUnitsList.selectedIndex;
	retSpaceUnits.l = form.retSpaceLUnitsList.options[retSpaceUnits.l].value;
	// get the reticle space parameters
	retSpace.b = parseFloat(form.retSpaceBFld.value);
	retSpaceUnits.b = form.retSpaceBUnitsList.selectedIndex;
	retSpaceUnits.b = form.retSpaceBUnitsList.options[retSpaceUnits.b].value;
	// get the reticle space parameters
	retSpace.r = parseFloat(form.retSpaceRFld.value);
	retSpaceUnits.r = form.retSpaceRUnitsList.selectedIndex;
	retSpaceUnits.r = form.retSpaceRUnitsList.options[retSpaceUnits.r].value;
	// get the die layout parameters
	dieLayout.h = form.dieLayoutHList.selectedIndex;
	dieLayout.h = parseInt(form.dieLayoutHList.options[dieLayout.h].value);
	dieLayout.v = form.dieLayoutVList.selectedIndex;
	dieLayout.v = parseInt(form.dieLayoutVList.options[dieLayout.v].value);
	// get the dieSize parameters
	dieSize.h = parseFloat(form.dieSizeHFld.value);
	dieSize.v = parseFloat(form.dieSizeVFld.value);
	dieSizeUnits = form.dieSizeUnitsList.selectedIndex;
	dieSizeUnits = form.dieSizeUnitsList.options[dieSizeUnits].value;
	// get the dieSpace parameters
	dieSpace.h = parseFloat(form.dieSpaceHFld.value);
	dieSpace.v = parseFloat(form.dieSpaceVFld.value);
	dieSpaceUnits = form.dieSpaceUnitsList.selectedIndex;
	dieSpaceUnits = form.dieSpaceUnitsList.options[dieSpaceUnits].value;
	// get the step only inside exclusion diameter parameter
	insideExOnly = form.insideExOnlyBox.checked;
	// get the step only inside exclusion diameter parameter
	noPartialRet = form.noPartialRetBox.checked;
	// get the results units
	resultsUnits = form.resultsUnitsList.selectedIndex;
	resultsUnits = form.resultsUnitsList.options[resultsUnits].value;
	
	//
	// CONVERT ALL VALUES TO RESULT UNITS
	//
	
	wfrDiameter = Convert(wfrDiameter, "mm", resultsUnits);
	xWidth = Convert(xWidth, xWidthUnits, resultsUnits);
	retSpace.t = Convert(retSpace.t, retSpaceUnits.t, resultsUnits);
	retSpace.l = Convert(retSpace.l, retSpaceUnits.l, resultsUnits);
	retSpace.b = Convert(retSpace.b, retSpaceUnits.b, resultsUnits);
	retSpace.r = Convert(retSpace.r, retSpaceUnits.r, resultsUnits);
	dieSize.h = Convert(dieSize.h, dieSizeUnits, resultsUnits);
	dieSize.v = Convert(dieSize.v, dieSizeUnits, resultsUnits);
	dieSpace.h = Convert(dieSpace.h, dieSpaceUnits, resultsUnits);
	dieSpace.v = Convert(dieSpace.v, dieSpaceUnits, resultsUnits);
	
	//
	// SAVE INPUT VARIABLES AS A COOKIE
	//
	
	// create a comma delimited list of the variable values
	var aList = new Array(
		wfrDiameter,
		xWidth,
		xWidthUnits,
		retSpace.t,
		retSpaceUnits.t,
		retSpace.l,
		retSpaceUnits.l,
		retSpace.b,
		retSpaceUnits.b,
		retSpace.r,
		retSpaceUnits.r,
		dieLayout.h,
		dieLayout.v,
		dieSize.h,
		dieSize.v,
		dieSizeUnits,
		dieSpace.h,
		dieSpace.v,
		dieSpaceUnits,
		insideExOnly,
		noPartialRet,
		resultsUnits
	);
	
	// Create the cookie expiration time
	var today = new Date();
	var expiration = new Date();
	var lifeTime = 1000 * 60 * 30; // life time of the cookie in milliseconds
	expiration.setTime(today.getTime() + lifeTime);
	
	// Save the input variables as a cookie
	SetCookie("DPWCalculatorCookie", aList.join(','), expiration);
	
	//
	// GO TO RESULTS
	//
	
	parent.location = "Output.html";
}

// Converts the specified value from {um|mm|mil} to {um|mm|mil}
function Convert(value, fmUnits, toUnits)
{
	var k = 0.0;

	if (fmUnits != toUnits)
	{
		if ((fmUnits == "um") && (toUnits == "mm"))
		{
			k = 0.001;
		}
		else if ((fmUnits == "um") && (toUnits == "mil"))
		{
			k = 0.039370078;
		}
		else if ((fmUnits == "mm") && (toUnits == "um"))
		{
			k = 1000.0;
		}
		else if ((fmUnits == "mm") && (toUnits == "mil"))
		{
			k = 39.37007874;
		}
		else if ((fmUnits == "mil") && (toUnits == "um"))
		{
			k = 25.4;
		}
		else if ((fmUnits == "mil") && (toUnits == "mm"))
		{
			k = 0.0254;
		}
		value = k * value;
	}
	return(value);
}

//
// PRIVATE FUNCTIONS
//

