var LINK = "http://everquest.allakhazam.com/db/spell.html?spell=";

var MIN_DISPLAY_LEVEL = 68; // lowest level to display for the table
var MAX_DISPLAY_LEVEL = 80;// highest level to display for the table

var LEVEL_BOUNDARY = 200; // if the max level for a focus is greater than or equal to this, don't display the level.

var DROP_PER_LEVEL = 0.05; // the amount of bonus a focus effect loses for each level over the max.


function FocusEffect(id, name, bonus, maxlevel, notes)
{
	this.ID = id;
	this.Name = name;
	this.Bonus = bonus;
	if (maxlevel === "" || maxlevel === null)
	{
		this.MaxLevel = LEVEL_BOUNDARY;
	}
	else
	{
		this.MaxLevel = maxlevel;
	}
	this.Notes = notes;
} // FocusEffect()


function CalculateBonus(Bonus, MaxLevel, SpellLevel)
{
	if (MaxLevel < LEVEL_BOUNDARY)
	{
		return Math.min(Math.max(0, Math.floor(Bonus - (SpellLevel-MaxLevel) * DROP_PER_LEVEL * Bonus)), Bonus);
	}
	else
	{
		return Bonus;
	}
} // GetBonus()


function GetHeaderRow()
{
	var RetVal = new Array();
	RetVal.push("	<tr>\n");
	RetVal.push("		<th>Focus name</th>\n");
	RetVal.push("		<th>Heal<br />boost</th>\n");
	RetVal.push("		<th>Max<br />Level</th>\n");
	for (var i = MIN_DISPLAY_LEVEL; i <= MAX_DISPLAY_LEVEL; i++)
	{
		RetVal.push("		<th>");
		RetVal.push(i);
		RetVal.push("</th>\n");
	}
	RetVal.push("		<th>Notes</th>\n");
	RetVal.push("	</tr>\n");

	return RetVal.join("");
} // GetHeaderRow()


function GetFocusRow(Focus)
{
	var RetVal = new Array();
	RetVal.push("	<tr>\n");
	RetVal.push("		<td><a href=\"");
	RetVal.push(LINK);
	RetVal.push(Focus.ID);
	RetVal.push("\">");
	RetVal.push(Focus.Name);
	RetVal.push("</a></td>\n");
	RetVal.push("		<td align=\"center\">");
	RetVal.push(Focus.Bonus);
	RetVal.push("</td>\n");
	RetVal.push("		<td align=\"center\">");
	RetVal.push((Focus.MaxLevel < LEVEL_BOUNDARY ? Focus.MaxLevel : "&nbsp;"));
	RetVal.push("</td>\n");
	for (var i = MIN_DISPLAY_LEVEL; i <= MAX_DISPLAY_LEVEL; i++)
	{
		RetVal.push("		<td align=\"center\">");
		RetVal.push(CalculateBonus(Focus.Bonus, Focus.MaxLevel, i));
		RetVal.push("</td>\n");
	}
	RetVal.push("		<td>");
	RetVal.push((Focus.Notes != "" ? Focus.Notes : "&nbsp;"));
	RetVal.push("</td>\n");
	RetVal.push("	</tr>\n");

	return RetVal.join("");
} // GetFocusRow()


function GetTableContents()
{
	var RetVal = new Array();
	RetVal.push(GetHeaderRow());
	var NumEffects = FocusList.length;
	for (var i = 0; i < NumEffects; i++)
	{
		RetVal.push(GetFocusRow(FocusList[i]));
	}
	return RetVal.join("");
} // GetTableContents()

