/**
 * @include  "d:/www/_common/js/js_common.js"
 * @include  "d:/www/_common/js/ajaqs_sender.js"
 * @include  "d:/www/_common/js/events.js"
 * @include  "_p_messages.js"
 * @include  "_p_object.js"
 * @include  "_p_scripts.js"
 */

/**
 * 
 * @type HTMLSelectElement
 */
var poTreeTargetCBO = null;

/**
 * 
 * @param {Event} e
 */
function tree_toggle(e)
{
    e = e || window.event;
    var clickedElem = e.target || e.srcElement;

    // Node, на который кликнули
    var node = clickedElem.parentNode

    // определить новый класс для узла
    var newClass = tree_hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen'
    // заменить текущий класс на newClass
    // регексп находит отдельно стоящий open|close и меняет на newClass
    var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/;
    node.className = node.className.replace(re, '$1'+newClass+'$3');
}

function tree_hasClass(elem, className)
{
    return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className);
}

/**
 * после выбора подгруппы подставляет ее в комбо и закрывает "окно" с деревом групп/подгрупп
 *
 * @param {HTMLAnchorElement} toLink - ссылка на ссылку по которой кликнули
 * @param {Number} tnID - ID подгруппы
 * @return void
 */
function tree_sub_select(toLink, tnID)
{
    var loCBO = id('cboPSub');

    loCBO.backup_value = tnID;
    loCBO.backup_name  = toLink.innerHTML;

    pcGroupName = toLink.parentNode.parentNode.parentNode.previousSibling.innerHTML;

    id('txtPSub').value = tnID;

    close_tree_window();

    var loTema = id('txtPTema');
    if (loTema) loTema.focus();
}

/**
 * после выбора подгруппы переходит к ней
 *
 * @param {HTMLAnchorElement} toLink - ссылка на ссылку по которой кликнули
 * @param {Number} tnID - ID подгруппы
 * @return void
 */
function tree_sub_jump(toLink, tnID)
{
	close_tree_window();
	window.location = './sub-jump/' + tnID +  '/';
}

/**
 * открывает "окно" с деревом групп/подгрупп для выбора
 *
 * @param mixed e - или объект событие, или ссылка на объект который вызывал дерево
 * @return void
 */
function open_tree_window(e)
{
	e = e || window.event;
	if(!e.tagName)
	{
		e = e || window.event;
		var loCBO = e.target || e.srcElement;
	}
	else var loCBO = e;

	poTreeTargetCBO = loCBO;

	var loDiv = id('group_tree_window');

    loCBO.backup_value = loCBO.options[0].value;
    loCBO.backup_name  = loCBO.options[0].innerHTML;
    loCBO.length = 0;

    var laPos = KL_getPageOffset(loCBO);

    var lnTop = laPos[1];
    var lnLeft = laPos[0];
	var lnWidth = (loCBO.clientWidth < p_obj.treeW) ? p_obj.treeW : loCBO.clientWidth;

    loCBO.backup_Display = loCBO.style.display;

	loDiv.style.display = "block";
	loDiv.style.top = lnTop + 'px';
	loDiv.style.left = lnLeft + 'px';
	loDiv.style.width = lnWidth + 'px';
	loDiv.style.minHeight = p_obj.treeH + 'px';
    loDiv.style.height = 'auto';

    loCBO.style.display = 'none';
}

/**
 * закрывает "окно" с деревом групп/подгрупп
 *
 * @return void
 */
function close_tree_window()
{
	poTreeTargetCBO.style.display = poTreeTargetCBO.backup_Display;

	poTreeTargetCBO.length = 0;
	poTreeTargetCBO.options[0] = new Option(poTreeTargetCBO.backup_name, poTreeTargetCBO.backup_value);
	poTreeTargetCBO.selectedIndex = 0;
	poTreeTargetCBO.value = poTreeTargetCBO.backup_value;

    hide('group_tree_window');
}

