Village Page Reorganizer

Highlights, rearranges, and adds context to village page

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name          Village Page Reorganizer
// @namespace     FaxCelestis
// @description   Highlights, rearranges, and adds context to village page
// @include       *animecubed.com/billy/bvs/village.h*
// @grant         GM_addStyle
// @author        FaxCelestis
// @version       1.1d
// 0.1 - Does Stuff. And possibly also Things.
// 0.1a - successfully implemented tabs for left bar boxes
// 0.1b - in process of parsing village info and putting it into vinfo tab. Getting the villager list was a bitch and a half. Still not sure what's causing the weird overhang on the right, but that needs to comment out anyway
// 0.1c - weird overhang handled, most of village page parsed into tabs
// 1.0 - initial release. Still does not handle zombjas, snow, resupply, or festival
// 1.0a - now handles zombjas, but still no snow, resupply, or festival. Or Hidden Ho-Claus for that matter.
// 1.0b - now handles snow. Still need HHC, resupply, festival, possibly dice altar. Also incidentally realigns the leave village box with the left margin because its centered alignment was annoying me.
// 1.0c - now handles HHC, added contract milling back in, whoops.
// 1.0d - fixes an issue with prepped invasions
// 1.0e - commentary and general cleanup, recolorization of tab headers for better integration. Also invasion prep issue fixed for real.
// 1.0f - possible FF bugfix?
// 1.0g - actual FF bugfix
// 1.0h - fixes issue with kaiju summoning
// 1.0i - fixes issue with ingredient hunting, moves Fighto and Lucha to Battle tab, moves Leave Village to Village Admin tab
// 1.1 - adds village applications. New version ID because this is a big change. Currently does not interact with wandering genin, but all other application and member functions are now functional.
// 1.1a - really fixes the issue with ingredient hunting for real this time
// 1.1b - fixes an issue with regex not finding the ability to mill contracts in Firefox
// 1.1c - fixes an issue with peacetime
// 1.1d - adds festival functionality, resupply action

// ==/UserScript==
// get player and password hash from html, necessary to build task boxes
var player = document.getElementsByName("player")[1].value;
var pass = document.getElementsByName("pwd")[1].value;

//determine availability of features with binary variables
var isCandyween = (document.body.innerHTML.match(/document.candyween.submit/g) || []).length;
var isFestival = (document.body.innerHTML.match(/document.festival.submit/g) || []).length;
var hasPF = (document.body.innerHTML.match(/document.pgfestival.submit/g) || []).length;
var isSnow = (document.body.innerHTML.match(/document.snowday.submit/g) || []).length;
var isHHC = (document.body.innerHTML.match(/document.hoclaus.submit/g) || []).length;
var kaijuAvail = (document.body.innerHTML.match(/document.kat.submit/g) || []).length;
var zombjasAvail = (document.body.innerHTML.match(/document.zat.submit/g) || []).length;
var phaseAvail = (document.body.innerHTML.match(/document.phases.submit/g) || []).length;
var pwAvail = (document.body.innerHTML.match(/document.pizzamenu.submit/g) || []).length;
var bConAvail = (document.body.innerHTML.match(/document.concenter.submit/g) || []).length;
var canSpy = (document.body.innerHTML.match(/document.spy.submit/g) || []).length;
var canAttack = (document.body.innerHTML.match(/document.vattack.submit/g) || []).length;
var canBingo = (document.body.innerHTML.match(/document.bbook.submit/g) || []).length;
var canSci = (document.body.innerHTML.match(/document.science.submit/g) || []).length;
var marketAvail = (document.body.innerHTML.match(/document.market.submit/g) || []).length;
var canEnhance = (document.body.innerHTML.match(/document.jenhance.submit/g) || []).length;
var canFighto = (document.body.innerHTML.match(/document.robofighto.submit/g) || []).length;
var canVaca = (document.body.innerHTML.match(/document.ninjabeach.submit/g) || []).length;
var canPerm = (document.body.innerHTML.match(/document.setperm.submit/g) || []).length;
var canInquisit = (document.body.innerHTML.match(/document.irreport.submit/g) || []).length;
var canGetSpies = (document.body.innerHTML.match(/document.spyreport.submit/g) || []).length;
var canEat = (document.body.innerHTML.match(/document.ramen.submit/g) || []).length;
var canChillax = (document.body.innerHTML.match(/document.brotime.submit/g) || []).length;
var BTVAvail = (document.body.innerHTML.match(/document.tvtime.submit/g) || []).length;
var canLemonaid = (document.body.innerHTML.match(/document.lemonaid.submit/g) || []).length;
var canRock = (document.body.innerHTML.match(/document.blackstones.submit/g) || []).length;
var canRoll = (document.body.innerHTML.match(/document.dicetime.submit/g) || []).length; //ha ha, canRock and canRoll
var canStudy = (document.body.innerHTML.match(/document.pandtime.submit/g) || []).length;
var canLucha = (document.body.innerHTML.match(/document.eldiablo.submit/g) || []).length;
var canHunt = (document.body.innerHTML.match(/document.ingredienthunt.submit/g) || []).length;
var canNoteProtect = (document.body.innerHTML.match(/document.obscure.submit/g) || []).length;
var fieldsAvail = (document.body.innerHTML.match(/document.fieldmenu.submit/g) || []).length;
var spendZR = (document.body.innerHTML.match(/document.zrt.submit/g) || []).length;
var canCollect = (document.body.innerHTML.match(/document.rescol.submit/g) || []).length;
var canPatrol = (document.body.innerHTML.match(/document.patrol.submit/g) || []).length;
var canPaperwork = (document.body.innerHTML.match(/document.paperwork.submit/g) || []).length;
var canRepair = (document.body.innerHTML.match(/document.repcol.submit/g) || []).length;
var canSiege = (document.body.innerHTML.match(/document.sgrs.submit/g) || []).length;
var canDeclare = (document.body.innerHTML.match(/document.vwars.submit/g) || []).length;
var canDonate = (document.body.innerHTML.match(/document.cryo.submit/g) || []).length;
var canApprove = (document.body.innerHTML.match(/document.allapp.submit/g) || []).length;
var canOpenApp = (document.body.innerHTML.match(/document.allapp2.submit/g) || []).length;
var canResupply = (document.body.innerHTML.match(/document.zatrs.submit/g) || []).length;

//inject tab CSS into stylesheet
function addTabCSS() {
    var css = document.createElement("style");
    css.type = "text/css";
    css.innerHTML = "ul#tabs { list-style-type: none; margin: 30px 0 0 0; padding: 0 0 0.3em 0; } ul#tabs { list-style-type: none; margin: 30px 0 0 0; padding: 0 0 0.3em 0; } ul#tabs li { display: inline; } ul#tabs li a { color: #59421b; background-color: #dabb86; border: 1px solid #59421b; border-bottom: none; padding: 0.3em; text-decoration: none; font-size: 0.75em } ul#tabs li a:hover { background-color: #e8d4b3; font-size: 0.75em } ul#tabs li a.selected { color: #000000; background-color: #dabb86; font-weight: bold; padding: 0.7em 0.3em 0.38em 0.3em; font-size: 0.9em } div.tabContent { border: 1px solid #59421b; padding: 0.5em; background-color: #E0C69A; } div.tabContent.hide { display: none; }";
    document.head.appendChild(css);
}

//declare some variables for later and start the tables for the content divs
var contentInsert = [];
var events = "<table width=\"220\">";
var battle = "<table width=\"220\">";
var attack = "<table width=\"440\"><tr valign=\"top\"><td>";
var admin = "<table width=\"440\"><tr><td><table width=\"220\">";
var vcenter = "<table width=\"440\"><tr valign=\"top\"><td>";
var vinfo = "<table width=\"440\">";

//build content divs based upon initial binary variable declarations
vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#040449;background-image:url(/billy/layout/phousevilbg.jpg);color:white;background-color:black;font-size:12px;font-family:arial\">Chat, relax, and win fabulous prizes!<br><form name=\"partyhouse\" style=\"margin:0\" action=\"partyhouse.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.partyhouse.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Party House</b></a></p><noscript><input type=\"submit\" VALUE=\"Party House\"></noscript></form></tr></table>");

vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#040449;background-color:#111153;color:white;font-size:12px;font-family:arial\">Give and Take Items in the Storehouse!<br><form name=\"shouse\" style=\"margin:0\" action=\"villagestorehouse.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.shouse.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Storehouse &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Storehouse &gt;\"></noscript></form></tr></table>");

if (isCandyween > 0) {
    events = events.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#E27119;background-color:#000000;color:#E27119;font-family:arial;font-size:12px\">It's Candyween!<br><form name=\"candyween\" style=\"margin:0\" action=\"villagecandyween.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.candyween.submit();\" onfocus=\"this.blur();\" style=\"color:#F07020; font-size:14px\"><b>Candyween! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Candyween!\"></noscript></form></td></tr>");
}

if (isFestival > 0) {
    events = events.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#000033;background-color:#000099;background-image:url(/billy/layout/festivallink.jpg);color:white;font-family:arial;font-size:12px\">It's Festival Day!<br><form name=\"festival\" style=\"margin:0\" action=\"festival.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.festival.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Festival Day! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Festival Day!\"></noscript></form></tr>");
}

if (hasPF > 0) {
    events = events.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#000033;background-color:#000099;background-image:url(/billy/layout/festivallink.jpg);color:white;font-family:arial;font-size:12px\">It\'s Festival day - if you want it to be!<br><div align=\"right\">(Personal Festival ends at Dayroll!)</div><br><form name=\"pgfestival\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.pgfestival.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Start Personal Festival!</b></a><br><input type=\"checkbox\" name=\"pgfestival\" value=\"1\"><font color=\"FFFFFF\"> (confirm)</font></p><noscript><input type=\"submit\" VALUE=\"Start your Personal Festival!\"></noscript></form></tr>");
}

if (isSnow > 0) {
    events = events.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#FFFFFF;background-color:#444488;color:white;font-family:arial;font-size:12px\">Oh, man, look at all the snow...<br><form name=\"snowday\" style=\"margin:0\" action=\"villagesnowday.html\" method=\"post\"><input name=\"player\" value=\"" + player + "\" type=\"hidden\"><input name=\"pwd\" value=\"" + pass + "\" type=\"hidden\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.snowday.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Snow Day! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Snow Day!\"></noscript></form></td></tr>");
}

if (isHHC > 0) {
    events = events.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#660000;background-color:#006600;color:white;font-family:arial;font-size:12px\">It's Ninja-Mas Eve!<br><form name=\"hoclaus\" style=\"margin:0\" action=\"villagehoclaus.html\" method=\"post\"><input name=\"player\" value=\"" + player + "\" type=\"hidden\"><input name=\"pwd\" value=\"" + pass + "\" type=\"hidden\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.hoclaus.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Hidden HoClaus! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Hidden HoClaus!\"></noscript></form></td></tr>");
}

if (kaijuAvail > 0) {
    battle = battle.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#411E01;background-color:#000000;color:white;font-family:arial;font-size:12px\">Your village is under attack by a giant monster!<br><form name=\"kat\" style=\"margin:0\" action=\"villagemonsterfight.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.kat.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Kaiju Battle! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Monster Fight\"></noscript></form></td></tr>");
}

if (zombjasAvail > 0) {
    battle = battle.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#014E01;background-color:#003300;color:white;font-family:arial;font-size:12px\">Zombjas have attacked your Village!<br><form name=\"zat\" style=\"margin:0\" action=\"zombjas.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.zat.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Zombja Battle! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Zombja Fight\"></noscript></form></td></tr>");
}

if (phaseAvail > 0) {
    battle = battle.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#1E4101;background-color:#000000;color:white;font-family:arial;font-size:12px\">Multi-Dimensional Kaiju!<br><form name=\"phases\" style=\"margin:0\" action=\"villagephases.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.phases.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Phase Menu &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Phase Menu\"></noscript></form></td></tr>");
}

if (pwAvail > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#990000;background-color:white;color:006600;font-family:arial;font-size:12px\">Drop By PizzaWitch!<br><form name=\"pizzamenu\" style=\"margin:0\" action=\"pizzawitchgarage.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.pizzamenu.submit();\" onfocus=\"this.blur();\" style=\"color:#006600; font-size:14px\"><b>PizzaWitch Delivery &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Deliveries &gt;\"></noscript></form></td></tr></table>");
}

if (bConAvail > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#1E0141;background-color:#000040;color:white;font-family:arial;font-size:12px\">Go to the Convention Center!<br><form name=\"concenter\" style=\"margin:0\" action=\"billycon-register.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.concenter.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Register for BillyCon &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Register for BillyCon\"></noscript></form></td></tr></table>");
}

if (canSpy > 0) //TODO: if-bingoed statement
{
    attack = attack.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#411E01;background-color:#834411;color:white;font-family:arial;font-size:12px\">Spy on other villages to find out where to get the rare resources your village needs!<br><form name=\"spy\" style=\"margin:0\" action=\"villagespy.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.spy.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Spy on Other Villages &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Spy on Other Villages\"></noscript></form></tr></table>");
}

if (canAttack > 0) //TODO: if-bingoed statement
{
    attack = attack.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#490404;background-color:#530606;color:white;font-size:12px\">Attack other villages for resources and XP!<br><form name=\"vattack\" style=\"margin:0\" action=\"villageattack.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.vattack.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Attack Other Villages &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Attack Other Villages\"></noscript></form></tr></table>");
}

if (canBingo > 0) //TODO: if-bingoed statement
{
    attack = attack.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#490404;background-color:#831111;color:white;font-size:12px\">Sick of enemy Ninja raiding your village? Take care of them first!<br><form name=\"bbook\" style=\"margin:0\" action=\"bingo.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.bbook.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Go To Bingo Book &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Bingo Book\"></noscript></form></tr></table>");
}

if (canSci > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#040449;background-color:#831111;color:white;font-size:12px;font-family:arial\">Perform mad experiments to enhance your village!<br><form name=\"science\" style=\"margin:0\" action=\"villagescience.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.science.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>SCIENCE!</b></a></p><noscript><input type=\"submit\" VALUE=\"SCIENCE!\"></noscript></form></td></tr>");
}

if (marketAvail > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#404409;background-color:#444411;color:white;font-size:12px;font-family:arial\">Buy and sell items!<br><form name=\"market\" style=\"margin:0\" action=\"villagemarketplace.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.market.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Marketplace &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Marketplace &gt;\"></noscript></form></tr></table>");
}

if (canEnhance > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#490404;background-color:#111141;color:white;font-size:12px;font-family:arial\">Enhance the quality of your Jutsu!<br><form name=\"jenhance\" style=\"margin:0\" action=\"villagejenhance.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.jenhance.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Jutsu Enhancement</b></a></p><noscript><input type=\"submit\" VALUE=\"Jutsu Enhancement\"></noscript></form></tr></table>");
}

if (canFighto > 0) {
    battle = battle.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#490404;background-color:#114111;color:white;font-size:12px;font-family:arial\">Enter the ROBO FIGHTO!<br><form name=\"robofighto\" style=\"margin:0\" action=\"villagerobofighto.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.robofighto.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>FIGHTO</b></a></p><noscript><input type=\"submit\" VALUE=\"FIGHTO\"></noscript></form></tr>");
}

if (canVaca > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#111E01;background-color:#434411;color:white;font-family:arial;font-size:12px\">Relax on the beach!<br><form name=\"ninjabeach\" style=\"margin:0\" action=\"villagebeach.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.ninjabeach.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Vacation!</b></a></p><noscript><input type=\"submit\" VALUE=\"Vacation!\"></noscript></form></tr>");
}

if (canPerm > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#040449;background-color:#531111;color:white;font-size:12px;font-family:arial\">Set Villager Permissions!<br><form name=\"setperm\" style=\"margin:0\" action=\"villagepermissions.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.setperm.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Permissions &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Permissions &gt;\"></noscript></form></td></tr>");
}

if (canInquisit > 0) {
    attack = attack.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#240904;background-color:#230606;color:white;font-size:12px;font-family:arial\">Check your Village for Spies!<br><form name=\"irreport\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"interrocheck\" value=\"go\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.irreport.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Launch Inquisition</b></a></p><noscript><input type=\"submit\" VALUE=\"Interrogate\"></noscript></form></tr></table>");
}

if (canGetSpies > 0) {
    attack = attack.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#440409;background-color:#531111;color:white;font-size:12px;font-family:arial\">Get a Report from all active Spies<br><form name=\"spyreport\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"network\" value=\"go\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.spyreport.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Get Spy Report</b></a></p><noscript><input type=\"submit\" VALUE=\"Get Spy Report\"></noscript></form></tr></table>");
}

if (canEat > 0) {
    var pullsAllowed = /Pulls allowed today: ([\d]+)/.exec(document.body.innerHTML)[1];
    var currentJXP = /Current JXP: ([\d,]+)/.exec(document.body.innerHTML)[1];
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#040449;background-color:#115311;color:white;font-size:12px;font-family:arial\">Swipe some eats at the Ramen Shop!<br>Pulls allowed today: " + pullsAllowed + "<br>Current JXP: " + currentJXP + "<br>All costs x10 for second ramen!<br><form name=\"ramen\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"radio\" name=\"ramentobuy\" value=\"chak\" ><b>Chicken Ramen</b><br>&nbsp;&nbsp;(+500 Chakra) - 15,000 JXP<br><input type=\"radio\" name=\"ramentobuy\" value=\"app\" ><b>Diet Ramen</b><br>&nbsp;&nbsp;(+40 Appetite) - 15,000 JXP<br><input type=\"radio\" name=\"ramentobuy\" value=\"bonus\" ><b>Red Fox Ramen</b><br>&nbsp;&nbsp;(+3 Levels on Missions today) - 60,000 JXP<br><input type=\"radio\" name=\"ramentobuy\" value=\"stam\" ><b>Beef Ramen</b><br>&nbsp;&nbsp;(+30 Stamina) - 90,000 JXP<br><input type=\"radio\" name=\"ramentobuy\" value=\"find\" ><b>Ichi Special</b><br>&nbsp;&nbsp;(+100% Find Ninja/Items Chance) - 100,000 JXP<br><input type=\"radio\" name=\"ramentobuy\" value=\"stam2\" ><b>Teriyaki Ramen</b><br>&nbsp;&nbsp;(+100 Stamina) - 400,000 JXP<br><input type=\"radio\" name=\"ramentobuy\" value=\"glad\" ><b>The Gladiator</b> (It's Got Electrolytes!)<br>&nbsp;&nbsp;(+10 Arena Fights) - 1,000,000 JXP<br><input type=\"radio\" name=\"ramentobuy\" value=\"dou\" ><b>Greassy Ramen</b> (Mmm, Grindy!)<br>&nbsp;&nbsp;(+200% Dou AP / -80% Ranking XP) - 3,000,000 JXP<br><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.ramen.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Purchase Ramen</b></a></p><noscript><input type=\"submit\" VALUE=\"Purchase Ramen\"></noscript></form></tr></table></td><td>");
}

if (canChillax > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#111166;color:white;font-size:12px;font-family:arial\">Chillax in front of the Manly Altar!<br><form name=\"brotime\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"brofist\" value=\"1\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.brotime.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Chillax, Bro.</b></a></p><noscript><input type=\"submit\" VALUE=\"Chillax, Bro.\"></noscript></form></tr></table>");
}

if (BTVAvail > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#116611;color:white;font-size:12px;font-family:arial\">Go see how a hit show is made!<br><form name=\"tvtime\" style=\"margin:0\" action=\"billytv.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.tvtime.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>It's BillyTV!</b></a></p><noscript><input type=\"submit\" VALUE=\"It's BillyTV!\"></noscript></form></tr></table>");
}

if (canLemonaid > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#444400;color:white;font-size:12px;font-family:arial\">Have some tasty Lemonade!<br><form name=\"lemonaid\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"lemonaid\" value=\"1\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.lemonaid.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>More like Lemon-\"aid\" amirite? &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"More like Lemon-aid amirite? &gt;\"></noscript></form></tr></table>");
}

if (canRock > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#116611;color:white;font-size:12px;font-family:arial\">Go to a Black Stones Concert!<br><form name=\"blackstones\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><input type=\"hidden\" name =\"blackstone\" value=\"1\"><a href=\"javascript:document.blackstones.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Rock On!</b></a></p><noscript><input type=\"submit\" VALUE=\"Rock On!\"></noscript></form></tr></table>");
}

if (canRoll > 0) // no idea why the font color tags are't working here
{
    var LWC = (document.body.innerHTML.match(/auto-rerolls/g).length || []);
    if (LWC > 0) {
        vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#116611;color:white;font-size:12px;font-family:arial\">The Dice call to you...<br><form name=\"dicetime\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><br><input type=\"hidden\" name=\"diceuse\" value=\"1\">Preferred Roll: <select name=\"diceuseb\"><option value=\"0\">Not Pestilence</option><option value=\"1\">Food</option><option value=\"2\">Coin</option><option value=\"3\">Workers</option></select><font style=\"font-size:12px\"><i><br>(auto-rerolls once if chosen type not rolled)</i></font><br><a href=\"javascript:document.dicetime.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Roll That Die!</b></a></p><noscript><input type=\"submit\" VALUE=\"Roll That Die!\"></noscript></form></tr></table>");
    } else {
        vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#331100;color:white;font-size:12px;font-family:arial\">The Dice call to you...<br><form name=\"dicetime\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><input type=\"hidden\" name=\"diceuse\" value=\"0\"><a href=\"javascript:document.dicetime.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Roll That Die!</b></a></p><noscript><input type=\"submit\" VALUE=\"Roll That Die!\"></noscript></form></tr></table>");
    }
}

if (canStudy > 0) {
    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#661111;color:white;font-size:12px;font-family:arial\">Study at the Pandora Library!<br><form name=\"pandtime\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"pandlib\" value=\"1\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.pandtime.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Get your Learn On!</b></a></p><noscript><input type=\"submit\" VALUE=\"Get your Learn On!\"></noscript></form></tr></table>");
}

if (canLucha > 0) {
    battle = battle.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#000000;background-color:#660000;color:white;font-size:12px;font-family:arial\">Face off against<br><font style=\"font-variant:small-caps;font-size:16px\"><b><i>El Diablo Supreme!</i></b></font><br><form name=\"eldiablo\" style=\"margin:0\" action=\"villagediablo.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.eldiablo.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>&#161;Lucha!</b></a></p><noscript><input type=\"submit\" VALUE=\"&#161;Lucha!\"></noscript></form></tr>");
}

if (canHunt > 0) {
    var huntVars = /Hunt for Ingredients!<br>([\w\W]+)<b>Choose Area/.exec(document.body.innerHTML);
    huntVars = huntVars[1];
    var dumpster = (document.body.innerHTML.match(/BurgerNinja Dumpster/g) || []).length;
    var trash = (document.body.innerHTML.match(/TV Actor Trashcans/g) || []).length;
    var trickOrTreat = (document.body.innerHTML.match(/Trick or Treating/g) || []).length;
    var gothgoth = (document.body.innerHTML.match(/Perfect Girl Evolution: Goth Goth/g) || []).length;

    vcenter = vcenter.concat("<table width=\"220\"><tr><td style=\"border-width:2px;border-style:solid;border-color:#044409;background-color:#115311;color:white;font-size:12px;font-family:arial\">Hunt for Ingredients!<br>" + huntVars + "<br><form name=\"ingredienthunt\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"ingredients\" value=\"go\"><b>Choose Area:</b><br><input type=\"radio\" name=\"ingredientplace\" value=\"forest\"> Forest<br>");
    if (dumpster > 0) {
        vcenter = vcenter.concat("<input type=\"radio\" name=\"ingredientplace\" value=\"dumpster\"> BurgerNinja Dumpster<br>");
    }
    if (trash > 0) {
        vcenter = vcenter.concat("<input type=\"radio\" name=\"ingredientplace\" value=\"idol\"> TV Actor Trashcans<br>");
    }
    if (trickOrTreat > 0) {
        vcenter = vcenter.concat("<input type=\"radio\" name=\"ingredientplace\" value=\"treat\"> Trick or Treating<br>");
    }
    if (gothgoth > 0) {
        vcenter = vcenter.concat("<input type=\"checkbox\" name=\"gothgoth\" value=\"go\" > Use <b>Perfect Girl Evolution: Goth Goth</b><br>&nbsp;&nbsp;&nbsp;&nbsp;(-50 Stamina, +5 Ingredients per Pull)<br>");
    }
    vcenter = vcenter.concat("<p style=\"margin:0; text-align:right\"><a href=\"javascript:document.ingredienthunt.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Hunt for Ingredients</b></a></p><noscript><input type=\"submit\" VALUE=\"Hunt for Ingredients\"></noscript></form></tr></table>");
}

if (canDeclare > 0) {

    attack = attack.concat("<table width=\"220\" style=\"background-color:#000000;border-color:#CC0000;border-style:solid;border-width:2px;color:white;font-size:12px;font-family:arial\"><tr><td>Declare War and Siege!<form action=\"villagewars.html\" name=\"vwars\" method=\"post\" style=\"margin:0\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><a href=\"javascript:document.vwars.submit();\" onfocus=\"this.blur();\" style=\"color:A10000; font-variant: small-caps; font-size:14px\"><p style=\"margin:0; text-align:right\"><b><font color=\"FF0000\">The Bunker &gt;</font></b></a></p><noscript><input type=\"submit\" VALUE=\"The Bunker &gt;\"></noscript></form></td></tr></table>");
}

if (canNoteProtect > 0) {
    var isNotProtected = (document.body.innerHTML.match(/You are <b>Not Protected<\/b>/g) || []).length;
    var levCost = /24 hours\. ([\d,]+) Ryo per Level/g.exec(document.body.innerHTML)[1];
    var cost = /Obfuscation Timer \(([\d,]+) Ryo/g.exec(document.body.innerHTML)[1];

    attack = attack.concat("</td><td><table width=\"220\"><table width=\"220\"><tr><td style=\"font-variant: small-caps; border-width:2px;border-style:solid;border-color:#040404;background-color:#111111;color:white;font-size:12px;font-family:arial\">Protect Yourself from The Note<br>for 24 hours. " + levCost + " Ryo per Level.<br>(You are ");
    if (isNotProtected > 0) {
        attack = attack.concat("<b>Not Protected</b>)<br></center>");
    } else {
        attack = attack.concat("<b>Currently Protected</b>)<br></center>");
    }
    attack = attack.concat("<form name=\"obscure\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"checkbox\" name=\"obscure\" value=\"doit\" > Add 86400 seconds to your<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obfuscation Timer (" + cost + " Ryo).<br><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.obscure.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Obscure your Name</b></a></p><noscript><input type=\"submit\" VALUE=\"Obscure your Name\"></noscript></form><br><center>(costs increase 50 per level after each use. to reset cost, go without protection for 48 hours.)</center></tr></table>");
}

if (fieldsAvail > 0) {
    battle = battle.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#1E4101;background-color:#004000;color:white;font-family:arial;font-size:12px\">Explore other Fields!<br><form name=\"fieldmenu\" style=\"margin:0\" action=\"villagefields.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.fieldmenu.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Field Menu &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Field Menu\"></noscript></form></tr>");
}

if (spendZR > 0) {
    battle = battle.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#4E0101;background-color:#330000;color:white;font-family:arial;font-size:12px\">Spend your Z-Rewards!<br><form name=\"zrt\" style=\"margin:0\" action=\"zombjarewards.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.zrt.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Spend Z-Rewards &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Spend Z-Rewards\"></noscript></form></tr>");
}

if (canCollect > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#044904;background-color:#115311;color:white;font-size:12px;font-family:arial\">Gather resources to build Village Upgrades!<br><form name=\"rescol\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"helpvillage\" value=\"collect\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.rescol.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Collect Resources</b></a></p><noscript><input type=\"submit\" VALUE=\"Help Collect Resources\"></noscript></form></td></tr>");
}

if (canPatrol > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#490404;background-color:#531111;color:white;font-size:12px;font-family:arial\">Patrol to defend your village from attacks!<br><form name=\"patrol\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"helpvillage\" value=\"patrol\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.patrol.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Patrol</b></a></p><noscript><input type=\"submit\" VALUE=\"Go On Patrol\"></noscript></form></td></tr>");
}

if (canPaperwork > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#490404;background-color:#531111;color:white;font-size:12px;font-family:arial\">Help the Village with submitting Mission Results!<br><form name=\"paperwork\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"helpvillage\" value=\"paperwork\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.paperwork.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Do Paperwork</b></a></p><noscript><input type=\"submit\" VALUE=\"Do Paperwork\"></noscript></form></td></tr>");
}

if (canRepair > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#044904;background-color:#111153;color:white;font-size:12px;font-family:arial\">Help Repair your Village!<br><form name=\"repcol\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"helpvillage\" value=\"repair\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.repcol.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Help with Repairs</b></a></p><noscript><input type=\"submit\" VALUE=\"Help Repair\"></noscript></form></td></tr>");
}

if (canSiege > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#0E0101;background-color:#220000;color:white;font-family:arial;font-size:12px\">Siege enemy Villages!<br><form name=\"repcol\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"helpvillage\" value=\"siege\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.sgrs.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Siege! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Siege!\"></noscript></form></td></tr>");
}

if (canResupply > 0) {
    admin = admin.concat("<tr><td style=\"border-width:2px;border-style:solid;border-color:#010E01;background-color:#002200;color:white;font-family:arial;font-size:12px\">Resupply the Z-Fighters!!<br><form name=\"zatrs\" style=\"margin:0\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"helpvillage\" value=\"resupply\"><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.zatrs.submit();\" onfocus=\"this.blur();\" style=\"color:white; font-size:14px\"><b>Resupply! &gt;</b></a></p><noscript><input type=\"submit\" VALUE=\"Resupply!\"></noscript></form></td></tr>");
}


//declare some variables for purposes of building village info
var resources = [];
var bRes = [];
var aRes = [];
var PM = [];
var MW = [];
var BC = [];
var SF = [];
var UI = [];
var pcbRes = [];
var pcaRes = [];
var vryo = [];
var bankium = [];

//check to see if the village is NRF and has bankium
var NRF = (document.body.innerHTML.match(/Percentage Chance of finding an Advanced Resource:/g) || []).length;
var hasBankium = (document.body.innerHTML.match(/Bankium Bars:/g) || []).length;

if (NRF > 0) {
    bRes = /Resource: ([\w\s]+)<br>Advanced Resource: ([\w\s]+)/g.exec(document.body.innerHTML)[1];
    aRes = /Resource: ([\w\s]+)<br>Advanced Resource: ([\w\s]+)/g.exec(document.body.innerHTML)[2];
    PM = /<li>Precious Metals: ([\d]+)/g.exec(document.body.innerHTML)[1];
    MW = /<li>Medicinal Water: ([\d]+)/g.exec(document.body.innerHTML)[1];
    BC = /<li>Brilliant Crystals: ([\d]+)/g.exec(document.body.innerHTML)[1];
    SF = /<li>Solid Fire: ([\d]+)/g.exec(document.body.innerHTML)[1];
    UI = /<li>Unmelting Ice: ([\d]+)/g.exec(document.body.innerHTML)[1];
    vryo = /<li>Village Ryo: ([\d,]+)/g.exec(document.body.innerHTML)[1];
    pcbRes = /Percentage Chance of finding a Resource: ([\d]+)%/g.exec(document.body.innerHTML)[1];
    pcaRes = /Percentage Chance of finding an Advanced Resource: ([\d]+)%/g.exec(document.body.innerHTML)[1];
    vinfo = vinfo.concat("<tr><td><table width=\"440\"><tr><td align=\"left\" width=\"220\"><br><font style=\"font-size:14px\"><b>Resources:</b></font></td><td align=\"left\" width=\"220\"><br><font style=\"font-size:14px\"><b>Stats:</b></font></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td>Resource: " + bRes + "<br>Advanced Resource: " + aRes + "<br><br>Percentage Chance of finding a Resource: " + pcbRes + "%<br><br>Percentage Chance of finding an Advanced Resource: " + pcaRes + "%<br><br><ul style=\"margin:0\"><li>Brilliant Crystals: " + BC + "</li><li>Medicinal Water: " + MW + "</li><li>Precious Metals: " + PM + "</li><li>Solid Fire: " + SF + "</li><li>Unmelting Ice: " + UI + "</li><li>Village Ryo: " + vryo + "</li>");
} else {
    bRes = /Resource: ([\w\s]+)<br>/g.exec(document.body.innerHTML)[1];
    PM = /<li>Precious Metals: ([\d]+)/g.exec(document.body.innerHTML)[1];
    MW = /<li>Medicinal Water: ([\d]+)/g.exec(document.body.innerHTML)[1];
    BC = /<li>Brilliant Crystals: ([\d]+)/g.exec(document.body.innerHTML)[1];
    vryo = /<li>Village Ryo: ([\d,]+)/g.exec(document.body.innerHTML)[1];
    pcbRes = /Percentage Chance of finding a Resource: ([\d]+)%/g.exec(document.body.innerHTML)[1];
    vinfo = vinfo.concat("<tr><td><table width=\"220\"><tr><td align=\"left\"><br><font style=\"font-size:14px\"><b>Resources:</b></font></td><td align=\"left\" width=\"220\"><br><font style=\"font-size:14px\"><b>Stats:</b></font></td></tr></table><table width=\"220\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td>Resource: " + bRes + "<br>Advanced Resource: " + aRes + "<br><br>Percentage Chance of finding a Resource: " + pcbRes + "%<br><br><ul style=\"margin:0\"><li>Brilliant Crystals: " + BC + "</li><li>Medicinal Water: " + MW + "</li><li>Precious Metals: " + PM + "</li><li>Village Ryo: " + vryo + "</li>");
}

if (hasBankium > 0) {
    bankium = /<li>Bankium Bars: ([\d]+)/g.exec(document.body.innerHTML)[1];
    vinfo = vinfo.concat("<li>Bankium Bars: " + bankium + "</li></ul></td>");
} else {
    vinfo = vinfo.concat("</ul></td>");
}

// declare some variables for building the villager structure
var rootnin = [];
var sannin = [];
var jonin = [];
var specjo = [];
var chunin = [];
var genin = [];
var nonja = [];

var numroot = 0;
var numsan = 0;
var numjon = 0;
var numspecjo = 0;
var numchu = 0;
var numgen = 0;
var numnon = 0;

// this is really complicated, but it works
var indRoot = document.body.innerHTML.indexOf("R00t+:");
var indSan = document.body.innerHTML.indexOf("<b>Sannin:</b>");
var indJo = document.body.innerHTML.indexOf("<b>Jonin:</b>");
var indSpecJo = document.body.innerHTML.indexOf("Sp. Jonin:");
var indChu = document.body.innerHTML.indexOf("Chunin:");
var indGen = document.body.innerHTML.indexOf("Genin:");
var indNon = document.body.innerHTML.indexOf("Nonja:");
var memKey = document.body.innerHTML.indexOf("-- Member Key");

if (indRoot > 0) {
    if (indSan > 0) {
        rootnin = document.body.innerHTML.slice(indRoot, indSan);
    } else if (indJo > 0) {
        rootnin = document.body.innerHTML.slice(indRoot, indJo);
    } else if (indSpecJo > 0) {
        rootnin = document.body.innerHTML.slice(indRoot, indSpecJo);
    } else if (indChu > 0) {
        rootnin = document.body.innerHTML.slice(indRoot, indChu);
    } else if (indGen > 0) {
        rootnin = document.body.innerHTML.slice(indRoot, indGen);
    } else if (indNon > 0) {
        rootnin = document.body.innerHTML.slice(indRoot, indNon);
    } else {
        rootnin = document.body.innerHTML.slice(indRoot, memKey);
    }
} else {
    rootnin = "None!";
}

if (indSan > 0) {
    if (indJo > 0) {
        sannin = document.body.innerHTML.slice(indSan, indJo);
    } else if (indSpecJo > 0) {
        sannin = document.body.innerHTML.slice(indSan, indSpecJo);
    } else if (indChu > 0) {
        sannin = document.body.innerHTML.slice(indSan, indChu);
    } else if (indGen > 0) {
        sannin = document.body.innerHTML.slice(indSan, indGen);
    } else if (indNon > 0) {
        sannin = document.body.innerHTML.slice(indSan, indNon);
    } else {
        sannin = document.body.innerHTML.slice(indSan, memKey);
    }
} else {
    sannin = "None!";
}

if (indJo > 0) {
    if (indSpecJo > 0) {
        jonin = document.body.innerHTML.slice(indJo, indSpecJo);
    } else if (indChu > 0) {
        jonin = document.body.innerHTML.slice(indJo, indChu);
    } else if (indGen > 0) {
        jonin = document.body.innerHTML.slice(indJo, indGen);
    } else if (indNon > 0) {
        jonin = document.body.innerHTML.slice(indJo, indNon);
    } else {
        jonin = document.body.innerHTML.slice(indJo, memKey);
    }
} else {
    jonin = "None!";
}

if (indSpecJo > 0) {
    if (indChu > 0) {
        specjo = document.body.innerHTML.slice(indSpecJo, indChu);
    } else if (indGen > 0) {
        specjo = document.body.innerHTML.slice(indSpecJo, indGen);
    } else if (indNon > 0) {
        specjo = document.body.innerHTML.slice(indSpecJo, indNon);
    } else {
        specjo = document.body.innerHTML.slice(indSpecJo, memKey);
    }
} else {
    specjo = "None!";
}

if (indChu > 0) {
    if (indGen > 0) {
        chunin = document.body.innerHTML.slice(indChu, indGen);
    } else if (indNon > 0) {
        chunin = document.body.innerHTML.slice(indChu, indNon);
    } else {
        chunin = document.body.innerHTML.slice(indChu, memKey);
    }
} else {
    chunin = "None!";
}

if (indGen > 0) {
    if (indNon > 0) {
        genin = document.body.innerHTML.slice(indGen, indNon);
    } else {
        genin = document.body.innerHTML.slice(indGen, memKey);
    }
} else {
    genin = "None!";
}

if (indNon > 0) {
    nonja = document.body.innerHTML.slice(indNon, memKey);
} else {
    nonja = "None!";
}

if (rootnin !== "None!") {
    rootnin = rootnin.replace(/R00t\+:<\/b><br>/g, "");
    rootnin = rootnin.replace(/<br>\n<br>/gm, "");
    rootnin = rootnin.replace(/<br>/g, ", ");
    numroot = (rootnin.match(/<a/g).length);
}

if (sannin !== "None!") {
    sannin = sannin.replace(/<b>Sannin:<\/b><br>/g, "");
    sannin = sannin.replace(/<br>\n<br>/gm, "");
    sannin = sannin.replace(/<br><\/ul><\/td><td width=\"110\" valign=\"top\" align=\"left\"><ul style=\"list-style:disc;margin-left: 0;padding-left: 1em;font-size:12px\">/g, "");
    sannin = sannin.replace(/<br>/g, ", ");
    sannin = sannin.substr(0, sannin.length - 3);
    numsan = (sannin.match(/<a/g).length);
}

if (jonin !== "None!") {
    jonin = jonin.replace(/<b>Jonin:<\/b><br>/g, "");
    jonin = jonin.replace(/<br>\n<br>/gm, "");
    jonin = jonin.replace(/<\/ul><\/td><td width=\"110\" valign=\"top\" align=\"left\"><ul style=\"list-style:disc;margin-left: 0;padding-left: 1em;font-size:12px\"><br>/g, "");
    jonin = jonin.replace(/<br>/g, ", ");
    jonin = jonin.substr(0, jonin.length - 3);
    numjon = (jonin.match(/<a/g).length);
}

if (specjo !== "None!") {
    specjo = specjo.replace(/Sp\. Jonin:<\/b><br>/g, "");
    specjo = specjo.replace(/<br>\n<br>/gm, "");
    specjo = specjo.replace(/<\/ul><\/td><td width=\"110\" valign=\"top\" align=\"left\"><ul style=\"list-style:disc;margin-left: 0;padding-left: 1em;font-size:12px\"><br>/g, "");
    specjo = specjo.replace(/<br>/g, ", ");
    specjo = specjo.substr(0, specjo.length - 3);
    numspecjo = (specjo.match(/<a/g).length);
}

if (chunin !== "None!") {
    chunin = chunin.replace(/Chunin:<\/b><br>/g, "");
    chunin = chunin.replace(/<br>\n<br>/gm, "");
    chunin = chunin.replace(/<\/ul><\/td><td width=\"110\" valign=\"top\" align=\"left\"><ul style=\"list-style:disc;margin-left: 0;padding-left: 1em;font-size:12px\"><br>/g, "");
    chunin = chunin.replace(/<br>/g, ", ");
    chunin = chunin.substr(0, chunin.length - 3);
    numchu = (chunin.match(/<a/g).length);
}

if (genin !== "None!") {
    genin = genin.replace(/Genin:<\/b><br>/g, "");
    genin = genin.replace(/<br>\n<br>/gm, "");
    genin = genin.replace(/<\/ul><\/td><td width=\"110\" valign=\"top\" align=\"left\"><ul style=\"list-style:disc;margin-left: 0;padding-left: 1em;font-size:12px\"><br>/g, "");
    genin = genin.replace(/<br>/g, ", ");
    genin = genin.substr(0, genin.length - 3);
    numgen = (genin.match(/<a/g).length);
}

if (nonja !== "None!") {
    nonja = nonja.replace(/Nonja:<\/b><br>/g, "");
    nonja = nonja.replace(/<br>\n<br>/gm, "");
    nonja = nonja.replace(/<\/ul><\/td><td width=\"110\" valign=\"top\" align=\"left\"><ul style=\"list-style:disc;margin-left: 0;padding-left: 1em;font-size:12px\"><br>/g, "");
    nonja = nonja.replace(/<\/ul>\n<\/td><\/tr><\/tbody><\/table>/gm, "");
    nonja = nonja.replace(/<br>/g, ", ");
    nonja = nonja.substr(0, nonja.length - 3);
    numnon = (nonja.match(/, /g).length + 1 || []);
}

var vSize = numroot + numsan + numjon + numspecjo + numchu + numgen + numnon;
vSize = vSize + " (" + numnon + " nonja)";
var vActive = parseInt(/Village size: ([\d]+)/g.exec(document.body.innerHTML)[1], 10);
var curTax = parseInt(/Current Tax Rate: ([\d]+)%/g.exec(document.body.innerHTML)[1], 10);
var numUps = parseInt(/Number of Upgrades: <b>([\d]+)<\/b>/g.exec(document.body.innerHTML)[1], 10);
var curUpk = parseInt(/Current Upkeep: ([\d]+)%/g.exec(document.body.innerHTML)[1], 10);
var tomPpwk = parseInt(/Paperwork: -([\d]+)% Upkeep Tomorrow/g.exec(document.body.innerHTML)[1], 10);

vinfo = vinfo.concat("<td width=\"220\" valign=\"top\">Village Size: " + vSize + "<br>Active Ninja: " + vActive + "<br><br>Current Tax Rate: " + curTax + "%<br>Current Upkeep: " + curUpk + "%<br>Paperwork: -" + tomPpwk + "% Upkeep Tomorrow<br><br><br>Number of Upgrades: " + numUps + "</td></tr></table></td></tr>");

vinfo = vinfo.concat("<tr><td><table width=\"440\"><tr><td align=\"left\"><br><font style=\"font-size:14px\"><b>Villagers:</b></font></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"75\"><b>R00t+</b> (" + numroot + ")</td><td>" + rootnin + "</td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"75\"><b>Sannin</b> (" + numsan + ")</td><td>" + sannin + "</td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"75\"><b>Jonin</b> (" + numjon + ")</td><td>" + jonin + "</td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"75\"><b>Special Jonin</b> (" + numspecjo + ")</td><td>" + specjo + "</td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"75\"><b>Chunin</b> (" + numchu + ")</td><td>" + chunin + "</td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"75\"><b>Genin</b> (" + numgen + ")</td><td>" + genin + "</td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"75\"><b>Nonja</b> (" + numnon + ")</td><td>" + nonja + "</td></tr></table><form action=\"village.html\" name=\"showallvils\" style=\"margin:1px\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"showallvillagers\" value=\"1\"><a href=\"javascript:document.showallvils.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><p style=\"margin:0; text-align:right; font-size:10px\"><b>Parse Villagers</b></p></a><noscript><input type=\"submit\" VALUE=\"Show All Villagers\"></noscript></form></table>");

// build in the box if the village is daamged
var repairsNeeded = (document.body.innerHTML.match(/document.repairnow.submit/g) || []).length;
var vDamage = [];
var repAvail = [];
var bankBlocked = [];

if (repairsNeeded > 0) {
    vDamage = /<b>Total Village Damage: ([\d,]*)<\/b>/g.exec(document.body.innerHTML);
    vDamage = vDamage[1].replace(/,/g, "");
    vDamage = parseInt(vDamage, 10);
    repAvail = /Repair Ryo Available: ([\d,]*)<br>/g.exec(document.body.innerHTML);
    repAvail = repAvail[1].replace(/,/g, "");
    repAvail = parseInt(repAvail, 10);
    bankBlocked = /Bankium Blocked: ([\d,]*)<br>/g.exec(document.body.innerHTML);
    bankBlocked = bankBlocked[1].replace(/,/g, "");
    bankBlocked = parseInt(bankBlocked, 10);

    attack = attack.concat("<table width=\"220\" style=\"background-color:#A10000;border-color:#CC0000;border-style:solid;border-width:1px\"><tr><td><font style=\"font-size:12px;color:white\"><b>Total Village Damage: " + vDamage + "</b><br>Bankium Blocked: " + bankBlocked + "<br>(250K VRyo each to remove)<br>Repair Ryo Available: " + repAvail + "<br>Total Village Ryo " + vryo + "<br><form action=\"village.html\" name=\"repairnow\" style=\"margin:1px\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"checkbox\" name=\"repairall\" value=\"1\"><a href=\"javascript:document.repairnow.submit();\" onfocus=\"this.blur();\" style=\"color:white\"><b><font color=\"FFFFFF\">Repair All &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Repair All\"></noscript></form><br><form action=\"villagerepair.html\" name=\"gorepair\" style=\"margin:1px\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><a href=\"javascript:document.gorepair.submit();\" onfocus=\"this.blur();\" style=\"color:white\"><b><font color=\"FFFFFF\">Go to Repair Menu &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Go to Repair Menu\"></noscript></form></font></td></tr></table>");
}

// build the attack other villages boxes
var invPrepAvail = (document.body.innerHTML.match(/Planning to Invade:/g) || []).length;
var saboAvail = (document.body.innerHTML.match(/Head Saboteur:/g) || []).length;
var invTarget = [];
var saboteur = [];
var peacetime = [];
var patrolBonus = [];
var patrolBonusTomorrow = [];
var canTarget = (document.body.innerHTML.match(/switchattackfocus/g) || []).length;
var validTargets = [];
var targetsStart = [];
var targetsEnd = [];
var timesSwitched = [];

if (invPrepAvail > 0) {
    invTarget = /Planning to Invade: <b><b>[\w\s]+<\/b> Village<\/b><br>[Minutes until Invasion is ready: \d|<b>Invasion Timer Cleared!<\/b>]+<br><br>/g.exec(document.body.innerHTML);
    attack = attack.concat("</table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td>" + invTarget + "</td>");
    if (saboAvail > 0) {
        saboteur = /Head Saboteur: <b>[\w\d]+<\/b><br><br>/g.exec(document.body.innerHTML);
        attack = attack.concat("<td>" + saboteur + "</td>");
    }
    peacetime = (document.body.innerHTML.match(/<b>--Peacetime Bonus--<\/b><br>(\+[\d]+) Successes Needed to Attack you/g) || []).length;
    if (peacetime > 0) {
        peacetime = /<b>--Peacetime Bonus--<\/b><br>(\+[\d]+) Successes Needed to Attack you/g.exec(document.body.innerHTML)[1];
    } else {
        peacetime = "+0";
    }
    patrolBonus = /Patrol Bonus Today: (\+[\d]+)/g.exec(document.body.innerHTML)[1];
    patrolBonusTomorrow = /Patrol Bonus For Tomorrow: (\+[\d]+)<br>/g.exec(document.body.innerHTML)[1];

    attack = attack.concat("</tr><tr><td colspan=\"2\"><b>Peacetime Bonus:</b> " + peacetime + " Successes needed to attack you<br><b>Patrol Bonus Today:</b> " + patrolBonus + "<br><b>Patrol Bonus Tomorrow:</b> " + patrolBonusTomorrow + "</td></tr>");

    if (canTarget > 0) {
        targetsStart = document.body.innerHTML.indexOf("switchattackfocus");
        targetsEnd = document.body.innerHTML.lastIndexOf("</select>");

        validTargets = document.body.innerHTML.slice(targetsStart, targetsEnd);

        timesSwitched = /Times switched today: ([\d]+)!/g.exec(document.body.innerHTML)[1];

        attack = attack.concat("<tr></tr><tr><td width=\"220\" valign=\"top\"><b>Invasion Preparations</b><br>Attacking a village nets you Ryo - if you prepare to invade them first, though, it is harder, but you'll take Resources instead! (You may switch this twice a day - you may target any attackable village you have a Spy in)</td><td valign=\"top\"><u>Choose Village:</u><br><img src=\"/billy/layout/blank.gif\" height=3 width=8><form action=\"village.html\" name=\"attackfocus\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><SELECT NAME=\"" + validTargets + "</select><br><a href=\"javascript:document.attackfocus.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">Make Preparations &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Make Preparations &gt;\"></noscript><br>Times switched today: " + timesSwitched + "!</form></td></tr>");
    }

    attack = attack.concat("</table>");
}

// build the monster summoning box
var canSummon = (document.body.innerHTML.match(/document.newmon.submit/g) || []).length;
var canUseBC = (document.body.innerHTML.match(/<option name=\"Brilliant Crystals\">/g) || []).length;
var canUseMW = (document.body.innerHTML.match(/<option name=\"Medicinal Water\">/g) || []).length;
var canUsePM = (document.body.innerHTML.match(/<option name=\"Precious Metals\">/g) || []).length;
var canUseSF = (document.body.innerHTML.match(/<option name=\"Solid Fire\">/g) || []).length;
var canUseUI = (document.body.innerHTML.match(/<option name=\"Unmelting Ice\">/g) || []).length;

var summonOptions = [];

var wanderStatus = [];

if (canUseBC > 0) {
    summonOptions = summonOptions.concat("<option name=\"Brilliant Crystals\">Brilliant Crystals</option>");
}

if (canUseMW > 0) {
    summonOptions = summonOptions.concat("<option name=\"Medicinal Water\">Medicinal Water</option>");
}

if (canUsePM > 0) {
    summonOptions = summonOptions.concat("<option name=\"Precious Metals\">Precious Metals</option>");
}

if (canUseSF > 0) {
    summonOptions = summonOptions.concat("<option name=\"Solid Fire\">Solid Fire</option>");
}

if (canUseUI > 0) {
    summonOptions = summonOptions.concat("<option name=\"Unmelting Ice\">Unmelting Ice</option>");
}

if (canSummon > 0) {
    wanderStatus = /<br>Current Status: <b>([\w\s\d]+)<\/b>/g.exec(document.body.innerHTML)[1];

    battle = battle.concat("</table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td width=\"220\">Attracting a Monster costs 8 of any single Basic Resource, or 3 of any Advanced Resource. To attract a monster, choose your resource to use, type \"Monster\" (without the quotes, WITH proper capitalization) to confirm.<br>To allow <b>possible</b> attraction of Major Kaiju (100K+ HP), type \"MONSTER\" (yes, in all caps).</td><td valign=\"top\"><form action=\"village.html\" name=\"newmon\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><select name=\"monrestouse\">" + summonOptions + "</select><br><input type=\"text\" name=\"attractmonster\" value=\" \"><br><a href=\"javascript:document.newmon.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Attract Monster</font></b></a><noscript><input type=\"submit\" VALUE=\"Attract Monster\"></noscript></form></td></tr><tr><td colspan=\"2\"><b>Wandering Kaiju</b><form action=\"village.html\" name=\"nowand\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\">You can adjust the Altar to keep Wandering Kaiju from showing up - however, if you activate this effect, all the Kaiju you entice will start with <b>+10% Base HP.</b><br>Current Status: <b>" + wanderStatus + "</b><input type=\"hidden\" name=\"nowand\" value=\"1\"><br><a href=\"javascript:document.nowand.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Deny Wandering Kaiju for 3 Days</font></b></a><noscript><input type=\"submit\" VALUE=\"Deny Wandering Kaiju for 3 Days\"></noscript></form>");
}

vinfo = vinfo.concat("<table width=\"440\"><tr><td align=\"left\"><font style=\"font-size:14px\"><b>Yesterday's Report:</b></font><br><p style=\"margin:0\"><a href=\"javascript:expandSmallMenu(\'yesterrep\',\'15em\');\" onfocus=\"this.blur();\" style=\"color:000000; font-size:10px\"><b>Expand/Contract List</b></a></p></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td><div style=\"height:15em;overflow:auto;overflow-x:hidden;\" id=\"yesterrep\">" + document.getElementById("yesterrep").innerHTML + "</div></table>");

admin = admin.concat("</table>");

// build the compression and decompression boxes
var canDecomp = (document.body.innerHTML.match(/document.decompress.submit/g) || []).length;
var canComp = (document.body.innerHTML.match(/document.compress.submit/g) || []).length;
var decompCost = [];
var comcost = [];
var compCostA = [];
var compCostB = [];
var noSF = [];
var noUI = [];
var noSFc = [];
var noUIc = [];

if (canDecomp > 0) {
    comcost = document.getElementsByName("comcost")[1].value;
    decompCost = /Number of Advanced required: <b>([\d]+)<\/b>/g.exec(document.body.innerHTML)[1];
    noSF = (document.body.innerHTML.match(/<input type=\"radio\" name=\"decompress\" value=\"1\" disabled/g) || []).length;
    noUI = (document.body.innerHTML.match(/<input type=\"radio\" name=\"decompress\" value=\"2\" disabled/g) || []).length;

    if (noSF > 0) {
        noSF = "disabled";
    } else {
        noSF = "";
    }

    if (noUI > 0) {
        noUI = "disabled";
    } else {
        noUI = "";
    }

    admin = admin.concat("<td width=\"220\" valign=\"top\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><b>Elemental Decompression</b><br>Decompress your Advanced Resources into 1 of each Basic Resource!<br><br>Number of Advanced required: <b>" + decompCost + "</b><form action=\"village.html\" name=\"decompress\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"comcost\" value=" + comcost + "><input type=\"radio\" name=\"decompress\" value=\"1\" " + noSF + "> Break Apart Solid Fire<br><input type=\"radio\" name=\"decompress\" value=\"2\" " + noUI + "> Break Apart Unmelting Ice<br><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.decompress.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">Decompress Resource &gt;</font></b></a></p><noscript><input type=\"submit\" VALUE=\"Decompress Resource &gt;\"></noscript></form>");
}

if (canComp > 0) {
    comcost = document.getElementsByName("comcost")[1].value;
    compCostA = /Number of each Basics to make:<br>\s<b>Solid Fire - <i>([\d]+)<\/i><br>\sUnmelting Ice - <i>([\d]+)<\/i><br>/g.exec(document.body.innerHTML)[1];
    compCostB = /Number of each Basics to make:<br>\s<b>Solid Fire - <i>([\d]+)<\/i><br>\sUnmelting Ice - <i>([\d]+)<\/i><br>/g.exec(document.body.innerHTML)[2];
    noSFc = (document.body.innerHTML.match(/<input type=\"radio\" name=\"compress\" value=\"1\" disabled/g) || []).length;
    noUIc = (document.body.innerHTML.match(/<input type=\"radio\" name=\"compress\" value=\"2\" disabled/g) || []).length;

    if (noSFc > 0) {
        noSFc = "disabled";
    } else {
        noSFc = "";
    }

    if (noUIc > 0) {
        noUIc = "disabled";
    } else {
        noUIc = "";
    }

    admin = admin.concat("<hr><b>Elemental Compression</b><br>Compress your Basic Resources into Advanced Resources!<br><br>Number of each Basics to make:<br><b>Solid Fire - <i>" + compCostA + "</i><br>Unmelting Ice - <i>" + compCostB + "</i><br></b><form action=\"village.html\" name=\"compress\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"comcost\" value=\"" + comcost + "\"><input type=\"radio\" name=\"compress\" value=\"1\" " + noSFc + " > Create Solid Fire<br><input type=\"radio\" name=\"compress\" value=\"2\" " + noUIc + " > Create Unmelting Ice<br><p style=\"margin:0; text-align:right\"><a href=\"javascript:document.compress.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">Compress Resource &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Compress Resource &gt;\"></p></noscript></form>");

}

// build the RP box

var RPAvail = (document.body.innerHTML.match(/document.respoints.submit/g) || []).length;
var majorAvail = (document.body.innerHTML.match(/> Major Contract:/g) || []).length;
var minorAvail = (document.body.innerHTML.match(/> Minor Contract:/g) || []).length;
var numMajor = [];
var numMinor = [];
var amtMajor = [];
var amtMinor = [];
var canMill = (document.body.innerHTML.match(/Check to Mill Contracts/g) || []).length;

if (canDonate > 0) {
    if (majorAvail > 0) {
        numMajor = parseInt(/> Major Contract: ([\d]+)/g.exec(document.body.innerHTML)[1], 10);
        amtMajor = parseInt(/> Major Contract: ([\d]+)&nbsp;&nbsp;&nbsp;\(\+([\d]+) Ryo\)/g.exec(document.body.innerHTML)[2], 10);
        majorAvail = "<input type=\"radio\" name=\"sellcontract\" value=\"Major\">Major Contract: " + numMajor + " (+" + amtMajor + " Ryo)<br>";
    } else {
        majorAvail = "";
    }
    if (minorAvail > 0) {
        numMinor = parseInt(/> Minor Contract: ([\d]+)/g.exec(document.body.innerHTML)[1], 10);
        amtMinor = parseInt(/> Minor Contract: ([\d]+)&nbsp;&nbsp;&nbsp;\(\+([\d]+) Ryo\)/g.exec(document.body.innerHTML)[2], 10);
        minorAvail = "<input type=\"radio\" name=\"sellcontract\" value=\"Minor\">Minor Contract: " + numMinor + " (+" + amtMinor + " Ryo)<br>";
    } else {
        minorAvail = "";
    }
    if (canMill > 0) {
        canMill = "<input type=\"checkbox\" name=\"millem\" value=\"1\"> Check to Mill Contracts<br>    (random Ryo, chance of resources)<br>";
    } else {
        canMill = "";
    }
    admin = admin.concat("</td></tr></table><table width=\"440\"><tr><td align=\"left\"><font style=\"font-size:14px\"><b>Village Contracts:</b></font></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td><b>Contracts</b> apply immediately to your Village Ryo!<br><form style=\"margin:0\" name=\"cryo\" action=\"village.html\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\">" + majorAvail + minorAvail + "<input type=\"text\" name=\"numbercontract\" value=\"1\" size=\"1\"> Number to submit<br>" + canMill + "<a href=\"javascript:document.cryo.submit();\" onfocus=\"this.blur();\" style=\"color:black; font-size:12px\"><b>Donate Contract</b></b></a><noscript><input type=\"submit\" VALUE=\"Donate Contract\"></noscript></form>");
}

if (RPAvail > 0) {
    admin = admin.concat("</td></tr></table><table width=\"440\"><tr><td align=\"left\"><font style=\"font-size:14px\"><b>Resource Points:</b></font></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td>Break Resources down to give to Villagers!<br><form action=\"villageresourcepoints.html\" name=\"respoints\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><a href=\"javascript:document.respoints.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">Give Resource Points &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Give Resource Points &gt;\"></noscript></form></td></tr></table>");
}

// build the applications box TODO: WANDERS

var appStatus = [];
var blurb = [];
var autoAcc = [];
var addNinja = [];
var denyNinja = [];
var ninShown = [];
var remNin = [];
var getNin = [];

if (canApprove > 0) {
    appStatus = /You currently <b>([\w]+)<\/b> applications to your village/g.exec(document.body.innerHTML)[1];
    blurb = /<br>---<br>([\S\s]+)<br>---<br>/g.exec(document.body.innerHTML)[1];
    autoAcc = /You are ([\w\s-]+) apps.<br>/g.exec(document.body.innerHTML)[1];
    addNinja = /Characters applying:<br>([\s\w\d<=\"\.>:\;-]+)<\/div>/.exec(document.body.innerHTML)[1];
    denyNinja = /turn off and on apps\):<br>([\s\w\d<=\"\.>:\;-]+)<\/div>/.exec(document.body.innerHTML)[1];
    ninHidden = (document.body.innerHTML.match(/remnin.submit\(\);\" onfocus=\"this.blur\(\);\" style="color:A10000\"><b>Show All Villagers/g) || []).length;
    if (ninHidden > 0) {
        remNin = "<input type=\"hidden\" name=\"showallvillagers\" value=\"1\"><a href=\"javascript:document.remnin.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b>Show All Villagers</b></a><noscript><input type=\"submit\" VALUE=\"Show All Villagers\"></noscript></form>";
    } else {
        kickStart = document.body.innerHTML.indexOf("whotodel");
        kickEnd = document.body.innerHTML.lastIndexOf("kickplayerconfirm");
        getNin = document.body.innerHTML.slice(kickStart, kickEnd);
        remNin = "<select name=\"whotodel\">" + getNin + "kickplayerconfirm\" value=\"go\"> Click to Confirm<br><a href=\"javascript:document.remnin.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Remove Ninja</font></b></a><noscript><input type=\"submit\" VALUE=\"Remove Ninja\"></noscript></form>";
    }
    admin = admin.concat("<table width=\"440\"><tr><td align=\"left\"><font style=\"font-size:14px\"><b>Applications/Members:</b></font></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td>You currently <b>" + appStatus + "</b> applications to your village! Your Recruitment blurb:<br>---<br>" + blurb + "<br>---<br><form action=\"village.html\" name=\"swapaaapp\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\">You are " + autoAcc + " applications to your village. <br><input type=\"hidden\" name=\"swapaaapp\" value=\"1\"><a href=\"javascript:document.swapaaapp.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Toggle Auto-Accept &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Toggle Auto-Accept &gt;\"></noscript></form>To change your application text, you must disallow and then reallow applications (so they join under the same conditions they applied to).<br>Characters applying:<br>" + addNinja + "</div><a href=\"javascript:document.allapp.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Allow Ninja to Join Village</font></b></a><noscript><input type=\"submit\" VALUE=\"Allow Ninja to Join Village\"></noscript></form><br>Deny applications here (if you deny someone, they cannot re-ask until you turn off and on apps):<br>" + denyNinja + "</div>Message (optional, be nice):<br><input type=\"text\" name=\"villagedenymsg\" value=\"\"><br><a href=\"javascript:document.dnapp.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Deny Application</font></b></a><noscript><input type=\"submit\" VALUE=\"Deny Application\"></noscript></form><form action=\"village.html\" name=\"disapp\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"villageallow\" value=\"disallow\">Village the way you want it? Turn off applications here.<br><a href=\"javascript:document.disapp.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Stop Allowing Applications</font></b></a><noscript><input type=\"submit\" VALUE=\"Stop Allowing Applications\"></noscript></form><b>Wandering Genin</b><br> Too high or low Member Count and/or Village Size to allow wandering Genin (must be between 5 and 45 Members and Size)<hr><b>Remove Characters from Village</b><form action=\"village.html\" name=\"remnin\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\">" + remNin + "<br><b>Duplicate Player Check</b><br>Check the IPs of your current players and applicants for duplicates.<br><form action=\"villagecheckip.html\" name=\"ipboard\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><a href=\"javascript:document.ipboard.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">IP Check &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"IP Check &gt;\"></noscript></form><br><b>Manage Ban List</b><br>Manage the Ban List for your Village.<br><form action=\"villagebanlist.html\" name=\"vbanlist\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><a href=\"javascript:document.vbanlist.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">Village Ban List &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Village Ban List &gt;\"></noscript></form></td></tr></table>");
}

if (canOpenApp > 0) {
    ninHidden = (document.body.innerHTML.match(/remnin.submit\(\);\" onfocus=\"this.blur\(\);\" style="color:A10000\"><b>Show All Villagers/g) || []).length;
    if (ninHidden > 0) {
        remNin = "<input type=\"hidden\" name=\"showallvillagers\" value=\"1\"><a href=\"javascript:document.remnin.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b>Show All Villagers</b></a><noscript><input type=\"submit\" VALUE=\"Show All Villagers\"></noscript></form>";
    } else {
        kickStart = document.body.innerHTML.indexOf("whotodel");
        kickEnd = document.body.innerHTML.lastIndexOf("kickplayerconfirm");
        getNin = document.body.innerHTML.slice(kickStart, kickEnd);
        remNin = "<select name=\"whotodel\">" + getNin + "kickplayerconfirm\" value=\"go\"> Click to Confirm<br><a href=\"javascript:document.remnin.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Remove Ninja</font></b></a><noscript><input type=\"submit\" VALUE=\"Remove Ninja\"></noscript></form>";
    }
    admin = admin.concat("<table width=\"440\"><tr><td align=\"left\"><font style=\"font-size:14px\"><b>Applications/Members:</b></font></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td>Your village is currently <b>closed</b> to new members.<form action=\"village.html\" name=\"allapp2\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"villageallow\" value=\"allow\">Type your recruiting blurb here! (more than 10 and less than 300 characters, no HTML or cursing)<br><input type=\"text\" name=\"villageallowtext\" value=\"\"><br><br><input type=\"checkbox\" name=\"vil_default\" value=\"1\"> Auto-Accept all applicants<br><a href=\"javascript:document.allapp2.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Allow Applications</font></b></a><noscript><input type=\"submit\" VALUE=\"Allow Applications\"></noscript></form><hr><b>Remove Characters from Village</b><form action=\"village.html\" name=\"remnin\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\">" + remNin + "<br><b>Duplicate Player Check</b><br>Check the IPs of your current players and applicants for duplicates.<br><form action=\"villagecheckip.html\" name=\"ipboard\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><a href=\"javascript:document.ipboard.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">IP Check &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"IP Check &gt;\"></noscript></form><br><b>Manage Ban List</b><br>Manage the Ban List for your Village.<br><form action=\"villagebanlist.html\" name=\"vbanlist\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><a href=\"javascript:document.vbanlist.submit();\" onfocus=\"this.blur();\" style=\"color:000000\"><b><font color=\"A10000\">Village Ban List &gt;</font></b></a><noscript><input type=\"submit\" VALUE=\"Village Ban List &gt;\"></noscript></form></td></tr></table>");
}

// conclude the content divs with tables
events = events.concat("</table>");
battle = battle.concat("</table>");
attack = attack.concat("</table>");
admin = admin.concat("<table width=\"440\"><tr><td align=\"left\"><font style=\"font-size:14px\"><b>Leave Village:</b></font></td></tr></table><table width=\"440\" style=\"border-width:1px;border-style:dotted;border-color:#A75928;background-color:#E0C69A;font-size:12px\"><tr><td>Want to leave your village? just type your password in here and hit \'Leave Village\'.<form action=\"villagejoin.html\" name=\"leavev\" method=\"post\"><input type=\"hidden\" name=\"player\" value=\"" + player + "\"><input type=\"hidden\" name=\"pwd\" value=\"" + pass + "\"><input type=\"hidden\" name=\"leavevillage\" value=\"go\"><input type=\"password\" name=\"pwdconfirm\" value=\"\"><br><input type=\"checkbox\" name=\"leaveconfirm\" value=\"1\"> (click to confirm)<br><a href=\"javascript:document.leavev.submit();\" onfocus=\"this.blur();\" style=\"color:A10000\"><b><font color=\"A10000\">Leave Village</font></b></a><noscript><input type=\"submit\" VALUE=\"Leave Village\"></noscript></form></td></tr></table>");
vcenter = vcenter.concat("</table>");
vinfo = vinfo.concat("</table>");

// insert content divs for the tabs later

contentInsert = "<ul id=\"tabs\"><li><a href=\"#events\">Events</a></li><li><a href=\"#battle\">Battle</a></li><li><a href=\"#attack\">Attack Other Villages</a></li><li><a href=\"#vcenter\">Village Center</a></li><li><a href=\"#admin\">Village Admin</a></li><li><a href=\"#vinfo\">Village Info</a></li></ul><div class=\"tabContent\" id=\"events\">" + events + "</div><div class=\"tabContent\" id=\"battle\">" + battle + "</div><div class=\"tabContent\" id=\"attack\">" + attack + "</div><div class=\"tabContent\" id=\"vcenter\">" + vcenter + "</div><div class=\"tabContent\" id=\"admin\">" + admin + "</div><div class=\"tabContent\" id=\"vinfo\">" + vinfo + "</div>";

// comment out the old village page
document.body.innerHTML = document.body.innerHTML.replace(/<table style=\"font-family:arial\">/g, "<table style=\"font-family:arial\"><tr><td valign=\"top\" align=\"center\"><!--");

document.body.innerHTML = document.body.innerHTML.replace(/<b>Leave Village/g, "-->" + contentInsert + "<!--<br><p align\"left\"><table width=\"220\"><tr><td align=left><font style=\"font-size:14px\"><b>Leave Village");

// document.body.innerHTML = document.body.innerHTML.replace(/View Villages Accepting Apps &gt;<\/b><\/a>/g, "View Villages Accepting Apps &gt;</b></a></p><!--");

document.body.innerHTML = document.body.innerHTML.replace(/<p style=\"margin:0 0 2px 0;text-align:right\">/g, "--><p style=\"margin:0 0 2px 0;text-align:right\">");

// make the tabs work

var tabLinks = [];
var contentDivs = [];

function initTabs() {

    // Grab the tab links and content divs from the page
    var tabListItems = document.getElementById('tabs').childNodes;
    for (var i = 0; i < tabListItems.length; i++) {
        if (tabListItems[i].nodeName == "LI") {
            var tabLink = getFirstChildWithTagName(tabListItems[i], 'A');
            var id = getHash(tabLink.getAttribute('href'));
            tabLinks[id] = tabLink;
            contentDivs[id] = document.getElementById(id);
        }
    }

    // Assign onclick events to the tab links, and
    // highlight the first tab
    i = 0;

    for (id in tabLinks) {
        tabLinks[id].onclick = showTab;
        tabLinks[id].onfocus = function() {
            this.blur()
        };
        if (i === 0) { 
            tabLinks[id].className = 'selected';
        }
        i++;
    }

    // Hide all content divs except the first
    i = 0;

    for (id in contentDivs) {
        if (i !== 0) {
            contentDivs[id].className = 'tabContent hide';
        }
        i++;
    }
}

function showTab() {
    var selectedId = getHash(this.getAttribute('href'));

    // Highlight the selected tab, and dim all others.
    // Also show the selected content div, and hide all others.
    for (id in contentDivs) {
        if (id == selectedId) {
            tabLinks[id].className = 'selected';
            contentDivs[id].className = 'tabContent';
        } else {
            tabLinks[id].className = '';
            contentDivs[id].className = 'tabContent hide';
        }
    }

    // Stop the browser following the link
    return false;
}

function getFirstChildWithTagName(element, tagName) {
    for (i = 0; i < element.childNodes.length; i++) {
        if (element.childNodes[i].nodeName == tagName) {
            return element.childNodes[i];
        }
    }
}

function getHash(url) {
    var hashPos = url.lastIndexOf('#');
    return url.substring(hashPos + 1);
}

addTabCSS();
initTabs();