
// The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)
// See:  http://www.msc.cornell.edu/~houle/javascript/randomizer.html

rnd.today=new Date();
rnd.seed=rnd.today.getTime();

function rnd() 
{
        rnd.seed = (rnd.seed*9301+49297) % 233280;
        return rnd.seed/(233280.0);
}

function rand(number) {
        return Math.ceil(rnd()*number);
}

// end central randomizer.

var theProperties = new Array();
var theTries = new Array();
var selector = new Array();
var densityWaterSI = 1.0;			// Mg/m3

function checkBrowser()
 {
  if (navigator.appName != "Microsoft Internet Explorer" && parseFloat(navigator.appVersion) < 5)
    {
	 alert("The Javascript on this web page requires MS Internet Explorer or Netscape 6 to " +
	        "work properly.  You will be returned to the WebScience Home Page. You appear to " +
			"be using " + navigator.appName + " " + parseFloat(navigator.appVersion));
	 window.location  = "http://webscience.nmsu.edu";
	}
 }

function zeroTheTries()
 {
  for (var i=0;i<12;i++)
   theTries[i] = 0;
 }

function setBulkDensity()
  {
    theProperties[3] = Math.round((1.0 + 0.95 * rnd()) * 100) / 100;  
  }

function setParticleDensity()
  {
    theProperties[4] = Math.round((2.6 + 0.15 * rnd()) * 100) / 100;    
  }

function setRelSaturation()
  {
    theProperties[8] = Math.round(rnd() * 1000) / 1000;    
  }

function resetTable()
 {
  for (var i=0; i<document.getElementById("myTable").rows.length; i++)
   for (var j=0; j<document.getElementById("myTable").rows[i].cells.length; j++)
	document.getElementById("myTable").rows[i].cells[j].style.background = "none";
  zeroTheTries();
  setParticleDensity();
  setBulkDensity();
  setRelSaturation();
  theProperties[5] = Math.round((1 - theProperties[3] / theProperties[4]) * 1000) / 1000;
  theProperties[7] = Math.round(theProperties[8] * theProperties[5] * 1000) / 1000;
  theProperties[9] = theProperties[7];
  theProperties[6] = Math.round(theProperties[7] * densityWaterSI / theProperties[3] * 1000) / 1000;
  theProperties[10] = Math.round((theProperties[5] - theProperties[7]) * 1000) / 1000;
  theProperties[11] = Math.round(theProperties[10] / theProperties[5] * 1000) / 1000;
 }

function getCellFromSelector(n)
 {
  switch (n)
   {
    case 3: ;
	case 6: ;
	case 9: {return 1; break;}
	case 4: ;
	case 7: ;
	case 10: {return 3; break;}
	case 5: ;
	case 8: ;
	case 11: {return 5; break;}
   };
 }

function getRowFromSelector(n)
 {
  switch (n)
   {
    case 3: 
	case 4: 
	case 5: {return 2; break;}
	case 6: 
	case 7:
	case 8: {return 5; break;}
	case 9: 
	case 10: 
	case 11: {return 8; break;}
   };
 }

function checkThree()
 {
   if ((selector[0] == selector[2]) || (selector[1] == selector[2]))
     return false;
   selector.sort(function(a,b){return a-b;});   // sorts the array of selector values numerically
   if ((selector[0] != 3 && selector[0] != 4 && selector[0] != 6 && selector[1] != 6) || 
        (selector[2] == 5))
      return false;
    else 
       return true;
   return true;
 }

function resetProblem(n)
 {
  resetTable();
  selector[0] = selector[1] = selector[2] = rand(9) + 2;
  if (n > 1)
    while (selector[0] == selector[1])
	  selector[1] = rand(9) + 2;
  if (n > 2)
    while (!checkThree())	// ensures that if option 'harder' is chosen we exclude no viable combinations 
	  selector[2] = rand(9) + 2;
  if (n < 3)
    for (var i=3;i<12;i++)
      {
       if ((i != selector[0]) && (i != selector[1]))
	     {
	      document.P[i].value = theProperties[i];
	      document.P[i].disabled = true;
         }
        else if (i != selector[0])
	      {
	       document.P[i].value = "";
	       document.P[i].disabled = false;
	       document.getElementById("myTable").rows[getRowFromSelector(selector[0])].cells[getCellFromSelector(selector[0])].style.background = "red";
          }
         else
	      {
	       document.P[i].value = "";
	       document.P[i].disabled = false;
	       document.getElementById("myTable").rows[getRowFromSelector(selector[1])].cells[getCellFromSelector(selector[1])].style.background = "red";
          }
      }
   else
    for (var i=3;i<12;i++)
      {
       if ((i == selector[0]) || (i == selector[1]) || (i == selector[2]))
	     {
	      document.P[i].value = theProperties[i];
	      document.P[i].disabled = true;
         }
        else
	      {
	       document.P[i].value = "";
	       document.P[i].disabled = false;
	       document.getElementById("myTable").rows[getRowFromSelector(i)].cells[getCellFromSelector(i)].style.background = "red";
          }
      }
 }

function validate(guessValue,n)
 {
  if (guessValue == theProperties[n])
    {
     document.getElementById("myTable").rows[getRowFromSelector(n)].cells[getCellFromSelector(n)].style.background = "blue";
     alert("Correct!");
	 document.P[n].value = guessValue;
	}
   else
    {
	 theTries[n]++;
     document.getElementById("myTable").rows[getRowFromSelector(n)].cells[getCellFromSelector(n)].style.background = "red";
	 if (theTries[n] == 3)
	   {
	     alert("Three strikes and you're out! The answer is " + theProperties[n]);
         document.getElementById("myTable").rows[getRowFromSelector(n)].cells[getCellFromSelector(n)].style.background = "blue";
    	 document.P[n].value = theProperties[n];
		 theTries[n] = 0;
	   }
	  else
	   {
	    alert("Sorry! Please try again. This was try # " + theTries[n]);
	    document.P[n].value = "";
       }
	}
 }
