@Override
  public void encodeJavaScriptCustom(FacesContext facesContext, UIComponent uiComponent)
      throws IOException {

    ResponseWriter responseWriter = facesContext.getResponseWriter();

    OutputTooltip tooltip = (OutputTooltip) uiComponent;

    // alloy's divs should be in place and hidden by now.
    // so we need to unhide the div we have hidden until now.
    // any chance for blinking should be over by now.
    responseWriter.write(
        "A.one('"
            + StringPool.POUND
            + ComponentUtil.escapeClientId(tooltip.getClientId(facesContext))
            + "')._node['style'].display = 'block';");
  }
  @Override
  public void encodeMarkupBegin(FacesContext facesContext, UIComponent uiComponent)
      throws IOException {

    ResponseWriter responseWriter = facesContext.getResponseWriter();
    OutputTooltipResponseWriter outputTooltipResponseWriter =
        new OutputTooltipResponseWriter(responseWriter, uiComponent);

    OutputTooltip outputTooltip = (OutputTooltip) uiComponent;

    if (outputTooltip.getFor() == null) {

      if (facesContext.isProjectStage(ProjectStage.Development)) {
        logger.error(
            "The outputTooltip needs to point to something. Try using its 'for' attribute to point to an 'id' in the component tree.");
      }
    }

    // Mojarra's HTML Basic calls encodeEnd for fun
    super.encodeMarkupEnd(facesContext, uiComponent, outputTooltipResponseWriter);
  }
  @Override
  protected void encodeTrigger(
      ResponseWriter responseWriter, OutputTooltip outputTooltip, String for_, boolean first)
      throws IOException {

    UIComponent uiComponent = outputTooltip.findComponent(for_);

    if (uiComponent != null) {
      String forClientId = uiComponent.getClientId();
      for_ = StringPool.POUND + ComponentUtil.escapeClientId(forClientId);
    }

    encodeNonEscapedString(responseWriter, TRIGGER, for_, first);
  }
  @Override
  protected void encodeHiddenAttributes(
      ResponseWriter responseWriter, OutputTooltip tooltip, boolean first) throws IOException {

    FacesContext facesContext = FacesContext.getCurrentInstance();

    // contentBox
    String clientId = tooltip.getClientId(facesContext);
    String contentBox = StringPool.POUND + ComponentUtil.escapeClientId(clientId);
    encodeNonEscapedString(responseWriter, AlloyRendererUtil.CONTENT_BOX, contentBox, first);

    first = false;

    // render : true
    encodeWidgetRender(responseWriter, first);
  }