code: function(level, animate, originLeft, originTop) {
      var self = this;
  
      if (!self.options.zooming) {
        throw new Error("Zooming is not enabled!");
      }
  
      // Stop deceleration
      if (self.__isDecelerating) {
        zyngaCore.effect.Animate.stop(self.__isDecelerating);
        self.__isDecelerating = false;
      }
  
      var oldLevel = self.__zoomLevel;
  
      // Normalize input origin to center of viewport if not defined
      if (originLeft == null) {
        originLeft = self.__clientWidth / 2;
      }
  
      if (originTop == null) {
        originTop = self.__clientHeight / 2;
      }
  
      // Limit level according to configuration
      level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);
  
      // Recompute maximum values while temporary tweaking maximum scroll ranges
      self.__computeScrollMax(level);
  
      // Recompute left and top coordinates based on new zoom level
      var left = ((originLeft + self.__scrollLeft) * level / oldLevel) - originLeft;
      var top = ((originTop + self.__scrollTop) * level / oldLevel) - originTop;
  
      // Limit x-axis
      if (left > self.__maxScrollLeft) {
        left = self.__maxScrollLeft;
      } else if (left < 0) {
        left = 0;
      }
  
      // Limit y-axis
      if (top > self.__maxScrollTop) {
        top = self.__maxScrollTop;
      } else if (top < 0) {
        top = 0;
      }
  
      // Push values out
      self.__publish(left, top, level, animate);
  
    }
docs: Zooms to the given level. Supports optional animation. Zooms
  the center when no coordinates are given.
  
  @param level {Number} Level to zoom to
  @param animate {Boolean} Whether to use animation
  @param originLeft {Number} Zoom in at given left coordinate
  @param originTop {Number} Zoom in at given top coordinate