code: function(attributes, options, callback) {
          var self = this,
              calledBack = false;
  
          var equalCheckId = setInterval(function() {
  
              self.getDetails(function(err, server) {
                  if (err) return; // Ignore errors
  
                  if (options.update) {
                      options.update();
                  }
  
                  var equal = true, keys = Object.keys(attributes);
                  for (var index in keys) {
                      if (attributes[keys[index]] !== server[keys[index]]) {
                          equal = false;
                          break;
                      }
                  }
  
                  if (equal && !calledBack) {
                      finalize(null);
                  }
                  else if (calledBack) {
                      clearInterval(equalCheckId);
                      clearTimeout(equalTimeoutId);
                  }
              });
          }, options.interval);
  
          var equalTimeoutId = setTimeout(function() {
              if (!calledBack) {
                  finalize({ error: 'Max timeout exceeded' });
              }
          }, options.maxWait ? options.maxWait * 1000 : 60 * 30 * 1000);
  
          function finalize(err) {
              calledBack = true;
              clearInterval(equalCheckId);
              clearTimeout(equalTimeoutId);
              if (options.finish) {
                  options.finish();
              }
              callback(err, self);
          }
  
          return equalCheckId;
      }
docs: @name Server.setWait
  @description Continually polls Rackspace CloudServers and checks the
  results against the attributes parameter. When the attributes match
  the callback will be fired.
  
  @param {Object}      attributes  the value to check for during the interval
  @param {Object}     options      interval options including max wait in minutes
  @param {Function}    callback    handles the callback of your api call