﻿/************************************************
*	Menu.js - файл содержит методы для открытия и закрытия
*	окна с меню на основной странице узла.
*
************************************************/

// ширина окошка с меню в сложенном состоянии
var m_menu_width_closed = 15;
// ширина окошка с меню в открытом состоянии
var m_menu_width_opened = 150;

// Функция закрывает меню и скрывает область с деревом
// меню. Обычно вызывается после щелчка на основной
// области данных или потере фокуса окном с меню.
function CloseMenu()
{
	//alert( 'CloseMenu' );

	m_horz_frameset.cols = m_menu_width_closed.toString() + ',*';

	var frame = document.frames("frame_menu").document;
	var tree_panel = frame.all.item("m_panel");
	if (tree_panel != null && tree_panel.length == null)
	{
		tree_panel.style.display = "none";
		//tree_panel.style.width = "0px";
	}
}

// Функция открывает меню и показывает область с деревом
// меню. Обычно вызывается после щелчка на окне с меню.
function OpenMenu()
{
	//alert( 'OpenMenu' );
	
	m_horz_frameset.cols = m_menu_width_opened.toString() + ',*';
	
	var frame = document.frames("frame_menu").document;
	var tree_panel = frame.all.item("m_panel");
	if (tree_panel != null && tree_panel.length == null)
	{
		tree_panel.style.display = "inline";
		//tree_panel.style.width = m_menu_width_opened.toString() + "px";
	}

}

// функция не используется
function BindUrl()
{
	var frame = document.frames("frame_menu").document;
	
	var text_link = frame.all.item("m_text_link");
	var link = document.all("m_frame_main").contentWindow.location;
	
	if (text_link != null && text_link.length == null && link != null)
	{
		text_link.innerText = link.href;	//url;
	}
}

// метод возвращает ширину фрейма с меню.
// если какие-то объекты не инициализированы, то возвращается null
function GetMenuWidth()
{
	//var width = document.frames("frame_menu").document.body.clientWidth;
	
	//return parseInt( m_horz_frameset.cols.substr( 0, m_horz_frameset.cols.length - 2 ) );
	
	var frame = document.frames("frame_menu");
	if ( frame == null )
		return null;

	var body = frame.document.body;
	if ( body == null )
		return null;

	return body.clientWidth;
}

// метод скрывает окно с меню, если оно открыто
function CloseMenuFrame()
{
	// реакция на получение фокуса или щелчок в окне меню: если
	// frame "открыт", то его требуется скрыть до размера открытого
	// окна, иначе ничего не делать
	//if( event.srcElement.width == m_menu_width_opened )

	//alert( 'CloseMenuFrame' );

	var width = GetMenuWidth();
	if( width != null && width > m_menu_width_closed )
	{
		CloseMenu();
		m_frame_main.focus();
	}
}

// метод показывает окно с меню, если оно закрыто
function OpenMenuFrame()
{
	// реакция на получение фокуса или щелчок в окне меню: если
	// frame "скрыт", то его требуется уменьшить до размера закрытого
	// окна, иначе ничего не делать
	//if( event.srcElement.width == m_menu_width_closed )
	
	//alert( 'OpenMenuFrame' );

	var width = GetMenuWidth();
	//alert( 'OpenMenuFrame ' + width + ' ' + m_menu_width_closed );
	if( width != null && width + 2 == m_menu_width_closed )
	{
		OpenMenu();
		m_frame_menu.focus();
	}
}

// метод открывает страницу с описанием страницы и выбранного пункта
// меню после изменения ссылки в основной области страницы.
function OpenDescription()
{
	var frame = document.frames("frame_description").document;
	var link = document.all("m_frame_main").contentWindow.location;

	if ( link != null && frame != null )
	{
		var url = "Description.aspx?";
		var menu_id = GetQueryValue( link.search, "MenuID" );
		if ( menu_id != "" )
			url = url + "MenuID=" + menu_id + "&";
			
		frame.location.href = url + "Page=" + link.pathname;
		
		//не работает следующая строка
		//m_frame_menu.src = url + "Page=" + link.pathname;
		//alert( m_frame_menu.src );
		//alert( frame.location.href );
		
		/*alert( "hash = " + link.hash );
		alert( "host = " + link.host );
		alert( "hostname = " + link.hostname );
		alert( "href = " + link.href );
		alert( "pathname = " + link.pathname );
		alert( "port = " + link.port );
		alert( "protocol = " + link.protocol );*/
	}

	var new_title = document.frames("frame_main").document.title;
	if ( new_title != null && new_title.length > 0 )
		window.parent.document.title = new_title;
}

// метод возвращает значение параметра из строке запроса
// если параметр не найден, возвращается пустая строка
function GetQueryValue( query, name )
{
	var sStr = query;
	var nEnd, nBegin = sStr.indexOf( "&" + name + "=" );

	// требуется выполнить поиск имени, начиная со знака '&' или '?'
	if ( nBegin < 0 )
		nBegin = sStr.indexOf( "?" + name + "=" );

	if ( nBegin < 0 )
		return "";	// не найдено имя параметра

	nBegin += name.length + 2;

	if ( ( nEnd = sStr.indexOf( "&", nBegin ) ) < 0 )
		nEnd = sStr.length;

	return sStr.substring( nBegin, nEnd );
}

// метод вызывается при открытии страницы с описанием текущей страницы.
// увеличивает высоту нижней строки, если нужно отображать много текста.
function CorrectDesriptionSize()
{
	var frame = document.frames("frame_description").document;
	if ( frame == null )
		return;

	//var view = frame.all.item("m_view");
	var div_vert = frame.all.item("m_div_vert");
	var div_horz = frame.all.item("m_div_horz");

	if (div_vert != null && div_horz != null)
	{
		var frame_height = parseInt(frame.body.clientHeight + frame.body.clientTop + frame.body.style.border);
		var div_height = parseInt(div_horz.clientHeight - div_vert.clientHeight);
		var height = frame_height + div_height;

//		alert( 'height = ' + height );
//		alert( 'frame = ' + frame_height );
//		alert( 'div = ' + div_height);
		
		if ( height > 100 )
			height = 100;
			
		var old_height = parseInt( m_vert_frameset.rows.substr( 2 ) );
		if ( old_height != height )
			m_vert_frameset.rows = '*,' + height.toString();
	}
}

