/**
 * 鼠标事件处理函数。
 * @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
 */

/**
 * 鼠标在职业图标上移动的处理函数。
 * @param talentAreaId 显示视图的HTML元素的id。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseMoveChar(charId, charName, e){
    setToolTipAreaPos(e);//为了减少CPU占用率，同时避免闪烁，此行代码被注释。
}
/**
 * 鼠标在移动到职业图标上时的处理函数。
 * @param talentAreaId 显示视图的HTML元素的id。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseOverChar(charId, charName, e){
    var toolTipArea = document.getElementById("TOOL_TIP_AREA");
    setInnerHTML(toolTipArea, charName);
    showToolTipArea(e);
}
/**
 * 鼠标在移出职业图标上时的处理函数。
 * @param talentAreaId 显示视图的HTML元素的id。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseOutChar(charId, charName, e){
    hideToolTipArea();
}
/**
 * 鼠标在天赋视图上移动的处理函数。
 * @param talentAreaId 显示视图的HTML元素的id。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseMoveTalentGrid(talentAreaId, e){
    setToolTipAreaPos(e);//为了减少CPU占用率，同时避免闪烁，此行代码被注释。
}
/**
 * 鼠标在移动到天赋视图上时的处理函数。
 * @param talentAreaId 显示视图的HTML元素的id。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseOverTalentGrid(talentAreaId, e){
    var tv = getTalentViewByAreaId(talentAreaId);
    if ( null == tv ){
        return;
    }
    var toolTipArea = document.getElementById("TOOL_TIP_AREA");
    setInnerHTML(toolTipArea, getTalentInfo(getTalentClassViewByTalentView(tv).model, tv.model.id));
    showToolTipArea(e);
}
/**
 * 鼠标在移出天赋视图上时的处理函数。
 * @param talentAreaId 显示视图的HTML元素的id。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseOutTalentGrid(talentAreaId, e){
    hideToolTipArea();
}
/**
 * 在某个天赋上按下鼠标按键时的处理函数，通过修改CSS来模拟按钮被按下的状态。
 * @param talentAreaId 显示视图的HTML元素的ID。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseDownTalentGrid(talentAreaId, e){
    var tv = getTalentViewByAreaId(talentAreaId);
    if ( null == tv ){
        return;
    }
    var undoUpdate = false;
    if ( IS_MSIE ){
        undoUpdate = (1 != event.button);
    } else if (IS_MOZILLA){
        undoUpdate = (3 == e.which);
    }
    if ( true == undoUpdate ){

        var tcv = getTalentClassViewByTalentView(tv);
        if ( tcv.model.canUndoUpdate(tv.model.id)){
            tcv.model.undoUpdate(tv.model.id);
            refreshTalentPointInfo();
            refreshTalentClassView(tcv, tv.model.id);
			switch(currentResultFormat)
			{
				case RESULT_FORMAT_TEXT:
					showResult();
					break;
			}
        }
    }
}
/**
 * 在某个天赋上松开鼠标按键时的处理函数，通过修改CSS来模拟按钮被松开后状态。
 * @param talentAreaId 天赋所在格子的ID。
 */
function onMouseUpTalentGrid(talentAreaId, e){
}
/**
 * 鼠标双击天赋视图对象的图标时的处理函数，将该天赋升级到顶。
 * @param talentAreaId 显示视图的HTML元素的ID。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseDblClickedTalentGrid(talentAreaId, e){
    var tv = getTalentViewByAreaId(talentAreaId);
    if ( null == tv ){
        return;
    }

    var tcv = getTalentClassViewByTalentView(tv);
    if ( null == tcv ){
        return false;
    }
    var talentClass = tcv.model;
    if ( !tv.isValid() ){
        return false;
    }

    if ( !tv.isValid() ){
        return false;
    }
    /* 首先检查是否已经到达级别上限。 */
    var usedPoints = CURRENT_ROLE.getUsedPoints();
    if ( usedPoints >= 51 )
    {
        return;
    }

    while (( tv.getRank() < tv.model.data.maxRank ) && (usedPoints < 51)){
        tv.update();
        usedPoints++;
    }
    refreshTalentPointInfo();
    refreshTalentClassView(tcv, tv.model.id);
	switch(currentResultFormat)
	{
		case RESULT_FORMAT_TEXT:
		    showResult();
			break;
	}
    return false;
}
/**
 * 鼠标点击视图对象的图标时处理函数，将该天赋升级。
 * @param talentAreaId 显示视图的HTML元素的ID。
 * @param e 鼠标事件（仅对Mozilla）。
 */
function onMouseClickedTalentGrid(talentAreaId, e){
    var tv = getTalentViewByAreaId(talentAreaId);
    if ( null == tv ){
        return;
    }
    var id = tv.model.id;

    var tcv = getTalentClassViewByTalentView(tv);
    if ( null == tcv ){
        return false;
    }
    var talentClass = tcv.model;
    if ( (!tv.isValid()) || (tv.getRank() >= tv.model.data.maxRank)){
        return false;
    }

    /* 首先检查是否已经到达级别上限，并询问是否超越上限继续模拟。 */
    var usedPoints = CURRENT_ROLE.getUsedPoints();
    if (( usedPoints >= 51 ) && (!allowOverMaxRoleRank))
    {
        if ( false ){
            if ( false == showConfirm("现在已经到达级别的上限，是否需要模拟超过级别上限后的情形\n") )
            {
                return;
            }
            allowOverMaxRoleRank = true;
        }
        return;
    }

    talentClass.getTalentView(id).update();

    refreshTalentPointInfo();
    refreshTalentClassView(tcv, id);
	switch(currentResultFormat)
	{
		case RESULT_FORMAT_TEXT:
		    showResult();
			break;
	}
    return false;
}