/**
 * Корневой элемент дерева
 *
 * @extends Tree_Node_Abstract
 *
 * @param Object
 */
function Root_Node(params)
{
    Root_Node.superclass.constructor.call(this, params);
    
    /**
     * Title нода. Используется для истории. Находится в дочернем ноде типа Title_Node или берется из контента
     *
     * @var String
     */
    this.title = '';
    
    /**
     * Список дополнительных корневых узлов, добавленных в этот узел
     * 
     * @var Array
     */
    this._rootNodes = [];
    
    /**
     * Элемент для хранения дополнительных корневых узлов в то время, как контент этого узла уничтожен
     *
     * @var DOM Element
     */
    this._rootNodesTmp = Rup.create('div');
    
    var oMainDiv = Rup.create('div');
    var oContainerDiv = Rup.create('div');
    
    this._setBaseElement(oMainDiv);
    this._setContainerElement(oContainerDiv);
    
    oMainDiv.appendChild(this._loadingElement);
    oMainDiv.appendChild(oContainerDiv);
    
    
    this._hideContainer();
}

Rup.extend(Root_Node, Tree_Node_Abstract);

/**
 * Перегруженная функция-обработчик ответа сервера. Перегружена, чтобы еще при загрузке
 * выдернуть TITLE из дочерних нодов и, если существуют дополнительных корневые ноды - их загрузить
 */
Root_Node.prototype._loadingHandler = function (xml)
{
    Root_Node.superclass._loadingHandler.call(this, xml);
    
    for( var i = 0; i < this._childs.length; i++ )
    {
        var oChild = this._childs[i];
        if( oChild instanceof Title_Node )
        {
            this.title = oChild.title;
            break;
        }
    }
    
    if( this.title == '' )
    {
        for( var i = 0; i < this._childs.length; i++ )
        {
            var oChild = this._childs[i];
            if( oChild instanceof Text_Node )
            {
                var sHTML = oChild.getContent();
                var sText = sHTML.replace(/<[^>]*>/gi,'');
                
                this.title = sText.substr('0', '30');
                if( this.title.length < sText.length )
                {
                    this.title += '...';
                }
                break;
            }
        }
    }
    
    for( var i = 0; i < this._rootNodes.length; i++ )
    {
        Root_Node.superclass.appendChild.call(this, this._rootNodes[i]);
        this._rootNodes[i].open();
    }
}

/**
 * Перегрузили для того, чтобы если добавляемый элемент Root_Node - записать его в список дополнительных корневых узлов
 */
Root_Node.prototype.appendChild = function(element)
{
    Root_Node.superclass.appendChild.call(this, element);
    
    if( element instanceof Root_Node )
    {
        this._rootNodes.push(element);
        element.open();
    }
}

Root_Node.prototype.clear = function()
{
    for( var i = 0; i < this._rootNodes.length; i++ )
    {
        this._rootNodesTmp.appendChild(this._rootNodes[i].dom());
        this._rootNodes[i].clear();
    }
    Root_Node.superclass.clear.call(this);
}