function AjaxTree(tree_code, script_url, def_params, img_collapsed, img_expanded)
{
    this.tree_code = tree_code;
    this.script_url = script_url;
    this.def_params = def_params;
    this.img_collapsed = img_collapsed;
    this.img_expanded = img_expanded;
    this.selected_node = null;
}

AjaxTree.prototype.toggleNode = function(node_id)
{
    var element_UL = $(this.tree_code + 'TreeList_' + node_id);
    if (!element_UL)
    {
        var self_ref = this;
        var object = new HTTPObject(this.script_url, function (sender, response) { self_ref.ajaxCallback(sender, response) });
        var params = 'tree_action=tree_items' + '&tree_code=' + this.tree_code + '&node_id=' + node_id + this.def_params;
        object.doGetRequest(params);
        return;
    }
    var is_visible = (element_UL.style.display == 'block');
    element_UL.style.display = (is_visible)
        ? 'none'
        : 'block';
    element_IMG = $(this.tree_code + 'TreeIcon_' + node_id);
    element_IMG.src = (is_visible)
        ? this.img_collapsed
        : this.img_expanded;
    var tree_action = (is_visible)
        ? 'tree_collapse'
        : 'tree_expand';
    var object = new HTTPObject(this.script_url, null);
    var params = 'tree_action=' + tree_action + '&tree_code=' + this.tree_code + '&node_id=' + node_id + this.def_params;
    object.doGetRequest(params);
}

AjaxTree.prototype.ajaxCallback = function(sender, response)
{
    var tree_code = response.shift();
    var node_id = response.shift();
    var node_HTML = '';
    while (response.length)
        node_HTML += response.shift() + "\r\n";    
    var element_LI = $(tree_code + 'TreeNode_' + node_id);
    element_LI.innerHTML += node_HTML;
    var element_IMG = $(tree_code + 'TreeIcon_' + node_id);
    element_IMG.src = this.img_expanded;
}

AjaxTree.prototype.focusNode = function(sender, node_id)
{
    var tree_panel = $(this.tree_code + 'TreePanel');
    if (this.selected_node)
    {
        var node_item = $(this.tree_code + 'TreeItem_' + this.selected_node);
        node_item.className = 'NormalItem';
    }
    sender.className = 'SelectedItem';
    this.selected_node = node_id;
}

AjaxTree.prototype.focusNodeById = function(node_id)
{
    var node_item = $(this.tree_code + 'TreeItem_' + node_id);
    this.focusNode(node_item, node_id);
}
