5 X.Timer = ( function(){
\r
6 var setTimeout = window.setTimeout;
\r
7 var clearTimeout = window.clearTimeout;
\r
8 var INTERVAL_TIME = 16;
\r
9 var TICKET_LIST = [];
\r
23 for( ; i < list.length; ){
\r
25 if( 0 < ( queue[ INDEX_LAST ] -= c ) ){
\r
29 callback = queue[ INDEX_CALLBACK ];
\r
30 c = queue[ INDEX_COUNT ];
\r
31 if( callback() === false || c === 1 ){
\r
32 list.splice( i, 1 );
\r
38 --queue[ INDEX_COUNT ];
\r
41 queue[ INDEX_LAST ] = queue[ INDEX_TIME ];
\r
47 var list = TICKET_LIST,
\r
52 timerId !== -1 && clearTimeout( timerId );
\r
57 last = list[ --l ][ INDEX_LAST ];
\r
58 if( last < n ) n = last;
\r
60 if( n < next || timerId === -1 ){
\r
61 timerId !== -1 && clearTimeout( timerId );
\r
62 timerId = setTimeout( loop, INTERVAL_TIME * n );
\r
68 add : function( time, count, args1, args2, args3 ){
\r
69 if( time < INTERVAL_TIME ) time = INTERVAL_TIME;
\r
70 time = Math.floor( time / INTERVAL_TIME );
\r
76 if( typeof count !== 'number' || count < 0 ){
\r
81 queue = list[ --i ];
\r
82 if( queue[ INDEX_CALLBACK ].same( args1, args2 ) === true ){
\r
83 queue[ INDEX_TIME ] = queue[ INDEX_LAST ] = time;
\r
84 queue[ INDEX_COUNT ] = count;
\r
90 list[ l ] = [ time, time, count, X.Callback.create( args1, args2, args3 ) ];
\r
93 once : function( time, args1, args2, args3 ){
\r
94 X.Timer.add( time, 1, args1, args2, args3 );
\r
96 remove : function( args1, args2 ){
\r
100 if( !callback ) return;
\r
101 while( queue = list[ i ] ){
\r
102 if( queue[ INDEX_CALLBACK ].same( args1, args2 ) === true ){
\r
104 list.splice( i, 1 );
\r