text: // Licensed under the Apache License, Version 2.0 (the "License"); you may not
  // use this file except in compliance with the License. You may obtain a copy of
  // the License at
  //
  //   http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  // License for the specific language governing permissions and limitations under
  // the License.
  
  (function() {
    if(typeof(CouchHTTP) != "undefined") {
      CouchHTTP.prototype.open = function(method, url, async) {
        if(!/^\s*http:\/\//.test(url)) {
          if(/^\//.test(url)) {
            // The couch.uri file (base_url) has a trailing slash
            url = this.base_url + url.slice(1);
          } else {
            url = this.base_url + url;
          }
        }
        
        return this._open(method, url, async);
      };
      
      CouchHTTP.prototype.setRequestHeader = function(name, value) {
        // Drop content-length headers because cURL will set it for us
        // based on body length
        if(name.toLowerCase().replace(/^\s+|\s+$/g, '') != "content-length") {
          this._setRequestHeader(name, value);
        }
      }
      
      CouchHTTP.prototype.send = function(body) {
        this._send(body || "");
        var headers = {};
        this._headers.forEach(function(hdr) {
            var pair = hdr.split(":");
            var name = pair.shift();
            headers[name] = pair.join(":").replace(/^\s+|\s+$/g, "");
        });
        this.headers = headers;
      };
  
      CouchHTTP.prototype.getResponseHeader = function(name) {
        for(var hdr in this.headers) {
          if(hdr.toLowerCase() == name.toLowerCase()) {
            return this.headers[hdr];
          }
        }
        return null;
      };
    }
  })();
  
  CouchDB.urlPrefix = "";
  CouchDB.newXhr = function() {
    return new CouchHTTP();
  };
  
  CouchDB.xhrheader = function(xhr, header) {
    if(typeof(xhr) == "CouchHTTP") {
      return xhr.getResponseHeader(header);
    } else {
      return xhr.headers[header];
    }
  }
  
  CouchDB.xhrbody = function(xhr) {
    return xhr.responseText || xhr.body;
  }
  