<!------- hide the script from old browsers (biofilm JavaScripts)
// functions for the biofilm & biodiversity activities
// written by Dan Jacobs, Maryland Sea Grant

var precision = 0.0; // +/- accuracy of student math
// first element not used but included since arrays start at 0
var Org = new Array([6]);
var A = new Array(0, 0, 0, 0, 0, 0);

function correct (next) {
  alert("Congratulations!\n\nCheck out the computations based on your counts.\nThen close this window and\ngo to " + next + "\n");
  top.location.href = "#a"; // go to where answers are located
}

function checkNum (input, target, msg, sample) {
  // input - student entry, target - correct value, msg - which variable
  var str = input;
  if (!input)
    { alert(msg + " was not entered.\n\nPlease try again."); return false; }
  for (var i = 0; i < str.length; i++) {
    var ch = str.substring(i, i + 1)
    if (ch < "0" || "9" < ch) { 
      alert(msg + " is not an integer.\n\nPlease try again."); 
      return false; 
    }
  }
  if (sample == "sample1" || sample == "sample2") {
    var num = 1 * str; // convert from text to number
    var min = target - precision;
    var max = target + precision;
    if (num < min || max < num) {
      alert(msg + " is not correct.\nIt looks like you made a math error.\n\nPlease try again.")
      return false;
    }
  }
  input.value = str;
  return true;
}

function clearForm(form,what) {
  form["C" + what].value = ""; 
  form.CTot.value = "";
  var temp = new Array("Pi", "Pi2", "H");
  for (j = 0; j < temp.length; j++) {
    for (i = 1; i < A.length ; i++) { form[temp[j] + i].value = ""; }
  } 
  form.PiTot.value = "";
  form.S.value = "";
  form.D.value = form.D1.value = form.D2.value = "";
  form.H.value = form.E.value = "";
}

function round_off(value) {
  // round off the the nearest 0.001
  var a = Math.round(value*10000);
  var b = Math.round(value*1000) * 10;
  if ((a - b) >  4) { b += 10; }
  b = Math.round(b/10)/1000;
  if (navigator.appName == "Netscape") {
    if (b < 1.0 && b > 0.1) { b = '0' + b; }
    else if (b > -1 && b < -0.1) { b = '-0' + -1*b; }
  }
  return b;
}
 
function calc(form,sample) {
  var org, value;
  if (sample == "sample1") { 
    A = Array(0, 11, 1, 0, 1, 0);
    // names of the organisms
    Org[1] = 'Hydras'; Org[2] = 'Mussels'; Org[3] = 'Barnacles';
    Org[4] = 'Whip Mud Worms'; Org[5] = 'Dusky Sea Slugs';
  }
  else if (sample == "sample2") { 
    A = Array(0, 10, 11, 10, 1, 0);
    // names of the organisms
    Org[1] = 'Barnacles'; Org[2] = 'Mussels'; Org[3] = 'Whip Mud Worms';
    Org[4] = 'Dusky Sea Slugs'; Org[5] = 'Isopods';
  }
  else {
    for (i = 1; i < A.length; i++) {
      if (!form["N" + i].value) { form["N" + i].value = A[i]; }
      // name of the organism
      Org[i] = "Species " + i + "";
    }
  }
  var sum = S = D = D1 = D2 = H = E = 0;
  for (i = 1; i < A.length ; i++) {
    org = 'Count for ' + Org[i];
    if (!checkNum(form["N" + i].value,A[i],org,sample)) 
      {clearForm(form,i); return; }
    //form["N" + i].value = Math.round(form["N" + i].value);
    //value = 1 * form["N" + i].value;
    value = Math.round(1 * form["N" + i].value);
    form["N" + i].value = value;
    sum += value;
    if (value > 0) { S += 1; }
    form["C" + i].value = form["N" + i].value; 
  }
  // species richness (S)
  form.S.value = S;
  // computations - [0] = total, 1- = individual values
  form.CTot.value = sum;
  var Pi = new Array([A.length]);
  var Pi2 = new Array([A.length]);
  var PLOGP = new Array([A.length]);
  for ( i = 0; i <= A.length; i++) { Pi[i] = Pi2[i] = PLOGP[i] = 0; }
  var PiTot = 0;
  for (i = 1; i < A.length ; i++) {
    if (sum > 0) { Pi[i] = form["N" + i].value/sum; }
    Pi[0] += Pi[i]; // sum of Pi
    Pi2[i] = Pi[i]*Pi[i];
    D += Pi2[i]; // Simpson's index
    if (Pi[i] > 0) { PLOGP[i] = Pi[i]*Math.log(Pi[i]) }; 
    H += -1 * PLOGP[i]; // Shannon-Wiener index
    form["Pi" + i].value = round_off(Pi[i]);
    form["Pi2" + i].value = round_off(Pi2[i]);
    form["H" + i].value = round_off(PLOGP[i]);
  }
  form.PiTot.value = round_off(Pi[0]);
  // Simpson's index (D), diversity index (1 - D), recip. Index (1/D)
  form.D.value = round_off(D);
  form.D1.value = round_off(1 - D);
  if (D > 0) { form.D2.value = round_off(1 / D); }
  // Compute Shannon-Wiener (H) and Evenness (E)
  if (S > 1) { E = H/Math.log(S); }
  form.H.value = round_off(H);
  form.E.value = round_off(E);
  if (sample == 'sample1') { correct('the other virtual sample.'); }
  else if (sample == 'sample2') { correct('the next activity.'); }
}

// image controls:
function lightup(imgName,img) { document[imgName].src = eval(img + '.src'); }
function turnoff(imgName,img) { document[imgName].src = eval(img + '.src'); }

//close off comment to hide this script from old browsers----------->

