anchor.diff:        }
       }, REPOSITION_DURATION);
     }
  -  
  +
     void _idle() {
       _repositionDroid(DROID_IDLE_X, DROID_IDLE_Y);
       window.console.log("I'm bored");
     }
  -  
  +
     void _startAnimationLoop() {
  -    _animationStartTime = new Date.now().value;    
  -    window.webkitRequestAnimationFrame(_animationLoop);
  +    _animationStartTime = new Date.now().millisecondsSinceEpoch;
  +    window.requestAnimationFrame(_animationLoop);
     }
  -  
  +
     void _animationLoop(int timestamp) {
       _animationProgress = timestamp - _animationStartTime;
  -    for (Callback callback in _animationCallbacks.getValues()) {
  +    for (Callback callback in _animationCallbacks.values) {
         callback();
       }
  -    window.webkitRequestAnimationFrame(_animationLoop);
  +    window.requestAnimationFrame(_animationLoop);
     }
   }
   
  
positive.code:         _actionQueue.add({'action': 'water', 'zone': el.id});
          _notifyActionQueue();
        });
      }); 
    }
  
    void _notifyActionQueue() {
  
negative.code:       window.setTimeout(_executeActionQueue, TIMER_INTERVAL);
      }
    }
  
    void _doAction(action) {
      // We only have one action at this point.
      assert (action["action"] == "water");
      _water(action["zone"]);
    }
  
    void _water(String zoneId) {
      window.console.log("Watering zone: ${zoneId}");
      AreaElement zone = document.query("#${zoneId}");
      int x = int.parse(zone.dataAttributes["center-x"]);
      int y = int.parse(zone.dataAttributes["center-y"]);
      int zoneNum = int.parse(zoneId.split("-")[1]);
      _repositionDroid(x, y, () {
        _droid.src = "/static/images/droid-watering-1.png";
        _animationCallbacks["_wateringAnimation"] = _wateringAnimation;
        _waterRpc(zoneNum);
      });
    }
  
    void _wateringAnimation() {
      if (!_droid.src.contains("/static/images/droid-watering-")) {
        _animationCallbacks.remove("_wateringAnimation");
      } else {
        int oneOrTwo = (_animationProgress ~/ HALF_SECOND) % 2 + 1;
        _droid.src = "/static/images/droid-watering-${oneOrTwo}.png";
      }
    }
  
    void _waterRpc(int zone) {
      var req = new HttpRequest();
      int secs = (TIMER_INTERVAL * SECS_PER_MS).toInt();
      req.open("POST", "/?water-zone=true&zone=${zone}&secs=${secs}", true);
      req.on.readyStateChange.add((Event e) {
  