protected void encodeScript(FacesContext context, FileUpload fileUpload) throws IOException {
    String clientId = fileUpload.getClientId(context);
    String update = fileUpload.getUpdate();
    String process = fileUpload.getProcess();
    WidgetBuilder wb = getWidgetBuilder(context);

    if (fileUpload.getMode().equals("advanced")) {
      wb.initWithDomReady("FileUpload", fileUpload.resolveWidgetVar(), clientId);

      wb.attr("auto", fileUpload.isAuto(), false)
          .attr("dnd", fileUpload.isDragDropSupport(), true)
          .attr(
              "update",
              SearchExpressionFacade.resolveClientIds(
                  context, fileUpload, update, SearchExpressionFacade.Options.VISIT_UNRENDERED),
              null)
          .attr(
              "process",
              SearchExpressionFacade.resolveClientIds(
                  context, fileUpload, process, SearchExpressionFacade.Options.VISIT_UNRENDERED),
              null)
          .attr("maxFileSize", fileUpload.getSizeLimit(), Long.MAX_VALUE)
          .attr("fileLimit", fileUpload.getFileLimit(), Integer.MAX_VALUE)
          .attr("invalidFileMessage", fileUpload.getInvalidFileMessage(), null)
          .attr("invalidSizeMessage", fileUpload.getInvalidSizeMessage(), null)
          .attr("fileLimitMessage", fileUpload.getFileLimitMessage(), null)
          .attr("messageTemplate", fileUpload.getMessageTemplate(), null)
          .attr("previewWidth", fileUpload.getPreviewWidth(), 80)
          .attr("disabled", fileUpload.isDisabled(), false)
          .attr("sequentialUploads", fileUpload.isSequential(), false)
          .callback("onstart", "function()", fileUpload.getOnstart())
          .callback("onerror", "function()", fileUpload.getOnerror())
          .callback("oncomplete", "function(args)", fileUpload.getOncomplete());

      if (fileUpload.getAllowTypes() != null) {
        wb.append(",allowTypes:").append(fileUpload.getAllowTypes());
      }
    } else {
      wb.init("SimpleFileUpload", fileUpload.resolveWidgetVar(), clientId)
          .attr("skinSimple", fileUpload.isSkinSimple(), false);
    }

    wb.finish();
  }