//Scripts ©2001 Charles Houghton-Webb
var BtnArray=new Array();notename="Quarter";RevCalcStr="";DotText="";millisecs="";
var Tempo=60;Units=4;Dot=1;Doton=2;tupNum=2;tupDen=3;TempoUnit=1;Meas=1;MeasDen=4;MeasNum=4;tuplet=false;a=3;lastbn=6;temptime=0;
var totheArray=new Array("eigth",  "quarter", "half");tothe="quarter";
//
function plbutn(bpth,gform){
for(z=0;z<9;z++){
	j=3*z;
	pth=bpth+"Btn"+String(z+1);
	pth0=pth + "0"+gform;
	pth1=pth + "1"+gform;
	pth2=pth + "2"+gform;
	BtnArray[j]=new Image();
	BtnArray[j].src=pth0;
	BtnArray[j+1]=new Image();
	BtnArray[j+1].src=pth1;
	BtnArray[j+2]=new Image();
	BtnArray[j+2].src=pth2;	
}
}
//
function DoTuplet(){
if (tuplet){
eval(docstr+"tupfld").src=PicArray[4].src;
tuplet=false;
} else {
eval(docstr+"tupfld").src=PicArray[5].src;
tuplet=true;
}
Workitout(Units,lastbn);
}
//
function DoDot(){
if (Doton==2){
Doton=3;
eval(docstr+"bd").src=PicArray[3].src;
} else {
Doton=2;
eval(docstr+"bd").src=PicArray[2].src;
}
Dot=Doton/2;
nme="b"+String(lastbn);
z=(lastbn-1)*3+Doton-1;
eval(docstr+nme).src=BtnArray[z].src;
Workitout(Units,lastbn);
}
//
function DoTempBt(t,b){
btntmp=(b+2)/3
btn="bt" + String(btntmp);
TempoUnit=t;
tothe=totheArray[btntmp-5];
eval(docstr+"bt5").src=BtnArray[12].src;
eval(docstr+"bt6").src=BtnArray[15].src;
eval(docstr+"bt7").src=BtnArray[18].src;
eval(docstr+btn).src=BtnArray[b].src;
DoTempoName(Tempo)
Workitout(Units,lastbn);
}
//
function TempoChange(a){
   a=document.Calc.TempoNames.selectedIndex;
    switch (a){
    case 0:
      Tempo=30;
	break;
    case 1:
      Tempo=36;
	break;
    case 2:
      Tempo=50;
	break;
    case 3:
      Tempo=60;
	break;
    case 4:
      Tempo=70;
	break;
    case 5:
      Tempo=90;
	break;
    case 6:
      Tempo=115;
	break;
    case 7:
      Tempo=120;
	break;
    case 8:
      Tempo=144;
	break;
    case 9:
      Tempo=186;
	break;
    case 10:
      Tempo=202;
	break;
    case 11:
      Tempo=208;
	break;
	  case 12:
      Tempo=301;
	break;  
    }
    document.Calc.TempoTxt.value=String(Tempo);
	DoTempBt(1,16)
	Workitout(Units,lastbn);
  }
//
function DoTempoName(tmpo){
Tempo=tmpo
CTempo=Tempo*(1/TempoUnit)
  if (CTempo > 0 && CTempo < 32) document.Calc.TempoNames.options[0].selected=true;
  if (CTempo > 31 && CTempo < 40) document.Calc.TempoNames.options[1].selected=true;
  if (CTempo > 39 && CTempo < 60) document.Calc.TempoNames.options[2].selected=true;
  if (CTempo > 59 && CTempo < 67) document.Calc.TempoNames.options[3].selected=true;
  if (CTempo > 66 && CTempo < 77) document.Calc.TempoNames.options[4].selected=true;
  if (CTempo > 76 && CTempo < 109) document.Calc.TempoNames.options[5].selected=true;
  if (CTempo > 108 && CTempo < 120) document.Calc.TempoNames.options[6].selected=true;
  if (CTempo == 120) document.Calc.TempoNames.options[7].selected=true;
  if (CTempo > 120 && CTempo < 169) document.Calc.TempoNames.options[8].selected=true;
  if (CTempo > 168 && CTempo < 197) document.Calc.TempoNames.options[9].selected=true;
  if (CTempo > 196 && CTempo < 208) document.Calc.TempoNames.options[10].selected=true;
  if (CTempo > 207 && CTempo < 301) document.Calc.TempoNames.options[11].selected=true;
  if (CTempo > 300) document.Calc.TempoNames.options[12].selected=true;
  Workitout(Units,lastbn);
}
//
function HowLong(){
  Meas=document.Calc.Meas.value;
  MeasNum=document.Calc.MeasNum.value;
  MeasDen=document.Calc.MeasDen.value;
  TimeUnit = (Math.floor(24000000 * MeasNum * Meas * TempoUnit / (Tempo * MeasDen * 100)));
  measureatstr="";laststr="";
  if (TimeUnit<1000) {
    temptime=TimeUnit;
    millisecs=" milliseconds";
  } else {
    temptime=TimeUnit/1000;
    millisecs=" seconds";
  }
  if (TimeUnit==1) {
    millisecs=Left(millisecs,(Len(millisecs)-1));
  }
  if (Meas==1) {
    measureatstr="measure in";
    laststr="time lasts " + String(temptime) + millisecs;      //dure millisecondes
  } else {
    measureatstr="measures in";
    laststr="time last " + String(temptime) + millisecs;      //durent
  }
  document.Calc.lasts.value=String(Meas)+" "+measureatstr+" "+String(MeasNum)+"/"+String(MeasDen)+" "+laststr
  CalcTime(TimeUnit);
}
//
function Workitout(Unts,bn){
Units=Unts
nme="b"+String(lastbn);
z=(lastbn-1)*3;
eval(docstr+nme).src=BtnArray[z].src;
nme="b"+String(bn);
z=(bn-1)*3+Doton-1;
eval(docstr+nme).src=BtnArray[z].src;
lastbn=bn;
  c=2*Units;
  switch (c) {
  case 1:
    notename="double whole";//ronde carré"
	break;
  case 2:
    notename="whole";//"ronde"
	break;
  case 4:
    notename="half";//"blanche"
	break;
  case 8:
    notename="quarter";//"noire"
	break;
  case 16:
    notename="eighth";//"croche"
	break;
  case 32:
    notename="sixteenth";//"double croche"
	break;
  case 64:
    notename="thirtysecond";//"triple croche"
	break;
  case 128:
    notename="sixtyfourth";//"quadruple croche"
	break;
  case 256:
    notename="hundred and twentyeighth";//"quintuple croche"
  }
  if (Dot==1.5) {
    DotText="dotted ";
    notename= DotText + notename;
  } else {DotText=" "};
  RevCalcTemp=(24000000 / (Tempo * Units)) * Dot;
  RevCalc = Math.floor(RevCalcTemp) * TempoUnit / 100;
  if (tuplet) {
	tupNum=document.Calc.tupnumfld.value;tupDen=document.Calc.tupdenfld.value;
    RevCalc=RevCalc * tupNum / tupDen;
    document.Calc.DelayStrTuplet.value="...when in a " + String(tupDen) + " in the time of " + String(tupNum) + " tuplet";
  } else {document.Calc.DelayStrTuplet.value=""};
  if (RevCalc<10000) {
    RevCalcStr=String(Math.floor(RevCalc));
    millisecs="  milliseconds";
  } else {
    RevCalcStr=String(Math.floor(RevCalc/1000));
    millisecs="  seconds";
  }
  document.Calc.DelayString.value="The " + notename + " note, lasts " + RevCalcStr + millisecs;
  document.Calc.tempoString.value="At a tempo of " + String(Tempo) + " " + tothe + " notes to the minute :";
  HowLong();
}
//
function CalcTime(msec) {
  sec = Math.floor(msec / 1000)
  ms = msec - (sec * 1000)
  mnt = Math.floor(sec / 60)
  sec = sec - (mnt * 60)
  hrs = Math.floor(mnt / 60)
  mnt = mnt - (hrs * 60)
  document.Calc.msmString.value="i.e. " + String(hrs) + " hour(s), " + String(mnt) + " minute(s), " + String(sec) + " second(s) and " + String(ms) + " milliseconds" //c'est à dire millisecondes
}