function preloadImages(t1,t2,t3) {
		for(i=2;i<=t1;i++) {
			document.write("<image class='hidden' src='1/" + i + "_active.jpg'>");
		}
		for(i=2;i<=t2;i++) {
			document.write("<image class='hidden' src='2/" + i + "_active.jpg'>");
		}
		for(i=2;i<=t3;i++) {
			document.write("<image class='hidden' src='3/" + i + "_active.jpg'>");
		}
		if(isloaded == 1) {
			for(i=2;i<=t1;i++) {
				document.write("<image class='hidden' src='1/" + i + "_empty.jpg'>");
			}
			for(i=2;i<=t2;i++) {
				document.write("<image class='hidden' src='2/" + i + "_empty.jpg'>");
			}
			for(i=2;i<=t3;i++) {
				document.write("<image class='hidden' src='3/" + i + "_empty.jpg'>");
			}
		}
}

function populateFeat(treeID,featID,maxPoints,spacer,startrow,reqSpentTree,reqFeat) {
	points[treeID][featID][1] = maxPoints;
	points[treeID][featID][2] = reqSpentTree;
	points[treeID][featID][3] = reqFeat;
	contents = "";
	if(startrow == 1) { 
		contents = "<div class='startRow'><img src='blue_error.jpg'></div>";
	}
	if(spacer > 0) {
		for(s=spacer;s>0;s--) {
			contents += "<span class='spacer'><img src='red_error.jpg'></span>";
		}
	}
	if(points[treeID][0] > 0) {
		if(points[treeID][featID][0] == maxPoints) {
			contents +=	"<a class='addToolTip' id='tt_tree" + treeID + "_feat" + featID + "' tooltiptext='error'>"
				 	+ "<span class='full' id='tree" + treeID + "_feat" + featID + "_box'>" 
						+ "<img id='tree" + treeID + "_feat" + featID + "_img' src='" + treeID + "/" + featID + "_active.jpg' onmousedown='featIncrement(event," + treeID + "," + featID + ")' oncontextmenu='return false;'>"
						+ "<span class='pointCounter' id='tree" + treeID + "_feat" + featID + "'>" + points[treeID][featID][0] + "/" + maxPoints + "</span>"
					+ "</span>"
					+ "</a>";
			document.write(contents);
		}
		else if(points[treeID][featID][0] < maxPoints) {
			contents += 	"<a class='addToolTip' id='tt_tree" + treeID + "_feat" + featID + "' tooltiptext='error'>"
					+ "<span class='active' id='tree" + treeID + "_feat" + featID + "_box'>" 
						+ "<img id='tree" + treeID + "_feat" + featID + "_img' src='" + treeID + "/" + featID + "_active.jpg' onmousedown='featIncrement(event," + treeID + "," + featID + ")' oncontextmenu='return false;'>"
						+ "<span class='pointCounter' id='tree" + treeID + "_feat" + featID + "'>" + points[treeID][featID][0] + "/" + maxPoints + "</span>"
					+ "</span>"
					+ "</a>";
			document.write(contents);
		}
	}
	else {
		contents += 	"<a class='addToolTip' id='tt_tree" + treeID + "_feat" + featID + "' tooltiptext='error'>"
				+ "<span class='empty' id='tree" + treeID + "_feat" + featID + "_box'>" 
					+ "<img id='tree" + treeID + "_feat" + featID + "_img' src='" + treeID + "/" + featID + "_empty.jpg' onmousedown='featIncrement(event," + treeID + "," + featID + ")' oncontextmenu='return false;'>"
					+ "<span class='pointCounter' id='tree" + treeID + "_feat" + featID + "'>0/" + maxPoints + "</span>"
				+ "</span>"
				+ "</a>";
		document.write(contents);
		if(featID == 1) {
			document.getElementById("tree" + treeID + "_feat" +  featID + "_img").src = treeID + "/" + featID + "_active.jpg";
			document.getElementById("tree" + treeID + "_feat" +  featID + "_box").className = "available";
		} 
	}
	updateTooltip(treeID,featID);
}

function save_link(player,t1,t2,t3) {
	tree1 = points[1][0];
	tree1_feats = "_";
	for (i=1;i<=t1;i++) {
		tree1_feats += points[1][i][0];
	}
	tree2 = points[2][0];
	tree2_feats = "_";
	for (i=1;i<=t2;i++) {
		tree2_feats += points[2][i][0];
	}
	tree3 = points[3][0];
	tree3_feats = "_";
	for (i=1;i<=t3;i++) {
		tree3_feats += points[3][i][0];
	}
	document.getElementById("save_form_input").value = "http://conankave.com/kave_calc/" + player + "/kave_calc.php?" + "t1=" + tree1 + "&t1feats=" + tree1_feats + "&t2=" + tree2 + "&t2feats=" + tree2_feats + "&t3=" + tree3 + "&t3feats=" + tree3_feats;
}

function validatePrereq(treeID) {
	stop = points[treeID].length - 1;
	for(i=1;i<=stop;i++) {
		if(points[treeID][0] >= points[treeID][i][2]){
			reqFeat = points[treeID][i][3];
			if(reqFeat == 0 || points[treeID][reqFeat][0] == points[treeID][reqFeat][1]) {
				points[treeID][i][4] = 1;
				points[treeID][i][5] = 1;
				if(points[treeID][i][0] == 0) {
					document.getElementById("tree" + treeID + "_feat" +  i + "_img").src = treeID + "/" + i + "_active.jpg";
					document.getElementById("tree" + treeID + "_feat" +  i + "_box").className = "available";
				}
			}
			else {
				points[treeID][i][4] = 0;
				document.getElementById("tree" + treeID + "_feat" +  i + "_img").src = treeID + "/" + i + "_empty.jpg";
				document.getElementById("tree" + treeID + "_feat" +  i + "_box").className = "empty";
			}
		}
		else {
			points[treeID][i][4] = 0;
			document.getElementById("tree" + treeID + "_feat" +  i + "_img").src = treeID + "/" + i + "_empty.jpg";
			document.getElementById("tree" + treeID + "_feat" +  i + "_box").className = "empty";
		}
	}
	for(i=stop;i>1;i--) {
		if(points[treeID][i][0] > 0) {
			preReqPts = 0;
			for(j=i;j>0;j--) {
				if(points[treeID][j][2] < points[treeID][i][2]) {
					preReqPts += points[treeID][j][0];
				}
			}
			k = 1;
			if(preReqPts <= points[treeID][i][2] && k > 0) {
				for(k=i;k>0;k--){
					if(points[treeID][k][2] < points[treeID][i][2]) {
						points[treeID][k][5] = 0;
					}
				}
			}
			if(points[treeID][i][3] > 0) {
				x = points[treeID][i][3];
				points[treeID][x][5] = 0;
			}
		}
	}
}

function shiftcheck(ev,direction) {
	if(window.event) {
		keynum = ev.keyCode;
	}
	else if(ev.which) {
		keynum = ev.which;
	}

	if(keynum == 16 && direction == 'down'){
		shiftpressed = "true";
	}
	if(keynum == 16 && direction == 'up'){
		shiftpressed = "false";
	}
}

function updateLevel() {
	if(points[0] <= 1) {
		levelRequired = 10;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] >= 2 && points[0] <= 10) {
		levelRequired = points[0] + 9;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] == 11 || points[0] == 12) {
		levelRequired = 20;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] >= 13 && points[0] <= 21) {
		levelRequired = points[0] + 8;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] == 22 || points[0] == 23) {
		levelRequired = 30;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] >= 24 && points[0] <= 32) {
		levelRequired = points[0] + 7;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] == 33 || points[0] == 34) {
		levelRequired = 40;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] >= 35 && points[0] <= 43) {
		levelRequired = points[0] + 6;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] == 44 || points[0] == 45) {
		levelRequired = 50;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] >= 46 && points[0] <= 54) {
		levelRequired = points[0] + 5;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] == 55 || points[0] == 56) {
		levelRequired = 60;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] >= 57 && points[0] <= 65) {
		levelRequired = points[0] + 4;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] == 66 || points[0] == 67) {
		levelRequired = 70;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] >= 68 && points[0] <= 76) {
		levelRequired = points[0] + 3;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
	else if(points[0] == 77 || points[0] == 78 || points[0] == 79 ) {
		levelRequired = 80;
		document.getElementById('levelrequired_num').innerHTML = levelRequired;
	}
}

function featIncrement(event,treeID,featID) {
if(locked == 0) {
	featNum = "tree" + treeID + "_feat" +  featID;
	if (browser == "Opera") {b = 1;} 
	else {b = 2;}
	if (event.button == b) {
		if (points[treeID][featID][0] > 0 && points[treeID][featID][5] == 1) {
			if(shiftpressed == "true") {
				inc = points[treeID][featID][0];
				for(l=0;l<inc;l++) {
					if(points[treeID][featID][5] == 1) {
						--points[treeID][featID][0];
						document.getElementById(featNum).innerHTML = points[treeID][featID][0] + "/" + points[treeID][featID][1];
						--points[treeID][0];
						document.getElementById('tree_points_' + treeID).innerHTML = ": " + points[treeID][0] + " point(s)";
						document.getElementById('summary' + treeID + '_points').innerHTML = points[treeID][0] + " point(s)";
						--points[0];
						document.getElementById('summary_totalpoints').innerHTML = "Total Spent: <span style='color: #00FF00;'>" + points[0] + " point(s)</span>";
						validatePrereq(treeID);
						++pointsAvailable;
					}
					else {break;}
				}
			}
			else { 
				--points[treeID][featID][0];
				document.getElementById(featNum).innerHTML = points[treeID][featID][0] + "/" + points[treeID][featID][1];
				--points[treeID][0];
				document.getElementById('tree_points_' + treeID).innerHTML = ": " + points[treeID][0] + " point(s)";
				document.getElementById('summary' + treeID + '_points').innerHTML = points[treeID][0] + " point(s)";
				--points[0];
				document.getElementById('summary_totalpoints').innerHTML = "Total Spent: <span style='color: #00FF00;'>" + points[0] + " point(s)</span>";
				++pointsAvailable;
			}
		}
 	}
	else {
		if (points[treeID][featID][0] < points[treeID][featID][1] && points[treeID][featID][4] == 1 && pointsAvailable > 0) {
			if(shiftpressed == "true") {
				inc = points[treeID][featID][1] - points[treeID][featID][0];
				for(l=0;l<inc;l++) {
					if(points[treeID][featID][4] == 1 && pointsAvailable > 0) {
						++points[treeID][featID][0];
						document.getElementById(featNum).innerHTML = points[treeID][featID][0] + "/" + points[treeID][featID][1];
						++points[treeID][0];
						document.getElementById('tree_points_' + treeID).innerHTML = ": " + points[treeID][0] + " point(s)";
						document.getElementById('summary' + treeID + '_points').innerHTML = points[treeID][0] + " point(s)";
						++points[0];
						document.getElementById('summary_totalpoints').innerHTML = "Total Spent: <span style='color: #00FF00;'>" + points[0] + " point(s)</span>";
						validatePrereq(treeID);
						--pointsAvailable;
					}
					else {break;}
				}
			}
			else {
				++points[treeID][featID][0];
				document.getElementById(featNum).innerHTML = points[treeID][featID][0] + "/" + points[treeID][featID][1];
				++points[treeID][0];
				document.getElementById('tree_points_' + treeID).innerHTML = ": " + points[treeID][0] + " point(s)";
				document.getElementById('summary' + treeID + '_points').innerHTML = points[treeID][0] + " point(s)";
				++points[0];
				document.getElementById('summary_totalpoints').innerHTML = "Total Spent: <span style='color: #00FF00;'>" + points[0] + " point(s)</span>";
				--pointsAvailable;
			}
		}
	}

	if(points[treeID][featID][0] == 0) {
		document.getElementById('tree' + treeID + '_feat' + featID + '_name').className = "hidden";
		document.getElementById('tree' + treeID + '_feat' + featID + '_points').className = "hidden";
	}
	else {
		document.getElementById('tree' + treeID + '_feat' + featID + '_name').className = "feat_name";
		document.getElementById('tree' + treeID + '_feat' + featID + '_points').className = "feat_points";
		document.getElementById('tree' + treeID + '_feat' + featID + '_points').innerHTML = points[treeID][featID][0] + "/" + points[treeID][featID][1] + " point(s)";
	}

	validatePrereq(treeID);
	updateTooltip(treeID,featID);
	updateLevel();

	if (points[treeID][featID][0] == points[treeID][featID][1]) {
		document.getElementById(featNum + "_box").className = "full";
	}
	else if (points[treeID][featID][0] > 0) {
		document.getElementById(featNum + "_img").src = treeID + "/" + featID + "_active.jpg";
		document.getElementById(featNum + "_box").className = "active";
	}
	else if (points[treeID][featID][4] > 0) {
		document.getElementById(featNum + "_img").src = treeID + "/" + featID + "_active.jpg";
		document.getElementById(featNum + "_box").className = "available";
	}
}
}

function updateTooltip(treeID,featID) {
	rank = points[treeID][featID][0] - 0;

	switch (treeID) {
		case 1:
			newTip = tt1[featID];
			break;
		case 2:
			newTip = tt2[featID];
			break;
		case 3:
			newTip = tt3[featID];
			break;
	}

	switch (rank) {
		case 0:
			newTip = newTip.replace(/class='rank1 hidden'/, "class='rank1 next'");
			break;
		case 1:
			newTip = newTip.replace(/class='rank1 hidden'/, "class='rank1'");
			if(points[treeID][featID][1] > 1) {newTip = newTip.replace(/class='rank2 hidden'/, "class='rank2 next'");}
			break;
		case 2:
			newTip = newTip.replace(/class='rank2 hidden'/, "class='rank2'");
			if(points[treeID][featID][1] > 2) {newTip = newTip.replace(/class='rank3 hidden'/, "class='rank3 next'");}
			break;
		case 3:
			newTip = newTip.replace(/class='rank3 hidden'/, "class='rank3'");
			if(points[treeID][featID][1] > 3) {newTip = newTip.replace(/class='rank4 hidden'/, "class='rank4 next'");}
			break;
		case 4:
			newTip = newTip.replace(/class='rank4 hidden'/, "class='rank4'");
			if(points[treeID][featID][1] > 4) {newTip = newTip.replace(/class='rank5 hidden'/, "class='rank5 next'");}
			break;
		case 5:
			newTip = newTip.replace(/class='rank5 hidden'/, "class='rank5'");
			break;
	}

	document.getElementById('tt_tree' + treeID + '_feat' + featID).setAttribute("tooltiptext",newTip);
}

function lock() {
	if(locked == 0) {
		document.getElementById('overlay_1').className = "overlay";
		document.getElementById('overlay_2').className = "overlay";
		document.getElementById('overlay_3').className = "overlay";
		document.getElementById('lock_icon').src = "icons/locked.png";
		locked = 1;
	}
	else {
		document.getElementById('overlay_1').className = "overlay hidden";
		document.getElementById('overlay_2').className = "overlay hidden";
		document.getElementById('overlay_3').className = "overlay hidden";
		document.getElementById('lock_icon').src = "icons/unlocked.png";
		locked = 0;
	}

}

function reset(tID) {
if(locked == 0) {
	function resetTree(treeID) {
		points[treeID][1][0] = 0;
		updateTooltip(treeID,1);
		document.getElementById("tree" + treeID + "_feat1").innerHTML = points[treeID][1][0] + "/" + points[treeID][1][1];
		document.getElementById("tree" + treeID + "_feat1_img").src = treeID + "/1_active.jpg";
		document.getElementById("tree" + treeID + "_feat1_box").className = "available";
		document.getElementById('tree' + treeID + '_feat1_name').className = "hidden";
		document.getElementById('tree' + treeID + '_feat1_points').className = "hidden";
		stop = points[treeID].length - 1;
		for (i=2;i<=stop;i++) {
			points[treeID][i][0] = 0;
			points[treeID][i][4] = 0;
			updateTooltip(treeID,i);
			featNum = "tree" + treeID + "_feat" + i;
			document.getElementById(featNum).innerHTML = points[treeID][i][0] + "/" + points[treeID][i][1];
			document.getElementById(featNum + "_img").src = treeID + "/" + i + "_empty.jpg";
			document.getElementById(featNum + "_box").className = "empty";
			document.getElementById('tree' + treeID + '_feat' + i + '_name').className = "hidden";
			document.getElementById('tree' + treeID + '_feat' + i + '_points').className = "hidden";
		}
		points[0] = points[0] - points[treeID][0];
		points[treeID][0] = 0;
		document.getElementById('tree_points_' + treeID).innerHTML = ": " + points[treeID][0] + " point(s)";
		document.getElementById('summary' + treeID + '_points').innerHTML = points[treeID][0] + " point(s)";
		document.getElementById('summary_totalpoints').innerHTML = "Total Spent: <span style='color: #00FF00;'>" + points[0] + " point(s)</span>";
	}

	if(tID == 0) {
		resetTree(1);
		resetTree(2);
		resetTree(3);
	}
	else {
		resetTree(tID);
	}
	pointsAvailable = 78 - points[0];
	updateLevel();
}
}