rem: this.effects.push(effect); 
add:  if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) this.effects.push(effect);  
context:   add: function(effect) {    var timestamp = new Date().getTime();        var position = (typeof effect.options.queue == 'string') ?       effect.options.queue : effect.options.queue.position;        switch(position) {      case 'front':        // move unstarted effects after this effect          this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {            e.startOn  += effect.finishOn;            e.finishOn += effect.finishOn;          });        break;      case 'end':        // start effect after last queued effect has finished        timestamp = this.effects.pluck('finishOn').max() || timestamp;        break;    }        effect.startOn  += timestamp;    effect.finishOn += timestamp;    this.effects.push(effect);    if(!this.interval)       this.interval = setInterval(this.loop.bind(this), 40);  },
meta: 1782	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/1782/a458ebb30ee90b66048c7fd858f5f39957a9be68/effects.js/clean/webapp/sandbox/scripts/effects.js