(function() {
  var ns = $.namespace("pskl.drawingtools");

  ns.VerticalMirrorPen = function() {
    this.toolId = "tool-vertical-mirror-pen";
    this.helpText = "vertical mirror pen tool";

    this.swap = null;
    this.mirroredPreviousCol = null;
    this.mirroredPreviousRow = null;
  };

  pskl.utils.inherit(ns.VerticalMirrorPen, ns.SimplePen);
  

  ns.VerticalMirrorPen.prototype.setMirrorContext = function() {
    this.swap = this.previousCol;
    this.previousCol = this.mirroredPreviousCol;
  };

  ns.VerticalMirrorPen.prototype.unsetMirrorContext = function() {
    this.mirroredPreviousCol = this.previousCol;
    this.previousCol = this.swap;
  };

  /**
   * @override
   */
  ns.VerticalMirrorPen.prototype.applyToolAt = function(col, row, color, frame, overlay) {
    this.superclass.applyToolAt.call(this, col, row, color, frame, overlay);

    var mirroredCol = this.getSymmetricCol_(col, frame);
    this.mirroredPreviousCol = mirroredCol;

    this.setMirrorContext();
    this.superclass.applyToolAt.call(this, mirroredCol, row, color, frame, overlay);
    this.unsetMirrorContext();
  };

  /**
   * @private
   */
  ns.VerticalMirrorPen.prototype.getSymmetricCol_ = function(col, frame) {
    return frame.getWidth() - col - 1; 
  };
})();
