text: /**
   * Requests the given webservice that will create the connection and will return
   * the necessary details(rid, sid and jid) to attach to this connection and
   * start using it. This script can be used for optimizing the connection startup
   * time. The function will send AJAX request to a webservice that should
   * create the bosh session much faster than the client because the webservice
   * can be started on the same machine as the XMPP serever.
   *
   * NOTE: It's vert important to execute this function as early as you can for
   * optimal results.
   *
   * @param webserviceUrl the url for the web service that is going to create the
   * connection.
   * @param success_callback callback function called with the result of the AJAX
   * request if the request was successfull. The callback will receive one
   * parameter which will be JS Object with properties - rid, sid and jid. This
   * result should be passed to JitsiConnection.attach method in order to use that
   * connection.
   * @param error_callback callback function called the AJAX request fail. This
   * callback is going to receive one parameter which is going to be JS error
   * object with a reason for failure in it.
   */
  function createConnectionExternally( // eslint-disable-line no-unused-vars
          webserviceUrl,
          success_callback,
          error_callback) {
      if (!window.XMLHttpRequest) {
          error_callback(new Error("XMLHttpRequest is not supported!"));
          return;
      }
  
      var HTTP_STATUS_OK = 200;
  
      var xhttp = new XMLHttpRequest();
  
      xhttp.onreadystatechange = function() {
          if (xhttp.readyState == xhttp.DONE) {
              var now = window.connectionTimes["external_connect.done"] =
                  window.performance.now();
              console.log("(TIME) external connect XHR done:\t", now);
              if (xhttp.status == HTTP_STATUS_OK) {
                  try {
                      var data = JSON.parse(xhttp.responseText);
  
                      var proxyRegion = xhttp.getResponseHeader('X-Proxy-Region');
                      var jitsiRegion = xhttp.getResponseHeader('X-Jitsi-Region');
                      window.jitsiRegionInfo = {
                          "ProxyRegion" : proxyRegion,
                          "Region" : jitsiRegion,
                          "Shard" : xhttp.getResponseHeader('X-Jitsi-Shard'),
                          "CrossRegion": proxyRegion !== jitsiRegion ? 1 : 0
                      };
  
                      success_callback(data);
                  } catch (e) {
                      error_callback(e);
                  }
              } else {
                  error_callback(new Error("XMLHttpRequest error. Status: " +
                      xhttp.status + ". Error message: " + xhttp.statusText));
              }
          }
      };
  
      xhttp.open("GET", webserviceUrl, true);
  
      // Fixes external connect for IE
      // The timeout property may be set only after calling the open() method
      // and before calling the send() method.
      xhttp.timeout = 3000;
  
      window.connectionTimes = {};
      var now = window.connectionTimes["external_connect.sending"] =
          window.performance.now();
      console.log("(TIME) Sending external connect XHR:\t", now);
      xhttp.send();
  }
  