/* *** = toolbar.js =================================================== *** *
 * ***                                                                  *** *
 * ***               Copyrighted as an unpublished work.                *** *
 * ***          Copyright (c) 1988-2000, 2001, by Igor Fate.            *** *
 * ***                      All rights reserved.                        *** *
 * ***                                                                  *** *
 * *** ========================================== Programmer Id: Fate = *** */
/* ***
 * ***	Author:	Igor Fate
 * ***	fate@belgtts.ru
 * ***	*/

@set @used = true;

/* ***	Toolbar	- функция конструктора панели инструментов;
 * ***	параметры:
 * ***		name	- [in] наименование панели инструментов;
 * ***	*/
function Toolbar ( name )
{
	this.toolbar = new Array ();
	this.name = name;
	return this;
}

/* ***	Toolbar.liveImage	- функция конструктора изображения;
 * ***	параметры:
 * ***		uri	- [in] uri (идентификатор ресурса) изображения;
 * ***	*/
Toolbar.liveImage = function ( uri )
{
	this.superior = Image;
	this.superior ();
	this.src = uri;
	this.cargo = 0;
	return this;
} 
/* ***	прототипом объекта изображения является конструктор объекта Image;
 * ***	принципиально, можно выкрутиться и используя функцию Image.create,
 * ***	так, как это делается когда определен флаг @used;
 * ***	*/
Toolbar.liveImage.prototype = new Image;


/* ***	Toolbar.addItem	- добавить элемент и определить для него дополнительные атрибуты;
 * ***	параметры:
 * ***		a	- [in] ссылка на тот элемент, к которому привязываются обработчики;
 * ***		img	- [in] ссылка на элемент изменяемого изображения;
 * ***		uri	- [in] универсальный идентификатор изображения;
 * ***	*/
Toolbar.prototype.addItem = function ( a, img, uri )
{
	if (a) {
	@if (!@used)
		a.setAttribute ("ally", new Toolbar.liveImage (uri));
	@else
		var tmp;
		a.setAttribute ("ally", tmp = Image.create ());
		tmp.src = uri;
		tmp.cargo = 0;
	@end
		a.setAttribute ("one", img);

		/* ***	здесь, функция show используется для отображения скрытой подсказки;
		 * ***	код функции должен определяться пользователем;
		 * ***	*/
		a.onmouseover = function ()
		{
			var one = this.getAttribute ("one");
			var show;
			if (one) {
				this.getAttribute ("ally").cargo = one.src;
				one.src = this.getAttribute ("ally").src;
				if ((show = this.getAttribute ("show")) != null)
					 show (this);
			} else
				;
			return true;
		}
		if (arguments.length >= 4)
			a.setAttribute ("show", typeof arguments[3] == "function" ? arguments[3] : null);
		else
			a.setAttribute ("show", function ( element )
			{
				if (element.children.length) {
					if (element.children (0).tagName == "IMG")
						top.status = element.children (0).alt ? element.children (0).alt : "";
					else
						top.status = "";
				} else
					top.status = element.title ? element.title : "";
				return true;
			});

		/* ***	здесь, функция hide используется для сокрытия отображенной подсказки;
		 * ***	код функции должен определяться пользователем;
		 * ***	*/
		a.onmouseout = function ()
		{
			var one = this.getAttribute ("one");
			var hide;
			if (one) {
				one.src = this.getAttribute ("ally").cargo;
				if ((hide = this.getAttribute ("hide")) != null)
					 hide (this);
			} else
				;
			return true;
		}
		if (arguments.length >= 5)
			a.setAttribute ("hide", typeof arguments[4] == "function" ? arguments[4] : null);
		else
			a.setAttribute ("hide", function ( element )
			{
				return (top.status = ""), true;
			});

		/* ***	добавляем ссылку на активный элемент в список элементов;
		 * ***	когда будем уничтожать атрибуты, будем использовать
		 * ***	элементы этого списка;
		 * ***	*/
		this.toolbar[this.toolbar.length] = a;
		return a;
	} else
		return null;
}
/* ***	Toolbar.removeItem	- удалить дополнительные атрибуты элемента;
 * ***	параметры:
 * ***		a	- [in] ссылка на элемент;
 * ***	*/
Toolbar.prototype.removeItem = function ( a )
{
	if (a) {
		a.removeAttribute ("ally");
		a.removeAttribute ("one");

		a.removeAttribute ("show");
		a.onmouseover = null;
		a.removeAttribute ("hide");
		a.onmouseout = null;
	} else
		;
}

/* ***	Toolbar.identify	- идентификация активной панели инструментов;
 * ***
 * ***	функция возвращает реальное наименование изображения расположенного
 * ***	на созданной ранее панели инструментов;
 * ***	параметры:
 * ***		id	- [in] наименование или идентификатор изображения;
 * ***	*/
Toolbar.prototype.identify = function ( id )
{
	return id ? (this.name + "(" + id + ")") : this.name;
}

/* ***	Toolbar.destroy	- функция деструктора созданного объекта;
 * ***	функция всегда возвращает значение true;
 * ***	*/
Toolbar.prototype.destroy = function ()
{
	delete this.name;
	for (var i = 0; i < this.toolbar.length; i++) {
		this.removeItem (this.toolbar[i]);
		delete this.toolbar[i];
	}

	delete this.liveImage;
	return true;
}
