/*
numerology-toss.js

needed for the basic/html version of the i-ching reading.

  we need to "toss" the stones, which results in a number.

  * store the resulting number
  #  * The graphic is being done outside, not sure how to integrate yet
  * track number of tosses (stop after 6)
  * show the numbers which hav ebeen chosen already.
  * show the "continue button after the 6th toss
  
  Select numbers randomly from 1-9, unless two of any number already chosen
    Then select randomly from remaining numbers. 
  
	*/

  // keep track of how many tosses have been made
  var numCounter = -1;
  // How many do we want?
  var howMany = 9;
  // The last selected number
  var lastNumber = 0;
  // Whether we had two of the last number
  var avoidFlag = false;

  var DisplayString = "";

  function check_numbers() {
      /* 
       * Check if the form is already populated,
       * if so submit
       * otherwise forward to the flash application
       */
       numCounter++; // global var set in this file
       var formField = "number_" + numCounter + "_integer";
       while (numCounter < howMany) {
          if ( document.getElementById(formField).value > 0 ){
              numCounter++; // global var set in this file
              formField = "number_" + numCounter + "_integer";
          }
       }
       if (numCounter >= howMany){
           document.getElementById('ups_form').submit();
       }
  }
  
  /* wrapper function that does all of the stuff, 
  or parcels it out to helper functions.
  this is all the javascript that happens during a coin toss */
  function toss() {
    // track what line/coin toss this is
    numCounter++; // global var set in this file
    var formField = "number_" + numCounter + "_integer";
    if (numCounter < howMany) {
      while ( (document.getElementById(formField).value > 0) && (numCounter < howMany)){
          DisplayString =  DisplayString + " <STRONG>" + document.getElementById(formField).value + "</STRONG>";
          numCounter++; // global var set in this file
          formField = "number_" + numCounter + "_integer";
      }
      // not at last one yet, so keep going
      var thisNum = getNum();
      DisplayString =  DisplayString + " <STRONG>" + thisNum + "</STRONG>";
      document.getElementById("numberDisplay").innerHTML =  DisplayString;

      // update form field
      document.getElementById(formField).value = thisNum;
      
    } // end of tossing coins

    if (numCounter > howMany - 1) {
      // done tossing, move along
      document.getElementById('ups_form').submit();
    } // END OF we're done part
  
  } // END OF FUNCTION toss()
  
  
// **********************************************************************
  
  //takes no parameters, returns a random number from 1-9
  function getNum() {
    // start by generating a "random" number 1-9, or 1-8 if we had two of the last number
    var n = 9; // largest number of the range
    if ( avoidFlag ){
        n = 8; // largest number of the range
    } 
    var m =1; //smallest number of the range
    var numRep = Math.floor(Math.random() * ( n - m + 1)) + m;
    var myNum = 0; //initial value
    
    // this is where the coin toss odds can be changed
    // this wacky scheme is in place to make the odds conform to the yarrow stalk method
    // according to paul's odds (via sean's .as)
    if ( avoidFlag ) {
        var possibleNums=new Array();
        var y = 1;
        for (x=1; x<=n; x++){
            if ( y == lastNumber ){
                y++;
            } 
            possibleNums[x] = y;
            y++;
        }
        myNum = possibleNums[numRep]; 
        avoidFlag = false;    // This is never true twice in a row.
    } else {
        myNum = numRep; 
    }
    // Keep track of the state.
    if (myNum == lastNumber){
        avoidFlag = true;
    } else {
        lastNumber = myNum;
    }
    return (myNum);
  }
  // END OF FUNCTION getNum()

// *****************************************************************
