| var scope = (typeof global !== "undefined" && global) || | 
|             (typeof self !== "undefined" && self) || | 
|             window; | 
| var apply = Function.prototype.apply; | 
|   | 
| // DOM APIs, for completeness | 
|   | 
| exports.setTimeout = function() { | 
|   return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout); | 
| }; | 
| exports.setInterval = function() { | 
|   return new Timeout(apply.call(setInterval, scope, arguments), clearInterval); | 
| }; | 
| exports.clearTimeout = | 
| exports.clearInterval = function(timeout) { | 
|   if (timeout) { | 
|     timeout.close(); | 
|   } | 
| }; | 
|   | 
| function Timeout(id, clearFn) { | 
|   this._id = id; | 
|   this._clearFn = clearFn; | 
| } | 
| Timeout.prototype.unref = Timeout.prototype.ref = function() {}; | 
| Timeout.prototype.close = function() { | 
|   this._clearFn.call(scope, this._id); | 
| }; | 
|   | 
| // Does not start the time, just sets up the members needed. | 
| exports.enroll = function(item, msecs) { | 
|   clearTimeout(item._idleTimeoutId); | 
|   item._idleTimeout = msecs; | 
| }; | 
|   | 
| exports.unenroll = function(item) { | 
|   clearTimeout(item._idleTimeoutId); | 
|   item._idleTimeout = -1; | 
| }; | 
|   | 
| exports._unrefActive = exports.active = function(item) { | 
|   clearTimeout(item._idleTimeoutId); | 
|   | 
|   var msecs = item._idleTimeout; | 
|   if (msecs >= 0) { | 
|     item._idleTimeoutId = setTimeout(function onTimeout() { | 
|       if (item._onTimeout) | 
|         item._onTimeout(); | 
|     }, msecs); | 
|   } | 
| }; | 
|   | 
| // setimmediate attaches itself to the global object | 
| require("setimmediate"); | 
| // On some exotic environments, it's not clear which object `setimmediate` was | 
| // able to install onto.  Search each possibility in the same order as the | 
| // `setimmediate` library. | 
| exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || | 
|                        (typeof global !== "undefined" && global.setImmediate) || | 
|                        (this && this.setImmediate); | 
| exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || | 
|                          (typeof global !== "undefined" && global.clearImmediate) || | 
|                          (this && this.clearImmediate); |