    // Trying to detect Safari browser
	var	_isSafari	=	(navigator.userAgent && navigator.userAgent.indexOf('Safari') != -1);
	/**
	 * clear all select values
	 *
	 * @param _select target SELECT object
	 *
	 * @return void
	 */
	function	cmfClearOptions(_select)
	{
		if (_select)
		{
			var	optionCount	=	_select.options.length;
			var	oc	=	0;
			for (oc = 0; oc < optionCount; oc++)
				_select.remove(0);
		}
	}
	/**
	 * add option into select
	 *
	 * @param _select   target SELECT object
	 * @param _value    value for option to be added
	 * @param _caption  caption for option to be added
	 * @param _selected make the option selected
	 * 
	 * return bool
	 */
	function	cmfAddOption(_select, _value, _caption, _selected)
	{
		if (_select)
		{
			var oOption	=	document.createElement("OPTION");
			// Safari fix: not checked but seems to be work
			if (_isSafari)
				_select.add(oOption, _select.options[0]);
			else
				_select.options.add(oOption);
			oOption.text		=	_caption;
			oOption.value		=	_value;
			if (_selected)
			{
                oOption.selected   =    true;
			}
			return true;
		}
		return false;
	}
	/**
	 * Reloading select values base upon _data array. Additionally calls target onchange() handler.
	 *
	 * @param _form     form object
	 * @param _value    current value
	 * @param _target   target SELECT name (should be in _form)
	 * @param _data     array with data to apply filter
	 * @param _index    value index in _data array
	 * @param _option   option index in _data array
	 * @param _text     text index in _data array
	 * @param _empty    text for empty option (if needed)
	 * @param _emptyval value for empty option (if needed)
	 * @param _last     if true - empty option will be added at the end of list (otherwise at the beginning)
	 *
	 * @return void
	 */
	function	cmfSelectReload(_form, _value, _target, _data, _index, _option, _text, _empty, _emptyval, _last)
	{
		if (_form)
		{
			var	_select = _form[_target]
			if (_select)
			{
				cmfClearOptions(_select);
			}
			if (_empty && !_last)
			{
				cmfAddOption(_select, _emptyval, _empty, false);
			}
			if (_data  && _data.length)
			{
				var	idx	 = 0;
				for (idx = 0; idx < _data.length; idx++)
				{
				    if ((_index != null && _data[idx][_index] == _value) || _index == null)
						cmfAddOption (_select, 	_data[idx][_option], _data[idx][_text], false);
				}
			}
			if (_empty && _last)
			{
				cmfAddOption(_select, _emptyval, _empty, false);
			}
			if (_select && _select.onchange)
			{
				_select.onchange();
			}
		}
	}
	/**
	 * @deprecated
	 */
	function toggleTreeElement(object, subitems_id) 
	{
	   alert ('toggleTreeElement deprecated. Use cmftree.js instead');
	}
    /**
     * @deprecated
     */
    function createSelectOption (_targetArray, _emptyText, _selectObj, _selected)
	{
	   alert ('createSelectOption: deprecated. Use cmfSelectReload');
	} 
    /**
     * @deprecated (substituted)
     * @used by scripts/page_blocks.js && ronorp.forum.templates
     */
	function	clearOptions (_selectObj)
	{
	   cmfClearOptions(_selectObj);
	}
/*=====================================================================================================*/    
   	var	 bclick = false;
	var	_hideMode	=	[];
	
	var treeImage = [];
	
	treeImage['default']	=	[];

	treeImage['default']['p']	=	'images/-.gif';
	treeImage['default']['m']	=	'images/+.gif';
	
    /**
     * @deprecated
     */	
	function	mb_displayTree(_id, _node, _swap)
	{
	   return false;
		if (_id)
		{
			_node = (_node) ? _node : 'page';
			if (_img = $('image_' + _node + '_' + _id))
			{
				_img.name		=	(_img.name == 'p') ? 'm' : 'p'
				_hideMode[_node]=	(_hideMode[_node] != null) ? _hideMode[_node] : _img.name
				if (treeImage[_node] && treeImage[_node].length)
					_img.src		=	theme_path + treeImage[_node][_hideMode[_node]]
				else
					_img.src		=	theme_path + treeImage['default'][_hideMode[_node]]
			}
			var oColl	=	document.getElementsByName(_node + '_' + _id);
			if (oColl && oColl.length)
			{
				for (i = 0; i < oColl.length; i++)
				{
					oColl.item(i).style.display	=	(_hideMode[_node] == 'p') ? '' : 'none';
				}
			}
			if (_swap)
			{
				if (_imgf = $('img_page_' + _node + '_' + _id))
				{
					_imgf.name	=	(_imgf.name == 'c') ? 'o' : 'c'
					_imgf.src	=	theme_path  + treeImage[_node][_imgf.name]
				}
			}
			if (treeStruct && treeStruct[_node] && _hideMode && _node && _hideMode[_node] == 'm')
			{
				if (treeStruct[_node][_id] && treeStruct[_node][_id].length)
				{
					var k;
					for (k = 0; k < treeStruct[_node][_id].length; k++)
					{
						mb_displayTree(treeStruct[_node][_id][k], _node, _swap)
					}
				}
			}
		}
		bclick =	true;
		return false;
	}	
	function	mb_checkSubmit(_form, _message)
	{
		if (_form)
		{
			if (isAnyChecked(_form))
			{
				return	confirm(_message)
			}
		}
		return	false;
	}
	function	updateSelection (_form, _name, _target)
	{
		if (_form)
		{
			var	oColl		=	_form.elements;
			var _chkStatus	=	true;
			if (oColl && oColl.length)
			{
				for (i=0; i<oColl.length; i++)
				{
					var oObject	=	oColl.item(i);
					if (oObject && oObject.name.indexOf(_name) != -1 && oObject.type == "checkbox")
					{
						_chkStatus	=	(oObject.checked) ? _chkStatus : false;
					}
				}
			}
			if (_form[_target])
			{
				_form[_target].checked	=	_chkStatus;
			}
			return true;
		}
	}
	function	checkAll (_form, _name, _mode)
	{
		if (_form)
		{
			var	oColl	=	_form.elements;
			if (oColl && oColl.length)
			{
				for (i=0; i<oColl.length; i++)
				{
					var oObject	=	oColl.item(i);
					if (oObject && oObject.name.indexOf(_name) != -1 && oObject.type == "checkbox")
					{
						oObject.checked = _mode;
					}
				}
			}
			return true;
		}
	}
	/**
	 *
	 * @todo perform check by pattern too
	 */
	function	isAnyChecked(_form)
	{
		if (_form)
		{
			var	oColl	=	_form.elements;
			if (oColl && oColl.length)
			{
				for (i=0; i<oColl.length; i++)
				{
					var oObject	=	oColl.item(i);
					if (oObject && oObject.type == "checkbox")
					{
						if (oObject.checked)
						return true;
					}
				}
			}
		}
		return false;
	}
	/**
	 * Администрирование языков: статус языка поменялся.
	 * @todo вынести в шаблон?
	 */
	function onLanguagesFlagsChanged(object) {
		if (!object || !object.id) return;

		lang = object.id.substr(11,2);

		checkInterface = $("edit_langs["+lang+"][l_interface]");
		checkActive    = $("edit_langs["+lang+"][l_active]");
		radioDefault   = $("edit_langs[l_default]["+lang+"]");

		if (!checkInterface || !checkActive) return;

		enableDefault = checkInterface.checked && checkActive.checked;

		radioDefault.disabled = !enableDefault;
	}

	/**
	 * Администрирование языков. смена статуса языка при его редактировании
	 * @todo вынести в шаблон?
	 */
	function onAddLanguageFlagsChanged() {
		form = $('lang_admin_edit_language_form');
		if (!form || !form['edit_language[l_default]'] || 
			!form['edit_language[l_active]'] || !form['edit_language[l_interface]']) return;

		form['edit_language[l_default]'].disabled = !(form['edit_language[l_active]'].checked && form['edit_language[l_interface]'].checked)
	}

	/**
	 * Администрирование, конфигурация сайта. Восстановление настроек по умолчанию для формы
	 * @todo вынести в шаблон 
	 */
	function setDefaultValues() {
		form = $("configForm");

		if (!form) return;

		for (groupKey in configDefaultValues) {
			for (itemKey in configDefaultValues[groupKey]) {

				formItem = form.elements["fd["+groupKey+"]["+itemKey+"]"];
			
				if (!formItem) continue;

				// @todo add other supported types
				if (formItem.type=="text"    || 
					formItem.type=="textarea" ) 
				{
					formItem.value=configDefaultValues[groupKey][itemKey];
				}
			}
		}
	}

	/**
	 * Переключение видимости элементов. 
	 * При включении элемента предыдущий видимый прячется
	 */
	var toggleItemVisibilityObject = null;

	function toggleItemVisibility(id) {
		object = document.getElementById(id);
		if (!object) return;

		if (toggleItemVisibilityObject && toggleItemVisibilityObject!=object)
			toggleItemVisibilityObject.style.display = "none";

		object.style.display = object.style.display?"":"none";
	
		toggleItemVisibilityObject = object;
	}

	/**
	 * Переключение видимости панелей для tabctrl в настройках сайта
	 */
	var toggleTabVisibilityTab = null;

	function toggleTabVisibility(tabObj, id) {
		if (toggleItemVisibilityObject==document.getElementById(id)) return;

		toggleItemVisibility(id);

		if (toggleTabVisibilityTab)
			toggleTabVisibilityTab.className="tabctrl_tab";

		toggleTabVisibilityTab = tabObj;
		toggleTabVisibilityTab.className="tabctrl_tab_active";
	}

	/**
	 * указатель мыши над вкладкой таба
	 */
	function onTabMouseOver(tabObj, over) {
		if (toggleTabVisibilityTab == tabObj) return;

		if (over)
			tabObj.className="tabctrl_tab_over";
		else
			tabObj.className="tabctrl_tab";
	}

	/**
	 * @usedby addElementToBuffer
	 * @usedby reloadOrder
	 * @usedby reloadPageOrder
	 */
	function addSelectOption (_targetArray, _emptyText, _selectObj, _selected)
	{					
		if (_selectObj)
		{
            var _selectEmpty    =   true;
			clearOptions (_selectObj);
			var  i = 0;
			for (i = 0; i < _targetArray.length; i++)
			{	
				if (_targetArray[i])
				{
				    var _optionSelected   =   (_targetArray[i][0] && _targetArray[i][0] == _selected);
				    _selectEmpty    =   (_optionSelected) ? false : _selectEmpty;
                    cmfAddOption(_selectObj, _targetArray[i][0], _targetArray[i][1], _optionSelected);
				}
			}
			if (_emptyText)
			{
                cmfAddOption(_selectObj, "0", _emptyText, _selectEmpty);
            }
		}
	}	
	function reloadObjOrder (parent_id, _obj, _selectObj)
	{

		var _emptyText = str_last;
		var _selected = 0;
		var _targetArray = [];
		
		var _objTree = treeStruct['obj_tree_'+_obj];
		var _objData = fullObjList[_obj];
		
		var label_self = 0;

		if (parent_id || parent_id == 0)
		{
			var childs = _objTree[parent_id]; 
			if (childs) 
			{
				var p =0;
				for (p=0; p<childs.length; p++)
				{	
					if (_objData[childs[p]]) {
						if (childs[p] == _objID) label_self = 1;
						if (childs[p] != _objID || !_objID) 
						{
							_targetArray[p] = [childs[p], str_before+' '+_objData[childs[p]]['obj_title']];
							if (label_self == 1)
							{
								_selected = childs[p];
								label_self = 0;
							}
						}
					}			
				}
			}
		}
		addSelectOption (_targetArray, _emptyText, _selectObj, _selected);
	}	

