public function render($name, $value = null, $attributes = array(), $errors = array())
    {
        if (sfConfig::get('sf_app') == 'mobile_frontend') {
            return parent::render($name, $value, $attributes, $errors);
        }
        $toggle = '';
        $js = '';
        $id = $this->getId($name, $attributes);
        $changerName = $id . '_changer';
        $offId = $id . '_changer_1';
        $onId = $id . '_changer_2';
        if (self::$isFirstRender) {
            sfContext::getInstance()->getResponse()->addJavascript('/sfProtoculousPlugin/js/prototype');
            sfContext::getInstance()->getResponse()->addJavascript('tiny_mce/tiny_mce');
            $js .= <<<EOF
  function op_toggle_mce_editor(id)
  {
    var textmode_checked    = \$(id + "_changer_1").checked;
    var previewmode_checked = \$(id + "_changer_2").checked;
    var relational_objects  = \$\$("." + id);
    var editor = tinyMCE.get(id);
    if (!editor) {
      if (previewmode_checked) {
        tinyMCE.execCommand('mceAddControl', false, id);
        relational_objects.each(function(object){ object.style.display = "none"; });
      }
      return true;
    }
    if (editor.isHidden() && previewmode_checked) {
      editor.show();
      relational_objects.each(function(object){ object.style.display = "none"; });
    } else if (!editor.isHidden() && textmode_checked) {
      editor.hide();
      relational_objects.each(function(object){ object.style.display = "block"; });
    }
  }

EOF;
            $js .= sprintf("  tinyMCE.init(%s);\n", json_encode($this->tinyMCEConfigs));
            self::$isFirstRender = false;
        }
        if (!$this->getOption('is_textmode')) {
            $js .= sprintf("  tinyMCE.execCommand('mceAddControl', false, '%s');\n", $id);
        }
        $js .= sprintf("  op_toggle_mce_editor('%s');\n", $id);
        if ($js) {
            sfProjectConfiguration::getActive()->loadHelpers('Javascript');
            $js = javascript_tag($js);
        }
        if ($this->getOption('is_toggle')) {
            $toggle = sprintf(<<<EOF
<input id="%s" type="radio" name="%s" onclick="%s"%s /><label for="%s">%s</label>
<input id="%s" type="radio" name="%s" onclick="%s"%s /><label for="%s">%s</label><br />
EOF
, $offId, $changerName, sprintf("op_toggle_mce_editor('%s')", $id), $this->getOption('is_textmode') ? ' checked="true"' : '', $offId, sfContext::getInstance()->getI18N()->__('Text Mode'), $onId, $changerName, sprintf("op_toggle_mce_editor('%s')", $id), $this->getOption('is_textmode') ? '' : ' checked="true"', $onId, sfContext::getInstance()->getI18N()->__('Preview Mode'));
        }
        return $toggle . sprintf($this->getOption('textarea_template'), parent::render($name, $value, $attributes, $errors)) . $js;
    }