/**
  * Returns the frontend filter widget information for the filter setting.
  *
  * The returning array will hold the following keys:
  * * class      - The CSS classes for the widget.
  * * label      - The label text for the widget.
  * * formfield  - The parsed default widget object for this filter setting.
  * * raw        - The widget information that was used for rendering "formfield" as raw array (this means
  *                prior calling prepareForWidget()).
  * * urlparam   - The URL parameter used for this widget.
  * * options    - The filter options available to be used in selects etc. see prepareFrontendFilterOptions
  *                for details on the contained array.
  * * autosubmit - True if the frontend filter shall perform auto form submitting, false otherwise.
  * * urlvalue   - The current value selected in the filtersetting. Will use "urlvalue" from $arrWidget with
  *                fallback to the value of the url param in the filter url.
  *
  * @param array $arrWidget     The widget information to use for generating.
  *
  * @param array $arrFilterUrl  The filter url parameters to use.
  *
  * @param array $arrJumpTo     The jumpTo page to use for URL generating - if empty, the current
  *                             frontend page will get used.
  *
  * @param bool  $blnAutoSubmit Determines if the generated options/widgets shall perform auto submitting
  *                             or not.
  *
  * @return array
  */
 protected function prepareFrontendFilterWidget($arrWidget, $arrFilterUrl, $arrJumpTo, MetaModelFrontendFilterOptions $objFrontendFilterOptions)
 {
     $strClass = $GLOBALS['TL_FFL'][$arrWidget['inputType']];
     // No widget? no output! that's it.
     if (!$strClass) {
         return array();
     }
     // Determine current value.
     $arrWidget['value'] = $arrFilterUrl[$arrWidget['eval']['urlparam']];
     $arrData = MetaModelController::getInstance()->prepareForWidget($arrWidget, $arrWidget['eval']['urlparam'], $arrWidget['value']);
     if ($objFrontendFilterOptions->isAutoSubmit() && TL_MODE == 'FE') {
         $GLOBALS['TL_JAVASCRIPT']['metamodels'] = 'system/modules/metamodels/html/metamodels.js';
     }
     /** @var Widget $objWidget */
     $objWidget = new $strClass($arrData);
     $strField = $objWidget->generate();
     return array('class' => sprintf('mm_%s %s%s%s', $arrWidget['inputType'], $arrWidget['eval']['urlparam'], $arrWidget['value'] !== null ? ' used' : ' unused', $objFrontendFilterOptions->isAutoSubmit() ? ' submitonchange' : ''), 'label' => $objWidget->generateLabel(), 'formfield' => $strField, 'raw' => $arrWidget, 'urlparam' => $arrWidget['eval']['urlparam'], 'options' => $this->prepareFrontendFilterOptions($arrWidget, $arrFilterUrl, $arrJumpTo, $objFrontendFilterOptions->isAutoSubmit()), 'count' => $arrWidget['count'], 'showCount' => $objFrontendFilterOptions->isShowCountValues(), 'autosubmit' => $objFrontendFilterOptions->isAutoSubmit(), 'urlvalue' => array_key_exists('urlvalue', $arrWidget) ? $arrWidget['urlvalue'] : $arrWidget['value']);
 }