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

/**
 * 保存职业信息的对象。
 * @create 2004-10-17 source0
 */
function CRoleFileList(){
    /** Map: key=version, value=CDataFile*/
    var data = new Array();

    /**
     * 得到所有版本的信息。
     * @return 版本信息的数组。
     */
    this.versions = function(){
        var rt = new Array();
        for ( var key in data ){
            rt[rt.length] = key;
        }
        return rt;
    }

    /**
     * 返回指定版本的所有数据文件。
     * @param ver 版本。
     * @return 如果存在，返回 CDataFile 数组，否则返回 null 。
     */
    this.files = function(ver){
        return data[ver];
    }

    /**
     * 得到指定版本下指定序号的文件。
     * @param ver 版本。
     * @id 职业的ID。
     * @return 如果存在，返回文件定义，否则返回 null 。
     */
    this.get = function(ver, id){
        if (!data[ver]){
            return null;
        }
        for ( var key in data[ver] )
        {
            if ( data[ver][key].id == id )
            {
                return data[ver][key];
            }
        }
    }
    /**
     * 在指定版本下添加一个文件。
     * @param version 版本。
     * @param id ID。
     * @param name 职业名。
     * @param file 文件名。
    */
   this.add = function(ver, id, name, file){
        if (!data[ver]){
            data[ver] = new Array();
        }
        data[ver][data[ver].length] = new CDataFile(ver, id, name, file);
    }
}

/**
 * 数据文件信息。
 * @param version 版本。
 * @param id ID。
 * @param name 职业名。
 * @param file 文件名。
 * @create   2004-10-16 source0
 */
function CDataFile(version, id, name, file){
    this.version = version;
    this.id = id;
    this.name = name;
    this.file = file;
}

/**
 * 载入自定义职业。
 * @create source0
 */
function loadCustomRole(filename){
    try{
        if ( null == filename )
        {
            filename = document.getElementById("dataFile").value;
        }
        if (( null == filename ) || (0 >= filename.length)){
            return;
        }
        resetAllTalentClass();
        loadXML(filename, "parseXML");

    } catch (e){
        alert("指定的文件不存在，或者格式不正确：\n" + filename);

        PRE_SELECT_ROLE_CTL.click();
        return;
    }

    document.getElementById("dataFile").value = filename;
    document.getElementById("CURRENT_DATA_FILE").value = filename;
    document.getElementById("LOAD_CUSTOM_ROLE").className = 'selectedButton';

    if ( null != PRE_SELECT_ROLE_CTL ){
        PRE_SELECT_ROLE_CTL.className = 'normalButton';
    }
    PRE_SELECT_ROLE_CTL = document.getElementById("LOAD_CUSTOM_ROLE");
}
/**
 * 载入默认职业。
 * @param version 版本。
 * @param id 该职业的职业ID。
 * @create source0
 */
function loadDefaultRole(version, id){
    if (( null == version ) || ( null == id ) || ( 0 >= version.length) || (0 >= id.length))
    {
        var versions = DEFINED_ROLE_FILES.versions();
        version = versions[0];
        id = DEFINED_ROLE_FILES.files(versions[0])[0].id;
    }
    loadRole(version, id);
}
/**
 * 载入职业。
 * @param version 版本。
 * @param id 该职业的职业ID。
 * @create 2004-10-15 source0
 */
function loadRole(version, id){
    window.setTimeout("showProcess('载入职业数据', 'loadingRole(\"" + version + "\", \"" + id + "\")')", 1);
}
/**
 * 载入职业。
 * @param version 版本。
 * @param id 该职业的职业ID。
 * @create source0
 */
function loadingRole(version, id){
    try{
        resetAllTalentClass();
        var datafile = DEFINED_ROLE_FILES.get(version, id);
        var ctlId = "CHANGE_ROLE_" + version + "_" + id;

		document.getElementById("CURRENT_CHAR_ID").value = id;
        document.getElementById("CURRENT_DATA_FILE").value = datafile.file;
        loadXML(datafile.file, "parseXML");
       document.getElementById("dataFile").value = datafile.file;

        if ( null != PRE_SELECT_ROLE_CTL ){
            PRE_SELECT_ROLE_CTL.className = 'normalButtonTop';
        }
       document.getElementById("LOAD_CUSTOM_ROLE").className = 'normalButton';
        document.getElementById(ctlId).className = 'selectedButtonTop';

        PRE_SELECT_ROLE_CTL = document.getElementById(ctlId);
    } catch (e){
		alert(e.message);
        try
        {
            alert("指定的文件不存在，或者格式不正确：\n" + DEFINED_ROLE_FILES.get(version, id).file);
        } catch ( e2 )
        {
            alert("指定的文件不存在，或者格式不正确：\n版本＝" + version + "\n职业ID＝" + id);
        }
        //loadDefaultRole();
    }
}
/**
 * 初始化所有职业。
 * @create source0
 */
function initRoles(){

    var s = new String();

    var versions = DEFINED_ROLE_FILES.versions();
    s += "<table height=100%><tbody>";
	var sID,sCharName,sTip;
    for ( var verIndex = 0; verIndex < versions.length; verIndex++ ){
        var files = DEFINED_ROLE_FILES.files(versions[verIndex]);
        for ( var i = 0; i < files.length; i++ ){
			sID = 'CHANGE_ROLE_' + versions[verIndex] + "_" + files[i].id;
			sCharName = DEFINED_ROLE_FILES.get(versions[verIndex], files[i].id).name;
			sTip = "<span style=color:#FFFF00>" + sCharName + "</span>";
			s += "<tr><td align='center' valign='middle'>";
            s += "<input id='" + sID + "' type=image";
			s += " src='common/image/char/"+files[i].id+".gif'";
            s += " value='" + sCharName + "'";
			s += " onMouseOver='onMouseOverChar(\"" + sID + "\",\"" + sTip + "\", arguments[0]);'";
			s += " onMouseOut='onMouseOutChar(\"" + sID + "\",\"" + sTip + "\", arguments[0]);'";
			s += " onMouseMove='onMouseMoveChar(\"" + sID + "\",\"" + sTip + "\", arguments[0]);'";

            if ( files[i].file.length > 0 )
            {
                s += " class='normalButtonTop'";
                s += " onClick='loadRole(\"" + versions[verIndex] + "\", \"" + files[i].id + "\");'>";
            }
            else
            {
                s += " class='disabledButtonTop'";
                s += " onClick='return false;'>";
            }
			s += "</td></tr>";
        }
    }
	s += "<tr><td height=35></td></tr>";
    s += "</tbody></table>"

    setInnerHTML(document.getElementById("CHANGE_ROLE"), s);

    for ( var verIndex = 0; verIndex < versions.length; verIndex++ ){
        var files = DEFINED_ROLE_FILES.files(versions[verIndex]);
        for ( var i = 0; i < files.length; i++ ){
            createImageButtonTop('CHANGE_ROLE_' + versions[verIndex] + "_" + files[i].id, ( files[i].file.length > 0 ) ? "normalButtonTop" : "disabledButtonTop");
        }
    }
}
