           left: @x * 71
     }, 200, callback)
 
-  updateMsg: ->
+  updateStatus: ->
     if @maze.isFinish([@x, @y, @z])
       msg = MazeUI3D.msg['win']
+      @active = false
     else if @maze.passageExists([[@x, @y, @z], [@x, @y, @z + 1]]) or @maze.passageExists([[@x, @y, @z - 1], [@x, @y, @z]])
       msg = MazeUI3D.msg['updown']
     else

    @busy = false
    @queue = []
    @moves = 0

    # floor positions
    width = @maze.dimensions[0] * 71 + 1


    # attach key event handlers
    $(document).keyup((event) =>
      if !@active
        return
      if event.which == 82 # R key
        @goUp()
        @whenIdle(=>@updateStatus())
      else if event.which == 70 # F key
        @goDown()
        @whenIdle(=> @updateStatus())
      else if event.which == 37 # Left key
        @goLeft()
        @whenIdle(=> @updateStatus())
      else if event.which == 38 # Up key
        @goForward()
        @whenIdle(=> @updateStatus())
      else if event.which == 39 # Right key
        @goRight()
        @whenIdle(=> @updateStatus())
      else if event.which == 40 # Down key
        @goBackward()
        @whenIdle(=> @updateStatus())
    )

    # messagebox
