var Scalr = Class.create({
  initialize: function(elem) {
    // Add an extra hook for styling tweaks.
    elem.addClassName('scalr-active');
    var width = elem.getWidth();
    var spans = elem.select('span').map(function(span) {
      var obj = new ScalrSpan(span);
      obj.fitTo(width);
      return obj;
    });
    // Add an extra hook for styling tweaks.
    elem.addClassName('scalr-complete');
  }
});

var ScalrSpan = Class.create({
  initialize: function(elem) {
    this.span = elem;
    this.fontSize = parseInt(elem.getStyle('fontSize')); // px.
    this.lineHeight = parseInt(elem.getStyle('lineHeight')) / this.fontSize; // em.
    this.initialWidth = elem.getWidth();
    this.scale = 1;
  },

  fitTo: function(width) {
    // Approximate.
    this.setScale(width / this.initialWidth);

    var newWidth = this.span.getWidth();

    // Check / tweak.
    if (newWidth > width) {
      this.setScale(this.scale * (width / newWidth));
    }
  },

  setScale: function(scale) {
    this.scale = scale;
    var size = this.fontSize * scale;
    this.span.setStyle({
      fontSize: size + 'px',
      lineHeight: (size * this.lineHeight) + 'px'
    });
  }
});

