//This script is subject to copyright law.
//This script may not be copied or used in any way without permission
//from mhSoft, Amsterdam (The Netherlands).
//
//Copyright 1999 mhSoft
function Roundoff(Value)
	{
	Value = Math.round(Value);
	strValue = " " + Value;
	len = strValue.length;
	return strValue.substring(0, len -3) + "." + strValue.substring(len -3, len); 
	}
	
function round(number,X) {
// rounds number to X decimal places, defaults to 3
    X = (!X ? 3 : X);
    return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

function sealed()
	{
	if((eval(document.sbox.vas.value.length) == 0 ) ||
    	(eval(document.sbox.qts.value.length) == 0 ) || 
    	(eval(document.sbox.fs.value.length) == 0 ) ) { alert("not all fields are filled in...");
	}
else
	{
	vas = eval(document.sbox.vas.value);
	qts = eval(document.sbox.qts.value);
	fs = eval(document.sbox.fs.value);
	qtc = eval(document.sbox.qbvalue.value);
	
	// == Berechnungen Closed Box ==
	var alpha = (qtc/qts)*(qtc/qts)-1;
	var vab = vas/alpha;
	var vb = vab/1.1;
	var vb = Math.round(100 * vb) / 100;
	var fc = Math.sqrt(alpha+1)*fs;
	var fc = Math.round(100 * fc) / 100;
	var a1 = (1/qtc/qtc)-2;
	var f3 = fc*Math.sqrt(a1/2+Math.sqrt(a1*a1/4+1));
	var f3 = Math.round(100 * f3) / 100;


	//qr = (1/qts)/(1/qb-.1);
	//fb =  qr*fs;
	//vr = qr*qr-1;

	//*qb = 1/qb + 1/5;
	//*qb = 1/qb;
	//*alpha = ((qb/qts)*(qb/qts)) -1;
	//formel aus Parametermessungen an Lautsprecher-Chassis  von Gaedtke  Seite:59..
	//qtc1 = 1/((1/qb)+(1/5));window.alert("qtc' "+qtc1);
	//alpha = ((qtc1/qts)*(qtc1/qts)) -1;window.alert("alpha "+alpha);
	//fc = fs * (Math.sqrt(alpha+1));window.alert("fc  "+fc);
	//document.sbox.vb.value = Roundoff((vas/alpha)*1000);
	//document.sbox.fb.value = fc;

	//document.sbox.vb.value = Roundoff(((vas/vr))*1000);
	//document.sbox.fb.value = Roundoff((qr*fs)*1000);
	//document.sbox.f3.value = Roundoff(((Math.pow(fs*(Math.pow(1/(qb*qb)-2+((1/(qb*qb)-2)*(1/(qb*qb)-2)+4),1/2)/2),1/2)*10))*1000)-1;
	
	document.sbox.vb.value = vb;
	document.sbox.fb.value = fc;
	document.sbox.f3.value = f3;
	}
}
// --------- ende sealed --------------------------------


//berechne BassReflex
function bfourthbox()
{
if((eval(document.b4box.vas.value.length) == 0 ) ||
   (eval(document.b4box.qts.value.length) == 0 ) ||
   (eval(document.b4box.fs.value.length) == 0 ) || 
   (eval(document.b4box.dia.value.length) == 0 )) { alert("not all fields are filled in....");
 }
else
	{
	vas = eval(document.b4box.vas.value);
	qts = eval(document.b4box.qts.value);
	fs = eval(document.b4box.fs.value);
	dia = eval(document.b4box.dia.value);

	//vb = eval(5.7502 * vas * (qts*qts));
	vb = eval(4.6 * vas * (qts*qts));
	

		fb = (.425 * fs / qts);
		//fb = 0.26 * fs/ Math.pow(qts,1.4)
		//fb = fs * Math.pow((vas/vb),0.32)

		f3 = (.425 * fs / qts);
		//f3 = 0.43 * fs/ Math.pow(qts, 0.9)
		//f3 = fs * Math.pow((vas/vb),0.5)

		//berechne durchmesser reflextunnel
		sv = document.b4box.dia.value;
		vd = sv / 3.14159;
		with ( Math ) 
		{
		vd = sqrt(vd) * 2;
		}	

	//berechne laenge reflextunnel
	// oude versie
	//lv =((2350*(10*vd)*(10*vd))/(fb*fb*vb)-7.3*vd)/10
	
	// nieuwe versie
	lv = ( 23562.5 * vd * vd * 1 / ( fb * fb * vb )) - ( 0.732 * vd )


	//berechne Ql wert fuer die box
	vb = document.b4box.vb.value=Roundoff((vb)*1000);

	if (vb <= 35)
	{
		document.b4box.ql.value = 10;
	}
	else if(vb >= 71) 
	{
		document.b4box.ql.value = 5;
	}
	else 
	{
		document.b4box.ql.value = 7;
	}

	// berechne Peak
	//dBpeak = 20*LOG(qts*(Vas/Vb)^0.3/0.4)
	var dbPeak = Math.pow((vas/vb), 0.3)
	var dbPeak = eval(dbPeak / 0.4);
	var dbPeak = eval(qts * dbPeak);
	var dbPeak = (Math.log(dbPeak) / Math.log(10));
	//alert(dbPeak);
	dbPeak = round(dbPeak,2)


	document.b4box.dbPeak.value= dbPeak;

	//ausgabe von Vb,Vd,Vl,fb,f3
	document.b4box.vb.value=Roundoff((vb)*1000);
	document.b4box.vd.value=Roundoff((vd)*1000);
	//document.b4box.vd2.value=Roundoff((sv)*1000);
	document.b4box.vl.value=Roundoff((lv)*1000);
	document.b4box.fb.value=Roundoff((fb)*1000);
	document.b4box.f3.value=Roundoff((f3)*1000);}
}
// --------- ende b4box --------------------------------


//berechne Feinabstimmung Bassreflex tunnel



function lvfein()
{
if((eval(document.lvneu.fba.value.length) == 0 ) ||
   (eval(document.lvneu.fbb.value.length) == 0 ) || 
   (eval(document.lvneu.lv.value.length) == 0 )) { alert("not all fields are filled in....");
 }
else
		
	fba = document.lvneu.fba.value
	fbb = document.lvneu.fbb.value
	lv  = document.lvneu.lv.value

	document.lvneu.lv.value = lv
	document.lvneu.fba.value = fba
	lv_new = -(fba - fbb) * 2 * lv / fbb
	lvtotal = parseFloat(lv) + lv_new

	if(lv_new < "0.01") {document.lvneu.tekst.value=("shorter")}
	else  
	{document.lvneu.tekst.value=("longer")}
	document.lvneu.lv2.value = round(lv_new, 2);
	document.lvneu.lvtotal.value = round(lvtotal, 2);
	
	//window.alert(lvtotal);
}

function over_lv()
{
	lv = document.ber.lv.value;
	document.lvneu.lv.value = lv;
	fba = document.ber.fb.value;
	document.lvneu.fba.value = fba;
}
function over_fb()
{
	//fba = document.b4box.fb.value;
	//document.lvneu.fba.value = fb1;
}
	
// -------- ende new Lv -----------------------------------





//berechne TML
function vline() {
if ((document.tml.fr.value <=0) ||
	(document.tml.taper.value <=0) ||
   (document.tml.c.value <=0)) {alert(" not all fields are filled in!");}
else	{
	fr = eval(document.tml.fr.value);		// == gewenste resonantiefrekwentie TML
	c  = eval(document.tml.c.value);		// == luchtsnellheid
	c = c * 0.8								// == Demping verlanzaamnd de luchtsnellheid ==
	//sd = eval(document.tml.sd.value);		// == membraanobervlakte
	sd = eval(document.tml.oberfl.value);  
	taper = eval(document.tml.taper.value); // == taper
	
	// == berechnungen ==
	radius		= sd/3.14259;
	radius		= Math.sqrt(radius);
	radius		= ((2*radius)*1.25) + 2;	// === durchmesser + 2 cm reserve ==
	vl			= c/fr/4;					// == Line Laenge == 
	tmlbegin	= sd * taper;					// == 150% von Sd ==
	TMLd		= tmlbegin / radius			// == diepte kast in cm
	diepteBox	= ((tmlbegin / radius) + TMLd) + (3 * 1.9);	
	
	// == auf drei stellen formatieren ==
	vl			= round(vl,2);
	radius		= round(radius,2);
	tmlbegin	= round(tmlbegin,2);
	TMLd		= round(TMLd,2);
	sd			= round(sd,2);
	diepteBox	= round(diepteBox,2);

	
	// == werte an Form uebergeben ==
	document.tml.doorsneede.value	= radius;
	document.tml.vl.value			= vl;
	document.tml.tmlbegin.value		= tmlbegin;
	document.tml.tmluit.value		= sd;
	document.tml.TMLd.value			= TMLd;
	document.tml.diepteBox.value	= diepteBox;	
	}
}


//berechne 6dB Filter
function firstorder(){
if((document.first.rh.value <= 0 ) ||
	 (document.first.rl.value <= 0 ) ||
	 (document.first.fc.value <= 0 )) {alert("not all fields are filled in..."); }
else 
	{
	rl = eval(document.first.rl.value);
	rh = eval(document.first.rh.value);
	fc = eval(document.first.fc.value);
	c1 = eval((.159/(rh*fc))*1000000);
	l1 = eval((rl/(6.28*fc))*1000);
	c1 = round(c1,2)
	l1 = round(l1,2)
	document.first.c1.value = c1;
	document.first.l1.value = l1;
	//document.first.c1.value = eval((.159/(rh*fc))*1000000);
	//document.first.l1.value = eval((rl/(6.28*fc))*1000);
	}
}
//berechne 12dB Filter
function secondorder(){
if((document.second.cratio.value <= 0) || (document.second.lratio.value <= 0) || (document.second.rh.value <= 0 ) || (document.second.rl.value <= 0 ) || (document.second.fc.value <= 0 ))	{alert("een van de velden is niet ingevuld...");  }
else 	
{
	cratio = eval(document.second.cratio.value);
	lratio = eval(document.second.lratio.value);
	rl = eval(document.second.rl.value);
	rh = eval(document.second.rh.value);
	fc = eval(document.second.fc.value);
	c1 = eval((cratio/(rh*fc))*1000000);
	c2 = eval((cratio/(rl*fc))*1000000);
	l1 = eval((lratio*rh/fc)*1000);
	l2 = eval((lratio*rl/fc)*1000);
	c1 = round(c1,2);
	c2 = round(c2,2);
	l1 = round(l1,2);
	l2 = round(l2,2);
	document.second.c1.value = c1;
	document.second.l1.value = l1;
	document.second.c2.value = c2;
	document.second.l2.value =l2;	
	}
}
//berechne 18dB Filter
function thirdorder(){
	if((document.third.rh.value <= 0 ) ||
	 (document.third.rl.value <= 0 ) ||
	 (document.third.fc.value <= 0 )) {alert("not all fields are filled in..."); }
else 	{
	rl = eval(document.third.rl.value);
	rh = eval(document.third.rh.value);
	fc = eval(document.third.fc.value);
	c1 = eval((.1061/(rh*fc))*1000000);
	c2 = eval((.3183/(rh*fc))*1000000);
	c3 = eval((.2122/(rl*fc))*1000000);
	l1 = eval(( .1194*rh/fc)*1000);
	l2 = eval(( .2387*rl/fc)*1000);
	l3 = eval(( .0796*rl/fc)*1000);
	c1 = round(c1,2);
	c2 = round(c2,2);
	c3 = round(c3,2);
	l1 = round(l1,2);
	l2 = round(l2,2);
	l3 = round(l3,2);
	document.third.c1.value = c1;
	document.third.c2.value = c2;
	document.third.c3.value = c3;
	document.third.l1.value = l1;
	document.third.l2.value = l2;
	document.third.l3.value = l3;
	}
}
function secondtype(typeRadio){
if (typeRadio == "1")
	{
	document.second.cratio.value = ".1125"; 
	document.second.lratio.value = ".2251";		
        }
	else if (typeRadio == "2"){
	document.second.cratio.value = ".0796"; 
	document.second.lratio.value = ".3183";		
	}
	else if (typeRadio == "3"){
	document.second.cratio.value = ".0912"; 
	document.second.lratio.value = ".2756";		
	}
}
//berechne neuen Qts wert
function newqt(){
if((document.newqts.qes.value <=0) ||
 (document.newqts.qms.value <=0) ||
 (document.newqts.re.value <=0) ||
 (document.newqts.rc.value <=0)) alert("not all fields are filled in...");
else	
{
qes = eval(document.newqts.qes.value);
qms = eval(document.newqts.qms.value);
re = eval(document.newqts.re.value);
rc = eval(document.newqts.rc.value);
nqes = eval(qes*((re+rc)/re));

qts = (qes*qms)/(qes+qms); 

qts = qts.toString();
qts = qts.substring(0.5);
//qts = round(qts,3);

document.newqts.orginal_qts.value = qts;
document.newqts.newqts.value = round(nqes*qms/(nqes+qms),3);	
}
}
//berechne L-Pad(abschwaecher)
function lpad()
{
if((document.lp.imp.value <=0) || (document.lp.att.value <=0)) alert("please fillin Attenuation and Impedance !");
else	
	{
	imp = eval(document.lp.imp.value);
	att = eval(document.lp.att.value);
	l = eval(.05 * att);
	r1 = imp * (((Math.pow(10, l)) - 1) / (Math.pow(10, l)));
	r2 =  imp *( 1 / ((Math.pow(10, l)) - 1));	
	r1 = round(r1,1);
	r2 = round(r2,1);
	document.lp.r1.value = r1;
	document.lp.r2.value = r2;
	//document.lp.r1.value = imp * (((Math.pow(10, l)) - 1) / (Math.pow(10, l)));
	//document.lp.r2.value = imp *( 1 / ((Math.pow(10, l)) - 1));	
	}
}
//berechen RC-Equalizer - Zobel
function equaliz()
{
if((document.eq.re.value <=0) || (document.eq.le.value <=0)) alert("fillin Re and Le first !");
else	
	{
	rc = eval(document.eq.re.value * 1.25);
	ca = 1000 * (eval(document.eq.le.value / (rc * rc)));
	rc = round(rc,2);
	ca = round(ca,2);
	document.eq.ca.value = ca;
	document.eq.rc.value = rc;	
	}
}

//Q-Berechnungen
function qwerte() 
{
	if((document.q.re.value <=0) ||(document.q.fs.value <=0))
	 {alert("not all required fields are filled in!")}
else {
	re = document.q.re.value; 
	fs = document.q.fs.value;
	zmax = document.q.zmax.value; 
	f1 = document.q.f1.value;
	f2 = document.q.f2.value;
	}
r0 = zmax / re;	 
z3db = Math.sqrt(r0 * re);


document.q.f13db.value = z3db;
}

function qtx() 
{
	re = document.q.re.value; 
	fs = document.q.fs.value;
	zmax = document.q.zmax.value; 
	f1 = document.q.f1.value;
	f2 = document.q.f2.value;

fx = Math.sqrt(f2*f1);
fx = round(fx,2);

document.q.fx.value = fx;

//if((fx < fs - 1.0) || (fx > fs + 1.0)) { alert("calcutate fs = " + fx + " Hz\n\n fs is niet binnen de tolerancie van +- 1 Hz!!\n\nde waarden van f1 en f2 opnieuw meeten!!");}
if((fx < fs - 1.0) || (fx > fs + 1.0)) { alert("calcutate fs = " + fx + " Hz\n\n fs is not inside the tolerance of +- 1 Hz!!\n\n Please measure the values for f1 and f2 again !!");}
r0 = zmax / re;	 
qm = (fs * Math.sqrt(r0)) / (f2-f1);
qe = qm / (r0 -1);
qt = (qe * qm) / (qe + qm);

qm = qm.toString();
qm = qm.substring(0,4);

qe  = qe.toString();
qe = qe.substring(0,4);

qt  = qt.toString();
qt = qt.substring(0,4);

document.q.qm.value = qm;
document.q.qe.value = qe;
document.q.qt.value = qt;
}



//overnehmen sealed Box
function over_sealed_fs()
{
	fs = document.sbox.fs.value;
	document.freqform.ffs.value = fs;
}
function over_sealed_vb()
{
	vb = document.sbox.vb.value;
	document.freqform.fvb.value = vb;
}
function over_sealed_vas()
{
	vas = eval(document.sbox.vas.value);
	document.freqform.fvas.value = vas;
}
function over_sealed_qts()
{
	qts = eval(document.sbox.qts.value);
	document.freqform.fqts.value = qts;
}

//overnehmen portes Box
function over_ported_fs()
{
	fs = document.b4box.fs.value;
	document.freqform.ffs.value = fs;
}
function over_ported_fb()
{
	fb = eval(document.b4box.fb.value);
	document.freqform.ffb.value = fb;
}

function over_ported_vb()
{
	vb = document.b4box.vb.value;
	document.freqform.fvb.value = vb;
}
function over_ported_vas()
{
	vas = eval(document.b4box.vas.value);
	document.freqform.fvas.value = vas;
}
function over_ported_qts()
{
	qts = eval(document.b4box.qts.value);
	document.freqform.fqts.value = qts;
}
function over_ported_ql()
{
	ql = eval(document.b4box.ql.value);
	document.freqform.fql.value = ql;
}




//umrechnung von cm nach inch
function cm_inch()
{
if(document.laenge.cm.value <=0) alert("je moet de cm ingeven!");
else
	{
	inch = eval(document.laenge.cm.value * 0.3937);
	ft = eval(document.laenge.cm.value * 0.032808);
	document.laenge.inch.value = inch;
	document.laenge.ft.value = ft;
	}
}
//umrechnung von inch nach cm
function inch_cm()
{
if(document.laengeinchcm.inch.value <=0) alert("je moet de inch ingeven!");
else
	{
	cm = eval(document.laengeinchcm.inch.value * 2.54);
	ft = eval(document.laengeinchcm.inch.value * 0.08333);
	document.laengeinchcm.cm.value = cm;
	document.laengeinchcm.ft.value = ft;
	}
}
//umrechnung von meter nach feet
function m_ft()
{
if(document.laengemft.m.value <=0) alert("je moet de m ingeven!");
else
	{
	ft = eval(document.laengemft.m.value * 3.2808);
	inch = eval(document.laengemft.m.value * 39.37);
	document.laengemft.ft.value = ft;
	document.laengemft.inch.value = inch;
	}
}
//umrechnung von feet nach meter
function ft_m()
{
if(document.laengeft.ft.value <=0) alert("je moet de ft ingeven!");
else
	{
	m = eval(document.laengeft.ft.value * 0.3048);
	inch = eval(m * 39.37);
	document.laengeft.m.value = m;
	document.laengeft.inch.value =inch;
	}
}
//umrechnung von quadrat-cm nach quadrat-inch
function cm2_inch2()
{
if(document.volume.cm2.value <=0) alert("je moet de cm2 ingeven!");
else
	{
	inch2 = eval(document.volume.cm2.value * 0.155);
	ft2 = eval(document.volume.cm2.value / 929.033);
	document.volume.inch2.value = inch2;
	document.volume.ft2.value = ft2;
	}
}
//umrechnung von quadrat-inch nach quadrat-cm
function inch2_cm2()
{
if(document.volumecm2.inch2.value <=0) alert("je moet de inch2 ingeven!");
else
	{
	cm2 = eval(document.volumecm2.inch2.value * 6.452);
	ft2 = eval(document.volumecm2.inch2.value * 0.006943916);
	document.volumecm2.cm2.value = cm2;
	document.volumecm2.ft2.value = ft2;
	}
}
//umrechneung von Liter nach ft3
function liter_ft3()
{
if(document.liter_ft.liter.value <=0) alert("je moet de liter ingeven!");
else
	{
	ft3 = eval(document.liter_ft.liter.value * 0.0353);
	//ft2 = eval(document.volumecm2.inch2.value * 0.006943916);
	document.liter_ft.ft3.value = ft3;
	//document.volumecm2.ft2.value = ft2;
	}
}
//umrechnung von ft3 nach Liter
function ft3_liter()
{
if(document.ft_liter.ft3.value <=0) alert("je moet de ft3 ingeven!");
else
	{
	liter = eval(document.ft_liter.ft3.value * 28.317);
	m3 = eval(document.ft_liter.ft3.value * 0.02831);
	document.ft_liter.liter.value = liter;
	document.ft_liter.m3.value = m3;
	}
}


// calculate Attenuation Circuit ======================================================
function pegel() {
var Rdiff = Math.pow(10,(-document.frmLevel.d_db.value / 20));
var rs = eval(document.frmLevel.impedanz.value) * (1 - Rdiff);
var rp = 1/((1/eval(document.frmLevel.impedanz.value))*((1/Rdiff)-1));
document.frmLevel.r_s.value = round(rs,2); //Math.round(10 * rs) / 10;
document.frmLevel.r_p.value = round(rp,2); //Math.round(10 * rp) / 10;
//power();
}
function pegel_r() {
var rs = eval(document.frmLevel.r_s.value);
var rp = eval(1/((1/document.frmLevel.r_p.value)+(1/document.frm.impedanz.value)));
var quot = eval(rp/(rs+rp));
document.frmLevel.d_db.value = - Math.round(200 * Math.log(quot)/Math.log(10)) / 10;
//power();
} 

function Zpegel() {

var R, R1, R2, Z, Damping
var lsp, Dt, Zdiff

R = eval(document.frmLevel2.R.value);
R1 = eval(document.frmLevel2.R1.value);
R2 = eval(document.frmLevel2.R2.value);

lsp = R*R2 / (R + R2);
Z = R1 + lsp; // new driver impedance
Dt = lsp / (Z);
demping = 20 * (Math.log(Dt) / Math.log(10));



if (Z > R)
{
	Zdiff = Z-R
}
else
{
	Zdiff = R - Z;

}

if (Zdiff <=0.25)
{
	document.frmLevel2.message.value = round(Zdiff,2) + " ohm, perfect attenuation ";
}
else if (Zdiff >=0.25)
{
	document.frmLevel2.message.value="Diff. = " + round(Zdiff,2) + " ohm >>>> Impedance out off range";
}
else
{
	document.frmLevel2.message.value="Diff. = " + round(Zdiff,2) + " ohm >>>> Impedance out off range";
}

document.frmLevel2.Z.value = round(Z,2);
document.frmLevel2.demping.value = round(demping,2);
document.frmLevel2.Zdiff.value = round(Zdiff,3);
}
//=======================================================================================

