// JavaScript Document
function compare_skills(a, b)
{
	if(a.skill_name.toLowerCase() > b.skill_name.toLowerCase()) return 1;
	if(a.skill_name.toLowerCase() < b.skill_name.toLowerCase()) return -1;
	if(a.grade > b.grade) return 1;
	if(a.grade < b.grade) return -1;
	return 0;
}
function skill(info)
{
	this.level = info[0];
	this.id = info[1];
	this.skill_name = info[2];
	this.sb = info[3];
	this.grade = info[4];
	this.type = info[5];
	this.mp = info[6];
	this.hp = info[7];
	this.sp = info[8];
	this.description = info[9].replace(/"/g, '');
	this.icon = info[10];
	this.skill_range = info[11];
}

function skill_class(name)
{
	this.skills_sorted = false;
	this.name = name;
	this.skills = new Array();
	this.skills_by_level = new Array();
	this.first_skill_level = -1;
	
	this.add_skill = class_add_skill;
	this.output = skill_class_table;
	this.sort_levels = class_sort_levels;
	this.level_select = level_select_output;
	this.generate_skills = function(level)
	{
		var output = '';
		var skill_points = '';
		var levels = '';
		var img_name;
		var counter = 1;
		var range = '';
		var id_skill_link = '';
		var level_skill_link =  '';
		for(i=0; i < this.skills_by_level[level].length; i++)
		{
			img_name = this.skills_by_level[level][i].icon + '.jpg';
			range = '';
			skill_points =  parseInt(skill_points + this.skills_by_level[level][i].sp);
			if(this.skills_by_level[level][i].level == 9999) {
				level_skill_link = 76;
				levels = 76;
			} else {
				level_skill_link = this.skills_by_level[level][i].level;
				levels = this.skills_by_level[level][i].level;
			}
			
			range = '<br /><br /><span style="color:#B09B79">Range: ' + this.skills_by_level[level][i].skill_range + '</span><br /><br />';
			
			if(range == '<br /><br /><span style="color:#B09B79">Range: -1</span><br /><br />'){
				range = '';
			}
			
			if(this.skills_by_level[level][i].id == 999999999999) {
				output += '<tr>' +
					 '<td colspan="10" class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#B09B79"><strong>' + numberFormat2(this.skills_by_level[level][i].sp) + 'x</strong> ' + this.skills_by_level[level][i].type +  '<br />' + ' <img src="/images/skill_icons/' + img_name + '" style="border: solid 1px #FFFCB9;"><br /><br />' + this.skills_by_level[level][i].description + '</td>' +
					 '</tr>';
			} else {
			output += '<tr>' +
					 '<td class="skill_table_cell" align="center" valign="middle" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '"><img src="/images/skill_icons/' + img_name + '" style="border: solid 1px #FFFCB9;"></td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#B09B79">' + level_skill_link + '</td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '">' + this.skills_by_level[level][i].skill_name + '</td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#B09B79">' + ((this.skills_by_level[level][i].sb) ? ' <img src="/images/sb.png" width="11" height="11" />' : '') + '</td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#B09B79">' + this.skills_by_level[level][i].grade + '</td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#B09B79">' + this.skills_by_level[level][i].type + '</td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#2D81FF"><b>' + this.skills_by_level[level][i].mp + '</b></td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#CA3626"><b>' + this.skills_by_level[level][i].hp + '</b></td>' +
					 '<td class="skill_table_cell" align="center" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '" style="color:#B09B79">' + numberFormat2(this.skills_by_level[level][i].sp) + '</td>' +
					 '<td class="skill_table_cell" bgcolor="' + ((counter%2) ? '#1D1D1B' : '#2A2928') + '">' + this.skills_by_level[level][i].description + range + '</td>' +
					 '</tr>';
			}
					 
			counter++;
		}
		
		output += '<tr>' +
					 '<td colspan="10" class="skill_table_cell" align="center" valign="middle" style="background: url(/images/skill_sum.png)"><span style="color:#B09B79"><a href="#top"><img src="/images/top_off.png" onmouseout="src=\'/images/top_off.png\'" onmouseover="src=\'/images/top_on.png\'" onmousedown="src=\'/images/top_down.png\'" onmouseup="src=\'/images/top_on.png\'" border="0" alt="To the Top"></a>&nbsp;&nbsp;&nbsp;&nbsp;<b>' + numberFormat2(skill_points) + '</b></span> skill points (SP) is needed to learn all level <span style="color:#B09B79"><b>' + levels + '</b></span> skills&nbsp;&nbsp;&nbsp;&nbsp;<a href="#top"><img src="/images/top_off.png" onmouseout="src=\'/images/top_off.png\'" onmouseover="src=\'/images/top_on.png\'" onmousedown="src=\'/images/top_down.png\'" onmouseup="src=\'/images/top_on.png\'" border="0" alt="To the Top"></a></td>' +
					 '</tr>';
		
		return output;
	}
	this.num_sort = function(a, b)
	{
		//var a = new Number(a);
		//var b = new Number(b);
		if(a > b) return 1;
		if(a < b) return -1;
		return 0;
	}
}

function numberFormat2(nStr){
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1))
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  return x1 + x2;
}

function level_select_output(level)
{
	output = '<p style="margin-right: 20px; text-align: right; margin-top: 3px; margin-bottom: 10px; color: #DABA4C;">' +
			 '<b>Level: </b><select style="font-weight: bold; background: #181817; color: #DABA4C; border: solid 1px #4B4B4A;" name="level_selector" onChange="javascript: my_skills.output(this.options[this.selectedIndex].value);">';
	output += '<option value="-1">All</option>';
	for(var key in this.skills_by_level)
	{
		if(key == 9999){
			output += '<option value="' + key + '"' + ((key == level) ? ' SELECTED' : '') + '>Skill Transfer</option>';
		} else {
			output += '<option value="' + key + '"' + ((key == level) ? ' SELECTED' : '') + '>' + key + '</option>';
		}
	}
	output += '</select></p>';
	return output;
}

function class_sort_levels()
{
	var tmp_array = new Array();
	var tmp_skills = new Array();
	for(i=0; i < this.skills.length; i++)
	{
		if(!this.skills_by_level[this.skills[i].level])
		{
			this.skills_by_level[this.skills[i].level] = new Array();
			tmp_array.push(this.skills[i].level);
		}
		this.skills_by_level[this.skills[i].level].push(this.skills[i]);
		this.first_skill_level = (this.first_skill_level == -1 || this.skills[i].level < this.first_skill_level) ? this.skills[i].level : this.first_skill_level;
	}
	tmp_array.sort(this.num_sort);
	for(var i=0; i < tmp_array.length; i++)
	{
		tmp_skills[tmp_array[i]] = this.skills_by_level[tmp_array[i]];
	}
	this.skills_by_level = tmp_skills;
}

function first_to_upper(in_string)
{
	var out_string = '';
	for(var i =0; i < in_string.length; i++)
	{
		if(i == 0 || in_string.charAt(i-1) == ' ')
		{
			out_string += in_string.charAt(i).toUpperCase();
		} else {
			out_string += in_string.charAt(i);
		}
	}
	return out_string;
}

function class_add_skill(level, id, skill_name, sb, grade, type, mp, hp, sp, description, icon, skill_range)
{
	info = new Array(level, id, skill_name, sb, grade, type, mp, hp, sp, description, icon, skill_range);
	new_skill = new skill(info);
	this.skills.push(new_skill);
}

function skill_class_table(level)
{
	if(!this.skills_sorted)
	{
		for(var key in this.skills_by_level)
		{
			this.skills_by_level[key].sort(compare_skills);
		}
		this.skills_sorted = true;
	}
	if(this.name != "")
	{
		output = '<div id="class_title">' + first_to_upper(this.name) + ' Skills</div>' +
				 '<div id="level_select">' + this.level_select(level) + '</div>';
				 
		output += '<table id="skill_table" width="700" cellpadding="0" cellspacing="0" border="0" align="center">' +
			   '<tr style="font-weight: bold;">' +
			   '<td class="skill_table_header">&nbsp;</td>' +
			   '<td class="skill_table_header">Level</td>' +
			   '<td class="skill_table_header">Skill&nbsp;Name</td>' +
			   '<td class="skill_table_header">Spellbook</td>' +
			   '<td class="skill_table_header">Skill Level</td>' +
			   '<td class="skill_table_header">Skill Type</td>' +
			   '<td class="skill_table_header">MP</td>' +
			   '<td class="skill_table_header">HP</td>' +
			   '<td class="skill_table_header">SP&nbsp;Cost</td>' +
			   '<td class="skill_table_header">Description</td>' +
			   '</tr>';
			   
		if(level != -1)
		{
			output += this.generate_skills(level);
		} else {
			for(var key in this.skills_by_level)
			{
				output += this.generate_skills(key);
			}
		}
		output += '</table>';
	} else {
		output = '&nbsp;';
	}
	document.getElementById('skill_table_content').innerHTML = output;
}
