﻿var colorGreen = "#1AFF1A";
var colorYellow = "#FFD100";
var colorWhite = "#FFFFFF";


// 重置树
function resetTree(theTree) {

	if (pointsTree[theTree] == 0)
		return;

	maxTierArray[theTree] = 1;		
	rankPoints += pointsTree[theTree];
	pointsTree[theTree] = 0;
	
	document.getElementById(tree[theTree]+'PointsTopRight').innerHTML = 0;							

	for (var y = 0; y < tierNum; y++)
		pointsTier[theTree][y] = 0;
	

	var i;
	var iStop;
	if (theTree == 0)
		i = 0;
	else
		i = treeStartStop[theTree-1] + 1;

	iStop = treeStartStop[theTree];			
	
	while (i <= iStop) {	
		rankTop[i][0] = 0;
		rankTop[i][1] = rank[i][0];
		rankTop[i][2] = rank[i][1];

		document.getElementById("modifyRankTopColor"+ i).style.color = colorWhite;
		document.getElementById("modifyRankTop"+ i).style.color = colorWhite;

   		document.getElementById('modifyDescriptionTop'+i).innerHTML = rankTop[i][1];
		if (talent[i][5]) {
			document.getElementById("arrowYellow"+ i).style.visibility = "hidden";
			document.getElementById("arrowGreen"+ i).style.visibility = "hidden";
		}

		document.getElementById('modifyRankTopDescription'+i).innerHTML = 0;
		document.getElementById('modifyRankTop'+i).innerHTML = 0;
		document.getElementById('talentThumb'+ i).style.visibility = "hidden";

		document.getElementById('iconOverGreen'+ i).style.visibility = "hidden";
		document.getElementById('iconOverYellow'+ i).style.visibility = "hidden";
		
		if (talent[i][4] == 1 && (!talent[i][5])) {
			document.getElementById("modifyRankTopColor"+ i).style.color = colorGreen;
			document.getElementById("modifyRankTop"+ i).style.color = colorGreen;
		}
		i++;
	}
	
    document.getElementById('levelRequired').innerHTML = rankPointsMax - rankPoints + levelMin - 1;	
	document.getElementById('modifyRankPoints').innerHTML = rankPointsMax - rankPoints;
	document.getElementById('tabPointsAvailable').innerHTML = rankPoints;
	document.getElementById(tree[theTree]+'tabPoints').innerHTML = 0;
	
	changeCopyURL();
	
}

function resetTreeAll() {
	for (var i = 0; i < tree.length; i++) {
		resetTree(i);
	}
}

function getMaxTier(theTree) {
	var maxTier = 0;
	for (var loopMaxTier = 0; loopMaxTier < tierNum; loopMaxTier++) {
		if (pointsTier[theTree][loopMaxTier] != 0)
			maxTier = loopMaxTier;
	}
	maxTier++;
	return maxTier;
}

function getPointsAboveAndCurrent(theTree, maxTier) {
	var pointsTierTotalAboveAndCurrent = 0;
	var loopPointsTierAbove = 0;
	for (loopPointsTierAbove; loopPointsTierAbove < maxTier; loopPointsTierAbove++) {
		pointsTierTotalAboveAndCurrent += pointsTier[theTree][loopPointsTierAbove];
	}
	return pointsTierTotalAboveAndCurrent;
}

// 检查能否学习该技能
function canUnlearn(talentID, clickLeftRight, maxTier) {
	var treeID = talent[talentID][0];
	var maxRank = talent[talentID][2];
	var treePoints = pointsTree[treeID];	
	var necessaryPoints;
	var projectedPoints;
	var pointsAboveAndCurrent;

	// 有关联的技能且已经学习了，则不能取消
	if (hasDependentTalentWithPoints(talentID))
		return false;
			
	if (clickLeftRight == 0) { //left click

		var theCurrentRank = rankTop[talentID][0];
		if (theCurrentRank < maxRank) {
			// 需要的天赋点数(判断)。talent[talentID][4]取到的是行号
			var rowNum = talent[talentID][4];
			var expendPoints = 1;
			// 一号框(1-3行)内的技能，直接学习(消耗1个点数)
			// 二号框(4-7行)需要20点，才能学习(消耗1个点数)
			// 三号框(8  行)需要25点，才能学习(消耗2个点数)
			// 四号框(9  行)需要80点，才能学习(消耗3个点数)
			if (rowNum == 9) {
			    expendPoints = 3;
				necessaryPoints = 80;
			}
			else if (rowNum == 8) {
			    expendPoints = 3;
				necessaryPoints = 25;
			}
			else if (rowNum >= 4 && rowNum <= 7)
			{
				expendPoints = 2;
				necessaryPoints = 20;
			}
			else
				necessaryPoints = 0;
			
			if (treePoints < necessaryPoints)
				return false;
				
			if ((rankPoints - expendPoints) < 0)
				return false;		
			
			if (!checkRequiredTalent(talentID) && theCurrentRank == 0)
				return false;
				
			projectedPoints = pointsAboveAndCurrent++;

		} else {
			return false; 
		}

	} else {	//right click
		
		if (rankTop[talentID][0] != 0){

			pointsAboveAndCurrent = getPointsAboveAndCurrent(treeID, maxTier-1);	
			projectedPoints = pointsAboveAndCurrent - 1 + pointsTier[treeID][maxTier-1];

			for (var thisTier = talent[talentID][4]; thisTier < maxTier; maxTier--) {

				//necessaryPoints = (maxTier-1) *5;
				// 一号框(1-3行)内的技能，直接学习(消耗1个点数)
				// 二号框(4-7行)需要20点，才能学习(消耗1个点数)
				// 三号框(8  行)需要25点，才能学习(消耗2个点数)
				// 四号框(9  行)需要80点，才能学习(消耗3个点数)
				if (maxTier == 9)
					necessaryPoints = 80;
				else if (maxTier == 8)
					necessaryPoints = 25;
				else if (maxTier >= 4 && maxTier <= 7)
					necessaryPoints = 20;
				else
					necessaryPoints = 0;
			
				projectedPoints -= pointsTier[treeID][maxTier-1];
				if (projectedPoints < necessaryPoints)
					return false;
			}
			
		} else {  //if the rank is 0

			return false;
		}
	
	}	
	return true;

}

function getTalentID(talentName) {
	var theTalentID;
	for (theTalentID = 0; talent[theTalentID]; theTalentID++) {
		if (talent[theTalentID][1] == talentName)
			return theTalentID;
	}
}

function getMinLevel(talentID) {
	return ((talent[talentID][4] -1)* 5 + 10);
}

function hasDependentTalentWithPoints(talentID) {

	var loopStart;
	var loopStop;
	var theTree = talent[talentID][0];

	if (talentID != 0)
		loopStart = talentID - 1;
	else
		loopStart = talentID;
	loopStop = treeStartStop[theTree];	
	
	while (loopStart <= loopStop){	
		if (talent[loopStart][5] && talent[loopStart][5][0] == talentID && rankTop[loopStart][0] != 0)
			return true;
		loopStart++;
	}
	return false;	
	
}

// 图片状态控制(总点数，树ID，行)
function canTurnGreen(totalPoints, tree, oldMaxTier) {
	var i;
	var necessaryPoints;
	var iStop;
	var thisTier;
	
	if (tree == 0)
		i = 0;
	else
		i = treeStartStop[tree-1] + 1;

	iStop = treeStartStop[tree];
	
	while (i <= iStop) {
	
		// 需要的天赋点数(判断)。talent[i][4]取到的是行号
		// 一号框(1-3行)内的技能，直接学习(消耗1个点数)
		// 二号框(4-7行)需要20点，才能学习(消耗1个点数)
		// 三号框(8  行)需要25点，才能学习(消耗2个点数)
		// 四号框(9  行)需要80点，才能学习(消耗3个点数)
		thisTier = talent[i][4];		
		if (thisTier == 9)
			necessaryPoints = 80;
		else if (thisTier == 8)
			necessaryPoints = 25;
		else if (thisTier >= 4 && thisTier <= 7)
			necessaryPoints = 20;
		else
			necessaryPoints = 0;

		//if (thisTier <= oldMaxTier+3 || necessaryPoints <= totalPoints){	
		{

			var noRequirement = checkRequiredTalent(i);
				
			var theCurrentRank = rankTop[i][0];
			var theMaxRank = talent[i][2];
				
            if (necessaryPoints <= totalPoints && theCurrentRank != theMaxRank && noRequirement
				||
				(theCurrentRank < theMaxRank && necessaryPoints <= totalPoints && noRequirement)
				) {
	
				// 图标右下脚等级显示为绿色
				document.getElementById("modifyRankTopColor"+ i).style.color = colorGreen;
				document.getElementById("modifyRankTop"+ i).style.color = colorGreen;

				if (canUnlearn(i, 0, oldMaxTier)) {
					if (talent[i][5])
						document.getElementById("arrowGreen"+ i).style.visibility = "visible";
				}
				
			} else if (theCurrentRank == theMaxRank) {
				document.getElementById("modifyRankTopColor"+ i).style.color = colorYellow;
				document.getElementById("modifyRankTop"+ i).style.color = colorYellow;

			} else if (theCurrentRank > 0 ) {
				document.getElementById("modifyRankTopColor"+ i).style.color = colorGreen;
				document.getElementById("modifyRankTop"+ i).style.color = colorGreen;
				document.getElementById("iconOverGreen"+ i).style.visibility = "visible";				

			} else {
				document.getElementById("modifyRankTopColor"+ i).style.color = colorWhite;
				document.getElementById("modifyRankTop"+ i).style.color = colorWhite;

				document.getElementById("iconOverGreen"+ i).style.visibility = "hidden";
				
				if (talent[i][5])
					document.getElementById("arrowGreen"+ i).style.visibility = "hidden";
				
			}
		}
		i++;
	}	

	i=0;
	if (rankPoints == 0) {
		while (talent[i]){
			if (rankTop[i][0] == 0) {
				document.getElementById("modifyRankTopColor"+ i).style.color = colorWhite;		
				document.getElementById("modifyRankTop"+ i).style.color = colorWhite;
				document.getElementById("iconOverGreen"+ i).style.visibility = "hidden";								
			}
			i++;
		}	
	}
	
}

// 判断需要天赋的点数
function checkRequiredTalent(talentID) {

	var reqTalent;
	if (reqTalent = talent[talentID][5]) {
		reqTalentID = reqTalent[0];
		reqTalentPoints = reqTalent[1];
		if (rankTop[reqTalentID][0] != reqTalentPoints)
			return false;
	}
	return true;
}

// 鼠标左键点击事件
function rankTopOnClick(talentID) {
	
	if (!variableIsSite)
		return false;

	var theTree = talent[talentID][0];
	var oldMaxTier = maxTierArray[theTree];

	// 判断技能是否可以学习
	if (!canUnlearn(talentID, 0, oldMaxTier))
		return;
		
	maxRank = talent[talentID][2];					//maximum rank possible	
	var theTier = talent[talentID][4];		
	var theTierIndex = theTier - 1;
	var rankString = rankTop[talentID][1];
	
	var theCurrentRank = rankTop[talentID][0];
	
	if (theCurrentRank < maxRank) {					//see if you hit max rank
		rankTop[talentID][1] = rank[talentID][theCurrentRank];
		rankTop[talentID][0]++;						//if you haven't hit max rank, increment
		theUpdatedRank = rankTop[talentID][0];
		rankTop[talentID][2] = rank[talentID][theUpdatedRank];
		
		if (theUpdatedRank != maxRank) {
			rankString = rankTop[talentID][1] +'<br><br><font color = "ffffff">'+ textNextRank +'</font><br>'+ rankTop[talentID][2];
			document.getElementById('iconOverGreen'+ talentID).style.visibility = "visible";
		} else {
			rankString = rankTop[talentID][1];			
			document.getElementById('iconOverYellow'+ talentID).style.visibility = "visible";
		}
		if (talent[talentID][5])
			document.getElementById("arrowYellow"+ talentID).style.visibility = "visible";
			
		//keep track of points in the tier
		// 一号框(1-3行)内的技能，直接学习(消耗1个点数)
		// 二号框(4-7行)需要20点，才能学习(消耗1个点数)
		// 三号框(8  行)需要25点，才能学习(消耗2个点数)
		// 四号框(9  行)需要80点，才能学习(消耗3个点数)
		var expendPoints = 1;
		if (theTier == 9)
		    expendPoints = 3;
		else if (theTier == 8)
		    expendPoints = 3;
		else if (theTier >= 4 && theTier <= 7)
		    expendPoints = 2;
		rankPoints = rankPoints - expendPoints;
		pointsTree[theTree] = pointsTree[theTree] + expendPoints;
		pointsTier[theTree][theTierIndex] = pointsTier[theTree][theTierIndex] + expendPoints;
	}

	if (theUpdatedRank == 1 && theTier > oldMaxTier)
		maxTierArray[theTree] = theTier;
	
	document.getElementById("talentThumb"+ talentID).style.visibility = "visible";	
	
	if (pointsTree[theTree] == 1)
		document.getElementById(tree[theTree]+'tabPointsText').innerHTML = textPoint;			
	else	
		document.getElementById(tree[theTree]+'tabPointsText').innerHTML = textPoints;				
	document.getElementById('modifyDescriptionTop'+talentID).innerHTML = rankString;	
    document.getElementById('modifyRankTop'+talentID).innerHTML = rankTop[talentID][0];
    document.getElementById('modifyRankTopDescription'+talentID).innerHTML = rankTop[talentID][0];
    document.getElementById('modifyRankPoints').innerHTML = rankPointsMax - rankPoints;
    document.getElementById('levelRequired').innerHTML = rankPointsMax - rankPoints + levelMin - 1;	
    document.getElementById(tree[theTree]+'PointsTopRight').innerHTML = pointsTree[theTree];
    document.getElementById('tabPointsAvailable').innerHTML = rankPoints;
    document.getElementById(tree[theTree]+'tabPoints').innerHTML = pointsTree[theTree];		
	canTurnGreen(pointsTree[theTree], theTree, oldMaxTier);

	changeCopyURL();

}

function changeCopyURL(){

	var templateString = "";
	for (i = 0; talent[i]; i++) {
		templateString = templateString + rankTop[i][0]
	}

    document.getElementById('copyURL').innerHTML = templateString;
}

// 鼠标右键点击事件
function rankTopOnRightClick(talentID) {

	if (!variableIsSite)
		return false;

	var theTree = talent[talentID][0];				
	var oldMaxTier = maxTierArray[theTree];
	
	if (!canUnlearn(talentID, 1, oldMaxTier))
		return;		
		
	var maxRank = talent[talentID][2];					//maximum rank possible
	var theTier = talent[talentID][4];	
	var theTierIndex = theTier - 1;	
	var rankString = rankTop[talentID][1];

	if (rankTop[talentID][0] > 0) {
	
		rankTop[talentID][0]--;						
		if (rankTop[talentID][0]-1 != -1) {
			rankTop[talentID][1] = rank[talentID][(rankTop[talentID][0]-1)];
			rankTop[talentID][2] = rank[talentID][(rankTop[talentID][0])];
			rankString = rankTop[talentID][1] +'<br><br><font color = "ffffff">'+ textNextRank +'</font><br>'+ rankTop[talentID][2];			
		} else {
			rankTop[talentID][1] = rank[talentID][rankTop[talentID][0]];						
			rankString = rankTop[talentID][1];			
		}

		//keep track of points in the tier
		// 一号框(1-3行)内的技能，直接学习(消耗1个点数)
		// 二号框(4-7行)需要20点，才能学习(消耗1个点数)
		// 三号框(8  行)需要25点，才能学习(消耗2个点数)
		// 四号框(9  行)需要80点，才能学习(消耗3个点数)
		var expendPoints = 1;
		if (theTier == 9)
		    expendPoints = 3;
		else if (theTier == 8)
		    expendPoints = 3;
		else if (theTier >= 4 && theTier <= 7)
		    expendPoints = 2;
		rankPoints = rankPoints + expendPoints;
		pointsTree[theTree] = pointsTree[theTree] - expendPoints;
		pointsTier[theTree][theTierIndex] = pointsTier[theTree][theTierIndex] - expendPoints;

		document.getElementById('iconOverYellow'+ talentID).style.visibility = "hidden";			
		document.getElementById('iconOverGreen'+ talentID).style.visibility = "visible";
		
		if (rankTop[talentID][0] == 0) {
			document.getElementById('iconOverGreen'+ talentID).style.visibility = "hidden";
			document.getElementById('iconOverYellow'+ talentID).style.visibility = "hidden";
			document.getElementById("talentThumb"+ talentID).style.visibility = "hidden";
			
			if (talent[talentID][5])
				document.getElementById("arrowYellow"+ talentID).style.visibility = "hidden";
				
			oldMaxTier = getMaxTier(theTree);
			maxTierArray[theTree] = oldMaxTier;
			
		}
		
		if (rankPoints == 1) {
			canTurnGreen(pointsTree[0], 0, maxTierArray[0]);		
			canTurnGreen(pointsTree[1], 1, maxTierArray[1]);		
		}
	}

	if (pointsTree[theTree] == 1)
		document.getElementById(tree[theTree]+'tabPointsText').innerHTML = textPoint;			
	else	
		document.getElementById(tree[theTree]+'tabPointsText').innerHTML = textPoints;				
	
    document.getElementById('modifyDescriptionTop'+talentID).innerHTML = rankString;

    document.getElementById('modifyRankTop'+talentID).innerHTML = rankTop[talentID][0];
    document.getElementById('modifyRankTopDescription'+talentID).innerHTML = rankTop[talentID][0];
    document.getElementById('modifyRankPoints').innerHTML = rankPointsMax - rankPoints;	
    document.getElementById('levelRequired').innerHTML = rankPointsMax - rankPoints + levelMin - 1;	
    document.getElementById(tree[theTree]+'PointsTopRight').innerHTML = pointsTree[theTree];	
    document.getElementById(tree[theTree]+'tabPoints').innerHTML = pointsTree[theTree];	
    document.getElementById('tabPointsAvailable').innerHTML = rankPoints;		
	if (rankPoints != 1)
		canTurnGreen(pointsTree[theTree], theTree, oldMaxTier);
	changeCopyURL();
}

function unhideTalent(input) {
	if (variableIsSite)
		document.getElementById("talentMouseOver"+ input).style.visibility = "visible";
	else
		showTip(document.getElementById("armoryOver"+ input).innerHTML);
}

function hideTalent(input) {
	if (variableIsSite)
		document.getElementById("talentMouseOver"+ input).style.visibility = "hidden";
	else
		hideTip();
}


jsLoaded=true;//needed for ajax script loading=======