public function renderForm(fxForm &$f)
 {
     $this->rendering_element_set = false;
     $o = array();
     $atts = $this->renderAtts($f->_getInfoExcept('name'));
     $o[] = "<form action=\"{$f->_action}\" method=\"{$f->_method}\"{$atts}>";
     $o[] = "<input type=\"hidden\" name=\"_form_id\" value=\"{$f->_form_id}\" />";
     $o[] = "<input type=\"hidden\" name=\"_form_token\" value=\"{$f->_form_token}\" />";
     if ($f->hasErrors()) {
         // Use a form errors formatting callback to override basic message.
         $formErrorsCB = $this->errorBlockFormatter;
         if (is_callable($formErrorsCB)) {
             $msg = $formErrorsCB($f);
             if (is_string($msg) && '' !== $msg) {
                 $o[] = $msg;
             }
         } else {
             $o[] = '<div class="form-errors"><p>There was a problem with your form. Please correct any errors and try again.</p></div>';
         }
     }
     foreach ($f->getElements() as $child) {
         if (is_string($child)) {
             $o[] = $child;
         } else {
             $o[] = $child->renderUsing($this, $f, $f->id);
         }
     }
     $o[] = "</form>";
     $o = implode("\n", $o);
     if (true == $f->_show_html) {
         fCore::expose($o);
     }
     return $o;
 }