/** This trigger function to help customize layout of some pages **/
 public function onAfterInitialise()
 {
     $config = JFactory::getConfig();
     $secret = $config->get('secret');
     $offline = $config->get('offline');
     $input = $this->_application->input;
     if ($this->_application->isSite() && $input->get->get('poweradmin', '0') == '1' && $input->get->get('jsnpa_key', '') == md5($secret) && $offline == '1') {
         $this->_online();
     }
     if (!$this->_application->isAdmin()) {
         return;
     }
     if ($this->_application->isAdmin() && $this->_user->id > 0 && $input->getVar('tmpl', '') != 'component' && $this->_params->get('enable_adminbar', true) == true) {
         $this->_sendCookies();
         $this->_target = JRequest::getBool('hidemainmenu') == true ? '_blank' : '_parent';
     }
     if ($this->_user->id > 0) {
         PowerAdminHistoryHelper::onAfterInitialise();
     }
     if ($input->getVar('format', '') == 'raw' || $input->getVar('format', '') == 'rss') {
         return;
     }
     $this->_helper = JSNPLGHelper::getInstance();
 }
 /**
  * Method to move all script tags from head section to the end of body section.
  *
  * @param   string  &$html  Generated response body.
  *
  * @return  void
  */
 private static function moveScriptTags(&$html)
 {
     // Get active component
     $option = self::$_app->input->getCmd('option');
     // First, check if current page is rendered by our products
     if (!in_array($option, JSNVersion::$products)) {
         return;
     }
     // Second, check if script movement is already done by our template framework
     if (defined('JSN_TPLFW_SCRIPTS_MOVEMENT_COMPLETED')) {
         return;
     }
     // Now, get configuration for our product
     $cfg = JSNConfigHelper::get($option);
     // Do not continue if script movement is disabled
     if (!$cfg->get('script_movement')) {
         return;
     }
     // Move all script tags to the end of body section
     if ((self::$_app->isSite() or in_array($option, JSNVersion::$products)) and $n = count($parts = preg_split('/>[\\s\\t\\r\\n]*<script/', $html))) {
         // Re-generated script tags
         $tags = array();
         // Inline script code block combination status
         $combine = array();
         $last = 'inline';
         // Re-generate HTML document
         $temp = $parts[0];
         for ($i = 1; $i < $n; $i++) {
             // Get script tag
             $script = substr($parts[$i], 0, strpos($parts[$i], '</script') + 8);
             // Remove script tag from its original position
             $parts[$i] = str_replace($script, '', $parts[$i]);
             // Leave script tag as is if it is placed inside conditional comments
             if (preg_match('/([\\r\\n][\\s\\t]*)<\\!--\\[if[^\\]]*IE[^\\]]*\\]/', $temp, $match) and strpos($temp, '<![endif]--') === false or isset($notClosed) and $notClosed) {
                 $temp .= '>' . (isset($match[1]) ? $match[1] : '') . '<script' . $script . $parts[$i];
                 // Look for the end of conditional comments
                 $notClosed = strpos($parts[$i], '<![endif]--') !== false ? false : true;
                 // Continue the loop
                 continue;
             }
             // Leave script code block as is if document.write function is used inside
             if (strpos($script, 'document.write') !== false) {
                 $temp .= ">\n<script" . $script . $parts[$i];
                 // Continue the loop
                 continue;
             }
             // Re-generate HTML document
             $temp .= $parts[$i];
             // Complete script tag
             $script = '<script' . $script . '>';
             if (strpos(preg_replace(array('/[\\s\\t\\r\\n]+/', '/[\\s\\t\\r\\n]+=[\\s\\t\\r\\n]+/'), array(' ', '='), $script), ' src=') === false) {
                 // Clean-up inline script block
                 $script = substr($script, strpos($script, '>') + 1, -9);
                 if ($last == 'inline') {
                     // Combine continuous script code block
                     $combine[] = $script;
                 } else {
                     $combine = array($script);
                     $last = 'inline';
                 }
             } else {
                 // Copy combined script code block
                 !count($combine) or $tags[] = '<script type="text/javascript">' . implode(";\n", $combine) . '</script>';
                 // Copy script tag
                 $tags[] = $script;
                 // Reset variables
                 $combine = array();
                 $last = '';
             }
         }
         // Copy remaining combined script code block
         !count($combine) or $tags[] = '<script type="text/javascript">' . implode(";\n", $combine) . '</script>';
         // Inject all re-generated script tags to the end of body section
         if (count($tags)) {
             $html = str_replace('</body>', implode("\n", $tags) . '</body>', $temp);
             // Define a constant to state that scripts movement is completed
             define('JSN_EXTFW_SCRIPTS_MOVEMENT_COMPLETED', 1);
         }
     }
 }