Index: branches/5.0.x/themes/simple/designs/default_design.des.tpl
===================================================================
--- branches/5.0.x/themes/simple/designs/default_design.des.tpl	(revision 12588)
+++ branches/5.0.x/themes/simple/designs/default_design.des.tpl	(revision 12589)
@@ -1,131 +1,132 @@
 <inp2:m_CheckSSL/>
 <inp2:m_include template="elements/side_boxes.elm" strip_nl="1"/> <!--## includes system elements ##-->
 
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
 <head>
 	<title>
 		<inp2:st_PageInfo type="title"/> (<inp2:m_GetConfig name="Site_Name"/>)
 	</title>
+
+
 	<inp2:m_Include t="elements/html_head.elm" />
-	<inp2:st_EditingScripts/>
 </head>
 
 <body>
 	<inp2:st_EditPage mode="start"/><!--## System tag please do not remove ##-->
 
 	<!-- Wrapper -->
 	<div id="wrapper">
 
 		<!-- Accessibility Navigation -->
 		<ol id="nav-accessibility">
 			<li><a href="#nav">Skip to navigation</a></li>
 			<li><a href="#content">Skip to content</a></li>
 			<li><a href="#content-sub">Skip to Secondary Content</a></li>
 		</ol>
 		<!-- /Accessibility Navigation -->
 
 		<!-- Masthead -->
 		<div id="masthead">
 
 			<!-- Branding -->
 			<h1 id="branding">
 				<a href="<inp2:m_Link t="index" />" title="<inp2:m_GetConfig name="Site_Name"/>"><inp2:m_GetConfig name="Site_Name"/></a>
 			</h1>
 			<!-- /Branding -->
 
 			<!-- Navigation -->
 			<inp2:m_include t="elements/navigation_menu.elm" />
 			<!-- /Navigation -->
 
 			<!-- Search -->
 			<inp2:m_include t="elements/search.elm" />
 			<!-- /Search -->
 
 		</div>
 		<!-- /Masthead -->
 
 		<!-- Breadcrumb -->
 		<inp2:m_include t="elements/navigation_bar.elm" />
 		<!-- /Breadcrumb -->
 
 		<!-- Content Tools -->
 		<inp2:m_include t="elements/content_tools.elm" />
 		<!-- /Content Tools -->
 
 		<!-- Content -->
 		<div id="content">
 
 
 			<div id="content-sec">
 				<inp2:m_DefineElement name="default_left_sidebar" no_editing="1">
 					<div class="movable-area">
 						<div class="movable-element">
 							<inp2:m_RenderElement name="elements/side_boxes/subscribe.elm" design="side_box"/>
 						</div>
 					</div>
 				</inp2:m_DefineElement>
 
 				<inp2:m_RenderElement name="left_sidebar" default_element="default_left_sidebar"/>
 			</div>
 
 
 			<!-- Main Content -->
 			<div id="content-main">
 
 				<div id="block-latest" class="block">
 					<div class="round-top"></div>
 					<div class="content">
 						<inp2:st_ContentBlock num="1"/>
 					</div>
 					<div class="round-bottom"></div>
 				</div>
 
 			</div>
 			<!-- /Main Content -->
 
 
 			<div id="content-ter">
 				<div class="movable-area">
 					<div class="movable-element">
 
 						<div class="block" id="side-box-plain">
 
 							<div class="round-top"></div>
 
 							<h3>Latest <strong>Podcasts</strong></h3>
 							<div>
 								<ul>
 									<li><a href="<inp2:m_Link t="index" />">Young Entrepreneurs in China and Australia: Be inspired by stories of success</a></li>
 
 								</ul>
 							</div>
 
 							<div class="content">
 								<p class="link-rss"><a href="http://harangue.lecture.unimelb.edu.au/lectopia/podcast.lasso?ut=1633&amp;feed=1&amp;key=2f346fec58ee22a6d2662a6a3f6e8ded" title="Podcast RSS">Subscribe to RSS</a></p>
 								<p class="link"><a href="http://www.asialink.unimelb.edu.au/subscribe">How to subscribe &gt;</a></p>
 							</div>
 
 							<div class="round-bottom"></div>
 
 						</div>
 
 
 					</div>
 				</div>
 			</div>
 
 		</div><!-- /Content -->
 
 		<inp2:m_include t="elements/footer.elm" />
 
 	</div><!-- /Wrapper -->
 
 	<inp2:st_EditPage mode="end"/> <!--## /System tag please do not remove ##-->
 
 	<inp2:m_include t="elements/tracking.elm" />
 </body>
 </html>
\ No newline at end of file
Index: branches/5.0.x/themes/simple/elements/html_head.elm.tpl
===================================================================
--- branches/5.0.x/themes/simple/elements/html_head.elm.tpl	(revision 12588)
+++ branches/5.0.x/themes/simple/elements/html_head.elm.tpl	(revision 12589)
@@ -1,24 +1,23 @@
 
 <meta http-equiv="content-type" content="text/html; charset=<inp2:lang.current_Field name="Charset"/>" />
 
 <!-- CSS -->
 <link rel="stylesheet" type="text/css" href="<inp2:m_TemplatesBase />inc/screen.css" media="screen" />
 <link rel="stylesheet" type="text/css" href="<inp2:m_TemplatesBase />inc/print.css" media="print" />
 <link rel="stylesheet" type="text/css" href="<inp2:m_TemplatesBase />inc/override.css" media="all" />
 <!--[if IE 6]>
 <link rel="stylesheet" type="text/css" href="<inp2:m_TemplatesBase module="In-Portal"/>inc/ie6.css" media="screen" />
 <![endif]-->
 
 <!-- JS -->
+<inp2:st_EditingScripts/>
 
-<!--##
-<script type="text/javascript" src="<inp2:m_TemplatesBase />inc/jquery/jquery.1.3.2.js"></script>
-##-->
-
-<script type="text/javascript" src="<inp2:m_TemplatesBase />inc/jquery/jquery.js"></script>
-
+<inp2:m_ifnot check="m_GetConst" name="EDITING_MODE">
+	<!--<script type="text/javascript" src="<inp2:m_TemplatesBase />inc/jquery/jquery.js"></script>-->
+	<script type="text/javascript" src="<inp2:m_TemplatesBase />inc/jquery/jquery.1.3.2.js"></script>
+</inp2:m_ifnot>
 
 <script type="text/javascript" src="<inp2:m_TemplatesBase />inc/jquery/jcookie.js"></script>
-<script type="text/javascript" src="<inp2:m_TemplatesBase />inc/jquery/jquery.validate.js"></script>
+<!--<script type="text/javascript" src="<inp2:m_TemplatesBase />inc/jquery/jquery.validate.js"></script>-->
 
 <script type="text/javascript" src="<inp2:m_TemplatesBase />inc/general.js"></script>
Index: branches/5.0.x/themes/simple/elements/side_boxes/subscribe.elm.tpl
===================================================================
--- branches/5.0.x/themes/simple/elements/side_boxes/subscribe.elm.tpl	(revision 12588)
+++ branches/5.0.x/themes/simple/elements/side_boxes/subscribe.elm.tpl	(revision 12589)
@@ -1,26 +1,26 @@
 <inp2:m_Capture to_var="header">
 	<inp2:m_phrase name="lu_title_MailingList"/>
 </inp2:m_Capture>
 	<script type="text/javascript">
-		$(document).ready(function(){
+		/*$(document).ready(function(){
 			$("#subscribeform").validate();
-		});
+		});*/
 	</script>
 	<form method="post" action="<inp2:m_FormAction />" id="subscribeform">
 	<div>
 		<input type="hidden" name="subscribe_template" value="mailing_list/subscribe"/>
 		<input type="hidden" name="unsubscribe_template" value="mailing_list/unsubscribe"/>
 		<fieldset>
 			<label for="subscribe-email">Enter email adress below</label>
 			<inp2:m_if check="u_HasError" field="any">
 				<span id="errormsg"><inp2:u_Error field="SubscribeEmail"/></span><br />
 			</inp2:m_if>
 			<span class="emailfield">
 				<input type="text" name="subscriber_email" class="required email" id="subscribe-email" />
 			</span>
 			<span class="submit"><input type="submit" name="events[u][OnSubscribeQuery]" value="Subscribe" /></span>
 		</fieldset>
 	</div>
 	</form>
 
 
Index: branches/5.0.x/themes/simple/elements/navigation_menu.elm.tpl
===================================================================
--- branches/5.0.x/themes/simple/elements/navigation_menu.elm.tpl	(revision 12588)
+++ branches/5.0.x/themes/simple/elements/navigation_menu.elm.tpl	(revision 12589)
@@ -1,24 +1,24 @@
 <inp2:m_DefineElement name="menu_element" no_editing="1">
 	<li>
 		<a href="<inp2:m_if check='m_Param' name='external_url'><inp2:m_Param name='external_url'/><inp2:m_else/><inp2:m_Link template='$template' m_cat_id='$cat_id' m_cat_page='1'/></inp2:m_if>" title="<inp2:m_Param name="title"/>"><inp2:m_Param name="title"/></a>
 
 		<inp2:m_if check="m_Param" name="has_sub_menu">
 		<ul>
 			<inp2:st_CachedMenu render_as="sub_menu_element" category_id="$cat_id"/>
 		</ul>
 		</inp2:m_if>
 	</li>
 </inp2:m_DefineElement>
 
 <inp2:m_DefineElement name="sub_menu_element" no_editing="1">
 	<li>
 		<a href="<inp2:m_if check='m_Param' name='external_url'><inp2:m_Param name='external_url'/><inp2:m_else/><inp2:m_Link template='$template' m_cat_id='$cat_id' m_cat_page='1'/></inp2:m_if>" title="<inp2:m_Param name="title"/>"><inp2:m_Param name="title"/></a>
 	</li>
 </inp2:m_DefineElement>
 
 <ul id="nav">
 	<li>
-		<a href="<inp2:m_Link template='index' m_cat_id='0' m_cat_page='1'/>" title="<inp2:m_RootCategoryName/>"><inp2:m_RootCategoryName/></a>
+		<a href="<inp2:m_Link template='index' m_cat_id='0' m_cat_page='1'/>" title="<inp2:m_RootCategoryName no_editing='1'/>"><inp2:m_RootCategoryName/></a>
 	</li>
 	<inp2:st_CachedMenu render_as="menu_element" category_id="1"/>
 </ul>
\ No newline at end of file
Index: branches/5.0.x/themes/simple/elements/side_boxes.elm.tpl
===================================================================
--- branches/5.0.x/themes/simple/elements/side_boxes.elm.tpl	(revision 12588)
+++ branches/5.0.x/themes/simple/elements/side_boxes.elm.tpl	(revision 12589)
@@ -1,9 +1,9 @@
 <inp2:m_DefineElement name="side_box">
 	<div class="block" id="side-box">
-		<h3><inp2:m_param name="header"/></h3>
+		<h3 class="movable-header"><inp2:m_param name="header"/></h3>
 		<div class="content">
 			<inp2:m_param name="content"/>
 		</div>
 		<div class="round-bottom"></div>
 	</div>
 </inp2:m_DefineElement>
\ No newline at end of file
Index: branches/5.0.x/core/kernel/processors/main_processor.php
===================================================================
--- branches/5.0.x/core/kernel/processors/main_processor.php	(revision 12588)
+++ branches/5.0.x/core/kernel/processors/main_processor.php	(revision 12589)
@@ -1,1013 +1,1015 @@
 <?php
 /**
 * @version	$Id$
 * @package	In-Portal
 * @copyright	Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
 * @license      GNU/GPL
 * In-Portal is Open Source software.
 * This means that this software may have been modified pursuant
 * the GNU General Public License, and as distributed it includes
 * or is derivative of works licensed under the GNU General Public License
 * or other free or open source software licenses.
 * See http://www.in-portal.net/license/ for copyright notices and details.
 */
 
 defined('FULL_PATH') or die('restricted access!');
 
 class kMainTagProcessor extends kTagProcessor {
 
 	function Init($prefix, $special, $event_params = null)
 	{
 		parent::Init($prefix, $special, $event_params);
 
 		$actions =& $this->Application->recallObject('kActions');
 		$actions->Set('t', $this->Application->GetVar('t'));
 		$actions->Set('sid', $this->Application->GetSID());
 		$actions->Set('m_opener', $this->Application->GetVar('m_opener') );
 	}
 
 	/**
 	 * Base folder for all template includes
 	 *
 	 * @param Array $params
 	 * @return string
 	 */
 	function TemplatesBase($params)
 	{
 		static $cached = Array ();
 
 		$cache_key = crc32( serialize($params) );
 
 		if (!array_key_exists($cache_key, $cached)) {
 			$force_admin = array_key_exists('force_admin', $params) && $params['force_admin'];
 			$module = array_key_exists('module', $params) ? $params['module'] : 'core';
 
 			if ($this->Application->IsAdmin() || $force_admin) {
 				if ($module == 'in-portal') {
 					$module = 'kernel';
 				}
 
 				$path = $force_admin ? '/core/admin_templates' : THEMES_PATH;
 				$path = preg_replace('/\/(.*?)\/(.*)/', $module.'/\\2', $path); // remove leading slash + substitute module
 			}
 			else {
 				$path = mb_substr(THEMES_PATH, 1);
 
 				if (mb_strtolower($module) == 'in-portal') {
 					$module_folder = 'platform';
 				}
 				else {
 					$module_folder = $this->Application->findModule('Name', $module, 'TemplatePath');
 				}
 
 				$path .= rtrim('/' . trim($module_folder, '/'), '/') . '/';
 			}
 
 			$cached[$cache_key] = $this->Application->BaseURL() . $path;
 		}
 
 		return $cached[$cache_key];
 	}
 
 	/**
 	 * Creates <base href ..> HTML tag for all templates
 	 * affects future css, js files and href params of links
 	 *
 	 * @return string
 	 * @access public
 	 */
 	function Base_Ref($params)
 	{
 		return '<base href="'.$this->TemplatesBase($params).'/" />';
 	}
 
 	/**
 	 * Returns base url for web-site
 	 *
 	 * @return string
 	 * @access public
 	 */
 	function BaseURL()
 	{
 		return $this->Application->BaseURL();
 	}
 
 	//for compatability with K3 tags
 	function Base($params)
 	{
 		return $this->TemplatesBase($params).'/';
 	}
 
 	function ProjectBase($params)
 	{
 		return $this->Application->BaseURL();
 	}
 
 	/*function Base($params)
 	{
 		return $this->Application->BaseURL().$params['add'];
 	}*/
 
 	/**
 	 * Used to create link to any template.
 	 * use "pass" paramter if "t" tag to specify
 	 * prefix & special of object to be represented
 	 * in resulting url
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function T($params)
 	{
 		//by default link to current template
 		$t = $this->SelectParam($params, 't,template');
 		unset($params['t']);
 		unset($params['template']);
 		$prefix=isset($params['prefix']) ? $params['prefix'] : ''; unset($params['prefix']);
 		$index_file = isset($params['index_file']) ? $params['index_file'] : null; unset($params['index_file']);
 
 		return $this->Application->HREF($t, $prefix, $params, $index_file);
 	}
 
 	function Link($params)
 	{
 		if (isset($params['template'])) {
 			$params['t'] = $params['template'];
 			unset($params['template']);
 		}
 		if (!isset($params['pass']) && !isset($params['no_pass'])) $params['pass'] = 'm';
 		if (isset($params['no_pass'])) unset($params['no_pass']);
 
 		if ( $this->Application->GetVar('admin') ) {
 			$params['admin'] = 1;
 
 			if (!array_key_exists('editing_mode', $params)) {
 				$params['editing_mode'] = EDITING_MODE;
 			}
 		}
 
 		return $this->T($params);
 	}
 
 	function Env($params)
 	{
 		$t = $params['template'];
 		unset($params['template']);
 		return $this->Application->BuildEnv($t, $params, 'm', null, false);
 	}
 
 	function FormAction($params)
 	{
 		$params['pass'] = 'all,m';
 		$params['pass_category'] = 1;
 
 		return $this->Application->HREF('', '', $params);
 	}
 
 	/*// NEEDS TEST
 	function Config($params)
 	{
 		return $this->Application->ConfigOption($params['var']);
 	}
 
 	function Object($params)
 	{
 		$name = $params['name'];
 		$method = $params['method'];
 
 		$tmp =& $this->Application->recallObject($name);
 		if ($tmp != null) {
 			if (method_exists($tmp, $method))
 				return $tmp->$method($params);
 			else
 				echo "Method $method does not exist in object ".get_class($tmp)." named $name<br>";
 		}
 		else
 			echo "Object $name does not exist in the appliaction<br>";
 	}*/
 
 	/**
 	 * Tag, that always returns true.
 	 * For parser testing purposes
 	 *
 	 * @param Array $params
 	 * @return bool
 	 * @access public
 	 */
 	function True($params)
 	{
 		return true;
 	}
 
 	/**
 	 * Tag, that always returns false.
 	 * For parser testing purposes
 	 *
 	 * @param Array $params
 	 * @return bool
 	 * @access public
 	 */
 	function False($params)
 	{
 		return false;
 	}
 
 	/**
 	 * Returns block parameter by name (used only as "check" parameter value for "m_if" tag !)
 	 *
 	 * @param Array $params
 	 * @return stirng
 	 * @access public
 	 */
 	function Param($params)
 	{
 		$name = $params['name'];
 
 		/*if (isset($this->Application->LateParsed[$name])) {
 			$f = $this->Application->PreParsedBlocks['capture_'.$name.$this->Application->LateParsed[$name]];
 			$this->Application->Parser->SetParam($name, $f(array()));
 		}*/
 
 		$res = $this->Application->Parser->GetParam($params['name']);
 		if ($res === false) {
 			$res = '';
 		}
 
 		if (isset($params['plus'])) {
 			$res += $params['plus'];
 		}
 
 		return $res;
 	}
 
 	/**
 	 * Compares block parameter with value specified
 	 *
 	 * @param Array $params
 	 * @return bool
 	 * @access public
 	 */
 	function ParamEquals($params)
 	{
 		$name = $this->SelectParam($params, 'name,var,param');
 		$value = $params['value'];
 
 		return ($this->Application->Parser->GetParam($name) == $value);
 	}
 
 	/*function PHP_Self($params)
 	{
 		return $HTTP_SERVER_VARS['PHP_SELF'];
 	}
 	*/
 
 	/**
 	 * Returns session variable value by name
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function Recall($params)
 	{
 		$var_name = $this->SelectParam($params,'name,var,param');
 
 		if (isset($params['persistent']) && $params['persistent']) {
 			$ret = $this->Application->RecallPersistentVar($var_name);
 		}
 		else {
 			 $ret = $this->Application->RecallVar($var_name);
 		}
 
 		$ret = ($ret === false && isset($params['no_null'])) ? '' : $ret;
 		if (getArrayValue($params, 'special') || getArrayValue($params, 'htmlchars')) {
 			$ret = htmlspecialchars($ret);
 		}
 
 		if (getArrayValue($params, 'urlencode')) {
 			$ret = urlencode($ret);
 		}
 
 		return $ret;
 	}
 
 	function RemoveVar($params)
 	{
 		$this->Application->RemoveVar( $this->SelectParam($params,'name,var,param') );
 	}
 
 	// bad style to store something from template to session !!! (by Alex)
 	// Used here only to test how session works, nothing more
 	function Store($params)
 	{
 		//echo"Store $params[name]<br>";
 		$name = $params['name'];
 		$value = $params['value'];
 		$this->Application->StoreVar($name,$value);
 	}
 
 	/**
 	 * Sets application variable value(-s)
 	 *
 	 * @param Array $params
 	 * @access public
 	 */
 	function Set($params)
 	{
 		foreach ($params as $param => $value) {
 			$this->Application->SetVar($param, $value);
 		}
 	}
 
 	/**
 	 * Increment application variable
 	 * specified by number specified
 	 *
 	 * @param Array $params
 	 * @access public
 	 */
 	function Inc($params)
 	{
 		$this->Application->SetVar($params['param'], $this->Application->GetVar($params['param']) + $params['by']);
 	}
 
 	/**
 	 * Retrieves application variable
 	 * value by name
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function Get($params)
 	{
 		$ret = $this->Application->GetVar($this->SelectParam($params, 'name,var,param'), '');
 		return getArrayValue($params, 'htmlchars') ? htmlspecialchars($ret) : $ret;
 	}
 
 	/**
 	 * Retrieves application constant
 	 * value by name
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function GetConst($params)
 	{
 		$constant_name = $this->SelectParam($params, 'name,const');
 
 		return defined($constant_name) ? constant($constant_name) : '';
 	}
 
 	/**
 	 * Retrieves configuration variable value by name
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function GetConfig($params)
 	{
 		$config_name = $this->SelectParam($params, 'name,var');
 		$ret = $this->Application->ConfigValue($config_name);
 		if( getArrayValue($params, 'escape') ) $ret = addslashes($ret);
 		return $ret;
 	}
 
 	function ConfigEquals($params)
 	{
 		$option = $this->SelectParam($params, 'name,option,var');
 		return $this->Application->ConfigValue($option) == getArrayValue($params, 'value');
 	}
 
 	/**
 	 * Creates all hidden fields
 	 * needed for kernel_form
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function DumpSystemInfo($params)
 	{
 		$actions =& $this->Application->recallObject('kActions');
 		$actions->Set('t', $this->Application->GetVar('t') );
 
 		$params = $actions->GetParams();
 		$o='';
 		foreach ($params AS $name => $val)
 		{
 			$o .= "<input type='hidden' name='$name' id='$name' value='$val'>\n";
 		}
 		return $o;
 	}
 
 	/**
 	 * Used for search sidebox on front-end only
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @author Alex
 	 */
 	function GetFormHiddens($params)
 	{
 		$t = $this->SelectParam($params, 'template,t');
 		unset($params['template']);
 
 		$form_fields = Array ();
 		if ($this->Application->RewriteURLs()) {
 			$session =& $this->Application->recallObject('Session');
 			if ($session->NeedQueryString()) {
 				$form_fields['sid'] = $this->Application->GetSID();
 			}
 		}
 		else {
 			$form_fields['env'] = $this->Application->BuildEnv($t, $params, 'm', null, false);
 		}
 
 		if ($this->Application->GetVar('admin') == 1) {
 			$form_fields['admin'] = 1;
 		}
 
 		$ret = '';
 		$field_tpl = '<input type="hidden" name="%1$s" id="%1$s" value="%2$s"/>'."\n";
 		foreach ($form_fields as $form_field => $field_value) {
 			$ret .= sprintf($field_tpl, $form_field, $field_value);
 		}
 
 		return $ret;
 	}
 
 	function Odd_Even($params)
 	{
 		$odd = $params['odd'];
 		$even = $params['even'];
 		if (!isset($params['var'])) {
 			$var = 'odd_even';
 		}
 		else {
 			$var = $params['var'];
 		}
 
 		if ($this->Application->GetVar($var) == 'even') {
 			if (!isset($params['readonly']) || !$params['readonly']) {
 				$this->Application->SetVar($var, 'odd');
 			}
 			return $even;
 		}
 		else {
 			if (!isset($params['readonly']) || !$params['readonly']) {
 				$this->Application->SetVar($var, 'even');
 			}
 			return $odd;
 		}
 	}
 
 	/**
 	 * Returns phrase translation by name
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function Phrase($params)
 	{
 		// m:phrase name="phrase_name" default="Tr-alala" updated="2004-01-29 12:49"
 		$phrase_name = $this->SelectParam($params, 'label,name,title');
 		if (isset($params['source']) && $params['source']) {
 			$phrase_name = $this->Application->GetVar($phrase_name);
 			if (array_key_exists('default', $params) && !$phrase_name) {
 				$phrase_name = $params['default'];
 			}
 		}
 
 		$no_editing = array_key_exists('no_editing', $params) && $params['no_editing'];
 		$translation = $this->Application->Phrase($phrase_name, !$no_editing);
 
 		if (isset($params['escape']) && $params['escape']) {
 			$translation = htmlspecialchars($translation, ENT_QUOTES);
 			$translation = addslashes($translation);
 		}
 		return $translation;
 	}
 
 	// for tabs
 	function is_active($params)
 	{
 		$test_templ =  $this->SelectParam($params, 'templ,template,t');
 		if ( !getArrayValue($params,'allow_empty') )
 		{
 			$if_true=getArrayValue($params,'true') ? $params['true'] : 1;
 			$if_false=getArrayValue($params,'false') ? $params['false'] : 0;
 		}
 		else
 		{
 			$if_true=$params['true'];
 			$if_false=$params['false'];
 		}
 
 		if ( preg_match("/^".str_replace('/', '\/', $test_templ)."/i", $this->Application->GetVar('t'))) {
 			return $if_true;
 		}
 		else {
 			return $if_false;
 		}
 	}
 
 	function IsNotActive($params)
 	{
 		return !$this->is_active($params);
 	}
 
 	function IsActive($params)
 	{
 		return $this->is_active($params);
 	}
 
 	function is_t_active($params)
 	{
 		return $this->is_active($params);
 	}
 
 	function CurrentTemplate($params)
 	{
 		return $this->is_active($params);
 	}
 
 	/**
 	 * Checks if session variable
 	 * specified by name value match
 	 * value passed as parameter
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function RecallEquals($params)
 	{
 		$name = $this->SelectParam($params, 'name,var');
 		$value = $params['value'];
 
 		if (isset($params['persistent']) && $params['persistent']) {
 			return $this->Application->RecallPersistentVar($name) == $value;
 		}
 
 		return ($this->Application->RecallVar($name) == $value);
 	}
 
 	/**
 	 * Checks if application variable
 	 * specified by name value match
 	 * value passed as parameter
 	 *
 	 * @param Array $params
 	 * @return bool
 	 * @access public
 	 */
 	function GetEquals($params)
 	{
 		$name = $this->SelectParam($params, 'var,name,param');
 
 		$value = $params['value'];
 		if ($this->Application->GetVar($name) == $value) {
 			return 1;
 		}
 	}
 
 	function ModuleInclude($params)
 	{
 		$ret = '';
 		$block_params = array_merge($params, Array('is_silent' => 2)); // don't make fatal errors in case if template is missing
 		$current_template = $this->Application->GetVar('t');
 
 		$replace_main = isset($params['replace_m']) && $params['replace_m'];
 		$skip_prefixes = isset($params['skip_prefixes']) ? explode(',', $params['skip_prefixes']) : Array();
 		$cms_mode = $this->Application->GetVar('admin');
 
 		foreach ($this->Application->ModuleInfo as $module_name => $module_data) {
 			$module_key = mb_strtolower($module_name);
 
 			if ($module_name == 'In-Portal') {
 				if (!$cms_mode && $this->Application->IsAdmin()) {
 					// don't process In-Portal templates in admin
 					continue;
 				}
 
 				// Front-End still relies on In-Portal module
 				$module_prefix = $module_data['TemplatePath'];
 			}
 			else {
 				$module_prefix = $this->Application->IsAdmin() ? $module_key.'/' : rtrim($module_data['TemplatePath'], '/').'/';
 			}
 
 			$block_params['t'] = $module_prefix.$this->SelectParam($params, $module_key.'_template,'.$module_key.'_t,template,t');
 
 			$check_prefix = $module_data['Var'];
 
 			if ($check_prefix == 'adm' && $replace_main) {
 				$check_prefix = 'c';
 			}
 
 			if ($block_params['t'] == $current_template || in_array($check_prefix, $skip_prefixes)) {
 				continue;
 			}
 
 			$no_data = $this->SelectParam($params, $module_key.'_block_no_data,block_no_data');
 			if ($no_data) {
 				$block_params['block_no_data'] = $module_prefix.'/'.$no_data;
 			}
 
 			$ret .= $this->Application->Parser->IncludeTemplate($block_params, isset($block_params['is_silent']) ? 1 : 0);
 		}
 
 		return $ret;
 	}
 
 	function ModuleEnabled($params)
 	{
 		return $this->Application->isModuleEnabled( $params['module'] );
 	}
 
 	/**
 	 * Checks if debug mode is on
 	 *
 	 * @param Array $params
 	 * @return bool
 	 * @access public
 	 */
 	function IsDebugMode($params)
 	{
 		return defined('DEBUG_MODE') && $this->Application->isDebugMode();
 	}
 
 	/*function MassParse($params)
 	{
 		$qty = $params['qty'];
 		$block = $params['block'];
 		$mode = $params['mode'];
 
 		$o = '';
 		if ($mode == 'func') {
 			$func = create_function('$params', '
 					$o = \'<tr>\';
 					$o.= \'<td>a\'.$params[\'param1\'].\'</td>\';
 					$o.= \'<td>a\'.$params[\'param2\'].\'</td>\';
 					$o.= \'<td>a\'.$params[\'param3\'].\'</td>\';
 					$o.= \'<td>a\'.$params[\'param4\'].\'</td>\';
 					$o.= \'</tr>\';
 					return $o;
 				');
 			for ($i=1; $i<$qty; $i++) {
 				$block_params['param1'] = rand(1, 10000);
 				$block_params['param2'] = rand(1, 10000);
 				$block_params['param3'] = rand(1, 10000);
 				$block_params['param4'] = rand(1, 10000);
 				$o .= $func($block_params);
 			}
 			return $o;
 		}
 
 		$block_params['name'] = $block;
 
 		for ($i=0; $i<$qty; $i++) {
 			$block_params['param1'] = rand(1, 10000);
 			$block_params['param2'] = rand(1, 10000);
 			$block_params['param3'] = rand(1, 10000);
 			$block_params['param4'] = rand(1, 10000);
 			$block_params['passed'] = $params['passed'];
 			$block_params['prefix'] = 'm';
 
 			$o.= $this->Application->ParseBlock($block_params, 1);
 		}
 		return $o;
 	}*/
 
 	function LoggedIn($params)
 	{
 		return $this->Application->LoggedIn();
 	}
 
 	/**
 	 * Allows to check if permission exists directly in template and perform additional actions if required
 	 *
 	 * @param Array $params
 	 * @return bool
 	 */
 	function CheckPermission($params)
 	{
 		$perm_helper =& $this->Application->recallObject('PermissionsHelper');
 		return $perm_helper->TagPermissionCheck($params);
 	}
 
 	/**
 	 * Checks if user is logged in and if not redirects it to template passed
 	 *
 	 * @param Array $params
 	 */
 	function RequireLogin($params)
 	{
 		$t = $this->Application->GetVar('t');
 		if ($next_t = getArrayValue($params, 'next_template')) {
 			$t = $next_t;
 		}
 
 		// check by permissions: begin
 		if ((isset($params['perm_event']) && $params['perm_event']) ||
 			(isset($params['perm_prefix']) && $params['perm_prefix']) ||
 			(isset($params['permissions']) && $params['permissions'])) {
 
 			$perm_helper =& $this->Application->recallObject('PermissionsHelper');
 			/* @var $perm_helper kPermissionsHelper */
 
 			$perm_status = $perm_helper->TagPermissionCheck($params);
 			if (!$perm_status) {
 				list($redirect_template, $redirect_params) = $perm_helper->getPermissionTemplate($params);
 				$this->Application->Redirect($redirect_template, $redirect_params);
 			}
 			else {
 				return ;
 			}
 		}
 		// check by permissions: end
 
 		// check by configuration value: begin
 		$condition = getArrayValue($params, 'condition');
 		if (!$condition) {
 			$condition = true;
 		}
 		else {
 			if (substr($condition, 0, 1) == '!') {
 				$condition = !$this->Application->ConfigValue(substr($condition, 1));
 			}
 			else {
 				$condition = $this->Application->ConfigValue($condition);
 			}
 		}
 		// check by configuration value: end
 
 		// check by belonging to group: begin
 		$group = $this->SelectParam($params, 'group');
 		$group_access = true;
 		if ($group) {
 			$conn =& $this->Application->GetADODBConnection();
 			$group_id = $conn->GetOne('SELECT GroupId FROM '.TABLE_PREFIX.'PortalGroup WHERE Name = '.$conn->qstr($group));
 			if ($group_id) {
 				$groups = explode(',', $this->Application->RecallVar('UserGroups'));
 				$group_access = in_array($group_id, $groups);
 			}
 		}
 		// check by belonging to group: end
 
 		if ((!$this->Application->LoggedIn() || !$group_access) && $condition) {
 			$redirect_params = $this->Application->HttpQuery->getRedirectParams(true);
 			$redirect_params['next_template'] = $t;
 
 			if (array_key_exists('pass_category', $params)) {
 				$redirect_params['pass_category'] = $params['pass_category'];
 			}
 
 			if ( $this->Application->LoggedIn() && !$group_access) {
 				$this->Application->Redirect( $params['no_group_perm_template'], $redirect_params);
 			}
 
 			$this->Application->Redirect($params['login_template'], $redirect_params);
 		}
 	}
 
 	function IsMember($params)
 	{
 		$group = getArrayValue($params, 'group');
 		$conn =& $this->Application->DB;
 		$group_id = $conn->GetOne('SELECT GroupId FROM '.TABLE_PREFIX.'PortalGroup WHERE Name = '.$conn->qstr($group));
 		if ($group_id) {
 			$groups = explode(',', $this->Application->RecallVar('UserGroups'));
 			$group_access = in_array($group_id, $groups);
 		}
 		return $group_access;
 	}
 
 	/**
 	 * Checks if SSL is on and redirects to SSL URL if needed
 	 * If SSL_URL is not defined in config - the tag does not do anything
 	 * If for_logged_in_only="1" exits if user is not logged in.
 	 * If called without params forces https right away. If called with by_config="1" checks the
 	 * Require SSL setting from General Config and if it is ON forces https
 	 *
 	 * @param unknown_type $params
 	 */
 	function CheckSSL($params)
 	{
 		$ssl = $this->Application->IsAdmin() ? $this->Application->ConfigValue('AdminSSL_URL') : false;
 
 		if (!$ssl) {
 			// not in admin or admin ssl url is empty
 			$ssl = $this->Application->ConfigValue('SSL_URL');
 		}
 
 		if (!$ssl) return; //SSL URL is not set - no way to require SSL
 
 		$require = false;
 
 		if (isset($params['mode']) && $params['mode'] == 'required') {
 			$require = true;
 			if (isset($params['for_logged_in_only']) && $params['for_logged_in_only'] && !$this->Application->LoggedIn()) {
 				$require = false;
 			}
 
 			if (isset($params['condition'])) {
 				if (!$this->Application->ConfigValue($params['condition'])) {
 					$require = false;
 				}
 			}
 		}
 
 		$http_query =& $this->Application->recallObject('HTTPQuery');
 		$pass = $http_query->getRedirectParams();
 
 		if ($require) {
 			if (PROTOCOL == 'https://') {
 				$this->Application->SetVar('__KEEP_SSL__', 1);
 				return;
 			}
 			$this->Application->Redirect('', array_merge_recursive2($pass, Array('__SSL__' => 1)));
 		}
 		else {
 			if (PROTOCOL == 'https://' && $this->Application->ConfigValue('Force_HTTP_When_SSL_Not_Required')) {
 				if ($this->Application->GetVar('__KEEP_SSL__')) return;
 				// $pass_more = Array ('pass' => 'm', 'm_cat_id' => 0, '__SSL__' => 0);
 				$this->Application->Redirect('', array_merge_recursive2($pass, Array('__SSL__' => 0))); // $pass_more
 			}
 		}
 	}
 
 	function ConstOn($params)
 	{
 		$name = $this->SelectParam($params,'name,const');
 		return constOn($name);
 	}
 
 	function SetDefaultCategory($params)
 	{
 		$category_id = $this->Application->findModule('Name', $params['module'], 'RootCat');
 		$this->Application->SetVar('m_cat_id', $category_id);
 	}
 
 	function XMLTemplate($params)
 	{
 		safeDefine('DBG_SKIP_REPORTING', 1);
 
 		if (isset($params['cache']) && $params['cache']) {
 			$nextyear = intval(date('Y') + 1);
 
 			$format = "D, d M Y H:i:s";
 			$expiration = gmdate($format, mktime() + $params['cache']).' GMT';
 			$last_modified = mktime();
 
 			header ('Cache-Control: public, cache, max-age='.$params['cache']);
 			header ("Expires: $expiration");
 			header ('Pragma: public');
 
 			// Getting headers sent by the client.
 			$headers = request_headers();
 
 			// Checking if the client is validating his cache and if it is current.
 			if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) > $last_modified-$params['cache'])) {
 			   // Client's cache IS current, so we just respond '304 Not Modified'.
 			   header('Last-Modified: '.date($format, strtotime($headers['If-Modified-Since'])).' GMT', true, 304);
 			   exit();
 			} else {
 			   // Image not cached or cache outdated, we respond '200 OK' and output the image.
 			   header('Last-Modified: '.gmdate($format, $last_modified).' GMT', true, 200);
 			}
 		}
 
 		// xml documents are usually long
 		set_time_limit(0);
 		ini_set('memory_limit', -1);
 
 		return $this->Application->XMLHeader(getArrayValue($params, 'xml_version'));
 	}
 
 	function Header($params)
 	{
 		header($params['data']);
 	}
 
 	function NoDebug($params)
 	{
 		if (!$this->Application->GetVar('debug')) {
 			define('DBG_SKIP_REPORTING', 1);
 		}
 	}
 
 	function RootCategoryName($params)
 	{
-		$root_phrase = $this->Application->ConfigValue('Root_Name');
-		return $this->Application->Phrase($root_phrase);
+		$phrase_name = $this->Application->ConfigValue('Root_Name');
+		$no_editing = array_key_exists('no_editing', $params) && $params['no_editing'];
+
+		return $this->Application->Phrase($phrase_name, !$no_editing);
 	}
 
 	/**
 	 * Allows to attach file directly from email event template
 	 *
 	 * @param Array $params
 	 */
 	function AttachFile($params)
 	{
 		$esender =& $application->recallObject('EmailSender'.(isset($params['special']) ? '.'.$params['special'] : ''));
 		/* @var $esender kEmailSendingHelper */
 
 		$path = FULL_PATH.'/'.$params['path'];
 		if (file_exists($path)) {
 			$esender->AddAttachment($path);
 		}
 	}
 
 	function CaptchaImage($params)
 	{
 		$this->NoDebug($params);
 		$this->Application->SetVar('skip_last_template', 1);
 
 		$captcha_helper =& $this->Application->recallObject('CaptchaHelper');
 		/* @var $captcha_helper kCaptchaHelper */
 
 		// generate captcha code
 		$code = $captcha_helper->prepareCode( $this->Application->GetVar('var') );
 
 		$captcha_helper->GenerateCaptchaImage($code, $this->Application->GetVar('w'), $this->Application->GetVar('h'), true);
 	}
 
 	function SID($params)
 	{
 		return $this->Application->GetSID();
 	}
 
 	function ModuleInfo($params)
 	{
 		return $this->Application->findModule($params['key'], $params['value'], $params['return']);
 	}
 
 	function Random($params)
 	{
 		return rand(1, 100000000);
 	}
 
 	/**
 	 * Prints parser params, available at current deep level
 	 *
 	 * @param Array $params
 	 * @return string
 	 */
 	function PrintCurrentParams($params)
 	{
 		$current_params = $this->Application->Parser->Params;
 
 		foreach ($current_params as $param_name => $param_value) {
 			$current_params[$param_name] = $param_name . ' = "' . $param_value . '"';
 		}
 
 		return '<pre>' . implode("\n", $current_params) . '</pre>';
 	}
 
 	/**
 	 * Gets previously defined counter result
 	 *
 	 * @param Array $params
 	 * @return int
 	 */
 	function GetCounter($params)
 	{
 		return $this->Application->getCounter($params['name'], $params);
 	}
 
 	/**
 	 * Increments PageHit counter
 	 *
 	 * @param Array $params
 	 * @return int
 	 */
 	function RegisterPageHit($params)
 	{
 		if ($this->Application->ConfigValue('UsePageHitCounter')) {
 			$db =& $this->Application->GetADODBConnection();
 
 			// get current counte
 			$sql = 'SELECT VariableValue
 					FROM '.TABLE_PREFIX.'ConfigurationValues
 					WHERE VariableName = "PageHitCounter"';
 			$page_counter = (int)$db->GetOne($sql);
 
 			$sql = 'UPDATE LOW_PRIORITY '.TABLE_PREFIX.'ConfigurationValues
 					SET VariableValue = '.($page_counter + 1).'
 					WHERE VariableName = "PageHitCounter"';
 			$db->Query($sql);
 		}
 	}
 
 	function Timestamp($params)
 	{
 		$format = isset($params['format']) ? $params['format'] : 'd.m.Y H:i:s';
 		return adodb_date($format);
 	}
 }
Index: branches/5.0.x/core/kernel/utility/debugger/debugger.css
===================================================================
--- branches/5.0.x/core/kernel/utility/debugger/debugger.css	(revision 12588)
+++ branches/5.0.x/core/kernel/utility/debugger/debugger.css	(revision 12589)
@@ -1,119 +1,121 @@
 .dbg_profiler {
 	margin-top: 5px;
 	padding: 0px;
 	height: 10px;
 	border: 1px solid #000000;
 	float: left;
 	display: inline;
 }
 
 .dbg_flat_table, .dbg_stats_table, table.dbg_explain_table {
 	border-collapse: collapse;
 	width: auto;
 	margin: 0px;
 }
 
 table.dbg_explain_table TD {
 	border: 1px solid #000000;
 	padding: 4px;
 }
 
 table.dbg_explain_table tr.explain_header TD {
 	font-weight: bold;
 	text-align: center;
 }
 
 .dbg_flat_table TD, .dbg_stats_table TD {
 	border: 1px solid #CCCCCC;
 	padding: 4px;
 }
 
 .dbg_stats_table TD {
 	background-color: #FFFFFF;
 	font-family: Arial, Verdana;
 	font-size: 9pt;
 	text-align: left;
 }
 
 .debug_layer_table {
 	border-collapse: collapse;
 }
 
 .debug_text, .debug_row_even TD, .debug_row_odd TD {
 	color: #000000;
 	font-family: Verdana;
 	font-size: 11px;
 }
 
 .debug_cell {
 	border: 1px solid #FF0000;
 	padding: 4px;
 	text-align: left;
 }
 
 .debug_row_even {
 	background-color: #CCCCFF;
 }
 
 .debug_row_odd {
 	background-color: #FFFFCC;
 }
 
 .debug_layer_container {
 	left: 2px;
 	top: 1px;
 	z-index: +1000;
 	position: absolute;
 	overflow: auto;
 	border: 2px solid;
 	padding: 3px;
 	border-top-color: threedlightshadow;
 	border-left-color: threedlightshadow;
 	border-right-color: threeddarkshadow;
 	border-bottom-color: threeddarkshadow;
 	background-color: buttonface;
 }
 
 .debug_layer {
 	padding: 0px;
 }
 
 .debug_error {
 	color: #FF0000;
 }
 
 .dbg-toolbar {
 	border: 1px solid #000000;
 	background-color: #D4D0C8;
 	border-collapse: separate;
+	border-spacing: 2px;
 	width: auto;
 }
 
 .dbg-toolbar td {
 	font-size: 13px;
 	font-family: Tahoma;
 	padding: 1px 5px 1px 5px;
+	vertical-align: middle;
 	margin: 3px;
 }
 
 .dbg-toolbar td.dbg-button, .dbg-toolbar td.dbg-button:hover {
 	cursor: default;
 }
 
 .dbg-toolbar td.dbg-button {
 	border: 1px solid #D4D0C8;
 	background-color: #D4D0C8;
 }
 
 .dbg-toolbar td.dbg-button:hover {
 	border: 1px solid #0A246A;
 	background-color: #B5BDD2;
 }
 
 .dbg-toolbar td.dbg-separator {
 	background-color: #000000;
 	width: 1px;
 	padding: 0px;
 }
 
 
Index: branches/5.0.x/core/admin_templates/js/template_manager.js
===================================================================
--- branches/5.0.x/core/admin_templates/js/template_manager.js	(revision 12588)
+++ branches/5.0.x/core/admin_templates/js/template_manager.js	(revision 12589)
@@ -1,385 +1,388 @@
 function TemplateManager ($edit_url, $browse_url, $save_layout_url, $edting_mode) {
 	this._editUrl = $edit_url;
 	this.browseUrl = $browse_url;
 	this._saveLayoutUrl = $save_layout_url;
 	this.editingMode = $edting_mode; // from {1 - browse, 2 - content, 3 - design}
 
 	this._blocks = {};
 	this._blockOrder = Array ();
 	this.inDrag = false; // don't process mouse over/out events while in drag mode
 
 	var $template_manager = this;
 
 	$(document).ready(
 		function() {
 			$template_manager.searchBlocks();
 
 			if (!$template_manager.editingMode) {
 				return ;
 			}
 
 			// show special toolbar when in any of 3 browse modes
 			var $head_frame = getFrame('head');
 			var $extra_toolbar = $head_frame.$('div.front-extra-toolbar').clone(); // clone to keep original untouched
 
 			$('a', $extra_toolbar).each(
 				function() {
 					// cut from end, because IE7 adds base_href to beginning of href
 					var $editing_mode = $(this).attr('href');
 					$editing_mode = $editing_mode.substr($editing_mode.length - 1, 1);
 
 					$(this).attr('href', $template_manager.browseUrl.replace('#EDITING_MODE#', $editing_mode));
 
 					if ($editing_mode == $template_manager.editingMode) {
 						$(this).parents('td:first').addClass('button-active').prevAll('td:first').addClass('button-active');
 					}
 				}
 			);
 
 			$head_frame.$('#extra_toolbar').html( $extra_toolbar.html() );
 
 			var $hover_effect = [];
 
 			if ($template_manager.editingMode > 1) {
 				// all modes except for "Browse Mode"
 				$hover_effect.push('div.cms-section-properties-btn:first');
 			}
 
 			if ($template_manager.editingMode == 2) {
 				// Content Mode
 				$hover_effect.push('div.cms-edit-btn');
 
 				// make all spans with phrases clickable
 				$template_manager.setupEditTranslationButtons(document);
 			}
 
 			if ($template_manager.editingMode == 3) {
 				// Design Mode
 //				$hover_effect.push('div.cms-save-layout-btn:first, div.cms-cancel-layout-btn:first');
 
 				$template_manager.renumberMovableElements();
 
 				$('div.movable-area').sortable(
 					{
 						placeholder: 'move-helper',
 						handle: '.movable-header',
 						items: 'div.movable-element',
 						connectWith: ['div.movable-area'],
 						tolerance: 'pointer',
 						start: function(e, ui) {
 							$template_manager.inDrag = true;
 							ui.placeholder.height( ui.item.height() );
 						},
 						stop: function(e, ui) {
 							$template_manager.inDrag = false;
 
 							// mouseout doesn't happen while in drag, so compensate it here
 							var $header = $('.movable-header', ui.item);
 							$('div.block-edit-block-btn-container', $header).mouseout();
 						},
 						change: function(e, ui) {
 							$('div.cms-layout-btn-container').show();
 						}
 					}
 				);
 			}
 
 			// make requested elements fully visible on mouseover
 			$($hover_effect.join(', '))
 			.mouseover(
 				function(e) {
 					$(this).css('opacity', 1);
 				}
 			)
 			.mouseout(
 				function(e) {
 					$(this).css('opacity', 0.5);
 				}
 			);
 		}
 	);
 }
 
 TemplateManager.prototype.setupEditTranslationButtons = function ($container) {
 	$("span[name='cms-translate-phrase']", $container).each(
 		function() {
 			var $me = $(this);
 			var $parent_link = $me.parents('a:first');
 
 			if ($parent_link.length == 0) {
 				// span in not inside "a" tag
 
 				$me.prepend('<div class="cms-edit-btn"><div class="cms-btn-text">Edit</div></div>');
 				$('div.cms-edit-btn:first', $me).click(TemplateManager.prototype.translatePhrase);
 				$me.dblclick(
 					function ($e) {
 						$('div.cms-edit-btn:first', this).click();
 						return false;
 					}
 				);
 
 				var $effect_element = $me;
 			}
 			else {
 				// span is inside "a" tag
 				var $clone = $me.clone();
 				$clone.empty().attr('title', '');
 
+				// in case if "a" tag is "display: block", then make "span" the same
+				$clone.css('display', $parent_link.css('display'));
+
 				$parent_link.html( $me.html() ).wrap($clone);
 				$parent_link.before('<div class="cms-edit-btn" title="' + $me.attr('title') + '"><div class="cms-btn-text">Edit</div></div>');
 				$parent_link.prev('div.cms-edit-btn:first').click(TemplateManager.prototype.translatePhrase);
 
 				var $effect_element = $parent_link.parents("span[name='cms-translate-phrase']:first");
 			}
 
 			$effect_element
 			.mouseover(
 				function($e) {
 					$('div.cms-edit-btn', this).css('display', 'inline');
 				}
 			)
 			.mouseout(
 				function($e) {
 					$('div.cms-edit-btn', this).hide();
 				}
 			);
 		}
 	);
 }
 
 TemplateManager.prototype.translatePhrase = function ($e) {
 	var $translate_url = $(this).parents("span[name='cms-translate-phrase']:first").attr('href');
 
 	if ($translate_url.match(/javascript:(.*)/)) {
 		eval(RegExp.$1);
 	}
 	else {
 		window.location.href = $translate_url;
 	}
 
 	return false;
 }
 
 TemplateManager.prototype.renumberMovableElements = function () {
 	var $area_index = 0;
 	// 1. dynamically assign IDs to all movable elements
 	$('div.movable-area').each(
 		function() {
 			var $element_index = 0;
 			$('div.movable-element', this).each(
 				function() {
 					$(this).attr('id', 'target_order_a' + $area_index + 'e' + $element_index);
 					$element_index++;
 				}
 			);
 
 			$area_index++;
 		}
 	);
 }
 
 TemplateManager.prototype.saveLayout = function () {
 	// prepare order string
 	var $sort_order = [];
 	$('div.movable-area').each(
 		function($area_index) {
 			var $order = $(this).sortable('serialize').replace(/target_order\[\]/g, 'target_order[' + $area_index + '][]');
 			if ($order) {
 				$sort_order.push($order);
 			}
 		}
 	);
 	$sort_order = $sort_order.join('&');
 
 	// save order string
 	var $me = this;
 
 	var $settings = {
 		url: this._saveLayoutUrl + '&' + $sort_order + '&width=200&height=70&modal=true',
 		caption: 'Layout Saving Result',
 		onDataReceived: function ($data) {
 			var $message = '';
 
 			if ($data == 'OK') {
 				$message = 'New Layout Saved';
 				$('div.cms-layout-btn-container').hide();
 				$me.renumberMovableElements();
 			}
 			else {
 				$message = 'Failed to Save New Layout';
 			}
 
 			$data = '<div style="text-align: center;">' + $message + '<br/><br/><input type="button" class="button" value="OK" onclick="TB.remove();"/></div>';
 
 			return $data;
 		}
 	};
 
 	TB.setWindowTitle( window.top.document.title.replace(main_title + ' :: ', '') );
 	TB.show($settings);
 }
 
 TemplateManager.prototype.cancelLayout = function () {
 	window.location.href = window.location.href;
 }
 
 TemplateManager.prototype.onBtnClick = function ($e, $element) {
 	var $id = $element.id.replace(/_btn$/, '');
 	var $block_info = this._blocks[$id];
 	var $url = this._editUrl.replace('#BLOCK#', $block_info.block_name + ':' + $block_info.function_name).replace('#EVENT#', 'OnLoadBlock');
 
 	direct_edit('theme-file', $url);
 
 	$e.stopPropagation();
 }
 
 TemplateManager.prototype.onMouseOver = function ($e, $element) {
 	if (this.inDrag) {
 		return ;
 	}
 
 	$element = $($element);
 
 	if ($element.hasClass('block-edit-design-btn-container')) {
 		$($element).addClass('block-edit-design-btn-container-over');
 
 		var $button_group = $('div.cms-edit-design-btn-container:first', $element);
 		if ($button_group.length) {
 			$button_group.show();
 		}
 		else {
 			$('div.cms-edit-design-btn:first', $element).show();
 		}
 	}
 	else {
 		$($element).addClass('block-edit-block-btn-container-over');
 		$('div.cms-edit-block-btn:first', $element).show();
 	}
 
 	$e.stopPropagation();
 }
 
 TemplateManager.prototype.onMouseOut = function ($e, $element) {
 	if (this.inDrag) {
 		return ;
 	}
 
 	$element = $($element);
 
 	if ($element.hasClass('block-edit-design-btn-container')) {
 		$($element).removeClass('block-edit-design-btn-container-over');
 
 		var $button_group = $('div.cms-edit-design-btn-container:first', $element);
 		if ($button_group.length) {
 			$button_group.hide();
 		}
 		else {
 			$('div.cms-edit-design-btn:first', $element).hide();
 		}
 	}
 	else {
 		$($element).removeClass('block-edit-block-btn-container-over');
 		$('div.cms-edit-block-btn:first', $element).hide();
 	}
 
 	$e.stopPropagation();
 }
 
 TemplateManager.prototype.searchBlocks = function () {
 	var $design_containers = $('div.block-edit-design-btn-container');
 	var $block_containers = $('div.block-edit-block-btn-container');
 
 	$design_containers.each(
 		function() {
 			var $block_container = $('div.block-edit-block-btn-container:first', this);
 
 			if ($block_container.length) {
 				$block_containers = $block_containers.not($block_container);
 
 				// place "Edit Block" button near "Edit Design" button
 				var $edit_design_btn = $('div.cms-edit-design-btn:first', this);
 				var $edit_block_btn = $('div.cms-edit-block-btn:first', $block_container);
 
 				$edit_design_btn
 				.wrap('<div class="cms-edit-design-btn-container"></div>')
 				.before( $edit_block_btn.clone() );
 
 				$edit_block_btn.remove();
 
 				// make "hint" from "Edit Block" button container main
 				$(this).attr('title', $block_container.attr('title'));
 				$block_container.attr('title', '');
 
 				TemplateManager.prototype.registerBlock.call(aTemplateManager, $block_container.get(0), ['hover']);
 			}
 
 			TemplateManager.prototype.registerBlock.call(aTemplateManager, this, ['dblclick']);
 		}
 	);
 
 	$block_containers.each(
 		function() {
 			TemplateManager.prototype.registerBlock.call(aTemplateManager, this);
 		}
 	);
 
 //	$('div').each (
 //		function () {
 //			/*var $id = $(this).attr('id');
 //
 //			if (!$id || $id.match(/parser_block\[.*\].*_btn$/) || !$id.match(/parser_block\[.*\]/)) {
 //				// skip other divs
 //				return true;
 //			}*/
 //
 //
 //			TemplateManager.prototype.registerBlock.call(aTemplateManager, this);
 //		}
 //	);
 }
 
 TemplateManager.prototype.registerBlock = function ($element, $skip_events) {
 	var $params = $element.getAttribute('params').split(':');
 
 	this._blocks[$element.id] = {
 		block_name: $params[0],
 		function_name: $params[1]
 	};
 
 	var $btn = document.getElementById($element.id + '_btn');
 
 	$($btn).click(
 		function(ev) {
 			TemplateManager.prototype.onBtnClick.call(aTemplateManager, ev, this);
 		}
 	);
 
 	if ($skip_events === undefined) {
 		$skip_events = [];
 	}
 
 	if (!in_array('dblclick', $skip_events)) {
 		$($element)
 		.dblclick(
 			function(ev) {
 				TemplateManager.prototype.onBtnClick.call(aTemplateManager, ev, this);
 			}
 		)
 	}
 
 	if (!in_array('hover', $skip_events)) {
 		$($element)
 		.mouseover(
 			function(ev) {
 				TemplateManager.prototype.onMouseOver.call(aTemplateManager, ev, this);
 			}
 		)
 		.mouseout(
 			function(ev) {
 				TemplateManager.prototype.onMouseOut.call(aTemplateManager, ev, this);
 			}
 		);
 	}
 
 	this._blockOrder.push($element.id);
 }
\ No newline at end of file