// © Copyright 2000, John Hienz.  All rights reserved

// rSphere   = right sphere power
// rCyl      = right cylinder power
// rEffPower = right total efective power
// rEffCyl   = right effective cylinder power
// rAxis     = right axis
// rAdd      = right add power

// lSphere   = left sphere power
// lCyl      = left cylinder power
// lEffPower = left total effective power
// lEffCyl   = left effective cylinder power
// lAxis     = left axis
// lAdd      = left add power

// noResult  = TRUE if data is invalid

function Validate(form)
{
noResult = 0;

if (rSphere > 20 || rSphere < -20 || lSphere > 20 || lSphere < -20)
	{
	alert("Sphere values must be less than +/- 20 diopters!\nRemember to enter decimal points!");
	noResult = 1;
	}

if (rCyl > 10 || rCyl < -10 || lCyl > 10 || lCyl < -10)
	{
	alert("Cylinder values must be less than +/- 10 diopters!\nRemember to enter decimal points!");
	noResult = 1;
	}

if (rAxis < 0 || rAxis > 180 || lAxis < 0 || lAxis > 180)
	{
	alert("Axis must be between 0 - 180 !");
	noResult = 1;
	}

if ((form.rSphere.value == "") || (form.lSphere.value == ""))
	{
	alert("You must enter both sphere values!");
	noResult = 1;
	}

if (form.rCyl.value != "" && form.rAxis.value == "")
	{
	alert("Missing right axis value!");
	}

if (form.lCyl.value != "" && form.lAxis.value == "")
	{
	alert("Missing left axis value!");
	}

if (form.rCyl.value == "" && form.rAxis.value != "")
	{
	alert("Missing right cylinder value!");
	}

if (form.lCyl.value == "" && form.lAxis.value != "")
	{
	alert("Missing left cylinder value!");
	}

if (form.rCyl.value == "" && form.rAxis.value == "")
	{
	rCyl  = 0;
	rAxis = 0;
	}

if (form.lCyl.value == "" && form.lAxis.value == "")
	{
	lCyl  = 0;
	lAxis = 0;
	}

if (form.boc.value == "")
	{
	alert("O.C. Height must be entered!");
	}


}


// ecyl	= temp effective cylinder power

function EffCyl(cyl,axis)
{
var ecyl = 0;

if (axis > 90)
	{
	axis = 180-axis;
	}
switch(axis)
	{
	case 0:
	case 1:
	case 2:
		ecyl = cyl;
		break;
	case 3:
	case 4:
	case 5:
	case 6:
	case 7:
		ecyl = cyl * .9917;
		break;
	case 8:
	case 9:
	case 10:
	case 11:
	case 12:
		ecyl = cyl * .97;
		break;
	case 13:
	case 14:
	case 15:
	case 16:
	case 17:
		ecyl = cyl * .9333;
		break;
	case 18:
	case 19:
	case 20:
	case 21:
	case 22:
		ecyl = cyl * .8833;
		break;
	case 23:
	case 24:
	case 25:
	case 26:
	case 27:
		ecyl = cyl * .8217;
		break;
	case 28:
	case 29:
	case 30:
	case 31:
	case 32:
		ecyl = cyl * .75;
		break;
	case 33:
	case 34:
	case 35:
	case 36:
	case 37:
		ecyl = cyl * .6717;
		break;
	case 38:
	case 39:
	case 40:
	case 41:
	case 42:
		ecyl = cyl *.5867;
		break;
	case 43:
	case 44:
	case 45:
	case 46:
	case 47:
		ecyl = cyl * .5;
		break;
	case 48:
	case 49:
	case 50:
	case 51:
	case 52:
		ecyl = cyl * .4133;
		break;
	case 53:
	case 54:
	case 55:
	case 56:
	case 57:
		ecyl = cyl * .3283;
		break;
	case 58:
	case 59:
	case 60:
	case 61:
	case 62:
		ecyl = cyl * .25;
		break;
	case 63:
	case 64:
	case 65:
	case 66:
	case 67:
		ecyl = cyl * .1783;
		break;
	case 68:
	case 69:
	case 70:
	case 71:
	case 72:
		ecyl = cyl * .1167;
		break;
	case 73:
	case 74:
	case 75:
	case 76:
	case 77:
		ecyl = cyl * .0667;
		break;
	case 78:
	case 79:
	case 80:
	case 81:
	case 82:
		ecyl = cyl * .03;
		break;
	case 83:
	case 84:
	case 85:
	case 86:
	case 87:
		ecyl = cyl * .0083;
		break;
	case 88:
	case 89:
	case 90:
		ecyl = 0;
		break;
	}
return ecyl;
}

function Calculate(form)
{

// Translate text input to numeric form

rSphere = eval(form.rSphere.value);
rCyl    = eval(form.rCyl.value);
rAxis   = eval(form.rAxis.value);

lSphere = eval(form.lSphere.value);
lCyl    = eval(form.lCyl.value);
lAxis   = eval(form.lAxis.value);

// Validate Entries

Validate(form);

// Calculate effective cylinder powers

if (rCyl)
	{
	rEffCyl = EffCyl(rCyl, rAxis);
	}
else
	{
	rEffCyl = 0;
	}

if (lCyl)
	{
	lEffCyl = EffCyl(lCyl, lAxis);
	}
else
	{
	lEffCyl = 0;
	}

// Calculate effective total powers

rEffPower = rSphere + rEffCyl;
lEffPower = lSphere + lEffCyl;

// Calculate power imbalance


PowerImb = rEffPower - lEffPower;


// Calculate Slab-off prism

Dist = (eval(form.Style.value) + eval(form.boc.value))/10;

Prism = Math.abs(Math.round(Dist * PowerImb*100)/100);

QuarterRound(form);

if (!noResult)
	{
	form.result.value = Prism;
	form.imb.value = PowerImb;
	}

}

function ChangeBOC(form)
{

if (form.Style.value == "5")
	{
	form.boc.value = "4";
	}

if (form.Style.value == "9")
	{
	form.boc.value = "2";	
	}	
}

function QuarterRound(form)
{
for (var x=20; x > 0; x--)
	{
	if (Math.abs(Prism / x) < 1)
		{
		var intPrism = x - 1;
		}
	}
var decPrism = Prism - intPrism;
decPrism *= 100;

if (decPrism <= 12)
	{
	decPrism = 0;
	}
else if (decPrism <= 37)
	{
	decPrism = 25;
	}
else if (decPrism <= 62)
	{
	decPrism = 50;
	}
else if (decPrism <= 87)
	{
	decPrism = 75;
	}
else
	{
	intPrism += 1;
	decPrism = 0;
	}

decPrism /= 100;
Prism = intPrism + decPrism; 

}

