


xA = function(el) {
  return new xToolAnimator(x$(el));
}

xToolAnimatorGlobalRef = new Array();

xToolAnimator = function(xObject) {
  this.xToolObject = xObject;
  this._t;
  this._i=0;
  this._fps=50;
  this._loopTime=1000/this._fps;
  this._runtime = 0;
  this._action;
  this._actionParam;
  this.globalRef = xToolAnimatorGlobalRef.length;
  xToolAnimatorGlobalRef[this.globalRef] = this;
    
  this.setTime = function(t) {
    this._time = t;
    this._step = Math.round(t/1000*this._fps);
    return this;
  }
  this.setTime(1000); // default to 1 sec
    
  this.style = function(obj) {
    this._action = '_style';
    this._actionParam = obj;
    this._ani();
  }
  this._ani = function() {
    this[this._action](this._actionParam);
    if(this._runtime > this._time) return true;
    var t=setTimeout('xToolAnimatorGlobalRef['+this.globalRef+']._ani()',this._loopTime);
    this._i++;
    this._runtime += this._loopTime;
  }
  
  this._style = function(param) {
    for(var i in param) {
      var set = param[i]; 
      this.xToolObject.setStyle(i,this._transition(set[0],set[1],'linear'));
    }
  }
  
  this._transition = function(start,end,type) {
    switch(type) {
      default: // linear
        return start + (end-start)/this._step*this._i;
    }
  }
  
}