protected void encodeScript(FacesContext context, SelectCheckboxMenu menu) throws IOException {
    ResponseWriter writer = context.getResponseWriter();
    String clientId = menu.getClientId(context);

    WidgetBuilder wb = getWidgetBuilder(context);
    wb.widget("SelectCheckboxMenu", menu.resolveWidgetVar(), clientId, true)
        .callback("onShow", "function()", menu.getOnShow())
        .callback("onHide", "function()", menu.getOnHide())
        .attr("scrollHeight", menu.getScrollHeight(), Integer.MAX_VALUE);

    if (menu.isFilter()) {
      wb.attr("filter", true)
          .attr("filterMatchMode", menu.getFilterMatchMode(), null)
          .attr("filterFunction", menu.getFilterFunction(), null)
          .attr("caseSensitive", menu.isCaseSensitive(), false);
    }

    wb.attr("panelStyle", menu.getPanelStyle(), null)
        .attr("panelStyleClass", menu.getPanelStyleClass(), null);

    encodeClientBehaviors(context, menu, wb);

    startScript(writer, clientId);
    writer.write(wb.build());
    endScript(writer);
  }