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;
    }
 public function render($name, $value = null, $attributes = array(), $errors = array())
 {
     $js = '';
     if (self::$isFirstRender) {
         sfContext::getInstance()->getResponse()->addSmtJavascript('jquery.min.js');
         sfContext::getInstance()->getResponse()->addSmtJavascript('jquery-ui.min.js');
         sfContext::getInstance()->getResponse()->addSmtJavascript('tiny_mce/tiny_mce');
         sfContext::getInstance()->getResponse()->addSmtJavascript('op_emoji');
         sfContext::getInstance()->getResponse()->addSmtJavascript('Selection');
         sfContext::getInstance()->getResponse()->addSmtJavascript('decoration');
         $relativeUrlRoot = sfContext::getInstance()->getRequest()->getRelativeUrlRoot();
         $js .= sprintf("function op_mce_editor_get_config() { return %s; }\n", json_encode(self::getButtons()));
         $js .= sprintf('function op_get_relative_uri_root() { return "%s"; }', $relativeUrlRoot);
         self::$isFirstRender = false;
     }
     if ($js) {
         sfProjectConfiguration::getActive()->loadHelpers('Javascript');
         $js = javascript_tag($js);
     }
     $id = $this->getId($name, $attributes);
     $this->setOption('textarea_template', '<div id="' . $id . '_buttonmenu" class="' . $id . '">' . get_partial('global/richTextareaOpenPNEButton', array('id' => $id, 'configs' => self::getButtons(), 'onclick_actions' => self::$buttonOnclickActions)) . '</div>' . $this->getOption('textarea_template'));
     return $js . parent::render($name, $value, $attributes, $errors);
 }
 public function render($name, $value = null, $attributes = array(), $errors = array())
 {
     if (sfConfig::get('sf_app') == 'mobile_frontend') {
         return parent::render($name, $value, $attributes, $errors);
     }
     $js = '';
     if (self::$isFirstRenderOpenPNE) {
         sfProjectConfiguration::getActive()->loadHelpers('Partial');
         sfContext::getInstance()->getResponse()->addJavascript('/sfProtoculousPlugin/js/prototype');
         sfContext::getInstance()->getResponse()->addJavascript('op_emoji');
         sfContext::getInstance()->getResponse()->addJavascript('Selection');
         sfContext::getInstance()->getResponse()->addJavascript('decoration');
         $relativeUrlRoot = sfContext::getInstance()->getRequest()->getRelativeUrlRoot();
         foreach ($this->loadPluginList as $key => $path) {
             $js .= sprintf('tinymce.PluginManager.load("%s", "%s");' . "\n", $key, $path);
         }
         $js .= sprintf("function op_mce_editor_get_config() { return %s; }\n", json_encode(self::getButtons()));
         $js .= sprintf('function op_get_relative_uri_root() { return "%s"; }', $relativeUrlRoot);
         self::$isFirstRenderOpenPNE = false;
     }
     if ($js) {
         sfProjectConfiguration::getActive()->loadHelpers('Javascript');
         $js = javascript_tag($js);
     }
     $id = $this->getId($name, $attributes);
     $this->setOption('textarea_template', '<div id="' . $id . '_buttonmenu" class="' . $id . '">' . get_partial('global/richTextareaOpenPNEButton', array('id' => $id, 'configs' => self::getButtons(), 'onclick_actions' => self::$buttonOnclickActions)) . '</div>' . $this->getOption('textarea_template'));
     return $js . parent::render($name, $value, $attributes, $errors);
 }