function calculate(form) {
  var mx=12;
  SY=new Array();NC=new Array();M=new Array();TA=new Array();TE=new Array();C=new Array();
  SY[1]="35";NC[1]=35;M[1]=0.33;TA[1]=2.48;TE[1]=2.48;C[1]=1;
  SY[2]="40";NC[2]=40;M[2]=0.64;TA[2]=4.17;TE[2]=4.17;C[2]=1;
  SY[3]="50";NC[3]=50;M[3]=1.04;TA[3]=7.22;TE[3]=7.22;C[3]=1;
  SY[4]="60";NC[4]=60;M[4]=1.53;TA[4]=10.7;TE[4]=10.7;C[4]=1;
  SY[5]="80";NC[5]=80;M[5]=2.66;TA[5]=19.1;TE[5]=19.1;C[5]=1;
  SY[6]="100";NC[6]=100;M[6]=3.99;TA[6]=29.4;TE[6]=29.4;C[6]=1;
  SY[7]="120";NC[7]=120;M[7]=5.93;TA[7]=39.5;TE[7]=39.5;C[7]=1;
  SY[8]="140";NC[8]=140;M[8]=7.49;TA[8]=52.3;TE[8]=52.3;C[8]=1;
  SY[9]="160";NC[9]=160;M[9]=10.1;TA[9]=69;TE[9]=69;C[9]=1;
  SY[10]="180";NC[10]=180;M[10]=13.5;TA[10]=79;TE[10]=79;C[10]=1;
  SY[11]="200";NC[11]=200;M[11]=16.5;TA[11]=93;TE[11]=93;C[11]=1;
  SY[12]="240";NC[12]=240;M[12]=24.5;TA[12]=129;TE[12]=129;C[12]=1;
  var i,j,fg,p,d1,d2,o1,o2,o,cm,mx,v,hr,po,t,lc,l,nh,nf,a,b,cc,fo,lh,kr,k0,npn,nn,nr,nn1,nn2,nlr,nci;
  npn=parseFloat(form.PN.value);nn=parseInt(form.N.value);nr=parseInt(form.R.value);
  nn1=parseInt(form.N1.value);nn2=parseInt(form.N2.value);
  nlr=parseInt(form.LR.value);nci=parseInt(form.CI.value);fg=9;
  if (npn<0.1 || npn>1000) {fg=1}
  if (nn<10 || nn>10000) {fg=2}
  if (nr<1 || nr>6) {fg=3}
  if (nn1<9 || nn1>99) {fg=4}
  if (nn2<9 || nn2>99) {fg=5}
  if (nlr<10 || nlr>90000) {fg=6}
  if (nci<100 || nci>10000) {fg=7}
  for (i=1;fg==9 && i<=mx; i++) {
    p=3.175*Math.floor(NC[i]/10);d1=p/Math.sin(Math.PI/nn1);d2=p/Math.sin(Math.PI/nn2);
    o1=p*(0.6+1/Math.tan(Math.PI/nn1));o2=p*(0.6+1/Math.tan(Math.PI/nn2));o=(o1+o2)/2;
    if (d2>=o) {cm=d2} else {cm=o}
    if (nci>=cm) {
      v=1e-3*p*nn1*nn/60;
      if (nr==1) {kr=1} else {if  (nr==2) {kr=1.3} else {if (nr==3) {kr=1.9} else {if (nr==4) {kr=2.5} else {if (nr==5) {kr=3.0} else {kr=3.5}}}}}
      if (form.F1[0].checked==true) {k0=1.0}
      else {if (form.F1[1].checked==true) {k0=1.1}
      else {if (form.F1[2].checked==true) {k0=1.3}
      else {if (form.F1[3].checked==true) {k0=1.4}
      else {if (form.F1[4].checked==true) {k0=1.5}
      else {if (form.F1[5].checked==true) {k0=1.7}
      else {if (form.F1[6].checked==true) {k0=1.8}
      else {if (form.F1[7].checked==true) {k0=1.9}
      else {if (form.F1[8].checked==true) {k0=2.1}}}}}}}}}
      po=npn*k0/kr;t=1E-3*(1E3*po/v+M[i]*Math.pow(v,2));t=t*kr
      if (t<=TA[i]) {
        lc=Math.floor(2*nci/p+(nn1+nn2)/2+p/nci*Math.pow((nn2-nn1)/2/Math.PI,2)+0.5);
        if (lc/2>Math.floor(lc/2)) {l=lc+1} else {l=lc}
        nh=60*nn*nn1/l;hr=nh*nlr;
        if (hr<=5E6) {
          if (t>=TE[i]) {
            nf=Math.pow(10,C[i]/0.1)*Math.pow(t,1/-0.1);
            if (hr<=nf) {
              fg=0;j=i;
            }
          } else {
          nf=1E8;a=3;fg=0;j=i;
          }
        } else {
        if (t<TE[i]) {
          nf=1E8;a=3;fg=0;j=i;
        }}
      }
    } else {
    fg=8;
    }
  }
  if (fg==0) {
    lh=nf/nh;b=2*l-(nn1+nn2);
    cc=p/8*(b+Math.sqrt(Math.pow(b,2)-8*Math.pow((nn2-nn1)/Math.PI,2)));fo=1E3*po*kr*kr/v;
    if (lh<100) {
      lh=10*Math.floor(0.1*lh+0.5)
    } else {
    lh=100*Math.floor(0.01*lh+0.5)
    }
    v=Math.floor(100*v*60+0.05)/100;cc=Math.floor(cc+0.5);fo=10*Math.floor(0.1*fo/kr+0.5)/1000;
    d1=Math.floor(100*d1+0.5)/100;d2=Math.floor(100*d2+0.5)/100;
    o1=Math.floor(o1+0.5);o2=Math.floor(o2+0.5);
    form.RNC.value="";form.RL.value=0;form.RLH.value=0;form.RV.value=0;form.RCC.value=0;
    form.RD1.value=0;form.RO1.value=0;form.RD2.value=0;form.RO2.value=0;form.RFO.value=0;
    form.RNC.value="SY"+SY[j]+"-"+form.R.value;
    form.RL.value=l;form.RLH.value=lh;form.RV.value=v;form.RCC.value=cc;
    form.RD1.value=d1;form.RO1.value=o1;form.RD2.value=d2;form.RO2.value=o2;form.RFO.value=fo;
  }
  if (fg==1) {
    alert("RATED OUTPUT is outside the range. ");
  }
  if (fg==2) {
    alert("ROTATION OF DRIVING SPROCKET is outside the range.");
  }
  if (fg==3) {
    alert("STRAND OF CHAIN is within 1-6.");
  }
  if (fg==4) {
    alert("NUMBER OF TEETH OF DRIVING SPROCKET is outside the range.");
  }
  if (fg==5) {
    alert("THE NUMBER OF TEETH OF DRIVEN SPROCKET is outside the range. ");
  }
  if (fg==6) {
    alert("CHAIN LIFE is outside the range.");
  }
  if (fg==7) {
    alert("CENTER DISTANCE BETWEEN SHAFTS is outside the range.");
  }
  if (fg==8) {
    alert("Please make CENTER DISTANCE BETWEEN SHAFTS  "+ Math.round(cm+0.5) +" mm or more. ");
  }
  if (fg==9) {
    alert("Please increase STRAND OF CHAIN");
  }
}
function checkPN(field) {
  if (parseFloat(field.PN.value)<0.1 || parseFloat(field.PN.value)>1000) { alert("RATED OUTPUT is outside the range."); }}
function checkN(field) {
  if (parseInt(field.N.value)<10 || parseInt(field.N.value)>10000) { alert("ROTAION OF DRIVING SPROCKET is outside the range"); }}
function checkR(field) {
  if (parseInt(field.R.value)<1 || parseInt(field.R.value)>6) { alert("STRAND OF CHAIN is outside the range. "); }
}
function checkN1(field) {
  if (parseInt(field.N1.value)<9 || parseInt(field.N1.value)>99) { alert("NUMBER OF TEETH OF DRIVING SPROCKET is outside the range. "); }}
function checkN2(field) {
  if (parseInt(field.N2.value)<9 || parseInt(field.N2.value)>99 || parseInt(field.N2.value)<parseInt(field.N1.value)) {
    alert("NUMBER OF TEETH OF DRIVEN SPROCKET is outside the range. ");
  }}
function checkLR(field) {
  if (parseInt(field.LR.value)<10 || parseInt(field.LR.value)>90000) { alert("CHAIN LIFE is outside the range. "); }}
function checkCI(field) {
  if (parseInt(field.CI.value)<100 || parseInt(field.CI.value)>10000) { alert("CENTER DISTANCE BETWEEN SHAFTS is outside the range."); }
}

