
function init() {

	initAssumptions();
	updateData();
	do_onload();
}

// the variable textboxes
var ti_Vp;
var ti_m;
var ti_PWM;
var ti_Cesr;
var ti_R;

var ti_L_HBT_1;
var ti_L_HBT_2;
var ti_L_HBT_3;

var ti_L_FBT_1;
var ti_L_FBT_2;
var ti_L_FBT_3;

var ti_L_PFBT_1;
var ti_L_PFBT_2;
var ti_L_PFBT_3;

function initAssumptions() {
	
	ti_Vp = document.getElementById('Vp');
	ti_Vp.onchange = updateData;
	ti_Vp.onkeyup = updateData;
	ti_m = document.getElementById('m');
	ti_m.onchange = updateData;
	ti_m.onkeyup = updateData;	
	ti_PWM = document.getElementById('PWM');
	ti_PWM.onchange = updateData;
	ti_PWM.onkeyup = updateData;	
	ti_Cesr = document.getElementById('Cesr');
	ti_Cesr.onchange = updateData;
	ti_Cesr.onkeyup = updateData;	
	ti_R = document.getElementById('R');
	ti_R.onchange = updateData;
	ti_R.onkeyup = updateData;	
	
	ti_L_HBT_1 = document.getElementById('L_HBT_1');
	ti_L_HBT_1.onchange = updateData;
	ti_L_HBT_1.onkeyup = updateData;
	ti_L_HBT_2 = document.getElementById('L_HBT_2');
	ti_L_HBT_2.onchange = updateData;
	ti_L_HBT_2.onkeyup = updateData;
	ti_L_HBT_3 = document.getElementById('L_HBT_3');
	ti_L_HBT_3.onchange = updateData;
	ti_L_HBT_3.onkeyup = updateData;
	
	ti_L_FBT_1 = document.getElementById('L_FBT_1');
	ti_L_FBT_1.onchange = updateData;
	ti_L_FBT_1.onkeyup = updateData;
	ti_L_FBT_2 = document.getElementById('L_FBT_2');
	ti_L_FBT_2.onchange = updateData;
	ti_L_FBT_2.onkeyup = updateData;
	ti_L_FBT_3 = document.getElementById('L_FBT_3');
	ti_L_FBT_3.onchange = updateData;	
	ti_L_FBT_3.onkeyup = updateData;
	
	ti_L_PFBT_1 = document.getElementById('L_PFBT_1');
	ti_L_PFBT_1.onchange = updateData;
	ti_L_PFBT_1.onkeyup = updateData;
	ti_L_PFBT_2 = document.getElementById('L_PFBT_2');
	ti_L_PFBT_2.onchange = updateData;
	ti_L_PFBT_2.onkeyup = updateData;
	ti_L_PFBT_3 = document.getElementById('L_PFBT_3');
	ti_L_PFBT_3.onchange = updateData;		
	ti_L_PFBT_3.onkeyup = updateData;
	
}

function updateData() {
	
	var L_HBT_1 = new Number(ti_L_HBT_1.value);
	var L_HBT_2 = new Number(ti_L_HBT_2.value);
	var L_HBT_3 = new Number(ti_L_HBT_3.value);
	
	var L_FBT_1 = new Number(ti_L_FBT_1.value);
	var L_FBT_2 = new Number(ti_L_FBT_2.value);
	var L_FBT_3 = new Number(ti_L_FBT_3.value);	
	
	var L_PFBT_1 = new Number(ti_L_PFBT_1.value);
	var L_PFBT_2 = new Number(ti_L_PFBT_2.value);
	var L_PFBT_3 = new Number(ti_L_PFBT_3.value);		
	
	// calc the half-bridge tied
	var dataBoxes = new Array( 
		document.getElementById('P_HBT_1'), 
		document.getElementById('Crms_HBT_1'),
		document.getElementById('Cpeak_HBT_1'),
		document.getElementById('PL1_HBT_1'),
		document.getElementById('PL2_HBT_1'),
		document.getElementById('PL3_HBT_1'),
		document.getElementById('E_HBT_1'),
		document.getElementById('Pd_HBT_1')
	);
	updateDataL1(L_HBT_1, dataBoxes);
	dataBoxes = new Array( 
		document.getElementById('P_HBT_2'),
		document.getElementById('Crms_HBT_2'),
		document.getElementById('Cpeak_HBT_2'),
		document.getElementById('PL1_HBT_2'),
		document.getElementById('PL2_HBT_2'),
		document.getElementById('PL3_HBT_2'),
		document.getElementById('E_HBT_2'),
		document.getElementById('Pd_HBT_2')
	);
	updateDataL1(L_HBT_2, dataBoxes);	
	dataBoxes = new Array( 
		document.getElementById('P_HBT_3'), 
		document.getElementById('Crms_HBT_3'),
		document.getElementById('Cpeak_HBT_3'),
		document.getElementById('PL1_HBT_3'),
		document.getElementById('PL2_HBT_3'),
		document.getElementById('PL3_HBT_3'),
		document.getElementById('E_HBT_3'),		
		document.getElementById('Pd_HBT_3')
	);
	updateDataL1(L_HBT_3, dataBoxes);	
	
	
	// calc the full-bridge tied
	var dataBoxes = new Array( 
		document.getElementById('P_FBT_1'), 
		document.getElementById('Crms_FBT_1'),
		document.getElementById('Cpeak_FBT_1'),
		document.getElementById('PL1_FBT_1'),
		document.getElementById('PL2_FBT_1'),
		document.getElementById('PL3_FBT_1'),
		document.getElementById('E_FBT_1'),
		document.getElementById('Pd_FBT_1')
	);
	updateDataL2(L_FBT_1, dataBoxes);
	dataBoxes = new Array( 
		document.getElementById('P_FBT_2'),
		document.getElementById('Crms_FBT_2'),
		document.getElementById('Cpeak_FBT_2'),
		document.getElementById('PL1_FBT_2'),
		document.getElementById('PL2_FBT_2'),
		document.getElementById('PL3_FBT_2'),
		document.getElementById('E_FBT_2'),
		document.getElementById('Pd_FBT_2')
	);
	updateDataL2(L_FBT_2, dataBoxes);	
	dataBoxes = new Array( 
		document.getElementById('P_FBT_3'), 
		document.getElementById('Crms_FBT_3'),
		document.getElementById('Cpeak_FBT_3'),
		document.getElementById('PL1_FBT_3'),
		document.getElementById('PL2_FBT_3'),
		document.getElementById('PL3_FBT_3'),
		document.getElementById('E_FBT_3'),
		document.getElementById('Pd_FBT_3')
	);
	updateDataL2(L_FBT_3, dataBoxes);	

	// calc the parallel full-bridge tied

	var dataBoxes = new Array( 
		document.getElementById('P_PFBT_1'), 
		document.getElementById('Crms_PFBT_1'),
		document.getElementById('Cpeak_PFBT_1'),
		document.getElementById('PL1_PFBT_1'),
		document.getElementById('PL2_PFBT_1'),
		document.getElementById('PL3_PFBT_1'),
		document.getElementById('E_PFBT_1'),
		document.getElementById('Pd_PFBT_1')
	);
	updateDataL3(L_PFBT_1, dataBoxes);
	dataBoxes = new Array( 
		document.getElementById('P_PFBT_2'),
		document.getElementById('Crms_PFBT_2'),
		document.getElementById('Cpeak_PFBT_2'),
		document.getElementById('PL1_PFBT_2'),
		document.getElementById('PL2_PFBT_2'),
		document.getElementById('PL3_PFBT_2'),
		document.getElementById('E_PFBT_2'),
		document.getElementById('Pd_PFBT_2')
	);
	updateDataL3(L_PFBT_2, dataBoxes);	
	dataBoxes = new Array( 
		document.getElementById('P_PFBT_3'), 
		document.getElementById('Crms_PFBT_3'),
		document.getElementById('Cpeak_PFBT_3'),
		document.getElementById('PL1_PFBT_3'),
		document.getElementById('PL2_PFBT_3'),
		document.getElementById('PL3_PFBT_3'),
		document.getElementById('E_PFBT_3'),
		document.getElementById('Pd_PFBT_3')
	);
	updateDataL3(L_PFBT_3, dataBoxes);	
	
}

function updateDataL1(L, dataBoxes) {
		
		var Vp = new Number(ti_Vp.value);
		var m = new Number(ti_m.value);
		var PWM = new Number(ti_PWM.value);
		var Cesr = new Number(ti_Cesr.value);
		var R = new Number(ti_R.value);
		var Fp = new Number(L + PWM + Cesr + R);
		Fp = Math.round(Fp*1000)/1000;
		
		// Power out (W)
		numerator = Math.pow(((Vp * m)/2.83),2);
		var P =  numerator / Fp;		
		var Prnd = Math.round(P*100)/100;
		// alert ('L = ' + L + ' PWM = ' + PWM + ' Cesr = ' + Cesr + ' R = ' + R + ' Fp = ' + Fp + ' m = ' + m + ' Vp = ' + Vp);
		updateDatabox(dataBoxes[0], Prnd);		
		
		// Total Current (rms)
		var Crms = Math.sqrt(new Number(P/Fp));
		var Crmsrnd = Math.round(100*Crms)/100;
		updateDatabox(dataBoxes[1], Crmsrnd);		
		
		// Total Current (peak)
		var Cpeak = new Number(Crms * 1.414);
		var Cpeakrnd = Math.round(Cpeak*100)/100;
		updateDatabox(dataBoxes[2], Cpeakrnd);
		
		// Power at the Load (0.1%)
		var Lp1 = new Number(Math.pow(Crms, 2) * L);
		var Lp1rnd = Math.round(Lp1 * 100)/100;
		updateDatabox(dataBoxes[3], Lp1rnd);
		
		// Power at the Load (1%)
		var Lp2 = new Number(Lp1 * 1.15);
		var Lp2rnd = Math.round(Lp2 * 100)/100;
		updateDatabox(dataBoxes[4], Lp2rnd);
		
		// Power at the Load (10%)
		var Lp3 = new Number(Lp1 * 1.75);
		var Lp3rnd = Math.round(Lp3 * 100)/100;
		updateDatabox(dataBoxes[5], Lp3rnd);		
		
		// Effciency		
		var E = new Number(Lp1 / P);
		var Ernd = Math.round(E * 100) / 100;
		updateDatabox(dataBoxes[6], Ernd);
		
		// Power Dissipation (W) per channel
		var Pd = new Number(Math.pow(Crms, 2)*PWM);
		var Pdrnd = Math.round(Pd * 100)/100;
		updateDatabox(dataBoxes[7], Pdrnd);
}

function updateDataL2(L, dataBoxes) {
		
		var Vp = new Number(ti_Vp.value);
		var m = new Number(ti_m.value);
		var PWM = new Number(ti_PWM.value);
		var Cesr = new Number(ti_Cesr.value);
		var R = new Number(ti_R.value);
		var Fp = new Number(L + (2*PWM) + (2*R));
		Fp = Math.round(Fp*1000)/1000;
		
		// Power out (W)
		numerator = Math.pow((((2*Vp) * m)/2.83),2);
		var P =  numerator / Fp;		
		var Prnd = Math.round(P*100)/100;
		// alert ('L = ' + L + ' PWM = ' + PWM + ' Cesr = ' + Cesr + ' R = ' + R + ' Fp = ' + Fp + ' m = ' + m + ' Vp = ' + Vp);
		updateDatabox(dataBoxes[0], Prnd);
		
		// Total Current (rms)
		var Crms = Math.sqrt(new Number(P/Fp));
		var Crmsrnd = Math.round(100*Crms)/100;
		updateDatabox(dataBoxes[1], Crmsrnd);		
		
		// Total Current (peak)
		var Cpeak = new Number(Crms * 1.414);
		var Cpeakrnd = Math.round(Cpeak*100)/100;
		updateDatabox(dataBoxes[2], Cpeakrnd);
		
		// Power at the Load (0.1%)
		var Lp1 = new Number(Math.pow(Crms, 2) * L);
		var Lp1rnd = Math.round(Lp1 * 100)/100;
		updateDatabox(dataBoxes[3], Lp1rnd);
		
		// Power at the Load (1%)
		var Lp2 = new Number(Lp1 * 1.15);
		var Lp2rnd = Math.round(Lp2 * 100)/100;
		updateDatabox(dataBoxes[4], Lp2rnd);
		
		// Power at the Load (10%)
		var Lp3 = new Number(Lp1 * 1.75);
		var Lp3rnd = Math.round(Lp3 * 100)/100;
		updateDatabox(dataBoxes[5], Lp3rnd);				
		
		// Effciency		
		var E = new Number(Lp1 / P);
		var Ernd = Math.round(E * 100) / 100;
		updateDatabox(dataBoxes[6], Ernd);		
		
		// Power Dissipation (W) per channel
		var Pd = new Number(Math.pow(Crms, 2)*(2*PWM));
		var Pdrnd = Math.round(Pd * 100)/100;
		updateDatabox(dataBoxes[7], Pdrnd);
}

function updateDataL3(L, dataBoxes) {
		
		var Vp = new Number(ti_Vp.value);
		var m = new Number(ti_m.value);
		var PWM = new Number(ti_PWM.value);
		var Cesr = new Number(ti_Cesr.value);
		var R = new Number(ti_R.value);
		var Fp = new Number(L + (PWM) + (2*R));
		Fp = Math.round(Fp*1000)/1000;
		
		// Power out (W)
		numerator = Math.pow((((2*Vp) * m)/2.83),2);
		var P =  numerator / Fp;		
		var Prnd = Math.round(P*100)/100;
		// alert ('L = ' + L + ' PWM = ' + PWM + ' Cesr = ' + Cesr + ' R = ' + R + ' Fp = ' + Fp + ' m = ' + m + ' Vp = ' + Vp);
		updateDatabox(dataBoxes[0], Prnd);
		
		// Total Current (rms)
		var Crms = Math.sqrt(new Number(P/Fp));
		var Crmsrnd = Math.round(100*Crms)/100;
		updateDatabox(dataBoxes[1], Crmsrnd);		
		
		// Total Current (peak)
		var Cpeak = new Number(Crms * 1.414);
		var Cpeakrnd = Math.round(Cpeak*100)/100;
		updateDatabox(dataBoxes[2], Cpeakrnd);
		
		// Power at the Load (0.1%)
		var Lp1 = new Number(Math.pow(Crms, 2) * L);
		var Lp1rnd = Math.round(Lp1 * 100)/100;
		updateDatabox(dataBoxes[3], Lp1rnd);
		
		// Power at the Load (1%)
		var Lp2 = new Number(Lp1 * 1.15);
		var Lp2rnd = Math.round(Lp2 * 100)/100;
		updateDatabox(dataBoxes[4], Lp2rnd);
		
		// Power at the Load (10%)
		var Lp3 = new Number(Lp1 * 1.75);
		var Lp3rnd = Math.round(Lp3 * 100)/100;
		updateDatabox(dataBoxes[5], Lp3rnd);
		
		// Effciency		
		var E = new Number(Lp1 / P);
		var Ernd = Math.round(E * 100) / 100;
		updateDatabox(dataBoxes[6], Ernd);						
		
		// Power Dissipation (W) per channel
		var Pd = new Number(Math.pow(Crms, 2)*(PWM));
		var Pdrnd = Math.round(Pd * 100)/100;
		updateDatabox(dataBoxes[7], Pdrnd);
}

function updateDatabox(box, value) {
	box.innerHTML = value;
}