/* easeutil 1.0, copyright(c) 2010 inventive designs <www.inventivedesigns.cz>.
   ! - requires functions defined at main.js
*/
function easeutil(o,settings) {
  this.init(o,settings);
}
easeutil.prototype = {
  propName:'left',
  defCssPosition:'relative',
  step:0,
  step_min:1,
  step_max:20,
  a:1,
  dur_update:25,
  shift:0,
  slider:false,
  init:function(o,settings) {
    var el;
    if (o.nodeType==1) this.el = o;
    else this.el = d.getElementById(o);
    this.s = this.el.style;
    for (var i in settings) this[i] = settings[i];
    var styles = w.getComputedStyle(this.el,null);
    var value = Number(styles.getPropertyValue(this.propName).replace('px',''));
    this.value = (value?value:0);
    this.value_end = this.value;
    this.value_orig = this.value;
    if (this.propName.search(/left|right|top|bottom/)!=-1 && styles.getPropertyValue('position')!='absolute') {
      this.s.position = this.defCssPosition;
    }
    if (this.slider) {
      this.width = this.el.offsetWidth;
      if (!this.value_min) this.value_min = this.shift-this.width;
      if (!this.value_max) this.value_max = this.value;
    }
    if (!this.dst_minmov) this.dst_minmov = this.step_max-1;
  },
  update:function(t) {
    t.step += t.a*t.ease;
    if (t.step<t.step_min) {
      t.step = t.step_min;
      t.ease = 0;
    } else if (t.step>t.step_max) {
      t.step = t.step_max;
      t.ease = 0;
    }
    t.value += t.step*t.sign;
    var value_end_abs = t.value_end*t.sign;
    var value_abs = t.value*t.sign;
    if (value_abs<value_end_abs) {
      if (value_abs>=value_end_abs-t.seqSum(t.step_min,t.step-1,t.a)-t.dst_minmov && t.ease!=-1 && t.step!=t.step_min) {
        t.ease = -1;
      }
    } else {
      t.value = t.value_end;
      t.step = 0;
      w.clearInterval(t.int_update);
      if (t.onAnimFinished) t.onAnimFinished();
    }
    t.updateProp(t);
  },
  updateProp:function(t) {
    t.s[t.propName] = t.value+'px';
  },
  startEase:function() {
    this.ease = 1;
    var t = this;
    w.clearInterval(this.int_update);
    this.int_update = w.setInterval(function(){t.update(t)},this.dur_update);
  },
  next:function() {
    if (this.slider) {
      this.sign = -1;
      this.value_end -= this.shift;
      if (this.value_end<this.value_min) {
        this.value_end = this.value_min;
      }
      this.startEase();
    }
  },
  prev:function() {
    if (this.slider) {
      this.sign = 1;
      this.value_end += this.shift;
      if (this.value_end>this.value_max) {
        this.value_end = this.value_max;
      }
      this.startEase();
    }
  },
  easeTo:function(value) {
    if (value<this.value) this.sign = -1;
    else this.sign = 1;
    this.startEase();
    this.value_end = value;
  },
  easeBack:function() {
    if (this.value_orig<this.value) this.sign = -1;
    else this.sign = 1;
    this.startEase();
    this.value_end = this.value_orig;
  },
  setTo:function(value,override_orig) {
    this.value_end = value;
    if (override_orig!==false) this.value_orig = value;
    this.value = value;
    this.updateProp(this);
  },
  seqSum:function(a1,an,d) {
    var n = 1+(an-a1)/d;
    return (a1+an)*n/2;
  }
}
