/**
 * История посещений панели. Отвечает за показ ссылок на историю и переход по ним
 *
 * @param Pannel ссылка на панель
 *
 * @extends Element_Abstract
 */
function Pannel_History(pannel)
{
    Pannel_History.superclass.constructor.call(this);
    
    /**
     * Ссылка на предыдщую запись в истории
     *
     * @var DOM Element 
     */
    this._prevLink = Rup.create('a');
    this._prevLink.style.border = '';
    
    /**
     * Ссылка на следующую запись в истории
     * 
     * @var DOM Element 
     */
    this._nextLink = Rup.create('a');
    this._nextLink.style.border = '';
    
    /**
     * Список Root_Node истории
     *
     * @var Array
     */
    this._rootNodes = [];
    
    /**
     * Текущая позиция в списке this._rootNodes
     *
     * @var int
     */
    this._curPos = 0;
    
    /**
     * Ссылка на панель
     *
     * @var Pannel
     */
    this._pannel = pannel;
    
    /**
     * Количесво загруженных узлов дерева, хранящихся в истории (когда превышено - загруженные узлы начинают очищаться)
     *
     * @var int
     */
    this._historyLength = 10;
    
    var oMainDiv = Rup.create('div');
    
    this._setBaseElement(oMainDiv);
    
    oMainDiv.appendChild(this._prevLink);
    oMainDiv.appendChild(this._nextLink);
    
    var instance = this;
    
    this._prevLink.innerHTML = '';
    this._prevLink.href = "#";
    this._prevLink.onclick = function()
    {
        instance.goPrev();
        return false;
    }
    
    this._nextLink.innerHTML = '';
    this._nextLink.href = "#";
    this._nextLink.onclick = function()
    {
        instance.goNext();
        return false;
    }
    
    this._checkLinks();
}

Rup.extend(Pannel_History, Element_Abstract);

/**
 * Добавляет в историю новый корневой узел дерева. Также рендерит этот узел в панель
 *
 * @param Root_Node
 */
Pannel_History.prototype.add = function( rootNode )
{
    /**
     * Если история еще пустая
     */
    if( this._rootNodes.length == 0 )
    {
        this._rootNodes.push( rootNode );
        this._curPos = 0;
        rootNode.render(this._pannel);
        rootNode.open(this._pannel);
        this._checkLinks();
    }
    /**
     * Если не пустая
     */
    else
    {
        this._rootNodes = this._rootNodes.splice(0, this._curPos + 1);
        this._rootNodes.push( rootNode );
        this.goNext();
    }
}

/**
 * Переход на следующую запись в истории
 */
Pannel_History.prototype.goNext = function()
{
    if( this._curPos + 1 < this._rootNodes.length )
    {
        this._curPos++;
        this._rootNodes[ this._curPos ].render(this._pannel);
        this._rootNodes[ this._curPos ].open();
    }
    
    
    /**
     * Далее мы проверяем, не нужно ли очистить старые корневые узлы
     */
    var j = this._curPos - this._historyLength;
    
    if( this._rootNodes[ j ] && this._rootNodes[ j ].loaded() )
    {
        this._rootNodes[ j ].clear();
    }
    
    this._checkLinks();
}

/**
 * Переход на следующую запись в истории
 */
Pannel_History.prototype.goPrev = function()
{
    if( this._curPos != 0 )
    {
        this._curPos--;
        this._rootNodes[ this._curPos ].render(this._pannel);
        this._rootNodes[ this._curPos ].open();
    }
    
    /**
     * Далее мы проверяем, не нужно ли очистить старые корневые узлы
     */
    var j = this._curPos + this._historyLength;
    
    if( this._rootNodes[ j ] && this._rootNodes[ j ].loaded() )
    {
        this._rootNodes[ j ].clear();
    }
    
    this._checkLinks();
}

/**
 * Устанавливает нужные ссылки для перехода по истории
 */
Pannel_History.prototype._checkLinks = function()
{
    if( this._curPos != 0 )
    {
        this._prevLink.style.display = '';
        this._prevLink.innerHTML = '<img style="border: none;" alt="<" src="/Images/backk.jpg" title="' + (this._rootNodes[ this._curPos - 1 ].title || 'Назад') + '" />';
                                    //"&lt;&lt; " + (this._rootNodes[ this._curPos - 1 ].title || 'prev');
    }
    else
    {
        this._prevLink.innerHTML = '';
        this._prevLink.style.display = 'none';
    }
    
    if( this._curPos + 1 < this._rootNodes.length )
    {
        this._nextLink.innerHTML = '<img style="border: none;" alt="<" src="/Images/frwk.jpg" title="' + (this._rootNodes[ this._curPos + 1 ].title || 'Вперед') + '" />';
                                    //(this._rootNodes[ this._curPos + 1 ].title || 'next') + " &gt;&gt;";
        this._nextLink.style.display = '';
    }
    else
    {
        this._nextLink.innerHTML = '';
        this._nextLink.style.display = 'none';
    }
}