// -----------------------------------------------------------------------------

function ArrInt1d_CreateRandomIndex( RandomIndex_Qtt, a_RandomIndex) {
// Purpose :  Fill a 1D array with random, non-repetitive value, ranging from 0 to (RandomIndex_Qtt-1).
// Input :
//    RandomIndex_Qtt :  Number of items in the array.
// Output :
//    a_RandomIndex[0..RandomIndex_Qtt-1] :  Random, non-repetitive value, ranging from 0 to (RandomIndex_Qtt-1).
//       This array should have been allocated as :   a_RandomIndex = new Array(RandomIndex_Qtt)
//    <Return value> :
//       0 :  Successful completion.
//      -1 :  An error occured.
// Note :
//    Netscape :  You will need to have this function be a method of the object
//       if you intend to call it from one of that object's methods.
//       This is not needed under Internet Explorer.
// Author :  Jerome Daoust, 2003/9/18.

   // Set Error string.
   var c_Error = new String("Error in ArrInt1d_CreateRandomIndex() :  ")

   // Verify input variables.
   if ( RandomIndex_Qtt < 0 ) {
      alert( c_Error + "( RandomIndex_Qtt < 0 ).")
      return -1
   }

   // Allocate an ordered index array.
   OrderedIndex_Qtt = RandomIndex_Qtt
   a_OrderedIndex = new Array( OrderedIndex_Qtt)
   // Fill ordered index array.
   for ( var i_OrderedIndex=0 ; i_OrderedIndex<OrderedIndex_Qtt ; i_OrderedIndex++ ) {
      a_OrderedIndex[i_OrderedIndex] = i_OrderedIndex
   }

   // Loop on random index.
   for ( var i_RandomIndex=0 ; i_RandomIndex<RandomIndex_Qtt ; i_RandomIndex++ ) {
      // Get a random index amongst the ordered array.
      var RandomIndex_in_OrderedIndexArray = Math.round( Math.random() * (OrderedIndex_Qtt-1) )
      if ( RandomIndex_in_OrderedIndexArray < 0 ) {
         RandomIndex_in_OrderedIndexArray = 0
      }
      if ( (OrderedIndex_Qtt-1) < RandomIndex_in_OrderedIndexArray ) {
         RandomIndex_in_OrderedIndexArray = OrderedIndex_Qtt-1
      }

      // Transfer value from ordered index array to the random index array.
      a_RandomIndex[i_RandomIndex] = a_OrderedIndex[RandomIndex_in_OrderedIndexArray]
      a_OrderedIndex[RandomIndex_in_OrderedIndexArray] = -1   // Set an impossible value.

      // Verify that this index was not considered before.
      for ( var j_RandomIndex=0 ; j_RandomIndex<(i_RandomIndex-1) ; j_RandomIndex++ ) {
         if ( a_RandomIndex[i_RandomIndex] == a_RandomIndex[j_RandomIndex] ) {
            alert( c_Error + "Random index (" + a_RandomIndex[i_RandomIndex] + ") was previously used.")
            return -1
         }
      }

      // Compress ordered index.
      for ( var i_OrderedIndex = RandomIndex_in_OrderedIndexArray ;
            i_OrderedIndex < (OrderedIndex_Qtt-1) ;
            i_OrderedIndex++ ) {
         a_OrderedIndex[i_OrderedIndex] = a_OrderedIndex[i_OrderedIndex+1]
      }
      // Decrement size of ordered index.
      OrderedIndex_Qtt -= 1

      // Verify size of ordered index array.
      if ( OrderedIndex_Qtt < 0 ) {
         alert( c_Error + "( OrderedIndex_Qtt < 0 ).")
         return -1
      }
   }

   // Return success code.
   return 0
}
// -----------------------------------------------------------------------------

