whole_func_string: function combineUrl(baseUrl, url) {
    if (!url) {
      return baseUrl;
    }
    if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) {
      return url;
    }
    var i;
    if (url.charAt(0) === '/') {
      // absolute path
      i = baseUrl.indexOf('://');
      if (url.charAt(1) === '/') {
        ++i;
      } else {
        i = baseUrl.indexOf('/', i + 3);
      }
      return baseUrl.substring(0, i) + url;
    } else {
      // relative path
      var pathLength = baseUrl.length;
      i = baseUrl.lastIndexOf('#');
      pathLength = i >= 0 ? i : pathLength;
      i = baseUrl.lastIndexOf('?', pathLength);
      pathLength = i >= 0 ? i : pathLength;
      var prefixLength = baseUrl.lastIndexOf('/', pathLength);
      return baseUrl.substring(0, prefixLength + 1) + url;
    }
  }
func_code_string: function combineUrl(baseUrl, url) {
    if (!url) {
      return baseUrl;
    }
    if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) {
      return url;
    }
    var i;
    if (url.charAt(0) === '/') {
      // absolute path
      i = baseUrl.indexOf('://');
      if (url.charAt(1) === '/') {
        ++i;
      } else {
        i = baseUrl.indexOf('/', i + 3);
      }
      return baseUrl.substring(0, i) + url;
    } else {
      // relative path
      var pathLength = baseUrl.length;
      i = baseUrl.lastIndexOf('#');
      pathLength = i >= 0 ? i : pathLength;
      i = baseUrl.lastIndexOf('?', pathLength);
      pathLength = i >= 0 ? i : pathLength;
      var prefixLength = baseUrl.lastIndexOf('/', pathLength);
      return baseUrl.substring(0, prefixLength + 1) + url;
    }
  }
func_documentation_string: Combines two URLs. The baseUrl shall be absolute URL. If the url is an absolute URL, it will be returned as is.