var defaultColor="#FFFFFF";
var focusColor="#FFFF00";
var errorColor="#CC0000";
var confidenceLevel=0.05;

function click(e) {
 if (document.all) {
  if (event.button == 2) {
   //alert(message);
return false;
 }}
 if (document.layers) {
 if (e.which == 3) {
   alert(message);return false;
}}}
if (document.layers) {
 document.captureEvents(Event.MOUSEDOWN);
}
document.onmousedown=click;

function FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas)
/**********************************************************************
	IN:
		NUM - the number to format
		decimalNum - the number of decimal places to format the number to
		bolLeadingZero - true / false - display a leading zero for
										numbers between -1 and 1
		bolParens - true / false - use parenthesis around negative numbers
		bolCommas - put commas as number separators.

	RETVAL:
		The formatted number!
 **********************************************************************/
{
        if (isNaN(parseInt(num))) return "NaN";

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1;		// Get sign of number
	var i = 0;

	// Adjust number so only the specified number of numbers after
	// the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
	tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign;					// Readjust for sign


	// Create a string object to do our formatting on
	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num > 0)
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);

	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {
		var iStart = tmpNumStr.indexOf(".");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
			iStart -= 3;
		}
	}

	var jStart = tmpNumStr.indexOf(".");
	if (jStart == -1 && decimalNum > 0)
	{
      tmpNumStr = tmpNumStr + ".";
	  for (i=1;i<=decimalNum;i++)
	    tmpNumStr = tmpNumStr + "0";
	}
	else
	{
	  jStart = tmpNumStr.length - (jStart + 1);
      if (jStart < decimalNum)
	  {
        for (i=1;i<=decimalNum - jStart;i++)
          tmpNumStr = tmpNumStr + "0";
      }
	}
	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

	return tmpNumStr;		// Return our formatted string!
}



function DisplayTotali(TotE4,TotE5,TotE6,TotC6,TotD6)
{
  document.inputdata.outE4.value = FormatNumber(TotE4,2,true,false,false);
  document.inputdata.outE5.value = FormatNumber(TotE5,2,true,false,false);
  document.inputdata.outE6.value = FormatNumber(TotE6,2,true,false,false);
  document.inputdata.outC6.value = FormatNumber(TotC6,2,true,false,false);
  document.inputdata.outD6.value = FormatNumber(TotD6,2,true,false,false);
}
function DisplayH(H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13)
{
  var NumeroDecimali = 3;
  document.outputdata.outH2.value = FormatNumber(H2 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outH3.value = FormatNumber(H3 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outH4.value = FormatNumber(H4,NumeroDecimali,true,false,false);
  document.outputdata.outH5.value = FormatNumber(H5,NumeroDecimali,true,false,false);
  document.outputdata.outH6.value = FormatNumber(H6 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outH7.value = FormatNumber(H7 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outH8.value = FormatNumber(H8 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outH9.value = FormatNumber(H9 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outH10.value = FormatNumber(H10,NumeroDecimali,true,false,false);
  document.outputdata.outH11.value = FormatNumber(H11,NumeroDecimali,true,false,false);
  document.outputdata.outH12.value = FormatNumber(H12 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outH13.value = FormatNumber(H13,NumeroDecimali,true,false,false);
}
function DisplayI(I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13)
{
  var NumeroDecimali = 3;
  document.outputdata.outI2.value = FormatNumber(I2 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outI3.value = FormatNumber(I3 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outI4.value = FormatNumber(I4,NumeroDecimali,true,false,false);
  document.outputdata.outI5.value = FormatNumber(I5,NumeroDecimali,true,false,false);
  document.outputdata.outI6.value = FormatNumber(I6 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outI7.value = FormatNumber(I7 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outI8.value = FormatNumber(I8 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outI9.value = FormatNumber(I9 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outI10.value = FormatNumber(I10,NumeroDecimali,true,false,false);
  document.outputdata.outI11.value = FormatNumber(I11,NumeroDecimali,true,false,false);
  document.outputdata.outI12.value = FormatNumber(I12 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outI13.value = FormatNumber(I13,NumeroDecimali,true,false,false);
}
function DisplayJ(J2,J3,J4,J5,J6,J7,J8,J9,J10,J11,J12,J13)
{
  var NumeroDecimali = 3;
  document.outputdata.outJ2.value = FormatNumber(J2 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outJ3.value = FormatNumber(J3 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outJ4.value = FormatNumber(J4,NumeroDecimali,true,false,false);
  document.outputdata.outJ5.value = FormatNumber(J5,NumeroDecimali,true,false,false);
  document.outputdata.outJ6.value = FormatNumber(J6 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outJ7.value = FormatNumber(J7 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outJ8.value = FormatNumber(J8 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outJ9.value = FormatNumber(J9 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outJ10.value = FormatNumber(J10,NumeroDecimali,true,false,false);
  document.outputdata.outJ11.value = FormatNumber(J11,NumeroDecimali,true,false,false);
  document.outputdata.outJ12.value = FormatNumber(J12 * 100,NumeroDecimali,true,false,false);
  document.outputdata.outJ13.value = FormatNumber(J13,NumeroDecimali,true,false,false);
}
function setColor(n)
{
  document.inputdata.inpC4.style.backgroundColor=defaultColor;
  document.inputdata.inpD4.style.backgroundColor=defaultColor;
  document.inputdata.inpC5.style.backgroundColor=defaultColor;
  document.inputdata.inpD5.style.backgroundColor=defaultColor;
  if (n == 1)
  {
    document.inputdata.inpC4.style.backgroundColor=focusColor;
  }
  if (n == 2)
  {
    document.inputdata.inpD4.style.backgroundColor=focusColor;
  }
  if (n == 3)
  {
    document.inputdata.inpC5.style.backgroundColor=focusColor;
  }
  if (n == 4)
  {
    document.inputdata.inpD5.style.backgroundColor=focusColor;
  }
  return 0
}
function setLabelItaliano()
{
  document.bgColor='#FFFFFF';
  window.document.inputdata.Inglese.checked = false;
  window.document.inputdata.Italiano.checked = true;
  document.inputdata.EBLM.value='Strumenti EBM per i Test Diagnostici Ver. 1.2';
  document.inputdata.TargetDisorder.value='PATOLOGIA';
  document.inputdata.Present.value='Presente';
  document.inputdata.Absent.value='Assente';
  document.inputdata.Positive.value='Positivo';
  document.inputdata.Negative.value='Negativo';
  document.inputdata.TestResult.value='Risultato del TEST diagnostico';
  document.inputdata.ConfLevelText.value='Intervallo di confidenza ';
  document.outputdata.outL2.value='Sensibilità (%)';
  document.outputdata.outL3.value='Specificità (%)';
  document.outputdata.outL4.value='Likelihood Ratio per un test positivo';
  document.outputdata.outL5.value='Likelihood Ratio per un test negativo';
  document.outputdata.outL6.value='Valore predittivo Positivo (%)';
  document.outputdata.outL7.value='Valore predittivo Negativo (%)';
  document.outputdata.outL8.value='Efficienza (%)';
  document.outputdata.outL9.value='Probabilità pre test (prevalenza) (%)';
  document.outputdata.outL10.value='Pre Test odds';
  document.outputdata.outL11.value='Post Test odds';
  document.outputdata.outL12.value='Probabilità post test (%)';
  document.outputdata.outL13.value='NND';
  setConfLevelText();
  return 0
}
function setLabelInglese()
{
  document.bgColor='#FFFFFF';
  window.document.inputdata.Inglese.checked = true;
  window.document.inputdata.Italiano.checked = false;
  document.inputdata.EBLM.value='EBM Tools for Diagnostic Tests, Ver 1.2';
  document.inputdata.TargetDisorder.value='TARGET DISORDER';
  document.inputdata.Present.value='Present';
  document.inputdata.Absent.value='Absent';
  document.inputdata.Positive.value='Positive';
  document.inputdata.Negative.value='Negative';
  document.inputdata.TestResult.value='TEST Result';
  document.inputdata.ConfLevelText.value='Confidence interval ';
  document.outputdata.outL2.value='Sensitivity (%)';
  document.outputdata.outL3.value='Specificity (%)';
  document.outputdata.outL4.value='Likelihood Ratio for a positive test ';
  document.outputdata.outL5.value='Likelihood Ratio for a negative test ';
  document.outputdata.outL6.value='Positive Predictive Value (%)';
  document.outputdata.outL7.value='Negative Predictive Value (%)';
  document.outputdata.outL8.value='Efficiency (%)';
  document.outputdata.outL9.value='Pre test Probability (prevalence) (%)';
  document.outputdata.outL10.value='Pre Test odds';
  document.outputdata.outL11.value='Post Test odds';
  document.outputdata.outL12.value='Post test Probability (%)';
  document.outputdata.outL13.value='Number Needed to Diagnose (NND)';
  setConfLevelText();
  return 0
}
function setLabel()
{
  alert("Cucù");
  setLabelItaliano();
  return 0
}
function ClearAll()
{
  document.inputdata.inpC4.value='';
  document.inputdata.inpD4.value='';
  document.inputdata.inpC5.value='';
  document.inputdata.inpD5.value='';
  document.inputdata.outE4.value='';
  document.inputdata.outE5.value='';
  document.inputdata.outE6.value='';
  document.inputdata.outD6.value='';
  document.inputdata.outC6.value='';
  document.outputdata.outH2.value='';
  document.outputdata.outI2.value='';
  document.outputdata.outJ2.value='';
  document.outputdata.outH3.value='';
  document.outputdata.outI3.value='';
  document.outputdata.outJ3.value='';
  document.outputdata.outH4.value='';
  document.outputdata.outI4.value='';
  document.outputdata.outJ4.value='';
  document.outputdata.outH5.value='';
  document.outputdata.outI5.value='';
  document.outputdata.outJ5.value='';
  document.outputdata.outH6.value='';
  document.outputdata.outI6.value='';
  document.outputdata.outJ6.value='';
  document.outputdata.outH7.value='';
  document.outputdata.outI7.value='';
  document.outputdata.outJ7.value='';
  document.outputdata.outH8.value='';
  document.outputdata.outI8.value='';
  document.outputdata.outJ8.value='';
  document.outputdata.outH9.value='';
  document.outputdata.outI9.value='';
  document.outputdata.outJ9.value='';
  document.outputdata.outH10.value='';
  document.outputdata.outI10.value='';
  document.outputdata.outJ10.value='';
  document.outputdata.outH11.value='';
  document.outputdata.outI11.value='';
  document.outputdata.outJ11.value='';
  document.outputdata.outH12.value='';
  document.outputdata.outI12.value='';
  document.outputdata.outJ12.value='';
  document.outputdata.outH13.value='';
  document.outputdata.outI13.value='';
  document.outputdata.outJ13.value='';
  document.inputdata.inpC4.style.backgroundColor=defaultColor;
  document.inputdata.inpD4.style.backgroundColor=defaultColor;
  document.inputdata.inpC5.style.backgroundColor=defaultColor;
  document.inputdata.inpC5.style.backgroundColor=defaultColor;
  document.inputdata.inpC4.focus();
  setConfLevel(95);
  return 0
}
function CalcolaTotali()
{
  pCalcolaTotaliC4 = 1 * document.inputdata.inpC4.value;
  pCalcolaTotaliD4 = 1 * document.inputdata.inpD4.value;
  pCalcolaTotaliC5 = 1 * document.inputdata.inpC5.value;
  pCalcolaTotaliD5 = 1 * document.inputdata.inpD5.value;
  pCalcolaTotaliC6 = pCalcolaTotaliC4 + pCalcolaTotaliC5;
  pCalcolaTotaliD6 = pCalcolaTotaliD4 + pCalcolaTotaliD5;
  pCalcolaTotaliE4 = pCalcolaTotaliC4 + pCalcolaTotaliD4;
  pCalcolaTotaliE5 = pCalcolaTotaliC5 + pCalcolaTotaliD5;
  pCalcolaTotaliE6 = pCalcolaTotaliC5 + pCalcolaTotaliD5 + pCalcolaTotaliC4 + pCalcolaTotaliD4;
  DisplayTotali(pCalcolaTotaliE4,pCalcolaTotaliE5,pCalcolaTotaliE6,pCalcolaTotaliC6,pCalcolaTotaliD6);
  return 0
}
function CheckInput(x)
{
  l = x.length;
  var err = 'N';
  for(var i=0;i<l;i++)
  {
    var j = x.substring(i,i+1);
    if ((j >= '0' && j <= '9')||j == '.')
      err = 'N';
    else
      return 1;
  }
  return 0
}
function Calcolo()
{
  var ierr = 0;
  var err = 0;
  err = CheckInput(inputdata.inpC4.value);
  if (err == 1)
  {
    ierr = ierr + 1;
    document.inputdata.inpC4.style.backgroundColor=errorColor;
  }
  err = 0;
  err = CheckInput(inputdata.inpD4.value);
  if (err == 1)
  {
    ierr = ierr + 1;
    document.inputdata.inpD4.style.backgroundColor=errorColor;
  }
  err = 0;
  err = CheckInput(inputdata.inpC5.value);
  if (err == 1)
  {
    ierr = ierr + 1;
    document.inputdata.inpC5.style.backgroundColor=errorColor;
  }
  err = 0;
  err = CheckInput(inputdata.inpD5.value);
  if (err == 1)
  {
    ierr = ierr + 1;
    document.inputdata.inpD5.style.backgroundColor=errorColor;
  }
  if (ierr > 0)
  {
    alert("Incorrect number");
    return(0);
  }
  CalcolaTotali();
  var e = 2.71828182845904;
  var C4 = 1 * document.inputdata.inpC4.value;
  var D4 = 1 * document.inputdata.inpD4.value;
  var C5 = 1 * document.inputdata.inpC5.value;
  var D5 = 1 * document.inputdata.inpD5.value;
  var C6 = 1 * document.inputdata.outC6.value;
  var D6 = 1 * document.inputdata.outD6.value;
  var E4 = 1 * document.inputdata.outE4.value;
  var E5 = 1 * document.inputdata.outE5.value;
  var E6 = 1 * document.inputdata.outE6.value;
  var H2 = C4 / C6;
  var H3 = D5 / D6;
  var H4 = H2 / (1 - H3);
  var H5 = (1 - H2) / H3;
  var H6 = C4 / E4;
  var H7 = D5 / E5;
  var H8 = (C4 + D5)/E6;
  var H9 = C6 / E6;
  var H10 = H9 / (1 - H9);
  var H11 = H10 * H4;
  var H12 = H11 / (H11 + 1);
  var H13 = 1/(H2 - (1 - H3));
  var D8 = document.inputdata.ConfLevelZ.value;
  var N2 = C4 * 2 + D8 * D8;
  var N3 = D5 * 2 + D8 * D8;
  var N6 = C4 * 2 + D8 * D8;
  var N7 = D5 * 2 + D8 * D8;
  var N8 = (C4 + D5) * 2 + D8 * D8;
  var N9 = C6 * 2 + D8 * D8;
  var tO2 = D8 * D8 + 4 * C4 * (1 - H2);
  var O2 = D8 * Math.sqrt(tO2);
  var tO3 = D8 * D8 + 4 * D5 * (1 - H3);
  var O3 = D8 * Math.sqrt(tO3);
  var tO6 = D8 * D8 + 4 * C4 * (1 - H6);
  var O6 = D8 * Math.sqrt(tO6);
  var tO7 = D8 * D8 + 4 * D5 * (1 - H7);
  var O7 = D8 * Math.sqrt(tO7);
  var tO8 = D8 * D8 + 4 * (C4 + D5) * (1 - H8);
  var O8 = D8 * Math.sqrt(tO8);
  var tO9 = D8 * D8 + 4 * C6 * (1 - H9);
  var O9 = D8 * Math.sqrt(tO9);
  var P2 = 2 * (C6 + D8 * D8);
  var P3 = 2 * (D6 + D8 * D8);
  var P6 = 2 * (E4 + D8 * D8);
  var P7 = 2 * (E5 + D8 * D8);
  var P8 = 2 * (E6 + D8 * D8);
  var P9 = 2 * (E6 + D8 * D8);
  var Q4 = Math.sqrt((1/C4)-(1/C6)+(1/D4)-(1/D6));
  var Q5 = Math.sqrt((1/D5)-(1/D6)+(1/C5)-(1/C6));
  var R4 = Math.log(H4);
  var R5 = Math.log(H5);
  var S4 = R4-D8*Q4;
  var S5 = R5-D8*Q5;
  var T4 = R4+D8*Q4;
  var T5 = R5+D8*Q5;
  var I2 = (N2 - O2)/P2;
  var I3 = (N3 - O3)/P3;
  var I4 = Math.exp(S4);
  var I5 = Math.exp(S5);
  var I6 = (N6 - O6)/P6;
  var I7 = (N7 - O7)/P7;
  var I8 = (N8 - O8)/P8;
  var I9 = (N9 - O9)/P9;
  var I10 = I9/(1 - I9);
  var I11 = I10*I4;
  var I12 = I11/(I11 + 1);
  var I13 = 1/(I2-(1-I3));
  var J2 = (N2 + O2)/P2;
  var J3 = (N3 + O3)/P3;
  var J4 = Math.exp(T4);
  var J5 = Math.exp(T5);
  var J6 = (N6 + O6)/P6;
  var J7 = (N7 + O7)/P7;
  var J8 = (N8 + O8)/P8;
  var J9 = (N9 + O9)/P9;
  var J10 = J9/(1 - J9);
  var J11 = J10*J4;
  var J12 = J11/(J11 + 1);
  var J13 = 1/(J2-(1-J3));
  //
  // Display results
  //
  DisplayH(H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13);
  DisplayI(I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13);
  DisplayJ(J2,J3,J4,J5,J6,J7,J8,J9,J10,J11,J12,J13);
  return 0
}
function setConfLevelText()
{
  document.outputdata.ConfidenceLevel.value=document.inputdata.ConfLevelText.value+document.inputdata.ConfLevelV.value+"%";
  return 0
}
function setConfLevel(ConfLevel)
{
  //alert(ConfLevel);
  document.inputdata.ConfLevelV.value=ConfLevel;
  if (ConfLevel == '90')
  {
    window.document.inputdata.Conf90.checked = true;
    window.document.inputdata.Conf95.checked = false;
    window.document.inputdata.Conf99.checked = false;
    document.inputdata.ConfLevelA.value=0.100;
    document.inputdata.ConfLevelZ.value=1.645;
  }
  if (ConfLevel == '95')
  {
    window.document.inputdata.Conf90.checked = false;
    window.document.inputdata.Conf95.checked = true;
    window.document.inputdata.Conf99.checked = false;
    document.inputdata.ConfLevelA.value=0.050;
    document.inputdata.ConfLevelZ.value=1.960;
  }
  if (ConfLevel == '99')
  {
    window.document.inputdata.Conf90.checked = false;
    window.document.inputdata.Conf95.checked = false;
    window.document.inputdata.Conf99.checked = true;
    document.inputdata.ConfLevelA.value=0.010;
    document.inputdata.ConfLevelZ.value=2.576;
  }
  setConfLevelText();
  if (window.document.outputdata.outH2.value > ' ')
  {
    Calcolo();
  }
  return 0
}
