// i: opacity increment
// p: period of milliseconds to wait between fading cycles
// pe: millisecons to wait before callback
function create_fadder(i,p,pe){
  return {
    my_name: new Date().getTime(),
    incr: i,
    period: p,
    period_at_end: pe,
    opacity:0,
    min_opacity:0,
    
    set_opacity: function(amt){
      this.opacity = amt;
    }, 
    fade : function(id){
      id.style.opacity = this.opacity/100.0;
      id.style.filter = "alpha(opacity="+this.opacity+")";
    },

    fade_out : function(id,callback){
      this.opacity = this.opacity - this.incr;
      this.fade(id,this.opacity)
      if(this.opacity > this.min_opacity){
        var me = this;
        var fn = function(){
          me.fade_out(id,callback);
        };
        window.setTimeout(fn,this.period);
      }
      else{
        callback();
      }
    },
    fade_in : function(id,callback){
      this.opacity = this.opacity + this.incr;
      this.fade(id,this.opacity)
      if(this.opacity < 100){
        var me = this;
        var fn = function(){
          me.fade_in(id,callback);
        };
        window.setTimeout(fn,this.period);
      }
      else{
        window.setTimeout(callback,this.period_at_end);
      }
    }
    /*
    fade_in : function(id,callback){
      this.opacity = this.opacity + this.incr;
      this.fade(id,this.opacity)
      if(this.opacity >= this.opacity_limit_for_callback){
        this.opacity_limit_for_callback = 500;
        window.setTimeout(callback,this.period_at_end);
      }
      if(this.opacity < 100){
        var me = this;
        var fn = function(){
          me.fade_in(id,callback);
        };
        window.setTimeout(fn,this.period);
      }
    }
    */
  };
};

