It's been a while since I've touched JavaScript, but something has got me flummoxed, simple I just know I should know it, but it's causing me a massive headache for the past hour!
Scenario;
Mop = {
  els : [],
  pool : [],
  generate : function(){
    for (var i=0; i<Mop.els.length; i++){
      Mop.pool.push(i)
    }
  },
  oneAtime : {
    p : Mop.pool,
    runit : function(){
      timerID = window.setTimeout(function(){
        Mop.show()
      });
    }
  },
  show : function(){
     var p = Mop.oneAtime.p;
     var r = Math.floor(p.length * Math.random());
     p.splice(r,1);
  },
  init : function(){
    Mop.els = $(".cells");
    Mop.generate();
    Mop.oneAtime();
  }
}
Mop.init()
A long winded way to say it's a problem with variable assigning. But I thought I'd show the context.
In short, invoking Mop.show() affects both the arrays Mop.pool, and Mop.oneAtime.p, even though the latter was assigned Mop.pool value, and Mop.pool is not touched again. Mop.pool must remain un-altered.
I can hear someone laughing at how easy this must be - but I just cannot work out why both arrays are affected by the splice() method! Scope, closure, something like that I bet, I've tried all I can think of...
 
    