/**
 * 对页面显示进行控制的函数。
 * @create   2004-09-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
 */


/* 当前选择的天赋系对象。 */
var currentTCVIndex = 0;

var RESULT_FORMAT_STATE = 10;
var RESULT_FORMAT_TEXT = 20;
var RESULT_FORMAT_TEMPLATE = 30;

/* 当前选择的输出格式。 */
var currentResultFormat = RESULT_FORMAT_STATE;

/**
 * 鼠标移动到某类天赋的总点数上时的处理函数，此时显示该类天赋已经添加点数的所有技能的列表。
 * 为了加快网站上的反应速度，此功能被注销。
 * @param id 天赋类的ID。
 * @param e 鼠标事件（仅对mozilla）。
 */
function onMouseOverTalentClass(id, e){
}
/**
 * 对XML的数据进行转换。
 * @param xmlDoc dom对象。
 */
function parseXML(xmlDoc)
{
    initView(decodeRole(xmlDoc));
}

/**
 * 将天赋信息显示为HTML的函数。
 * @param role 职业对象。
 */
function initView(role)
{
	var bAddCode = false;
	if(CURRENT_ROLE == null)
		bAddCode = true;
    CURRENT_ROLE = role;
	if(bAddCode == true)
	{
		document.getElementById("TALENT_CLASS_AREA_TIPS").style.display = "none";
		document.getElementById("RESULT_AREA_TIPS").style.display = "none";
		document.getElementById("VIEW_ALL_TALENT_CLASS_IN_STATE").innerText = "状态";
		document.getElementById("VIEW_ALL_TALENT_CLASS_IN_TEXT").innerText = "TEXT";
		document.getElementById("VIEW_ALL_TALENT_CLASS_TEMPLATE").innerText = "模板";
		if(infoTabPane != null)
			setInnerHTML(document.getElementById("SELECT_RESULT_FORMAT_CONTAINER"), infoTabPane.getHtml());
	}
    var classes = role.talentClasses;
    for(var i = 0; i < classes.length; i++) {
        TALENT_CLASS_VIEWS[i] = new CTalentClassView(classes[i]);
        document.getElementById("CHANGE_TALENT_CLASS_" + i).value = " " + TALENT_CLASS_VIEWS[i].model.name + " ";
        document.getElementById("TALENT_CLASS_NAME_" + i).firstChild.nodeValue = TALENT_CLASS_VIEWS[i].model.name + "天赋";
    }
	window.setTimeout("showProcess('刷新已分配点数信息', 'refreshTalentPointInfo()');",1);
    window.setTimeout("showProcess('显示当前加点结果', 'showResult()');",50);
    window.setTimeout("showProcess('格式化天赋显示区', 'initTalentClassArea()');",100);
    window.setTimeout("showProcess('显示指定天赋', 'showTalentClass()');",150);
    window.setTimeout("hideProcess();",200);
}

function initTalentClassArea(){
    for(var i = 0; i < TALENT_CLASS_VIEWS.length; i++) {
        setInnerHTML(document.getElementById("TALENT_CLASS_AREA_" + i), TALENT_CLASS_VIEWS[i].getHtml());
    }
}
/* 给天赋图标和级别定位。 */
function initTalentIconAndRank(){
    locateTalent(TALENT_CLASS_VIEWS[0]);
    locateTalentRank(TALENT_CLASS_VIEWS[0]);
}

/**
 * 创建用于状态显示的信息文本。
 * @create 2004-10-23 source0
 */
function createStateResultArea(){
	var sHTML = "";
	sHTML += "<table width='100%' height='100%' border=0>";
	sHTML += "<tr><td align=center colspan=2><input type='image' src='common/image/button/copy.gif' class='copyButton' onClick='CopyString()'></td></tr>";
	sHTML += "<tr><td align=center colspan=2>&nbsp;</td></tr>";
	sHTML += "<tr>";
	sHTML += "<td>";
	sHTML += "<span class='commonTextDesc' id='TALENT_CLASS_NAME_0'>天赋1</span>";
	sHTML += "<span class='commonTextDesc'>：</span>";
	sHTML += "<span id='TALENT_CLASS_AMOUNT_0' class='talentRankValueValid'>0</span>";
	sHTML += "&nbsp;";
	sHTML += "<span id='RESET_TALENT_CLASS_BUTTON_0' value='[还原]' onMouseDown='mouseDownButtonLink(this.id);' onMouseUp='mouseUpButtonLink(this.id);' onClick='resetTalentClass(0);' class='ButtonLink'>[还原]</span>";
	sHTML += "</td>";
	sHTML += "<td>";
	sHTML += "<span class='commonTextDesc'>用去点数：</span>";
	sHTML += "<span id='USED_TALENT_POINT' class='talentRankValueValid'>0</span>";
	sHTML += "</td>";
	sHTML += "</tr>";
	sHTML += "<tr>";
	sHTML += "<td>";
	sHTML += "<span class='commonTextDesc' id='TALENT_CLASS_NAME_1'>天赋2</span>";
	sHTML += "<span class='commonTextDesc'>：</span>";
	sHTML += "<span id='TALENT_CLASS_AMOUNT_1' class='talentRankValueValid'>0</span>";
	sHTML += "&nbsp;";
	sHTML += "<span id='RESET_TALENT_CLASS_BUTTON_1' value='[还原]' onMouseDown='mouseDownButtonLink(this.id);' onMouseUp='mouseUpButtonLink(this.id);' onClick='resetTalentClass(1);' class='ButtonLink'>[还原]</span>";
	sHTML += "</td>";
	sHTML += "<td>";
	sHTML += "<span class='commonTextDesc'>达到等级：</span>";
	sHTML += "<span id='REQUIRE_ROLE_RANK' class='roleRankValid'>0</span>";
	sHTML += "</td>";
	sHTML += "</tr>";
	sHTML += "<tr>";
	sHTML += "<td>";
	sHTML += "<span class='commonTextDesc' id='TALENT_CLASS_NAME_2'>天赋3</span>";
	sHTML += "<span class='commonTextDesc'>：</span>";
	sHTML += "<span id='TALENT_CLASS_AMOUNT_2' class='talentRankValueValid'>0</span>";
	sHTML += "&nbsp;";
	sHTML += "<span id='RESET_TALENT_CLASS_BUTTON_2' value='[还原]' onMouseDown='mouseDownButtonLink(this.id);' onMouseUp='mouseUpButtonLink(this.id);' onClick='resetTalentClass(2);' class='ButtonLink'>[还原]</span>";
	sHTML += "</td>";
	sHTML += "<td>";
	sHTML += "<span id='RESET_ALL_TALENT_CLASS' value='[全部还原]' onMouseDown='mouseDownButtonLink(this.id);' onMouseUp='mouseUpButtonLink(this.id);' onClick='resetAllTalentClass();' class='ButtonLink'>[全部还原]</span>";
	sHTML += "</td>";
	sHTML += "</tr>";
	sHTML += "<tr><td height='100%' colspan=2>";
	sHTML += "&nbsp;";
	sHTML += "</td></tr>";
	sHTML += "<tr><td align=center colspan=2>";
	sHTML += "<span class='ButtonLink' onclick='window.open(\"http://www.wowtc.com/bbs/read.php?tid=2749&page=e#a\",\"_blank\")'>问题反馈（Bug Report）</span>";
	sHTML += "</td></tr>";
	sHTML += "</table>";
    var resultArea = document.getElementById("RESULT_AREA_IN_STATE");
    setInnerHTML(resultArea, sHTML);
    resultArea.style.width = "100%";
    resultArea.style.height = "100%";
}
/**
 * 显示指定的天赋类视图。
 * @param index 天赋类的编号。
 * @create source0
 */
function showTalentClass(index){
	if(CURRENT_ROLE == null)
		return;
    hideToolTipArea();
    if ( null == index ){
        // 切换一下状态，让所有的图标都被下载回来。
		index = 0;
        for ( var i = 0; i < 3; i++ ){
             document.getElementById("TALENT_CLASS_AREA_" + i).style.display = '';
        }
        for ( var i = 0; i < 3; i++ ){
             document.getElementById("TALENT_CLASS_AREA_" + i).style.display = 'none';
        }
    }
    for ( var i = 0; i < 3; i++ ){
        if ( i == index ){
            document.getElementById("TALENT_CLASS_AREA_" + i).style.display = '';
        } else {
            document.getElementById("TALENT_CLASS_AREA_" + i).style.display = 'none';
        }
    }

    locateTalent(TALENT_CLASS_VIEWS[index]);
    locateTalentRank(TALENT_CLASS_VIEWS[index]);
    currentTCVIndex = index;
    document.getElementById("CHANGE_TALENT_CLASS_0").className = 'tabButton';
    document.getElementById("CHANGE_TALENT_CLASS_1").className = 'tabButton';
    document.getElementById("CHANGE_TALENT_CLASS_2").className = 'tabButton';
    document.getElementById("CHANGE_TALENT_CLASS_" + currentTCVIndex).className = 'selectedTabButton';
    selectTabByContentId("CHANGE_TALENT_CLASS_" + currentTCVIndex);
}
function setSelectedResultFormatCtl(selectedId){
    document.getElementById("VIEW_ALL_TALENT_CLASS_IN_STATE").className = 'tabButton';
    document.getElementById("VIEW_ALL_TALENT_CLASS_IN_TEXT").className = 'tabButton';
    document.getElementById("VIEW_ALL_TALENT_CLASS_TEMPLATE").className = 'tabButton';
    document.getElementById(selectedId).className = 'selectedTabButton';
}


/**
 * 显示结果。格式取决于当前选中的格式。
 * @create source0
 */
function showResult(){
    hideResult();
    if (RESULT_FORMAT_STATE == currentResultFormat){
        showResultInState();
		document.getElementById("VIEW_ALL_TALENT_CLASS_IN_STATE").click();
    } else if (RESULT_FORMAT_TEXT == currentResultFormat){
        showResultInText();
		document.getElementById("VIEW_ALL_TALENT_CLASS_IN_TEXT").click();
    } else if(RESULT_FORMAT_TEMPLATE == currentResultFormat){
        showResultTempalte();
		document.getElementById("VIEW_ALL_TALENT_CLASS_TEMPLATE").click();
	} else {
		currentResultFormat = RESULT_FORMAT_STATE;
        showResultInState();
		document.getElementById("VIEW_ALL_TALENT_CLASS_IN_TEXT").click();
	}
}
function hideResult(){
    document.getElementById("RESULT_AREA_IN_STATE").style.display = 'none';
    document.getElementById("RESULT_AREA_IN_TEXT").style.display = 'none';
    document.getElementById("RESULT_AREA_TEMPLATE").style.display = 'none';
}
/**
 * 以文本的方式显示当前状态情况。
 * @create source0
 */
function showResultInState(){
	if(CURRENT_ROLE == null)
		return;
    hideResult();
    currentResultFormat = RESULT_FORMAT_STATE;
    setSelectedResultFormatCtl("VIEW_ALL_TALENT_CLASS_IN_STATE");
    var resultArea = document.getElementById("RESULT_AREA_IN_STATE");
    var width = 340;
    var height = 400;
    resultArea.style.display = '';
    resultArea.style.width = "100%";
    resultArea.style.height = "100%";
}
/**
 * 以文本的方式显示当前加点情况。
 * @create source0
 */
function showResultInText(){
	if(CURRENT_ROLE == null)
		return;
    hideResult();
    currentResultFormat = RESULT_FORMAT_TEXT;
    setSelectedResultFormatCtl("VIEW_ALL_TALENT_CLASS_IN_TEXT");
    var resultArea = document.getElementById("RESULT_AREA_IN_TEXT");
    var width = 340;
    var height = 400;
    setInnerHTML(resultArea, getAllTalentClassInfoInText());
    resultArea.style.display = '';
    resultArea.style.width = "100%";
    resultArea.style.height = "100%";
}
/**
 * 显示模版。
 * @create source0
 */
function showResultTempalte()
{
	if(CURRENT_ROLE == null)
		return;
    hideResult();
    currentResultFormat = RESULT_FORMAT_TEMPLATE;
    setSelectedResultFormatCtl("VIEW_ALL_TALENT_CLASS_TEMPLATE");

	var resultArea = document.getElementById("RESULT_AREA_TEMPLATE");
    var width = 360;
    var height = 408;
	setInnerHTML(resultArea, template.getHTML());
	resultArea.style.display = '';
	resultArea.style.width = "100%";
	resultArea.style.height = "100%";
}

/** 重置所有天赋。
 * @create source0
 */
function resetAllTalentClass(){
    hideToolTipArea();
    for ( var i = 0; i < TALENT_CLASS_VIEWS.length; i++ ){
        resetTalentClass(TALENT_CLASS_VIEWS[i].model.id);
        refreshTalentClassView(TALENT_CLASS_VIEWS[i]);
    }
    allowOverMaxRoleRank = false;
}
/**
 * 重置指定类的天赋。
 * @param index 天赋类的ID，或者序号。
 * @create source0
 */
function resetTalentClass(index){
    if ( isNaN(index) ){
        for ( var i = 0; i < TALENT_CLASS_VIEWS.length; i++ ){
            if ( TALENT_CLASS_VIEWS[i].model.id == index ){
                resetTalentClass(i);
                return;
            }
        }
        return;
    }
    allowOverMaxRoleRank = false;

    hideToolTipArea();

    var points = TALENT_CLASS_VIEWS[index].model.reset();
    refreshTalentPointInfo();
    refreshTalentClassView(TALENT_CLASS_VIEWS[index]);
    if ( currentTCVIndex != index ){
        refreshTalentClassView(TALENT_CLASS_VIEWS[currentTCVIndex]);
    }
    showResult();
    return false;
}

/**
 * 刷新加点信息。
 * @create 2004-10-14 source0
 */
function refreshTalentPointInfo(){
    refreshUsedPoint();
    var amount = 0;
    for ( var key = 0; key < TALENT_CLASS_VIEWS.length; key++ ){
        document.getElementById("TALENT_CLASS_AMOUNT_" + key).firstChild.nodeValue = TALENT_CLASS_VIEWS[key].model.getAmount();
    }
}