// Scripts for SkillCalculator V 1.0

/* {global data} */

/* Variables */
var strg=0;
var caps=0;
var actual = 0;
var type;
var maximum_mastery = 80;
var show = 0;
var cap;
var gesamt=0;
var series_number;
var lvlup = "<img src=\"gfx/buttons/lvlup.png\" onmouseover=\"this.src='gfx/buttons/lvlup_hover.png'\" onmouseout=\"this.src='gfx/buttons/lvlup.png'\" onmousedown=\"this.src='gfx/buttons/lvlup_down.gif'\" onmouseup=\"this.src='gfx/buttons/lvlup_hover.png'\" onclick=\"masteryincrease();\" oncontextmenu=\"masterydecrease(); return false;\" alt=\"\" />";
var mastery_max = "<img src=\"gfx/buttons/lvlup_max.png\" oncontextmenu=\"masterydecrease(); return false;\" alt=\"\" />";
var mastery_stop = "<img src=\"gfx/buttons/lvlup_max.png\" onclick=\"masteryincrease();\" oncontextmenu=\"masterydecrease(); return false;\" alt=\"\" />";
var mastery_sum;

/* Arrays */
show_line = new Array();
maximum = new Array();
series = new Array();
line_id = new Array();
img_type = new Array();
series_skills = new Array();
mastery_SP = new Array(0, 0, 1, 1, 1, 2, 2, 4, 5, 6, 7, 9, 12, 15, 18, 21, 34, 30, 35, 41, 47, 53, 62, 71, 80, 89, 98, 108, 117, 126, 135, 144, 158, 172, 185, 199, 212, 226, 239, 253, 266, 280, 299, 318, 336, 355, 374, 393, 412, 431, 449, 468, 494, 520, 546, 571, 597, 623, 649, 675, 700, 726, 770, 813, 856, 1079, 1358, 1420, 1482, 1545, 1607, 1670, 1752, 1834, 1917, 1999, 2082, 2164, 2247, 2329, 2412);
SP_skilltree = new Array(0, 0, 0, 0, 0, 0, 0);
skilltrees = new Array('sword', 'spear', 'bow', 'cold', 'lightning', 'fire', 'water');
data = new Array();
/* Image-Arrays */
img = new Array();
img[0] = new Array('smash', 'chain', 'shield', 'geomgi', 'knockdown', 'downattack', 'special', 'passive');
img[1] = new Array('pierce', 'spin', 'frontarea', 'stun', 'roundarea', 'chain', 'shoot', 'passive');
img[2] = new Array('critical', 'chain', 'call', 'pierce', 'normal', 'area', 'power', 'special', 'passive');
img[3] = new Array('gigongta', 'ganggi', 'gigongjang', 'bingbyeok', 'bingpan', 'gigongsul', 'shield', 'passive');
img[4] = new Array('gigongta', 'gwantong', 'gyeonggong', 'chundung', 'jipjung', 'storm', 'passive');
img[5] = new Array('gigongta', 'shield', 'gongup', 'ganggi', 'hwabyeok', 'gigongsul', 'detect', 'passive');
img[6] = new Array('selfheal', 'cure', 'curearea', 'heal', 'resurrection', 'harmony', 'cancel', 'passive');

/* inputs */

document.onkeydown = keydown;
document.onkeyup = keyup;
document.onmousedown = clear_error;
document.onmousewheel = wheel;
if (window.addEventListener) { 
	window.addEventListener('DOMMouseScroll', wheel, false); 
}

/* {end of global data} */

/* Functions */

function get_data(id){

	data[id] = http_request.responseXML;
	if(!data[id]){
		window.setTimeout('get_data('+id+')',1000);
	}
	else {
		if(id<=5) {
			request(skilltrees[id+1]);
			get_data(id+1);
		}
		if(id==6){
			fill();
			refresh_post();
		}
	}
}

function fill(move, change){

	var xmldoc = data[actual];

	series_number = xmldoc.getElementsByTagName("skilllist").item(0).childNodes.length;
	series_skills[0] = 0;

	if(!move||change) {
		if(change){
			change=0;
			gesamt=0;
		}
		for(i=0;i<series_number;i++) {
			gesamt += xmldoc.documentElement.childNodes.item(i).childNodes.length;
		}
		gesamt--;

		for(k=0;k<=6;k++){
			if(!masteries[k]) {
				skills[k] = new Array();

				for(i=0;i<=gesamt;i++){
					skills[k][i] = 0;
				}
			}
		}
	}

	for(i=1;i<=series_number;i++) {
		series_skills[i] = xmldoc.documentElement.childNodes.item(i-1).childNodes.length + series_skills[i-1];
	}

	for(i=0;i<series_number;i++){
		var id=0;
		for(j=series_skills[i];j<series_skills[i+1];j++){
			series[j]=i;
			line_id[j]=id;
			id++;
		}
	}

	cap = !(series_skills[show+4]) ? gesamt : (series_skills[show+4]-1);

	for(i=series_skills[show];i<=cap;i++) {
		show_line[i]=(series[i]-show);
	}
	for(i=0;i<=gesamt;i++){
		img_type[i]=img[actual][series[i]];
		maximum[i] = xmldoc.getElementsByTagName("max").item(i).firstChild.data;
	}

	for(i=series_skills[show];i<=cap;i++){
		changebutton_skillup(i, move);
		write_skill_lvl(i, move);
	}
	move=0;
	changebutton_masteryup();
	write_mastery_lvl();
	sum();

	document.getElementById("load").style.visibility = "hidden";
	if(!document.cookie){
		tooltip_help();
		var a = new Date();
		a = new Date(a.getTime() +1000*60*60*24*365);
		document.cookie= "visited=1; expires="+a.toGMTString()+";";
	}
}

function set_tabs(id){

	document.getElementById("weapon").innerHTML = "<img src=\"gfx/tabs/tab_off.gif\" alt=\"\" onClick=\"set_tabs('0');\" />";
	document.getElementById("force").innerHTML = "<img src=\"gfx/tabs/tab_off.gif\" alt=\"\" onClick=\"set_tabs('1');\" />";
	document.getElementById("weapon_font").style.fontWeight = "normal";
	document.getElementById("force_font").style.fontWeight = "normal";
	for(i=0;i<=6;i++){
		document.getElementById("masterytab_"+i).style.visibility = "hidden";
		document.getElementById("masterytab_font_"+i).style.visibility = "hidden";
	}

	if(id==0){
		document.getElementById("weapon").innerHTML = "<img src=\"gfx/tabs/tab_on.gif\" alt=\"\" onClick=\"set_tabs('0');\" />";
		document.getElementById("weapon_font").style.fontWeight = "bold";
		for(i=0;i<=2;i++){
			document.getElementById("masterytab_"+i).style.visibility = "visible";
			document.getElementById("masterytab_font_"+i).style.visibility = "visible";
		}
		change_tree('0');
	}
	else{
		document.getElementById("force").innerHTML = "<img src=\"gfx/tabs/tab_on.gif\" alt=\"\" onClick=\"set_tabs('1');\" />";
		document.getElementById("force_font").style.fontWeight = "bold";
		for(i=3;i<=6;i++){
			document.getElementById("masterytab_"+i).style.visibility = "visible";
			document.getElementById("masterytab_font_"+i).style.visibility = "visible";
		}
		change_tree('3');
	}

}

function change_tree(id){

	actual=id;
	show = 0;
	set_masterytabs(id);
	change_scrollbar();
	fill(1, 1);
}

function set_masterytabs(id){

	for(i=0;i<=6;i++){
		document.getElementById("masterytab_"+i).innerHTML = "<img src=\"gfx/tabs/masterytab_off.gif\" alt=\"\" onClick=\"change_tree('"+i+"');\" />";
		document.getElementById("masterytab_font_"+i).style.color = "#BABABA";
	}

	document.getElementById("masterytab_"+id).innerHTML = "<img src=\"gfx/tabs/masterytab_on.gif\" alt=\"\" onClick=\"change_tree('"+id+"');\" />";
	document.getElementById("masterytab_font_"+id).style.color = "#DBFFFF";

}

function scrollen(direction){

	if(direction=="up"&&show) {
		show--;
		change_scrollbar();
	}
	else if(direction=="down"&&(show+4)<series_number) {
		show++;
		change_scrollbar();
	}
	var move=1;
	fill(move);
}

function change_scrollbar(){

	document.getElementById("scrollbar").style.background = "url(gfx/scrollbar/bar_"+series_number+"_"+show+".png)";
}

function masteryincrease(){
	
	document.getElementById("frame").src = "blank.html";

	if(mastery_sum==300){
			write_error('Maximum masteries reached!');
	}
	else {

		if(strg==1) {
			(mastery_sum+(maximum_mastery-masteries[actual])<=300) ? masteries[actual]=maximum_mastery : masteries[actual]+=(300-mastery_sum);
		}
		else if(caps==1) {
			if(mastery_sum+10<=300){
				((maximum_mastery-masteries[actual])>10) ? masteries[actual]+=10 : masteries[actual]=maximum_mastery;
			}
			else {
				((maximum_mastery-masteries[actual])>(300-mastery_sum)) ? masteries[actual]+=(300-mastery_sum) : masteries[actual]=maximum_mastery;
			}
		}
		else {
			(masteries[actual]==maximum_mastery) ? masteries[actual]=maximum_mastery : masteries[actual]++;
		}

		for(i=series_skills[show];i<=cap;i++){
			changebutton_skillup(i);
		}

		sum();
		write_mastery_lvl();

	}

	changebutton_masteryup();
}

function masterydecrease(){

	document.getElementById("frame").src = "blank.html";

	var xmldoc = data[actual];
	var mastery_need_max = 0;
	var error = 0;

	for(i=1;i<=gesamt;i++){
		if(skills[actual][i]==0) {
			var mastery_need = 0;
		}
		else {
			var mastery_need = xmldoc.getElementsByTagName("mastery_"+skills[actual][i]).item(i).firstChild.data;
			if(mastery_need_max<mastery_need) {
				mastery_need_max=Number(mastery_need);
			}
		}
		if(mastery_need>=masteries[actual]) {
			var dec=0;
			var condition_skill = xmldoc.getElementsByTagName("ueberschrift").item(i).firstChild.data;
			if(masteries[actual]!=0) {
				write_error("Decrease skill \""+condition_skill+"\" first!");
			}
			error = 1;
		}
		else if(!error){
			var dec=1;
		}
	}

	if(dec==1) {
		if(strg==1) {
			masteries[actual]=mastery_need_max;
		}
		else if(caps==1) {
			((masteries[actual]-mastery_need_max)>10) ? masteries[actual]-=10 : masteries[actual]=mastery_need_max;
		}
		else {
			(masteries[actual]==0) ? masteries[actual]=0 : masteries[actual]--;
		}
	}

	for(i=series_skills[show];i<=cap;i++){
		changebutton_skillup(i);
	}
	sum();
	write_mastery_lvl();
	changebutton_masteryup();
}

function increase(i){

	document.getElementById("frame").src = "blank.html";

	var xmldoc = data[actual];
	var condition_id = xmldoc.getElementsByTagName("id").item(i).firstChild.data;
	var condition_lvl = xmldoc.getElementsByTagName("lvl").item(i).firstChild.data;
	var needed = (Number(skills[actual][i]+1)>maximum[i]) ? maximum[i] : Number(skills[actual][i]+1);
	var mastery_need = xmldoc.getElementsByTagName("mastery_"+needed).item(i).firstChild.data;

	if(condition_id==0 || condition_lvl <= skills[actual][condition_id]){
		if(masteries[actual]>=mastery_need) {
			if(strg==1) {
				for(j=(skills[actual][i]+1);j<=maximum[i];j++) {
					var mastery_need = xmldoc.getElementsByTagName("mastery_"+j).item(i).firstChild.data;
					if(mastery_need<=masteries[actual]) {
						var settolvl = j;
					}
				}
				settolvl ? skills[actual][i]=settolvl : maximum[i];
			}
			else {
				(skills[actual][i]<maximum[i]) ? skills[actual][i]++ : skills[actual][i]=maximum[i];
			}
		}
	}

	if(skills[actual][i]==maximum[i]){
		loeschen();
	}
	write_skill_lvl(i);
	sum();
	changebutton_skillup(i);
}

function decrease(i){

	document.getElementById("frame").src = "blank.html";

	var xmldoc = data[actual];
	var id_out = xmldoc.getElementsByTagName("id_out").item(i).firstChild.data;
	var id_out2 = xmldoc.getElementsByTagName("id_out2").item(i).firstChild.data;
	var condition_lvl = xmldoc.getElementsByTagName("lvl").item(id_out).firstChild.data;
	var condition_lvl2 = xmldoc.getElementsByTagName("lvl").item(id_out2).firstChild.data;
	var condition_skill = xmldoc.getElementsByTagName("ueberschrift").item(id_out).firstChild.data;
	var condition_skill2 = xmldoc.getElementsByTagName("ueberschrift").item(id_out2).firstChild.data;

	if(skills[actual][i]>condition_lvl&&skills[actual][i]>condition_lvl2 || skills[actual][id_out]==0&&id_out2==0 || skills[actual][id_out]==0&&skills[actual][id_out2]==0 || id_out==0 || skills[actual][i]>condition_lvl&&skills[actual][id_out2]==0 || skills[actual][id_out]==0&&skills[actual][i]>condition_lvl2){
		if(strg==1&&skills[actual][id_out]==0&&skills[actual][id_out2]==0 || strg==1&&skills[actual][id_out]==0&&id_out2==0) {
			skills[actual][i]=0;
		}
		else if(strg==1&&skills[actual][id_out2]==0 || strg==1&&id_out2==0) {
			skills[actual][i]=condition_lvl;
		}
		else if(strg==1&&skills[actual][id_out]==0) {
			skills[actual][i]=condition_lvl2;
		}
		else {
			(skills[actual][i]>1) ? skills[actual][i]-- : skills[actual][i]=0;
		}
	}
	else {
		if(id_out2==0){
			write_error("Remove skill \""+condition_skill+"\" first!");
		}
		else{
			if(condition_lvl<skills[actual][i]) {
				write_error("Remove skill \""+condition_skill2+"\" first!");
			}
			else if(condition_lvl2<skills[actual][i]) {
				write_error("Remove skill \""+condition_skill+"\" first!");
			}
			else {
				if(skills[actual][id_out]==0) {
					write_error("Remove skill \""+condition_skill2+"\" first!");
				}
				else if(skills[actual][id_out2]==0) {
					write_error("Remove skill \""+condition_skill+"\" first!");
				}
				else {
					write_error("Remove skills \""+condition_skill+"\" and \""+condition_skill2+"\" first!");
				}
			}
		}
	}

	write_skill_lvl(i);
	sum();
	changebutton_skillup(i);
}

function changebutton_masteryup(){

	var buttons = new Array(lvlup, mastery_max, mastery_stop);

	if(mastery_sum==300&&masteries[actual]<maximum_mastery){
		type=2;
	}
	else if(masteries[actual]==maximum_mastery){
		type=1;
	}
	else {
		type=0;
	}

	document.getElementById("mastery_up").innerHTML = buttons[type];

}

function changebutton_skillup(i, move){

	var xmldoc = data[actual];

	var serie=show_line[i];

	/*skills*/
	var add = "<img src=\"gfx/buttons/skl_add.png\" onmouseover=\"this.src='gfx/buttons/skl_add_hover.png';tooltip_up('"+i+"');\" onclick=\"increase('"+i+"');\" onmouseout=\"this.src='gfx/buttons/skl_add.png';loeschen();\" onmousedown=\"this.src='gfx/buttons/skl_add_down.png'\" onmouseup=\"this.src='gfx/buttons/skl_add_hover.png'\" oncontextmenu=\"decrease('"+i+"'); return false;\" alt=\"\" />"
	var up = "<img src=\"gfx/buttons/skl_up.png\" onmouseover=\"this.src='gfx/buttons/skl_up_hover.png';tooltip_up('"+i+"');\" onclick=\"increase('"+i+"');\" onmouseout=\"this.src='gfx/buttons/skl_up.png';loeschen();\" onmousedown=\"this.src='gfx/buttons/skl_up_down.png'\" onmouseup=\"this.src='gfx/buttons/skl_up_hover.png'\" oncontextmenu=\"decrease('"+i+"'); return false;\" alt=\"\" />"
	var maximal = "<img src=\"gfx/buttons/skl_max.png\" oncontextmenu=\"decrease('"+i+"'); return false;\" alt=\"\" />"
	var blank = "<img src=\"gfx/buttons/skl_blank.gif\" oncontextmenu=\"decrease('"+i+"'); return false;\" alt=\"\" / style=\"background-repeat:repeat;\">"

	var buttons = new Array(maximal, add, up, blank);

	if(move){
		if(line_id[i]){
			for(j=line_id[i];j<=6;j++){
				document.getElementById("up_"+serie+"_"+j).innerHTML = buttons[3];
			}
		}
	}

	if(skills[actual][i]!=maximum[i]){
		var mastery_need = xmldoc.getElementsByTagName("mastery_"+Number(skills[actual][i]+1)).item(i).firstChild.data;
	}

	if(skills[actual][i]==maximum[i]){
		type=0;
	}
	else if(skills[actual][i]==0){
		var condition_id = xmldoc.getElementsByTagName("id").item(i).firstChild.data;
		var condition_lvl = xmldoc.getElementsByTagName("lvl").item(i).firstChild.data;
		if(condition_id==0 || skills[actual][condition_id]>=condition_lvl){
			if(masteries[actual]>=mastery_need) {
				type=1;
			}
			else {
				type=3;
				loeschen();
			}
		}
		else{
			type=3;
			loeschen();
		}
	}
	else {
		if(masteries[actual]>=mastery_need) {
				type=2;
			}
			else {
				type=3;
				loeschen();
			}
	}

	if(line_id[i]!=0){
		document.getElementById("up_"+serie+"_"+line_id[i]).innerHTML = buttons[type];
	}
	var id_out = xmldoc.getElementsByTagName("id_out").item(i).firstChild.data;
	var id_out2 = xmldoc.getElementsByTagName("id_out2").item(i).firstChild.data;
	if(id_out!=0){
		changebutton_skillup(id_out);
	}
	if(id_out2!=0){
		changebutton_skillup(id_out2);
	}

	swap_skillimg(i, move);
}

function swap_skillimg(i, move) {

	var serie=show_line[i];

	document.getElementById("mastery_img").innerHTML = "<img src=\"gfx/skills/mastery_"+skilltrees[actual]+".png\" alt=\"\" onmouseover=\"this.src='gfx/skills/mastery_"+skilltrees[actual]+"_hover.png';tooltip_mastery();\" onmouseout=\"this.src='gfx/skills/mastery_"+skilltrees[actual]+".png';loeschen();\" />";

	masteryfonts = new Array('Bicheon Mastery', 'Heuksal Mastery', 'Pacheon Mastery', 'Cold Mastery', 'Lightning Mastery', 'Fire Mastery', 'Force Mastery');
	document.getElementById("mastery_font").innerHTML = masteryfonts[actual];

	if(line_id[i]!=0){
		if(move){
			for(j=line_id[i];j<=6;j++){
				document.getElementById("skill_"+serie+"_"+j).innerHTML = "<img src=\"gfx/skills/skill_nothing.png\" alt=\"\" />";
			}
		}
		if(skills[actual][i]==0) {
			var xmldoc = data[actual];
			var mastery_need = xmldoc.getElementsByTagName("mastery_1").item(i).firstChild.data;
			if(mastery_need>masteries[actual]) {

				document.getElementById("skill_"+serie+"_"+line_id[i]).innerHTML = "<img src=\"gfx/skills/skill_dis.png\" alt=\"\" onclick=\"increase('"+i+"');\" oncontextmenu=\"decrease('"+i+"'); return false;\" onmouseover=\"tooltip_skill('"+i+"');\" onmouseout=\"loeschen();\" />";
			}
			else {
				document.getElementById("skill_"+serie+"_"+line_id[i]).innerHTML = "<img src=\"gfx/skills/"+skilltrees[actual]+"_"+img_type[i]+"_"+line_id[i]+"_dark.png\" alt=\"\" onclick=\"increase('"+i+"');\" oncontextmenu=\"decrease('"+i+"'); return false;\" onmouseover=\"tooltip_skill('"+i+"');\" onmouseout=\"loeschen();\" />";
			}
		}
		else {
			document.getElementById("skill_"+serie+"_"+line_id[i]).innerHTML = "<img src=\"gfx/skills/"+skilltrees[actual]+"_"+img_type[i]+"_"+line_id[i]+".png\" alt=\"\" onclick=\"increase('"+i+"');\" oncontextmenu=\"decrease('"+i+"'); return false;\" onmouseover=\"tooltip_skill('"+i+"');\" onmouseout=\"loeschen();\" />";
		}
	}
	else {
		document.getElementById("skill_"+serie+"_"+line_id[i]).innerHTML = "<img src=\"gfx/skills/"+skilltrees[actual]+"_"+img_type[i]+"_"+line_id[i]+".png\" alt=\"\" onmouseover=\"tooltip_category('"+i+"');this.src='gfx/skills/"+skilltrees[actual]+"_"+img_type[i]+"_"+line_id[i]+"_hover.png';\" onmouseout=\"this.src='gfx/skills/"+skilltrees[actual]+"_"+img_type[i]+"_"+line_id[i]+".png';loeschen();\" />"
	}
}

function write_skill_lvl(i, move){

if(line_id[i]){
	var serie=show_line[i];
	if(move){
		for(j=line_id[i];j<=6;j++){
			document.getElementById("lvl_"+serie+"_"+j).style.visibility = "hidden";
			document.getElementById("tab_"+serie+"_"+j).style.visibility = "hidden";
		}
	}
	if(skills[actual][i]==0) {
		document.getElementById("lvl_"+serie+"_" + line_id[i]).style.visibility = "hidden";
		document.getElementById("tab_"+serie+"_" + line_id[i]).style.visibility = "hidden";
	}
	else {
		document.getElementById("lvl_"+serie+"_" + line_id[i]).style.visibility = "visible";
		document.getElementById("tab_"+serie+"_" + line_id[i]).style.visibility = "visible";
		document.getElementById("lvl_"+serie+"_" + line_id[i]).src = "gfx/fonts/"+skills[actual][i]+"_skilllvl.gif";
	}
}

}

function write_mastery_lvl(){

	document.getElementById("mastery").innerHTML = "Lv&nbsp;"+masteries[actual];
	write_total_masteries();
}

function tooltip_skill(skill_id) {

	var xmldoc = data[actual];

	masteryname = new Array('Bicheon', 'Heuksal', 'Pacheon', 'Cold', 'Lightning', 'Fire', 'Force');

	var lvl = (skills[actual][skill_id]==0) ? 1 : skills[actual][skill_id];
	var ueberschrift = xmldoc.getElementsByTagName("ueberschrift").item(skill_id).firstChild.data;
	var beschreibung = xmldoc.getElementsByTagName("text").item(skill_id).firstChild.data;
	var type = xmldoc.getElementsByTagName("type").item(skill_id).firstChild.data;
	var MP_used = xmldoc.getElementsByTagName("MP_"+lvl).item(skill_id).firstChild.data;
	var MP = "";
	var weapon_used = xmldoc.getElementsByTagName("weapon").item(skill_id).firstChild.data;
	var weapon = "";
	var description_get = xmldoc.getElementsByTagName("description_"+lvl).item(skill_id).firstChild.data;
	var description = description_get.replace(/(BREAK)/g, "<br />");
	var condition = " ";
	var condition_id = xmldoc.getElementsByTagName("id").item(skill_id).firstChild.data;
	var condition_lvl = xmldoc.getElementsByTagName("lvl").item(skill_id).firstChild.data;

	if(skills[actual][skill_id]!=maximum[skill_id]){

		var mastery_need = xmldoc.getElementsByTagName("mastery_"+Number(skills[actual][skill_id]+1)).item(skill_id).firstChild.data;

		if(skills[actual][skill_id]==0){
			condition = "<br /><img src='gfx/tooltip/conditionsign.gif' alt='' />&nbsp;Acquisition condition</td></tr>";
		}
		else {
			condition = "<br /><img src='gfx/tooltip/conditionsign.gif' alt='' />&nbsp;Next level condition</td></tr>";
		}
		var mastery = xmldoc.getElementsByTagName("mastery_"+Number(skills[actual][skill_id]+1)).item(skill_id).firstChild.data;
		var SP = xmldoc.getElementsByTagName("SP_"+Number(skills[actual][skill_id]+1)).item(skill_id).firstChild.data;
		if(masteries[actual]>=mastery_need) {
			var klasse = "yellow";
		}
		else {
			var klasse = "red";
		}
		condition += "<tr><td class='"+klasse+"'>Mastery level: "+masteryname[actual]+" Lv "+mastery+"</td></tr>";
		if(skills[actual][skill_id]==0&&condition_id!=0){
			var condition_name = xmldoc.getElementsByTagName("ueberschrift").item(condition_id).firstChild.data;
			if(skills[actual][condition_id]>=condition_lvl) {
				var klasse = "yellow";
			}
			else {
				var klasse = "red";
			}
			condition += "<tr><td class='"+klasse+"'>Required skill:&nbsp;"+condition_name+"&nbsp;Lv&nbsp;"+condition_lvl+"</td></tr>";
		}
		condition += "<tr><td class='yellow'>Required Skillpoints: "+SP+"</td></tr>";
	}
	if(weapon_used!="0"){
		weapon = "<tr><td class='yellow'>"+weapon_used+"</td></tr>";
	}
	if(MP_used!="0"){
		MP = "<tr><td class='yellow'>Consumed&nbsp;MP:&nbsp;"+MP_used+"</td></tr>"
	}
	if(show_line[skill_id]<=1){
		window.document.getElementById("tooltip").style.bottom = "";
		window.document.getElementById("tooltip").style.top = Number(xmldoc.getElementsByTagName("top").item(skill_id).firstChild.data-show*55)+"px";
	}
	else {
		window.document.getElementById("tooltip").style.top = "";
		window.document.getElementById("tooltip").style.bottom = (406-Number(xmldoc.getElementsByTagName("top").item(skill_id).firstChild.data-show*55)-33)+"px";
	}
	window.document.getElementById("tooltip").style.right = "";
	window.document.getElementById("tooltip").style.left = xmldoc.getElementsByTagName("left").item(skill_id).firstChild.data+"px";

	document.getElementById("tooltip").innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td colspan='2' class='head'><img src='gfx/tooltip/skillsign.gif' alt='' /><b>&nbsp;"+ueberschrift+"&nbsp;Lv&nbsp;"+lvl+"</b></td></tr><tr><td colspan='2'><br /></td></tr><tr><td class='yellow'>"+type+"</td></tr>"+MP+weapon+"<tr><td><br /></td><tr><tr><td>"+beschreibung+"</td></tr><tr><td><br /></td></tr><tr><td class='yellow'>"+description+"</td></tr><tr><td>"+condition+"</td></tr></table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
	
	if(window.document.getElementById("tooltip").style.top) 
	{
		if(Number(window.document.getElementById("tooltip").offsetHeight)+Number(window.document.getElementById("tooltip").style.top.substr(0,3))>407)
		{
			window.document.getElementById("tooltip").style.top = "";
			window.document.getElementById("tooltip").style.bottom = "0px";
		}
	}
	else
	{
		if(Number(window.document.getElementById("tooltip").offsetHeight)+Number(window.document.getElementById("tooltip").style.bottom.substr(0,3))>407)
		{
			window.document.getElementById("tooltip").style.bottom = "";
			window.document.getElementById("tooltip").style.top = "0px";
		}
	}
}

function tooltip_up(skill_id) {

	var xmldoc = data[actual];
	var condition_id = xmldoc.getElementsByTagName("id").item(skill_id).firstChild.data;
	var condition_lvl = xmldoc.getElementsByTagName("lvl").item(skill_id).firstChild.data;
	var mastery_need = 0;
	if(skills[actual][skill_id]!=maximum[skill_id]){
		var mastery_need = xmldoc.getElementsByTagName("mastery_"+Number(skills[actual][skill_id]+1)).item(skill_id).firstChild.data;
	}
	if(masteries[actual]>=mastery_need && (skills[actual][skill_id]!=maximum[skill_id] && skills[actual][skill_id]!=0 || (skills[actual][skill_id]==0 && (condition_id==0 || skills[actual][condition_id]==condition_lvl)))){

		var lvl = skills[actual][skill_id];
		var MP = xmldoc.getElementsByTagName("MP_"+Number(lvl+1)).item(skill_id).firstChild.data;
		var description_get = xmldoc.getElementsByTagName("description_"+Number(lvl+1)).item(skill_id).firstChild.data;
		var description = description_get.replace(/(BREAK)/g, "<br />");

		window.document.getElementById("tooltip").style.right = "";
		window.document.getElementById("tooltip").style.bottom = "";

		window.document.getElementById("tooltip").style.top = Number(Number(xmldoc.getElementsByTagName("top").item(skill_id).firstChild.data)+33-show*55)+"px";
		window.document.getElementById("tooltip").style.left = xmldoc.getElementsByTagName("left").item(skill_id).firstChild.data+"px";

		document.getElementById("tooltip").innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td>Consumed&nbsp;MP:&nbsp;"+MP+"</td></tr><tr><td>"+description+"</td></tr></table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
	}
}

function tooltip_category(skill_id) {

	var xmldoc = data[actual];

	var ueberschrift = xmldoc.getElementsByTagName("ueberschrift").item(skill_id).firstChild.data;
	var beschreibung = xmldoc.getElementsByTagName("text").item(skill_id).firstChild.data;
	if(show_line[skill_id]<=1){
		window.document.getElementById("tooltip").style.bottom = "";
		window.document.getElementById("tooltip").style.top = Number(xmldoc.getElementsByTagName("top").item(skill_id).firstChild.data-show*55)+"px";
	}
	else {
		window.document.getElementById("tooltip").style.top = "";
		window.document.getElementById("tooltip").style.bottom = (406-Number(xmldoc.getElementsByTagName("top").item(skill_id).firstChild.data-show*55)-33)+"px";
	}
	window.document.getElementById("tooltip").style.right = "";
	window.document.getElementById("tooltip").style.left = xmldoc.getElementsByTagName("left").item(skill_id).firstChild.data+"px";

		document.getElementById("tooltip").innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td>"+ueberschrift+"<br /><br /></td></tr><tr><td>"+beschreibung+"</td></tr></table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";

}

function tooltip_mastery() {

		window.document.getElementById("tooltip").style.right = "";
		window.document.getElementById("tooltip").style.bottom = "";

		window.document.getElementById("tooltip").style.top = "99px";
		window.document.getElementById("tooltip").style.left = "99px";

		var condition = "";

		if(masteries[actual]<maximum_mastery){
			condition = "<tr><td class='yellow'><br /><img src='gfx/tooltip/conditionsign.gif' alt='' /> Next level condition<br />Character level: "+Number(masteries[actual]+1)+"<br />Required skillpoints: "+mastery_SP[masteries[actual]+1]+"</td></tr>";
		}

		var bicheon_text = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td class='head'>Bicheon Mastery Lv "+masteries[actual]+"<br /><br /></td></tr><tr><td>The swords of this mastery seem to soar high to the sky.<br />This swordmanship is very moderate and powerful.<br /></td></tr><tr><td class='yellow'>Used weapon: Sword, Blade<br />When equipped, attack power is increased by "+masteries[actual]+"%<br /></td></tr>"+condition+"</table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
		var heuksal_text = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td class='head'>Heuksal Mastery Lv "+masteries[actual]+"<br /><br /></td></tr><tr><td>Heuksalchangbeop is the spearmanship of the Heuksalmun.<br />It is the result of a comprehensive survey of various spearmanships.<br /></td></tr><tr><td class='yellow'>Used weapon: Spear, Glavie<br />When equipped, attack power is increased by "+masteries[actual]+"%<br /></td></tr>"+condition+"</table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
		var pacheon_text = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td class='head'>Pacheon Mastery Lv "+masteries[actual]+"<br /><br /></td></tr><tr><td>Secret archery is so powerful it breaks even the sky.<br />The skill is very graceful and militant.<br /></td></tr><tr><td class='yellow'>Used weapon: Bow<br />When equipped, attack power is increased by "+masteries[actual]+"%<br /></td></tr>"+condition+"</table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
		var cold_text = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td class='head'>Cold Mastery Lv "+masteries[actual]+"<br /><br /></td></tr><tr><td>Hanbingmyeongong is a Force skill which uses the energy of ice so you can freeze the enemy instantaneously and effectively.<br /><br /></td></tr><tr><td class='yellow'>Cold attack power "+masteries[actual]+"% increased<br /></td></tr>"+condition+"</table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
		var lightning_text = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td class='head'>Lightning Mastery Lv "+masteries[actual]+"<br /><br /></td></tr><tr><td>Pungroibigong is a Force skill which uses the energy of lightning so you can give electric pain to the enemy.<br /><br /></td></tr><tr><td class='yellow'>Lightning attack power "+masteries[actual]+"% increased<br /></td></tr>"+condition+"</table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
		var fire_text = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td class='head'>Fire Mastery Lv "+masteries[actual]+"<br /><br /></td></tr><tr><td>Hwaryeongsingong is a Force skill which uses the energy of fire so you can burn the enemy.<br /><br /></td></tr><tr><td class='yellow'>Fire attack power "+masteries[actual]+"% increased<br /></td></tr>"+condition+"</table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";
		var force_text = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td class='head'>Force Mastery Lv "+masteries[actual]+"<br /><br /></td></tr><tr><td>Gihyeoldaebeop is not a killing skill to harm people but a healing skill to save lives.<br /><br /></td></tr>"+condition+"</table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";

		masterytext = new Array(bicheon_text, heuksal_text, pacheon_text, cold_text, lightning_text, fire_text, force_text);

		document.getElementById("tooltip").innerHTML = masterytext[actual];

}

function tooltip_help() {

	var xmldoc = data[actual];

	window.document.getElementById("tooltip").style.left = "";
	window.document.getElementById("tooltip").style.bottom = "";

	window.document.getElementById("tooltip").style.top = "0px";
	window.document.getElementById("tooltip").style.right = "-1px";
	window.document.getElementById("tooltip").style.width = "275px";

		document.getElementById("tooltip").innerHTML = "<table cellpadding='0' cellspacing='0'><tr><td><img src='gfx/tooltip/tooltip_tl.gif' /></td><td id='top'></td><td><img src='gfx/tooltip/tooltip_tr.gif' /></td></tr><tr><td id='left'></td><td id='data'><table><tr><td>Left-clicking a button increases the value by 1, right-clicking decreases by 1<br /><hr /></td></tr><tr><td>Ctrl+left-clicking maximizes,<br />ctrl+right-clicking minimizes<br /><hr /></td></tr><tr><td>Only on masteries:</td></tr><tr><td>Shift+left-clicking increases by 10,<br />shift+right-clicking decreases by 10</td></tr></table></td><td id='right'></td></tr><tr><td><img src='gfx/tooltip/tooltip_bl.gif' /></td><td id='bottom'></td><td><img src='gfx/tooltip/tooltip_br.gif' /></td></tr></table>";

}

function loeschen(){

	document.getElementById("tooltip").innerHTML = '';
	window.document.getElementById("tooltip").style.width = "230px";
}

function sum(){
	
	for(k=0;k<=6;k++){
		var xmldoc = data[k];
		var SP = 0;
		SP_skilltree[k] = 0;
		for(i=1;i<=gesamt;i++){
			for(j=1;j<=skills[k][i];j++){
				var x = xmldoc.getElementsByTagName("SP_"+j).item(i).firstChild.data;
				SP_skilltree[k]+= Number(x);
			}
		}
		for(i=0;i<=masteries[k];i++){
			SP_skilltree[k] += mastery_SP[i];
		}
		for(i=0;i<=6;i++){
			SP+=SP_skilltree[i];
		}
	}
	write_SP(SP);
}

function write_SP(SP) {

	document.getElementById("total_SP").innerHTML = SP;
	document.getElementById("hidden_sum").value = SP;
	refresh_post();
}

function write_total_masteries() {

	mastery_sum = 0;
	for(i=0;i<=6;i++){
		mastery_sum+=Number(masteries[i]);
	}
	document.getElementById("total_masteries").innerHTML = mastery_sum;
}

function write_error(error) {

	document.getElementById("error").innerHTML += error + "<br/>";
	document.getElementById("error").style.visibility = "visible";
}

function clear_error() {

	document.getElementById("error").style.visibility = "hidden";
	document.getElementById("error").innerHTML = "";
}

function serialize(array) {
  
	var array_serialized = "";
	var total = 0;
	for (var key in array)
	{
		array_serialized = array_serialized + 'i:' + total +';' + 's:' +
		String(array[key]).length + ':"' + String(array[key]) + '";';
		total++;
	}
	array_serialized = "a:" + total + ":{" + array_serialized + "}";
	return array_serialized;
}

function refresh_post(){
	
	post = new Array();
	
	for(i=0;i<=6;i++)
	{
		post[i] = serialize(skills[i]);
	}
	post[7] = serialize(masteries);
	document.getElementById("hidden_data").value = serialize(post);
}

function keydown(evt) {

	if (!evt)
		evt = window.event;
	if (evt.keyCode==17) {
    	strg=1;
	}
	else if (evt.keyCode==16) {
		caps=1;
	}
	else if (evt.keyCode==83) {
		document.getElementById("credits").style.visibility = "hidden";
	}
}

function keyup(evt) {

	if (!evt)
    	evt = window.event;
	if (evt.keyCode==17) {
		strg=0;
	}
	else if (evt.keyCode==16) {
		caps=0;
	}
}

function wheel(evt) {

	var delta = 0;

    if (!evt)
    {
    	evt = window.event;
    }

    if (evt.wheelDelta)
    {
    	delta = evt.wheelDelta;
    }

	else if (evt.detail)
    {
    	delta = -evt.detail;
	}

    if (delta)
    {
        if (delta < 0)
        {
        	scrollen('down');
        }
        else
        {
            scrollen('up');
        }
    }
}

/* Programming & Design by CL / Reinent, Graphics taken from www.silkroadonline.net */
