/////////////
// Generic //
/////////////

function doGenericName(txt, cell, row, id) {
	cell.innerHTML = ""
	if (txt == "") txt = "** No Name #"+id+" **"
	var n = document.createTextNode(txt)
	var a = document.createElement("a")
	a.href = row["link"]
	a.appendChild(n)
	cell.appendChild(a)
	cell.style.textAlign = "left" // dont center name column
	cell.style.width = "100%" // Give it maximum width possible
	
	// add tooltips
	a.onmouseover = function(evt) { ttlib.startTooltip(this) }
	a.onmouseout = function(evt) { ttlib.hide() }
	
	return cell
}

function doGenericLookupReplace(txt, cell, row, array) {
	cell.innerHTML = array[txt]
	return cell
}

function doGenericLinkReplace(txt, cell, row, name, dict, li) {
	cell.innerHTML = ""
	var a = document.createElement("a")
	a.href = "/" + li + "/?" + name + "=" + txt
	a = doGenericLookupReplace(txt, a, row, dict)
	a.className = "link"
	cell.appendChild(a)
	return cell
}

function doSkillWithLevel(txt, cell, row) {
	cell.innerHTML = txt
	if (row["required_skill_level"] > 1) {
		cell.innerHTML = cell.innerHTML + " (" + row["required_skill_level"] + ")"
	}
	
	return cell
}


//////////////////
// Achievements //
//////////////////

function doAchievementFaction(txt, cell, row) {
	txt += 1 // FIXME should be serverside
	return doGenericLookupReplace(txt, cell, row, FACTIONS)
}

sorttable_template_achievement = {
	"columns_shown": {
		"link": false
	},
	
	"column_order": ["name", "instance", "points", "faction"],
	
	"hooks": {
		"name": doGenericName,
		"faction": doAchievementFaction
	}
}


///////////////
// Creatures //
///////////////

function doCreatureCategory(txt, cell, row) {
	return doGenericLinkReplace(txt, cell, row, "category", CREATURE_CATEGORIES, "creatures")
}

function doCreatureType(txt, cell, row) {
	return doGenericLinkReplace(txt, cell, row, "type", CREATURE_TYPES, "creatures")
}

function doCreatureFamily(txt, cell, row) {
	return doGenericLinkReplace(txt, cell, row, "family", CREATURE_FAMILIES, "creatures")
}

sorttable_template_creature = {
	"columns_shown": {
		"link": false
	},
	
	"column_order": ["name", "title", "category", "type", "family"],
	
	"hooks": {
		"name": doGenericName,
		"category": doCreatureCategory,
		"family": doCreatureFamily,
		"type": doCreatureType
	}
}

template_solditem_vendor = sorttable_template_creature


//////////////
// Enchants //
//////////////

sorttable_template_enchant = {
	"columns_shown": {
		"link": false,
		"required_skill_level": false
	},
	
	"column_names": {
		"required_skill": "Req. Skill",
		"required_skill_level": "Req. Skill level"
	},
	
	"column_order": ["name", "required_skill", "charges"],
	
	"hooks": {
		"name": doGenericName,
		"required_skill": doSkillWithLevel
	}
}
template_enchant_required_skill = sorttable_template_enchant


//////////////
// Holidays //
//////////////

sorttable_template_holiday = {
	"columns_shown": {
		"link": false
	},
	
	"column_order": ["name"],
	
	"hooks": {
		"name": doGenericName
	}
}


//////////////
// Factions //
//////////////

sorttable_template_faction = {
	"columns_shown": {
		"link": false
	},
	
	"column_order": ["name"],
	
	"hooks": {
		"name": doGenericName
	}
}


///////////
// Items //
///////////

function doItemLevel(txt, cell, row) {
	cell.innerHTML = txt
	if (row["required_level"] > 1) {
		cell.innerHTML += " (Req. " + row["required_level"] + ")"
	}
	
	return cell
}

function doItemSlot(txt, cell, row) {
	return doGenericLinkReplace(txt, cell, row, "slot", SLOTS, "items")
}

function doItemName(txt, cell, row) {
	cell = doGenericName(txt, cell, row)
	cell.getElementsByTagName("a")[0].className = "q"+row["quality"]
	
	return cell
}

sorttable_template_item = {
	"columns_shown": {
		"required_level": false,
		"quality": false,
		"link": false
	},
	
	"column_names": {
		"required_level": "Req. Level"
	},
	
	"column_order": ["name", "level", "source", "subclass", "slot"],
	
	"hooks": {
		"name": doItemName,
		"level": doItemLevel,
		"slot": doItemSlot
	}
}

template_item_related = sorttable_template_item
template_item_currency_for = sorttable_template_item
template_item_zone_bind = sorttable_template_item
template_item_required_holiday = sorttable_template_item
template_item_required_skill = sorttable_template_item
template_item_socket_bonus = sorttable_template_item
template_item_required_faction = sorttable_template_item
template_item_required_spell = sorttable_template_item
template_spell_item_used_by = sorttable_template_item // XXX name
template_creatureloot_creature = sorttable_template_item


template_solditem_item = {
	"columns_shown": {
		"required_level": false,
		"quality": false,
		"link": false,
		"source": false
	},
	
	"column_names": {
		"required_level": "Req. Level"
	},
	
	"column_order": ["name", "price", "level", "source", "subclass", "slot"],
	
	"hooks": {
		"name": doItemName,
		"level": doItemLevel,
		"slot": doItemSlot
	}
}

///////////////
// Item Sets //
///////////////

sorttable_template_itemset = {
	"columns_shown": {
		"link": false,
		"required_skill_level": false
	},
	
	"column_names": {
		"required_skill": "Req. Skill",
		"required_skill_level": "Req. Skill level"
	},
	
	"column_order": ["name", "required_skill"],
	
	"hooks": {
		"name": doGenericName,
		"required_skill": doSkillWithLevel
	}
}
template_itemset_required_skill = sorttable_template_itemset


////////////
// Quests //
////////////

function doQuestZone(txt, cell, row) {
	cell.innerHTML = ""
	var a = document.createElement("a")
	a.href = "/zone/" + row["zone_id"]
	a.innerHTML = txt
	a.className = "link"
	cell.appendChild(a)
	return cell
}

function doQuestLevel(txt, cell, row) {
	var lvl = txt
	if (lvl == -1) lvl = "Any"
	cell.innerHTML = lvl
	var t = row["get_type"]
	if (t) {
		var span = document.createElement("span")
		span.style.fontSize = "75%"
		span.innerHTML += " (" + t + ")"
		cell.appendChild(span)
	}
	return cell
}

sorttable_template_quest = {
	"columns_shown": {
		"link": false,
		"category": false,
		"zone_id": false
	},
	
	"column_names": {
		"get_type": "Type",
		"moneyreward": "Money Reward", // FIXME should be money_reward
		"zone_id": "Zone Id"
	},
	
	"column_order": ["name", "level", "zone"],
	
	"hooks": {
		"level": doQuestLevel,
		"name": doGenericName,
		"zone": doQuestZone
	}
}
template_item_reward_from = sorttable_template_quest
template_questrewardfaction_quest = sorttable_template_quest
template_quest_zone = sorttable_template_quest
template_required_for_quest = sorttable_template_quest


////////////
// Skills //
////////////

sorttable_template_skill = {
	"columns_shown": {
		"link": false
	},
	
	"column_names": {
		"is_tradeskill": "Tradeskill"
	},
	
	"column_order": ["name", "is_tradeskill"],
	
	"hooks": {
		"name": doGenericName
	}
}

template_skill_spells = sorttable_template_skill


////////////
// Spells //
////////////

function doSpellDispel(txt, cell, row) {
	cell.innerHTML = ""
	var a = document.createElement("a")
	a.href = "/spells/?dispel_type=" + txt
	a = doGenericLookupReplace(txt, a, row, DISPEL_TYPES)
	a.className = "link"
	cell.appendChild(a)
	return cell
}

sorttable_template_spell = {
	"columns_shown": {
		"link": false
	},
	
	"column_names": {
		"dispel_type": "Dispel Type"
	},
	
	"column_order": ["name", "rank", "category", "dispel_type"],
	
	"hooks": {
		"name": doGenericName,
		"dispel_type": doSpellDispel
	}
}

template_spell_reagents = sorttable_template_spell
template_skillspell_skill = sorttable_template_spell


///////////
// Zones //
///////////

sorttable_template_zone = {
	"columns_shown": {
		"link": false
	},
	
	"column_order": ["name", "level"],
	
	"hooks": {
		"name": doGenericName
	}
}
