Source: ProgressBar.js

/** A progress bar is a widget that shows progress from 0% to 100%
  @constructor
*/
hui.ui.ProgressBar = function(o) {
  this.element = hui.get(o.element);
  this.name = o.name;
  /** @private */
  this.WAITING = o.small ? 'hui_progressbar_small_waiting' : 'hui_progressbar_waiting';
  /** @private */
  this.COMPLETE = o.small ? 'hui_progressbar_small_complete' : 'hui_progressbar_complete';
  /** @private */
  this.options = o || {};
  /** @private */
  this.indicator = hui.get.firstByTag(this.element,'div');
  hui.ui.extend(this);
};

/** Creates a new progress bar:
  @param o {Object} Options : {small:false}
*/
hui.ui.ProgressBar.create = function(o) {
  o = o || {};
  var e = o.element = hui.build('div',{'class':o.small ? 'hui_progressbar hui_progressbar_small' : 'hui_progressbar'});
  e.appendChild(document.createElement('div'));
  return new hui.ui.ProgressBar(o);
};

hui.ui.ProgressBar.prototype = {
  /** Set the progress value
  @param value {Number} A number between 0 and 1
  */
  setValue : function(value) {
    var el = this.element;
    if (this.waiting) {
      hui.cls.remove(el,this.WAITING);
    }
    hui.cls.set(el,this.COMPLETE,value==1);
    hui.animate(this.indicator,'width',(value*100)+'%',200);
  },
  /** Mark progress as waiting */
  setWaiting : function() {
    this.waiting = true;
    this.indicator.style.width=0;
    hui.cls.add(this.element,this.WAITING);
  },
  /** Reset the progress bar */
  reset : function() {
    var el = this.element;
    if (this.waiting) {
      hui.cls.remove(el,this.WAITING);
    }
    hui.cls.remove(el,this.COMPLETE);
    this.indicator.style.width='0%';
  },
  /** Hide the progress bar */
  hide : function() {
    this.element.style.display = 'none';
  },
  /** Show the progress bar */
  show : function() {
    this.element.style.display = 'block';
  }
};