var _si_nativeSetInterval = window.setInterval;var _si_nativeClearInterval = window.clearInterval;var _si_intervalTime = 10;var _si_counter = 1;var _si_length = 0;var _si_functions = {};var _si_counters = {};var _si_numbers = {};var _si_intervalId = undefined;var _si_loop = function() { var f = _si_functions, c = _si_counters, n = _si_numbers; for(var i in f) { if(!--c[i]) { f[i](); c[i] = n[i]; } } };window.setInterval = function(handler, time) { if(typeof handler == 'string') handler = new Function(handler); _si_functions[_si_counter] = handler; _si_counters[_si_counter] = _si_numbers[_si_counter] = Math.ceil(time / _si_intervalTime); if (++_si_length && !_si_intervalId) { _si_intervalId = _si_nativeSetInterval(_si_loop, _si_intervalTime); } return _si_counter++;};window.clearInterval = function(id) { if(_si_functions[id]) { delete _si_functions[id]; delete _si_numbers[id]; delete _si_counters[id]; if (!--_si_length && _si_intervalId) { _si_nativeClearInterval(_si_intervalId); _si_intervalId = undefined; } }};
