// Управление объектами сортировки
var sortimg = new Image();
sortimg.src = "img/btn.sort.up.jpg";
var searchimg = new Image();
searchimg.src = "img/btn.search.up.jpg";
// Список (массив) открытых (используемых) объектов сортировки
var sortingElements = {};


function Subsort(strid)
{
	this.id = strid;
	this.container = null;
	this.subcontainer = null;
	this.subcontainerinner = null;
	this.textnode = null;
	this.addon = "sorting";
	
	this.Init();
}


Subsort.prototype.Init = function()
{
	this.container = document.getElementById("Container" + this.id);
	this.subcontainer = document.getElementById("Sub" + this.id);
	this.textnode = document.getElementById(this.id);
	this.plug = document.getElementById("Plug" + this.id);
	if (!this.container || !this.subcontainer || !this.textnode || !this.plug)
		return;
	var tables = this.subcontainer.getElementsByTagName("table");
	if (tables && tables.length > 0)
		this.subcontainerinner = tables[0];
	if (this.container.getAttribute("addon"))
		this.addon = this.container.getAttribute("addon");
	// Устанавливаем позицию белой полоски-заглушки в выпадающем объекте
	this.SetPlugPlacement();
	AddListener("click", this.container, this.OnSortClick);
}


Subsort.prototype.SetPlugPlacement = function()
{
	if (!this.subcontainer || this.subcontainer.style.display != "block")
		return;
	// Устанавливаем позицию белой полоски-заглушки в выпадающем объекте
	var containerParent = this.container;
	var containerOffset = this.container.offsetLeft;
	while (containerParent.parentNode)
	{
		containerParent = containerParent.parentNode;
		if (containerParent == this.subcontainer.parentNode)
			break;
		containerOffset += containerParent.offsetLeft;
	}
	// Изменяем позицию выпадающего списка (отступ слева).
	// Ширина контейнера this.subcontainer равна ширине ее контейнера (100%), поэтому
	// измерять ширину слудует у таблицы в элементе this.subcontainer (this.subcontainerinner)
	if (this.subcontainerinner)
	{
		var positionDifference = containerOffset + this.container.offsetWidth - this.subcontainer.offsetLeft - this.subcontainerinner.offsetWidth;
		if (positionDifference > 0)
		{
			this.subcontainer.style.marginLeft = positionDifference + "px";
		}
	}
	// Изменяем позицию полосы-заглушки
	if (containerParent == this.subcontainer.parentNode)
	{
		// Так как ширина самого контейнера (div)может быть равна 100%, то есть равна
		// выпадающему контейнеру, тослудет определять ширину дочернего элемента
		// (table или иного)
		var ch = null;
		var childrenColl = this.container.childNodes;
		for (var i = 0; i < childrenColl.length; i++)
			if (childrenColl[i].nodeType == 1)
			{
				ch = childrenColl[i];
				break;
			}
		if (ch)
		{
			this.plug.style.marginLeft = (containerOffset - this.subcontainer.offsetLeft + 1) + "px";
			this.plug.style.width = (ch.offsetWidth - 2) + "px";
		}
	}
}


Subsort.prototype.OnSortClick = function(e)
{
	if (!e)
		e = window.event;
	var target = e.srcElement;
	if (!target)
		target = e.target;
	// Свойство this ссылается не на объект Sybsort, а обычно на элемент, в котором
	// произошло событие.
	CloseElement(target);
}

function CloseElement(target)
{
	if (!target)
		return;
	// Ищем контейнер:
	var container = target;
	while (container.parentNode)
	{
		if (container.className && container.className.indexOf("sort_container") != -1 && container.getAttribute("id") && container.getAttribute("id").indexOf("Container") == 0)
			break;
		container = container.parentNode;
	}
	if (!container)
		return;
	var addon = "sorting";
	if (container.getAttribute("addon"))
		addon = container.getAttribute("addon");
	var addonimage = addon.replace(/ing$/, "");
	var id = container.getAttribute("id").replace("Container", "");
	var tables = container.getElementsByTagName("table");
	var images = container.getElementsByTagName("img");
	if (!tables || tables.length == 0 || !images || images.length == 0)
		return;
	var maintable = tables[0];
	var sortimg = images[0];
	var textnode = document.getElementById(id);
	var subcontainer = document.getElementById("Sub" + id);
	if (!subcontainer || !textnode)
		return;
	// Добавление в глобальный список элемента управления
	if (window[id] && window[id].SetPlugPlacement)
	{
		if (!sortingElements[id])
			sortingElements[id] = {node:container, object:window[id], opened:false};
	}
	// Закрыт
	if (maintable.className == "tbl_" + addon)
	{
		container.className = "sort_container_expand";
		maintable.className = "tbl_" + addon + "_expand";
		textnode.className = addon + "_up";
		subcontainer.style.display = "block";
		sortimg.src = "img/btn." + addonimage + ".up.jpg";
		// При открытии элемента необходимо закрыть все открытые элементы
		for (var strname in sortingElements)
		{
			if (sortingElements[strname].node && strname != id && sortingElements[strname].opened === true)
				CloseElement(sortingElements[strname].node);
		}
		if (sortingElements[id])
			sortingElements[id].opened = true;
	}
	// Открыт
	else
	{
		container.className = "sort_container";
		maintable.className = "tbl_" + addon;
		textnode.className = addon;
		subcontainer.style.display = "none";
		sortimg.src = "img/btn." + addonimage + ".jpg";
		if (sortingElements[id])
			sortingElements[id].opened = false;
	}
	// Перерисовка полоски-заглушки
	if (window[id] && window[id].SetPlugPlacement)
		window[id].SetPlugPlacement();
	InvalidateShadowSize();
}
