public static void removeInternalEventListenerJoystick(
      ItsNatCompNormalEventListenersJoystick listeners,
      ClientDocumentImpl clientDoc,
      String type,
      boolean useCapture,
      boolean updateClient) {
    ItsNatDocumentImpl itsNatDoc = listeners.getItsNatDocumentImpl();
    if (itsNatDoc.isLoadingPhaseAndFastLoadMode()) {
      EventListener listener = listeners.getLoadScheduledMap().remove(type + "_" + useCapture);
      Document doc = itsNatDoc.getDocument();

      Browser browser = clientDoc.getBrowser();
      EventTarget target;
      String eventType;
      if (!(browser instanceof BrowserSVGPlugin)) {
        target = (EventTarget) ((DocumentView) doc).getDefaultView();
        eventType = "load";
      } else {
        target = (EventTarget) doc.getDocumentElement();
        eventType = "SVGLoad";
      }

      clientDoc.removeEventListener(target, eventType, listener, false);
    } else {
      removeInternalEventListenerJoystick2(listeners, clientDoc, type, useCapture, updateClient);
    }
  }
  public static void addInternalEventListenerJoystick(
      final ItsNatCompNormalEventListenersJoystick listeners,
      final ClientDocumentImpl clientDoc,
      final String type,
      final boolean useCapture,
      final int commMode,
      final ParamTransport[] extraParams,
      final String preSendCode,
      final long eventTimeout,
      final String bindToCustomFunc) {
    ItsNatDocumentImpl itsNatDoc = listeners.getItsNatDocumentImpl();
    if (itsNatDoc.isLoadingPhaseAndFastLoadMode()) {
      // En tiempo de carga en modo fast load el acceso a nodos no tolera cambios en el DOM de
      // elementos eliminados/cambiados de posición
      // y eso puede ocurrir mientras se construye la lista
      // Tenemos que delegar el proceso a después de la carga
      EventListener listener =
          new EventListenerSerializableInternal() {
            @Override
            public void handleEvent(Event evt) {
              addInternalEventListenerJoystick2(
                  listeners,
                  clientDoc,
                  type,
                  useCapture,
                  commMode,
                  extraParams,
                  preSendCode,
                  eventTimeout,
                  bindToCustomFunc);
            }
          };
      Document doc = itsNatDoc.getDocument();

      Browser browser = clientDoc.getBrowser();
      EventTarget target;
      String eventType;
      if (!(browser instanceof BrowserSVGPlugin)) {
        target = (EventTarget) ((DocumentView) doc).getDefaultView();
        eventType = "load";
      } else {
        target = (EventTarget) doc.getDocumentElement();
        eventType = "SVGLoad";
      }
      clientDoc.addEventListener(target, eventType, listener, false);
      listeners.getLoadScheduledMap().put(type + "_" + useCapture, listener);
    } else {
      addInternalEventListenerJoystick2(
          listeners,
          clientDoc,
          type,
          useCapture,
          commMode,
          extraParams,
          preSendCode,
          eventTimeout,
          bindToCustomFunc);
    }
  }