private static String CreateGoogleDataTableJSON(boolean F, TemperatureSet... TSList) {

    /* merge temperature data sets */
    OrderedMap<Long, Double[]> rowMap = _MergeDataSets(F, TSList);

    /* create JSON "cols" Object */
    JSON._Array dataTable_cols = new JSON._Array();
    // -- DateTime
    JSON._Object col_dateTime = (new JSON._Object()).setFormatIndent(false);
    col_dateTime.addKeyValue("id", "date");
    col_dateTime.addKeyValue("label", "Date/Time");
    col_dateTime.addKeyValue("type", "datetime");
    dataTable_cols.addValue(col_dateTime);
    // -- data set titles
    if (!ListTools.isEmpty(TSList)) {
      for (int d = 0; d < TSList.length; d++) {
        TemperatureSet TS = TSList[d];
        JSON._Object col_temp = (new JSON._Object()).setFormatIndent(false);
        col_temp.addKeyValue("id", "temp" + (d + 1));
        col_temp.addKeyValue("label", "Temp-" + (d + 1));
        col_temp.addKeyValue("type", "number");
        dataTable_cols.addValue(col_temp);
      }
    }

    /* create JSON "rows" Object */
    JSON._Array dataTable_rows = new JSON._Array();
    for (Long ts : rowMap.keySet()) {
      JSON._Object col = new JSON._Object();
      // TODO
    }

    /* return */
    return null; // TODO:
  }
  /**
   * ** Creates a Google DataTable containing the specified TemperatureSet Data ** @param F True for
   * Fahrenheit, false for Celsius ** @param TSList The TemperatureSet data array ** @return The
   * "DataTable" String.
   */
  public static String CreateGoogleDataTableJavaScript(boolean F, TemperatureSet... TSList) {
    // {
    //   cols: [
    //       { id: "date" , label: "Date/Time", type: "datetime" },
    //       { id: "temp1", label: "Temp-1"   , type: "number"   },
    //       { id: "temp2", label: "Temp-2"   , type: "number"   }
    //   ],
    //   rows: [
    //       { c: [ { v: new Date(1383914237000) }, { v: -12.6 }, { v: -18.1 } ] },
    //       { c: [ { v: new Date(1384914237000) }, { v:  -5.1 }, { v:  -7.3 } ] },
    //       { c: [ { v: new Date(1385914345000) }, { v:  null }, { v:  -2.1 } ] },
    //       { c: [ { v: new Date(1386924683000) }, { v:  -2.0 }, { v:  null } ] },
    //       { c: [ { v: new Date(1387934245000) }, { v:   5.8 }, { v:   6.7 } ] }
    //   ]
    // }

    /* merge temperature data sets */
    OrderedMap<Long, Double[]> rowMap = _MergeDataSets(F, TSList);

    /* init */
    StringBuffer sb = new StringBuffer();
    sb.append("{").append("\n");

    /* "cols" */
    sb.append("  cols: [").append("\n");
    // --
    sb.append("    { id:\"date\", label:\"Date/Time\", type:\"datetime\" },").append("\n");
    // --
    for (int d = 0; d < TSList.length; d++) {
      String id = "temp" + (d + 1);
      String label = "Temp-" + (d + 1);
      String type = "number";
      sb.append("    { id:\"" + id + "\", label:\"" + label + "\", type:\"" + type + "\" },")
          .append("\n");
    }
    // --
    sb.append("  ],").append("\n");

    /* "rows" */
    // { c: [ { v: new Date(1383914237000) }, { v: -12.6 }, { v: -18.1 } ] },
    sb.append("  rows: [").append("\n");
    int rows = 0, rowCnt = rowMap.size();
    for (Long ts : rowMap.keySet()) {
      sb.append("    { c: [ ");
      sb.append("{v:new Date(" + (ts.longValue() * 1000L) + ")}, ");
      Double tmp[] = rowMap.get(ts);
      for (int t = 0; t < tmp.length; t++) {
        Double D = tmp[t];
        if (t > 0) {
          sb.append(", ");
        }
        String Ds = (D != null) ? StringTools.format(D, "0.0") : "null";
        sb.append("{v:" + Ds + "}");
      }
      sb.append(" ]}");
      if (rows < (rowCnt - 1)) {
        sb.append(",");
      }
      sb.append("\n");
      rows++;
    }
    sb.append("  ]").append("\n");

    /* return */
    sb.append("}");
    return sb.toString();
  }