function fillDataTypeMenu(menu) {
  var i;
  var menuOptions = new Array(3);
//  if (menu.type!="select-one") return;

  menuOptions[0]="Distance matrix";
  menuOptions[1]="DNA alignment";
  menuOptions[2]="Protein alignment";
  menu.length = menuOptions.length;
  for(i=0; i<menuOptions.length; i++)
    menu[i] = new Option(menuOptions[i], menuOptions[i]);
  menu.selectedIndex = 0;
}

function fillModelMenu(menu) {
 var o = document.options;
 var menuOptions, sel, i;
 //
 switch(o.DataType.value) {
  //
  case "DNA alignment":
   toggleVisibility('ModelNote',0);
   menuOptions = new Array(6);
   menuOptions[0]="F84"; sel = 0;
   menuOptions[1]="JC69";
   menuOptions[2]="K2P";
   menuOptions[3]="LogDet";
   menuOptions[4]="TN93";
   menuOptions[5]="Transversion only";
  break;
  //
  case "Protein alignment":
   toggleVisibility('ModelNote',1);
   menuOptions = new Array(9);
   menuOptions[0]="CpRev";
   menuOptions[1]="DCMut";
   menuOptions[2]="Dayhoff";
   menuOptions[3]="JTT";
   menuOptions[4]="LG"; sel = 4;
   menuOptions[5]="MtREV";
   menuOptions[6]="RtREV";
   menuOptions[7]="VT";
   menuOptions[8]="WAG";
  break;
  //
  case "Distance matrix":
   toggleVisibility('ModelNote',0);
   menuOptions = new Array(0);
  break;
 }
 //
 menu.length = menuOptions.length;
 for(i=0; i<menuOptions.length; i++)
  menu[i] = new Option(menuOptions[i], menuOptions[i]);
 //
 menu.selectedIndex = sel;
}

function fillAlgoMenu(menu) {
 var o = document.options;
 var menuOptions, sel, i;
 //
 menuOptions = new Array(4);
 menuOptions[0]="balanced_GME"; sel = 0;
 menuOptions[1]="OLS_GME";
 menuOptions[2]="BioNJ";
 menuOptions[3]="NJ";
 menuOptions[4]="UNJ";
 //
 menu.length = menuOptions.length;
 for(i=0; i<menuOptions.length; i++)
  menu[i] = new Option(menuOptions[i], menuOptions[i]);
 //
 menu.selectedIndex = sel;
}

function inputFileChanged() {
 var o = document.options;
 var b = o.DataOption[1].checked; // user file selected
 //
 enableField(o.userfile, !b);
 //
 if (b) {
  o.NbDataSets.value=3;
//  o.DataType.selectedIndex=0;
 }
// o.DataType.disabled=b;
 //
// dataTypeChanged();
}

function dataTypeChanged() {
 var o = document.options;
 //
 if (o) {
  switch(o.DataType.value) {
   //
   case "DNA alignment": case "Protein alignment":
    enableRadio(o.SequenceFormatOption[0],1,"I");
    enableRadio(o.SequenceFormatOption[1],1,"S");
    o.ModelName.disabled=0;
    toggleVisibility('DataNote',1);
    enableField(o.Gamma, 1);
    o.Gamma.value=1;
    enableRadio(o.OptBootOption[0],1,"y");
    enableRadio(o.OptBootOption[1],1,"n");
   break;
   //
   case "Distance matrix":
    enableRadio(o.SequenceFormatOption[0],0,"I");
    enableRadio(o.SequenceFormatOption[1],0,"S");
    o.ModelName.disabled=1;
    toggleVisibility('DataNote',0);
    enableField(o.Gamma, 0);
    enableRadio(o.OptBootOption[0],0,"y");
    enableRadio(o.OptBootOption[1],0,"n");
    o.OptBootOption[1].checked=1;
   break;
  }
  //
  fillModelMenu(o.ModelName);
  //
  bootOptionChanged();
 }
}

function algoNameChanged() {
 var o = document.options;
 //
 if (o.RefinementOption[0].checked) {
  if (o.AlgoName.value == "OLS_GME" || o.AlgoName.value == "UNJ") {
   if (o.BMENNIOption.checked || o.BMESPROption.checked || o.BMETBROption.checked) {
    o.OLSNNIOption.checked = o.RefinementOption[0].checked;
    OLSNNIChanged();
   }
  }
  else {
   if (o.OLSNNIOption.checked) {
    o.BMESPROption.checked = o.RefinementOption[0].checked;
    BMESPRChanged();
   }
  }
 }
 else {
  switch(o.AlgoName.value) {
   //
   case "balanced_GME":
    o.BranchOption[0].checked = o.RefinementOption[1].checked;
    enableRadio(o.BranchOption[2], ! o.RefinementOption[1].checked, "none");
   break;
   //
   case "OLS_GME":
    o.BranchOption[1].checked = o.RefinementOption[1].checked;
    enableRadio(o.BranchOption[2], ! o.RefinementOption[1].checked, "none");
   break;
   //
   case "BioNJ":
    o.BranchOption[0].checked = o.RefinementOption[1].checked;
    enableRadio(o.BranchOption[2], o.RefinementOption[1].checked, "none");
   break;
   //
   case "NJ":
    o.BranchOption[0].checked = o.RefinementOption[1].checked;
    enableRadio(o.BranchOption[2], o.RefinementOption[1].checked, "none");
   break;
   //
   case "UNJ":
    o.BranchOption[1].checked = o.RefinementOption[1].checked;
    enableRadio(o.BranchOption[2], o.RefinementOption[1].checked, "none");
   break;
  }
 }
 //
}

function startingTreeChanged() {
 var o = document.options;
 //
 enableField(o.StartingTree, o.StartingTreeOption[0].checked);
 //
 enableField(o.AlgoName, ! o.StartingTreeOption[0].checked);
}

function bootOptionChanged() {
 var o = document.options;
 //
 enableField(o.NbBtsDataSets, o.OptBootOption[0].checked);
}

function refinementChanged() {
 var o = document.options;
 //
 enableField(o.BMENNIOption, o.RefinementOption[0].checked);
 enableField(o.OLSNNIOption, o.RefinementOption[0].checked);  
 enableField(o.BMESPROption, o.RefinementOption[0].checked);
 enableField(o.BMETBROption, o.RefinementOption[0].checked);
 //
 enableRadio(o.BranchOption[0], o.RefinementOption[1].checked, "balanced");
 enableRadio(o.BranchOption[1], o.RefinementOption[1].checked, "OLS");
 enableRadio(o.BranchOption[2], o.RefinementOption[1].checked, "none");
 //
 algoNameChanged();
}

function BMENNIChanged() {
 var o = document.options;
 //
 if (o.BMENNIOption.checked) {
  o.OLSNNIOption.checked = ! o.BMENNIOption.checked;
  o.BMENNIOption.value = 1;
 }
 else {
  o.BMESPROption.checked = o.BMENNIOption.checked;
  o.BMETBROption.checked = o.BMENNIOption.checked;
  o.BMENNIOption.value = 0;
 }
}

function OLSNNIChanged() {
 var o = document.options;
 //
 if (o.OLSNNIOption.checked) {
  o.BMENNIOption.checked = ! o.OLSNNIOption.checked;
  o.BMESPROption.checked = ! o.OLSNNIOption.checked;
  o.BMETBROption.checked = ! o.OLSNNIOption.checked;
  o.OLSNNIOption.value = 1;
 }
 else {
  o.OLSNNIOption.value = 0;
 }
}

function BMESPRChanged() {
 var o = document.options;
 //
 if (o.BMESPROption.checked) {
  o.BMENNIOption.checked = o.BMESPROption.checked;
  o.BMESPROption.value = 1;
 }
 else {
  o.BMETBROption.checked = o.BMESPROption.checked;
  o.BMESPROption.value = 0;
 }
 //
 BMENNIChanged();
}

function BMETBRChanged() {
 var o = document.options;
 //
 if (o.BMETBROption.checked) {
  o.BMESPROption.checked = o.BMETBROption.checked;
  o.BMETBROption.value = 1;
 }
 else {
  o.BMETBROption.value = 0;
 }
 //
 BMESPRChanged();
}


function validate() {
 var o = document.options;
 var msg="";
 //
// if (o.DataOption[0].checked && (o.DataType.value != "Distance matrix"))
//   msg += checkPhylipFile(o.userfile.value, "input file");
 //
// msg += checkNumberMinMax(o.NbDataSets, "number of data sets", 1, 100);
 //
// if (!o.NbBtsDataSets.disabled)
//   msg += checkNumberMinMax(o.NbBtsDataSets, "number of bootstrapped data sets", 1, 10000);
 //
 if (o.StartingTreeOption[0].checked)
   msg += checkTextFile(o.StartingTree.value, "starting tree file");
 //
// if (!o.Gamma.disabled)
//   msg += checkNumber(o.Gamma, "gamma");
 //
 msg += checkEmail(o.Email, " to get the results");
 //
 if (msg) {
  msg += "\n\nPlease make your corrections and re-submit the form.";
  alert (msg);
  return false;
 }
 else
  return true;
}

function DoLoad() {
  var o = document.options;
  //
  if (o) {
//    fillDataTypeMenu(o.DataType);
  //
    fillAlgoMenu(o.AlgoName);
  }
  //
//  dataTypeChanged();
  //
  startingTreeChanged();
  //
//  bootOptionChanged();
  //
  refinementChanged();
  //
}
