// Requires timer.js function silencer( callback, delay, timeout ) { var delay_until = 0, timer = Timer(), now = Date.now || function(){ return +new Date(); }; timeout = timeout || delay; function step() { delay_until = now() + delay; callback.apply( this, arguments ); } return function() { if ( now() < delay_until ) { timer.set( timeout, step, this, arguments ); } else { timer.clear(); step.apply( this, arguments ); } }; }