/**
 * 天赋的视图对象。
 * @create   2004-9-29 source0
 * @author   source0 source0@hotmail.com
 * @copyright 版权所有（C） 2004  source0
 *                这一程序是自由软件，你可以遵照自由软件基金会出版的GNU通用
 *            公共许可证条款来修改和重新发布这一程序。或者用许可证的第二版，
 *            或者（根据你的选择）用任何更新的版本。
 *                发布这一程序的目的是希望它有用，但没有任何担保。甚至没有
 *            适合特定目的的隐含的担保。更详细的情况请参阅GNU通用公共许可证。
 *                你应该已经和程序一起收到一份GNU通用公共许可证的副本。如果
 *            还没有，写信给：
 *                The Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
 *                MA02139, USA
 */

/**
 * 天赋的视图对象。
 * @param owner CTalentClass 实例。持有此视图的天赋类别实例。
 * @param model CTalentModel 实例。天赋模型对象实例。
 * @param icon 图标文件地址。
 * @param col 该天赋在显示时所在的列（所在行由天赋的层次决定）。
 */
function CTalentView(owner, model, icon, col){
    this.model = model;
    this.icon = icon;
    this.column = col;

    var owner = owner;
    var currentRank = 0;
    var listeners = new Array();

    /**
     * 当前天赋是否可用。
     * @return 如果当前天赋的所有前提条件都已经满足，则返回 true ，否则返回 false。
     */
    this.isValid = function(){
        /* 首先必须达到该层所需要的点数。 */
        if ( owner.getAmount() < 5 * this.model.tier ){
            return false;
        }

        /* 所有的所需天赋必须已经达到要求。 */
        var reqs = this.model.requirements;
        for( var key in reqs){
            var reqView = owner.getTalentView(reqs[key].talent);
            if ( reqView.getRank() < reqs[key].rank ){
                return false;
            }
        }
        return true;
    }
    /**
     * 升级。如果本天赋的前提条件尚未达到，或者已经达到最大级别，不做任何操作。
     * @return 升级后的级别。
     */
    this.update = function(){
        if ( this.isValid() && ( currentRank < this.model.data.maxRank )){
            currentRank++;
            owner.talentUpdated(this);
        }
        return currentRank;
    }
    /**
     * 撤销本天赋的升级。只降一级。检查引用天赋等由天赋系对象完成。
     * @create 2004-10-15 source0
     */
    this.undoUpdate = function()
    {
        if ( currentRank > 0){
            currentRank--;
        }
    }
    /**
     * 将本天赋直接升级到指定级别，不考虑前提条件。用于解析配置文件时。
     * @rank 需要升级的级别。如果高于允许的最高级别，则只升级到最高级别。
     * @create 2004-10-15 source0
     */
    this.init = function(rank){
        currentRank = Math.min(rank, this.model.data.maxRank);
        owner.talentUpdated(this, currentRank);
    }
    /**
     * 重置。
     * @return 返回回收的天赋点数。
     */
    this.reset = function(){
        var rt = currentRank;
        currentRank = 0;
        return rt;
    }
    /**
     * 得到当前级别。
     * @return 当前天赋的级别。
     */
    this.getRank = function(){
        return currentRank;
    }
    this.toString = function(){
        return "CTalentView["
            + "天赋=" + this.model + ", "
            + "图标=\"" + this.icon + "\","
            + "位置=\"" + this.column + "\","
            + "当前级别=" + currentRank
            + "]";
    }
}