// default mode = "quick"
static YN<S, S> transpileOnServer2(S snippetID) {
  ret transpileOnServer2(snippetID, "quick");
}

static YN<S, S> transpileOnServer2(long snippetID) {
  ret transpileOnServer2(fsI(snippetID));
}

static YN<S, S> transpileOnServer2(long snippetID, S mode) {
  ret transpileOnServer2(fsI(snippetID), mode);
}

// mode = "quick", "medium", "fresh"
// result = yes(answer) or no(answer)
static YN<S, S> transpileOnServer2(S snippetID, S mode) ctex {
  print("Transpiling " + formatSnippetID(snippetID));
  S user = loadTextFile(new File(userHome(), ".tinybrain/username").getPath(), null);
  S pass = loadTextFile(new File(userHome(), ".tinybrain/userpass").getPath(), null);

  S url = "http://tinybrain.de:8080/tb/transpile.php";
  S modeStr = "&quick=1";
  if (eq(mode, "medium")) modeStr += "&medium=1";
  if (eq(mode, "fresh")) modeStr += "&fresh=1";
  S query = "id=" + parseSnippetID(snippetID) + modeStr + "&_user=" + urlencode(user) + "&_pass=" + urlencode(pass);
  S result = loadPage(url + "?" + query);
  print(result);
  
  Matcher m = regexp("URL=/(dexcompile\\.php.*?)'", result);
  if (!m.find())
    ret no(result);
    
  url = "http://tinybrain.de:8080/" + m.group(1);
  result = loadPage(url);
  ret result.contains("SUCCESS") ? yes(result) : no(result);
}