docs: function (method, url, data, settings0) {
        var settings = settings0 || {};
        var xhr, callbackCalled = 0, prom = promise(), dataIsMap = data && (data['constructor'] == settings['constructor']);
        try {
          prom['xhr'] = xhr = new XMLHttpRequest();
  
          prom['stop0'] = function() { xhr['abort'](); };
          // @condend
  
          if (dataIsMap) { // if data is parameter map...
            data = collector(eachObj, data, function processParam(paramName, paramValue) {
              return collector(flexiEach, paramValue, function(v) {
                return encodeURIComponent(paramName) + ((v != _null) ?  '=' + encodeURIComponent(v) : '');
              });
            }).join('&');
          }
  
          if (data != _null && !/post/i.test(method)) {
            url += '?' + data;
            data = _null;
          }
  
          xhr['open'](method, url, true, settings['user'], settings['pass']);
          if (dataIsMap && /post/i.test(method))
            xhr['setRequestHeader']('Content-Type', 'application/x-www-form-urlencoded');
  
          eachObj(settings['headers'], function(hdrName, hdrValue) {
            xhr['setRequestHeader'](hdrName, hdrValue);
          });
          eachObj(settings['xhr'], function(name, value) {
            xhr[name] = value;
          });
  
          xhr['onreadystatechange'] = function() {
            if (xhr['readyState'] == 4 && !callbackCalled++) {
              if (xhr['status'] >= 200 && xhr['status'] < 300)
                prom['fire'](true, [xhr['responseText'], xhr]);
              else
                prom['fire'](false, [xhr['status'], xhr['responseText'], xhr]);
            }
          };
  
          xhr['send'](data);
        }
        catch (e) {
          if (!callbackCalled)
            prom['fire'](false, [0, _null, toString(e)]);
        }
  
        return prom;
      }