//ohms law calculator functions
//copyright Simon Carter 2001
//Please contact me at simon@electronics2000.co.uk if you wish to use these//and ensure this header bloack remains intact

function computevolts (obj) {
with (Math) {
a1=eval(obj.current.value);
r1=eval(obj.resistance.value);
a1=calculatemult2(obj.currentmult.selectedIndex,a1);
r1=calculatemult1(obj.resistancemult.selectedIndex,r1);
if((a1) && (r1)){
	v1 = a1 * r1;
	obj.voltage.value =format(v1);}
else	{obj.voltage.value ="";}
}	
}

function computeamps (obj) {
with (Math) {
v2=eval(obj.voltage.value);
r2=eval(obj.resistance.value);
v2=calculatemult2(obj.voltagemult.selectedIndex,v2);
r2=calculatemult1(obj.resistancemult.selectedIndex,r2);
if((v2) && (r2)){
	a2 = v2 / r2;
	obj.current.value =format(a2);}
else	{obj.current.value ="";}
}	
}

function computeohms (obj) {
with (Math) {
v3=eval(obj.voltage.value);
a3=eval(obj.current.value);
v3=calculatemult2(obj.voltagemult.selectedIndex,v3);
a3=calculatemult2(obj.currentmult.selectedIndex,a3);
if((v3) && (a3)){
	r3= v3 / a3;
	obj.resistance.value =format(r3);}
else	{obj.resistance.value ="";}
}	
}

function calculatemult1 (multiplier,value)
//calculates multipliers Kilo and Meg
{if (multiplier==0)
	{return value}
else if (multiplier==1)
	{return value *= 1000;}
else if (multiplier==2)
	{return value *= 1000000;}
}

function calculatemult2 (multiplier,value)
//calculates multipliers Milli and Micro
{if (multiplier==0)
	{return value}
else if (multiplier==1)
	{return value /= 1000;}
else if (multiplier==2)
	{return value /= 1000000;}
}

function format(value)
//formats value with p - M suffix if appropriate
{if (value<0.000000001)
	{value *= 1000000000000;
	return round_res(value) + "p";}
else if (value<0.000001)
	{value *= 1000000000;
	return round_res(value) + "n";}
else if (value<0.001)
	{value *= 1000000;
	return round_res(value) + "u";}
else if (value<1)
	{value *= 1000;
	return round_res(value) + "m";}
else if (value>=1000000)
	{value /= 1000000;
	return round_res(value) + "M";}
else if (value>=1000)
	{value /= 1000;
	return round_res(value) + "K";}
else	{return round_res(value);}
}

function round_res(value)
// rounds value to 3dp
{return (Math.round(value*1000)) / 1000;}