///////////////////
//  Класс дерева //
///////////////////
function tree(name, id_nodes, img_opened, img_closed, is_save)
{
  var name = name;
  var id_nodes = id_nodes;
  var img_opened = img_opened;
  var img_closed = img_closed;
  var is_save = is_save;

  // Метод обрабатывает событие открытия и закрытия узла дерева.
  this.click = function(id)
  {
    var div = get_object(name + '_div_catalog_' + id);
    var image = get_object('img_catalog_' + id);
    if (div.style.display == 'none')
    {
   	  div.style.display = 'block';
      image.src = img_opened;
      if (is_save)
        cookie_add_value(name, id, true);
    }
    else
    {
  	  div.style.display = 'none';
      image.src = img_closed;
      if (is_save)
        cookie_delete_value_by_name(name, id);
    }
  }

  // Метод выполняет операции над всеми узлами (открытие, закрытие всех узлов).
  var collapse_all = function(action)
  {
    for (var i = 0; i < id_nodes.length; i++)
    {
      var id = id_nodes[i];
      var div = get_object(name + '_div_catalog_' + id);
      if (is_object(div))
      {
        var image = get_object('img_catalog_' + id);
        if (action == 'open')
        {
          image.src = img_opened;
          div.style.display = 'block';
        }
        else if (action == 'close')
        {
          image.src = img_closed;
          div.style.display = 'none';
        }
      }
    }
  }

  // Метод открывает все узлы дерева.
  this.open_all = function()
  {
    collapse_all('open');
  }

  // Метод закрывает все узлы дерева.
  this.close_all = function()
  {
    collapse_all('close');
  }

  // Метод осуществляет выбор текущего и дочерних узлов дерева (включая вложенность).
  this.multiple_select = function(name)
  {
    var obj_cur = get_object(name);
    objects = document.getElementsByTagName('input');
  	for (var i = 0; i < objects.length; i++)
    {
      obj = objects[i];
      if (obj.type == 'checkbox' && obj != obj_cur && obj.lang == name)
      {
        obj.checked = obj_cur.checked;
        tree_multiple_select(obj.id);
      }
    }
  }
}
