/*
---
name: Fx.ProgressBar

description: Fx.ProgressBar

requires: [Core/Fx.Transitions, Core/Fx, Core/Class]

provides: [Fx.ProgressBar]

version: 1.1

license: MIT License

author: Harald Kirschner <http://digitarald.de>
...
*/

Fx.ProgressBar = new Class({

  Extends: Fx,

  options: {
    text: null,
    url: null,
    transition: Fx.Transitions.Circ.easeOut,
    fit: true,
    link: 'cancel'
  },

  initialize: function(element, options) {
    this.element = document.id(element);
    this.parent(options);

    var url = this.options.url;
    if (url) {
      this.element.setStyles({
        'background-image': 'url(' + url + ')',
        'background-repeat': 'no-repeat'
      });
    }

    if (this.options.fit) {
      url = url || this.element.getStyle('background-image').replace(/^url\(["']?|["']?\)$/g, '');
      if (url) {
        var fill = new Image();
        fill.onload = function() {
          this.fill = fill.width;
          fill = fill.onload = null;
          this.set(this.now || 0);
        }.bind(this);
        fill.src = url;
        if (!this.fill && fill.width) fill.onload();
      }
    } else {
      this.set(0);
    }
  },

  start: function(to, total) {
    return this.parent(this.now, (arguments.length == 1 || !total) ? to.limit(0, 100) : to / total * 100);
  },

  set: function(to) {
    this.now = to;
    var css = (this.fill)
      ? (((this.fill / -2) + (to / 100) * (this.element.width || 1) || 0).round() + 'px')
      : ((100 - to) + '%');

    this.element.setStyle('backgroundPosition', css + ' 0px').title = Math.round(to) + '%';

    var text = document.id(this.options.text);
    if (text) text.set('text', Math.round(to) + '%');

    return this;
  }

});
