1 /**
  2  * @fileOverview single timer for the whole anim module
  3  * @author  yiminghe@gmail.com
  4  */
  5 KISSY.add("anim/manager", function(S) {
  6     var stamp = S.stamp;
  7 
  8     return {
  9         interval:15,
 10         runnings:{},
 11         timer:null,
 12         start:function(anim) {
 13             var self = this,
 14                 kv = stamp(anim);
 15             if (self.runnings[kv]) {
 16                 return;
 17             }
 18             self.runnings[kv] = anim;
 19             self.startTimer();
 20         },
 21         stop:function(anim) {
 22             this.notRun(anim);
 23         },
 24         notRun:function(anim) {
 25             var self = this,
 26                 kv = stamp(anim);
 27             delete self.runnings[kv];
 28             if (S.isEmptyObject(self.runnings)) {
 29                 self.stopTimer();
 30             }
 31         },
 32         pause:function(anim) {
 33             this.notRun(anim);
 34         },
 35         resume:function(anim) {
 36             this.start(anim);
 37         },
 38         startTimer:function() {
 39             var self = this;
 40             if (!self.timer) {
 41                 self.timer = setTimeout(function() {
 42                     if (!self.runFrames()) {
 43                         self.timer = 0;
 44                         self.startTimer();
 45                     } else {
 46                         self.stopTimer();
 47                     }
 48                 }, self.interval);
 49             }
 50         },
 51         stopTimer:function() {
 52             var self = this,
 53                 t = self.timer;
 54             if (t) {
 55                 clearTimeout(t);
 56                 self.timer = 0;
 57             }
 58         },
 59         runFrames:function() {
 60             var self = this,
 61                 done = 1,
 62                 runnings = self.runnings;
 63             for (var r in runnings) {
 64                 if (runnings.hasOwnProperty(r)) {
 65                     done = 0;
 66                     runnings[r]._frame();
 67                 }
 68             }
 69             return done;
 70         }
 71     };
 72 });