// potential divider functions
// copyright Simon Carter 2001
// Please contact me via www.electronics2000.co.uk if you wish to use these
// and ensure this header block remains intact

function findv2 (obj) {
  HideTip("tipbox_1");

  if(obj.res1_1.value=="" || obj.res2_1.value=="" || obj.volts1_1.value=="")
  		{
  		SetText("volts2_1","?");
  		return 0;
  		}

  with (Math){
          r1=abs(calculatemult1(obj.res1mult_1.selectedIndex,eval(obj.res1_1.value)));
          r2=abs(calculatemult1(obj.res2mult_1.selectedIndex,eval(obj.res2_1.value)));
          v1=calculatemult2(obj.volts1mult_1.selectedIndex,v1=eval(obj.volts1_1.value));
				}
    		v2 = (r2 / (r1 + r2)) * v1;
    		SetText("volts2_1", format(v2) + " Volts");
}

function findres (obj) {
  HideTip("tipbox_2");
  if(obj.volts1_2.value=="" || obj.volts2_2.value=="" || obj.rest_2.value=="")
  		{
  		SetText("res1_2", "?");
  		SetText("res2_2", "?");
		SetText("prefres1_2", "?");
		SetText("prefres2_2", "?");
  		return 0;
  		}

  with (Math){
        rt=abs(calculatemult1(obj.restmult_2.selectedIndex,eval(obj.rest_2.value)));
        v1=calculatemult2(obj.volts1mult_2.selectedIndex,eval(obj.volts1_2.value));
        v2=calculatemult2(obj.volts2mult_2.selectedIndex,eval(obj.volts2_2.value));
  		}

	if ((v2 < 0 && v1 > 0) || (v2 > 0 && v1 < 0))
	{
	 	ShowErrorTip("tipbox_2", "volts2mult_2", "V1 and V2 must either both be positive, or both negative!");
		SetText("res1_2", "?");
		SetText("res2_2", "?");
		SetText("prefres1_2", "?");
		SetText("prefres2_2", "?");

	}
  else if((v1 > 0 && v2 >= v1) || (v1 < 0 && v2 <= v1))
  	{
  		SetText("res1_2", "?");
    	SetText("res2_2", "?");
		SetText("prefres1_2", "?");
		SetText("prefres2_2", "?");
    	ShowErrorTip("tipbox_2","volts2mult_2","The input voltage, V1, must be greater than the output voltage, V2!");
  	}
  else if(rt <= 0)
  	{
    	ShowErrorTip("tipbox_2","restmult_2","The total resistance must be greater than 0!");
    	SetText("res1_2", "?");
    	SetText("res2_2", "?");
		SetText("prefres1_2", "?");
		SetText("prefres2_2", "?");
  	}

  else{
			if (rt < 1000) ShowInfoTip("tipbox_2","restmult_2","The total resistance should be as large as possible to reduce power dissipation.");
  		v1 = Math.abs(v1);
		v2 = Math.abs(v2);
		r2 = (v2 / v1) * rt;
  		r1 = rt - r2;
		prefr1 = format((GetPrefRes(r1, getCheckedValue(obj.prefseries))));
		prefr2 = format((GetPrefRes(r2, getCheckedValue(obj.prefseries))));
  		r1 = format(r1);
  		r2 = format(r2);
  		SetText("res1_2", r1 + " Ohms");
		SetText("res2_2", r2 + " Ohms");
		SetText("prefres1_2", prefr1 + " Ohms");
		SetText("prefres2_2", prefr2 + " Ohms");
			}
}

function findr1 (obj) {
	HideTip("tipbox_3");
	if (obj.res2_3.value =="" || obj.volts1_3.value =="" || obj.volts2_3.value =="")
	{
			SetText("prefres1_3", "?");
		 	SetText("res1_3", "?");
			return 0;
	}
	with (Math)
	{
    r2 = abs(calculatemult1(obj.res2mult_3.selectedIndex,eval(obj.res2_3.value)));
    v1 = calculatemult2(obj.volts1mult_3.selectedIndex,eval(obj.volts1_3.value));
    v2 = calculatemult2(obj.volts2mult_3.selectedIndex,eval(obj.volts2_3.value));
	}
	if (v1 == 0)
	{
	 	ShowErrorTip("tipbox_3", "volts1mult_3", "V1 cannot be 0!");
		SetText("res1_3", "?");
		SetText("prefres1_3", "?");
	}
	else if (v2 == 0)
	{
	 	ShowErrorTip("tipbox_3", "volts2mult_3", "V2 cannot be 0!");
		SetText("res1_3", "?");
		SetText("prefres1_3", "?");
	}
	else if ((v2 < 0 && v1 > 0) || (v2 > 0 && v1 < 0))
	{
	 	ShowErrorTip("tipbox_3", "volts2mult_3", "V1 and V2 must either both be positive, or both negative!");
		SetText("res1_3", "?");
		SetText("prefres1_3", "?");
	}
	else if(v2 > v1)
	{
	 	ShowErrorTip("tipbox_3", "volts2mult_3", "V1 must be greater than V2!");
	 	SetText("res1_3", "?");
		SetText("prefres1_3", "?");
	}
	else
	{
	 	v1 = Math.abs(v1);
		v2 = Math.abs(v2);
		r1 = ((v1 / v2) * r2) - r2;
		var prefr1 = format((GetPrefRes(r1, getCheckedValue(obj.prefseries))));
		r1 = format(r1);
		SetText("res1_3", r1 + " Ohms");
		SetText("prefres1_3", prefr1 + " Ohms");
	}
}
