/**
 * @module: Timer
 * @author poppy poppy@poppyrr.com
 * @date 2008-10-18
 * @version 0.1
 * @comment:
 * 增强的setInterval和clearInterval，将相同间隔的轮训公用一个interval，节省系统消耗
 * 同时提供getAllIntervals方法，获取当前注册的所有轮询
 */
var Timer = {
  _o: {},
  _i: {},
  _t: {}
};

/**
 * 添加一个延迟
 * @param {function} func
 * @param {Number} interval ms.
 * @param {String} name
 */
Timer.setTimeout = function(func, interval, name) {
  this.clearTimeout(name);
  this._o[name] = setTimeout(function() {
    func();
  }, interval);
};

/**
 * 按名称删除一个延迟
 * @param {String} name
 */
Timer.clearTimeout = function(name) {
  if (this._o && this._o[name]) {
    var _this = this;
    clearTimeout(_this._o[name]);
    delete this._o[name];
  }
};
/**
 * 添加一个轮询
 * @param {function} func
 * @param {Number} interval ms.
 * @param {String} name
 */
Timer.setInterval = function(func, interval, name) {
  this._i[interval] = this._i[interval] ||
  {};
  this._i[interval][name] = func;
  this._startInterval();
};
/**
 * 按名称删除一个轮询
 * @param {String} name
 */
Timer.clearInterval = function(name) {
  var _this = this;
  for (var i in this._i) {
    if (this._i[i][name]) delete this._i[i][name];
    var n = 0;
    for (var f in this._i[i]) 
      n++;
    if (n == 0) {
      clearInterval(_this._t[i]);
      delete _this._t[i];
    }
  }
};
/**
 * 获取当前注册的所有轮询
 */
Timer.getAllIntervals = function() {
  var str = [];
  for (var i in this._i) 
    for (var f in this._i[i]) 
      str.push("name:" + f + " interval:" + i);
  console ? console.log(str.join("\n")) : alert(str.join("\n"));
};
Timer._startInterval = function() {
  var _this = this;
  for (var i in this._i) {
    if (!this._t[i]) {
      this._t[i] = setInterval(function() {
        for (var f in _this._i[i]) 
          _this._i[i][f]();
      }, i);
    }
  }
};
