// ==UserScript==
// @name Produs (Proddable Pardus)
// @namespace Produs
// @description Makes Pardus a little more touch-friendly.
// @grant none
// @include http*://*.pardus.at/*
// @version 9
// @author Richard Broker (Beigeman)
// @license MIT License
// ==/UserScript==
var TEXT_NODE = 3;
var PRODUS_CMD_ID_SUFFIX = "ProdusCommand";
var mod = { STARBASE : 0, PLANET : 1, BUILDING : 2, MY_BUILDING : 3, NEW_BUILDING : 4, WARP : 5, AMBUSH : 6, RETREAT : 7, REFUEL : 8, DOCK : 9, HARVEST : 10, XWARP : 11, WRECK : 12, EXITSB : 13, VIEWAMBUSH : 14, CLEAN_WH : 15};
var PROT = { UNKNOWN : 0, YES : 1, NO : 2 };
var my_document = document;
var nav_size_ver = unsafeWindow.navSizeVer;
var nav_size_hor = unsafeWindow.navSizeHor;
var img_dir = unsafeWindow.imgDir;
var tile_res = unsafeWindow.tileRes;
var current_url = my_document.URL;
var sector, coords, aps_left, field_res, fuel;
var ap_img, res_img, fuel_img;
var starbase, planet, building, my_building, new_building, ambush, retreat, dock, harvest, refuel, warp, xwarp, xwarp_menu, wreck, exitsb, view_ambush, clean_wh, mine_ore;
var partial_refresh = false;
var in_callback = false;
universe();
/* Add a callback to support partial page refreshes. */
if (unsafeWindow.addUserFunction !== undefined) {
unsafeWindow.addUserFunction(reflowNav);
}
/*
* Reflow Pardus web pages.
*/
function universe()
{
reflowButtons();
reflowLinks();
reflowNav();
reflowStarbase();
reflowPlanet();
reflowTrade();
}
function reflowNav()
{
if (current_url.indexOf("main.php") == -1)
return;
if (my_document.getElementById("nav"))
partial_refresh = true;
/* Get rid of the left column as soon as possible, so the popping is less noticeable. */
var left_column = my_document.getElementById("tdTabsLeft");
var middle_column = my_document.getElementById("tdSpaceChart");
var right_column = my_document.getElementById("tdTabsRight");
middle_column.setAttribute('width', ((tile_res * nav_size_hor) + 50) + "px");
left_column.setAttribute('style', 'display:none;');
middle_column.childNodes[2].setAttribute('align', 'center');
right_column.setAttribute('align', 'left');
/* Add ship status & remove previously modded cmd elements. */
if (partial_refresh)
{
var previous_clone = my_document.getElementById('yourship_clone');
if (previous_clone)
{
previous_clone.parentNode.removeChild(previous_clone);
}
}
var otherships = my_document.getElementById('otherships');
var your_ship = getClone("yourship");
your_ship.id = "yourship_clone";
var produs_br = my_document.getElementById('produs_br');
if (produs_br)
{
right_column.insertBefore(your_ship, produs_br);
}
else
{
right_column.insertBefore(your_ship, otherships);
var br_container = my_document.createElement('div');
br_container.id = "produs_br";
br_container.appendChild(my_document.createElement('br'));
br_container.appendChild(my_document.createElement('br'));
right_column.insertBefore(br_container, otherships);
}
/* Grab the page elements we're interested in moving. */
sector = getClone("sector");
coords = getClone("coords");
aps_left = getClone("apsleft");
field_res = getClone("fieldres");
fuel = getClone("fuel");
ap_img = getClone("tdStatusApsImg");
res_img = getClone("tdStatusResImg");
fuel_img = getClone("tdStatusFuelImg");
var status_box = getClone("status");
var links = my_document.getElementsByTagName('a');
starbase = modNode(my_document.getElementById("aCmdStarbase"), mod.STARBASE);
planet = modNode(my_document.getElementById("aCmdPlanet"), mod.PLANET);
building = modNode(my_document.getElementById("aCmdBuilding"), mod.BUILDING);
my_building = modNode(my_document.getElementById("aCmdOwnBuilding"), mod.MY_BUILDING);
new_building = modNode(my_document.getElementById("aCmdBuild"), mod.NEW_BUILDING);
warp = modNode(my_document.getElementById("aCmdWarp"), mod.WARP);
xwarp = modNode(my_document.getElementById("aCmdWarpX"), mod.XWARP);
ambush = modNode(my_document.getElementById("aCmdAmbush"), mod.AMBUSH);
retreat = modNode(my_document.getElementById("aCmdRetreatInfo"), mod.RETREAT);
refuel = modNode(my_document.getElementById("aCmdTank"), mod.REFUEL);
dock = modNode(my_document.getElementById("aCmdDock"), mod.DOCK);
harvest = modNode(my_document.getElementById("aCmdCollect"), mod.HARVEST);
wreck = modNode(my_document.getElementById("aCmdWreck"), mod.WRECK);
exitsb = modNode(my_document.getElementById("aCmdExitSb"), mod.EXITSB);
view_ambush = modNode(my_document.getElementById("aCmdAmbushSettings"), mod.VIEWAMBUSH);
clean_wh = modNode(my_document.getElementById("aCmdCleanWh"), mod.CLEAN_WH);
let nodelist = null;
if (partial_refresh)
nodelist = my_document.querySelectorAll("a[href='javascript:collect(\"asteroids\", 1)']");
else
nodelist = my_document.querySelectorAll("a[href='main.php?collect_type=asteroids']");
if (nodelist.length >= 1)
mine_ore = modNode(nodelist[0], mod.HARVEST);
var nav_table = getNavTable();
//addGrid(nav_table);
/* Reflow the elements we've manipulated. */
prepend_status(nav_table);
append_commands(nav_table);
}
/*
* Reflows the starbase screen.
*/
function reflowStarbase()
{
if (current_url.indexOf("starbase.php") == -1)
return;
var popularity_value = my_document.getElementById("popularity_value");
if (popularity_value)
{
var popularity_greeting = my_document.getElementById("popularity_greeting");
popularity_value.parentNode.removeChild(popularity_value);
popularity_greeting.parentNode.removeChild(popularity_greeting);
}
var table = firstEChild(my_document.body);
var tbody = firstEChild(table);
var content = tbody.childNodes[1];
var content_td = content.childNodes[1];
/* Remove gossiper portraits. */
var tables = my_document.getElementsByTagName('table');
var content_div = my_document.getElementsByTagName('div')[0];
content_div.removeChild(content_div.childNodes[1]); /* Gossipers 1&2. */
content_div.removeChild(content_div.childNodes[4]); /* Gossipers 3&4 (empty innerHTML if missing, just remove anyway).*/
/* Remove short range scanner notification */
var table_headers = my_document.getElementsByTagName('th');
if (table_headers)
{
for (var i = 0; i < table_headers.length; i++)
{
if (table_headers[i].textContent == "Short Range Scan")
{
var srs_table = table_headers[i].parentNode.parentNode.parentNode.parentNode;
srs_table.parentNode.removeChild(srs_table);
}
}
}
/* Remove starbase population display. */
var popSpan = my_document.getElementsByTagName('span')[1];
popSpan.parentNode.removeChild(popSpan);
/* Only NPC starbases have popularity, so we use that to determine conditional actions. */
if (!popularity_value)
{
/* Remove commander name, alliance links. */
var commander = tables[4];
commander.parentNode.removeChild(commander);
/* Remove the custom welcome message. */
if (tables.length > 5)
{
var welcome_message = tables[5];
welcome_message.parentNode.removeChild(welcome_message);
}
}
/* Align things properly. */
content_div.setAttribute('style', 'clear:both');
tables[3].setAttribute('align', 'left');
/* Make the service links touch-friendly */
padLinks();
}
/*
* Reflows planet screens.
*/
function reflowPlanet()
{
if (current_url.indexOf("planet.php") == -1)
return;
var popularity_value = my_document.getElementById("popularity_value");
if (popularity_value)
{
var popularity_greeting = my_document.getElementById("popularity_greeting");
popularity_value.parentNode.removeChild(popularity_value);
popularity_greeting.parentNode.removeChild(popularity_greeting);
}
var table = firstEChild(my_document.body);
var tbody = firstEChild(table);
var content = tbody.childNodes[1];
var content_tbl = content.childNodes[1];
content_tbl.setAttribute('align', 'left');
var links = firstEChild(firstEChild(firstEChild((content_tbl.childNodes[3]))));
/* Remove gossiper portraits. */
var tables = document.getElementsByTagName('table');
var content_div = document.getElementsByTagName('div')[0];
content_div.removeChild(content_div.childNodes[1]); /* Gossipers 1&2. */
content_div.removeChild(content_div.childNodes[4]); /* Gossipers 3&4 (empty innerHTML if missing, just remove anyway).*/
/* Remove starbase population display. */
var popSpan = document.getElementsByTagName('span')[1];
popSpan.parentNode.removeChild(popSpan);
links.setAttribute('align', 'left');
links.removeChild(links.childNodes[2]);
links.childNodes[1].setAttribute('align', 'left');
padLinks();
}
function reflowTrade()
{
if ((current_url.indexOf("_trade.php") == -1) && (current_url.indexOf("blackmarket.php") == -1))
return;
var els = my_document.querySelectorAll("input[type=text]");
for (var i = 0; i < els.length; i++)
{
els[i].type = "number";
els[i].style.height = "35px";
els[i].style.width = "50px";
}
}
function reflowButtons()
{
var els = my_document.querySelectorAll("input[type=submit]");
for (var i = 0; i < els.length; i++)
{
els[i].style.height = "45px";
els[i].style.width = (((els[i].value.length) * 6) + 35) + "px";
}
}
function reflowLinks()
{
var els = my_document.querySelectorAll("a");
for (var i = 0; i < els.length; i++)
{
if (els[i].querySelector("img"))
continue;
improveClickability(els[i]);
els[i].style.padding = "1em";
}
}
function addGrid(nav_table)
{
var navFields = nav_table.querySelectorAll('.nf');
for (var i = 0; i < navFields.length; ++i)
{
if (navFields[i].parentNode.tagName != 'A')
continue;
navFields[i].style.boxShadow = "inset 0px 0px 0px 1px rgba(200,200,200,1.0)";
if (navFields[i].parentNode.parentNode.className == "navClear")
{
navFields[i].parentNode.parentNode.style.boxShadow = "inset 0px 0px 0px 1px rgba(200,200,200,1.0)";
navFields[i].style.height -= 1;
navFields[i].style.width -= 1;
}
}
var navClear = nav_table.querySelectorAll('.navClear');
for (var i = 0; i < navClear.length; ++i)
{
navClear[i].style.boxShadow = "inset 0px 0px 0px 1px rgba(200,200,200,1.0)";
}
}
/* Clones node "node_str" from original document. */
function getClone(node_str)
{
var node = my_document.getElementById(node_str);
if (node != null)
return node.cloneNode(true);
return null;
}
/*
* Generic link padding for better clickability on planets/starbases.
*/
function padLinks()
{
var images = my_document.getElementsByTagName('img');
for(var i = 0; i < images.length; i++)
{
if (images[i].src.indexOf("/factions/sign_") == -1)
continue;
if (images[i].parentNode.childNodes.length < 2)
images[i].parentNode.parentNode.removeChild(images[i].parentNode);
else
images[i].parentNode.removeChild(images[i]);
/* We just removed an element, so adjust our index accordingly. */
i--;
}
var separators = my_document.getElementsByTagName('hr');
for(var i = 0; i < separators.length; i++)
{
separators[i].setAttribute('style', 'display:none');
}
var links = my_document.getElementsByTagName('a');
for(var i = 0; i < links.length; i++)
{
if (links[i].href != "javascript:showStory();")
{
links[i].setAttribute('style', 'display:block;padding:15px 0;border-top-style:solid;border-bottom-style:solid;border-width:1px;');
}
else
{
links[i].setAttribute('style', 'display:none');
}
}
var br = my_document.getElementsByTagName('br');
while(br.length > 0)
{
br[0].parentNode.removeChild(br[0]);
}
}
/*
* Gets the first child node which is not a text node.
*/
function firstEChild(node)
{
for (var i = 0; i < node.childNodes.length; i++)
{
if (node.childNodes[i].nodeType != TEXT_NODE)
return node.childNodes[i];
}
return null;
}
/*
* Replaces the given node with a modified version.
*/
function modNode(node, mod_desired)
{
if (!node)
return null;
var mod = getModElement(mod_desired);
removeChildNodes(node);
node.appendChild(mod);
node.id += PRODUS_CMD_ID_SUFFIX;
improveClickability(node);
return node;
}
/*
* Makes the entire containing TD clickable.
*/
function improveClickability(node)
{
node.setAttribute('style', 'display:inline-block');
node.setAttribute('width', '100%');
node.setAttribute('height', '100%');
}
/*
* Returns true, if the script has detected that there is protection on this tile.
*/
function getProtectionStatus()
{
var protection_node = my_document.getElementById("tdStatusTerritory");
if (!protection_node)
return PROT.UNKNOWN;
var protection_text = firstEChild(protection_node);
if (!protection_text)
return PROT.UNKNOWN;
switch (protection_text.textContent)
{
case "You cannot be attacked here.":
return PROT.YES;
case "You can be attacked here.":
return PROT.NO;
default:
return PROT.UNKNOWN;
}
}
/*
* Destroys all child nodes of the given node.
* - Assumes "hasChildNodes" has already been called.
*/
function removeChildNodes(node)
{
if (node.childNodes == null)
return;
while (node.childNodes.length > 0)
{
node.removeChild(node.firstChild );
}
}
/*
* Returns an element representing the desired modification.
*/
function getModElement(mod_desired)
{
var new_element = my_document.createElement('img');
switch (mod_desired)
{
case mod.STARBASE:
new_element.setAttribute('src', getImgSrcByPartName("/foregrounds/starbase"));
break;
case mod.PLANET:
new_element.setAttribute('src', getImgSrcByPartName("/foregrounds/planet"));
break;
case mod.BUILDING:
case mod.MY_BUILDING:
new_element.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwWDwoCS9/8JgAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAACvklEQVR42u2aPZLqMAzH5bcchD0EtXwVDkFtpecQew+KyE0aanr7IvErsDMmSxLnbchmHvrPZIZJhD9+SLIdBCASiUQi0dtKLdiWjtda4nj9SLslASCi0fr1DJgZrLWwBIAlRcaYsIaMMQEAaIlB/3n3HCAA3h3AkkkQmBmIpkNTaw3PkiUzAzMX9bNFAGytTdl5arnEIQBVVdnC7M6bA1A4KAIAnGiHJAcIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIgGW1+41Oh/5EXfJPz1KpX5i/hvFaIoaNlb6I/mepH7jqWq7bH8ei/YwlweKytxeXrXXjWLs8rrjsbcmytbFxvKKf3ZzlKtX29Gt54mc9MLjkskMh1Xfpvp3+hzAtDpMxAP2aHw2xtudJLY9GRNRaY3JTxHsVTPZ9ijb90EngEqTOLnP5ocmXtLmKK3bP6rruQgMRQ/ZrBET8Fj7RhuKEGBFDXdcP7aTPWb+d7TNl/U4msMW3wilMlFLWWlvF2xi9wSqlrFKqC63s19OIiOk+EYFSCgaScGcb7axSqlJK2XQP7y64PgAiAnv3W8quCgA6X0bEpxPLc0xso7LW2mdb5KFaw6lna50F8iT0kCdm7Pc5A4hjwIkIk03bttC27aYOQ12yYmbQWoO1FowxRVWlJTqdTt/uXa/X7QBIk8/CA2C8WDJfVvVUyJ3PZ5slPZwzuFXeB5TGY9pfaK1TEjP9Za5v2xcidkvwZgCkwRIRhBAwhIBElE9Ap1UiXwVCCEPvCDjZZm2aEAIeDodkU1Rz/DH3UOKcA2YG7/3DRmjkGXjvP51z+/SciOB4PIJzDpxz4L3fxwF/JdsEIbfL2v4CAOe9/2Tm/e12g8vlAk3TQNM0+So0CUDNBTCQ6adObCUny6ktc0m/8lJFJJqnv3TcgKkE1HFuAAAAAElFTkSuQmCC');
break;
case mod.WARP:
var src = getImgSrcByPartName("wormhole.png");
if (src == null)
{
src = getImgSrcByPartName("foregrounds/wormholeseal_");
}
new_element.setAttribute('src', src);
break;
case mod.XWARP:
var src = getImgSrcByPartName("foregrounds/xhole.png");
if (src === null)
{
src = getImgSrcByPartName("foregrounds/yhole.png");
}
new_element.setAttribute('src', src);
break;
case mod.WRECK:
new_element.setAttribute('src', getImgSrcByPartName(img_dir + "/foregrounds/wreck_"));
break;
case mod.AMBUSH:
new_element.setAttribute('src', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QAdAB0AHTxgYjZAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwWDwsKXB9FVQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADbklEQVR42u1aW47rIAw1KPuydxa6spqV+X4U5noojyQFkpmJJaSWEgzmHD9IAW655ZZbbrnlz4qZqItCawmHNkWWmQZAxJWobANmBu89zDTATHHrukpN1nWVsHmatSh7JfgTESAi/koDICLW4B8NEMbQLCPYaQ7g/+YuhQJ7FvyZGZxzwMyHDPWjDJCDPzPD4/F4M8CBsHlpA9DrUPed6kwa2LNOP568/nwGDYZTILeZkPB4AHh47/2ZNLCj4d9IeV0p65tFA3sm/Gt9s2hgT4R/3DGfSQN7Ivy5Vf3NoIGdCf9R2eMlKVCCfwnqtd9G0sDOhH+G/9DyA6NpYE+Af47zVT8wkgb2CvA/kwb2AvA/lQbLZPgfOsmIqHBfeFkDVCu/0IehVTe7wXgMFxSHiPJ8PmWEPJ9PQUQJ9cM1fcBIjz1qbtsT/pOQ1lVXNwP0SH3PuClaRkN0S/zfOt+IaLCMhGS8+W3E/+yczIzOuRLvLxUNit7/g1ddBACce5XWOxrYkfBv5fkb7wuGRgM7Cv49ZEZt8LEBSt7/qPObXRvYUfDfUPxcggZ2MPwZxnrqj2mwfKgcY6jLIaCXH6jMj5+GQ3NxBFwBZbf8ajENyPWCl553FmQP6XSIKCLS+/LBIeKQC41PdS4Nh9Ot6IhRwZh5/83conNJszpmBmMMiAgQEXrvtQFqXlmPqVGIkhPhwvyt/tJatujMjnOx4gIAUZ9dAVaS0IUBgDN9lM5dGFODbdpPWleULToLel8Tqh+/HkgXGEvSnBQW5PRzOxbtCofjtK/KraGlU4+zGv4A8O2vKwBQLDqICIwx3hjjdfGT9uV4GccQETDzocJG8zu2Un2gdD5Ka9MW5mBBzpxGOo429LnCGMroOISAiNrQaut6m8tqZ8LMICIoIquIoLJSzuHknM2WeMtJO1wqxxMPKIIA4l3p8qLhn7uEjDQI0aB3gkI7x38T7z1ESItI3MOutS4Jn9L6nSISesTvyHfvvVP+pXbx6XR4VuO0z/ryBSICe9e6ROuGyTnlHhFFKnRBQNjIF73CNXc0PEXHGE4Ua+W1KonfULvHANr7c4ZrBOqlZuXFZ7Uvfvfew8v/fNu8i7pf1H4zUMpvTseVjFm6UdLFkGs4ilbG1crSuMH3VG/rDmBrJrg1q7zlllv+sPwDc6U2Rgd+YvUAAAAASUVORK5CYII=");
break;
case mod.RETREAT:
new_element.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwWDwcAEH/jRwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAEYUlEQVR42u2a/3HzIAyG5S8ZhE4Co3QTK5vkmyRiEzyJ+0fBJyv8SgKu05q73LWJjdFjSYgXAI52tKMd7Wh/tw0bPsv4T6mR//wKANxoo7XWxqQZEBFYay0D0B3G0Nl45EYbY6AEgIhiMDb1ilbGk9Z6vt1u8zPtdrvN4zjOWuvZG2/+jPESxDtBaGr8FhBa5wDUWo+ImIx1Hud39DI5gogAEcFaewEA3O3bH8exNqZRfIqeM47jvFfjw9uPGiBcGBNuXAwfD2C3uQBTb/+BgWchMJDNvODfhoBq5nICALTW2lieKNURz7TzD5TCNRCIiDQiRpPh2wEwxgARaWvtkvBKEKy18F0IJiG9Tw5IJELcQzI7tXZxpRQope5+DN8rpZT5DmQzTdMHACixaHLvCgCmafrwBkZ/V0otiYzDSADZBEZLAC4MPuUFKRgSiIDRFcSpdYfTNH0451QNhJJ3bAGiNQAHAO5ZCBJGBIRrDeHUwatWEJxzi1GvgHDOqR4QTp1CK0CYrLVDCxC9IPQCECBQDARfEtcCERCmVsVQTwApEKGtgNTA8ADAWju08oItAEgQFAHyEIzWXrAXMeVHhJFTJ2M+WXlbU9U54RnZaTSyf/Djq0Fu6GoDxA/2kRVc0ASQiHTr9X83AFrrMbYB4oXMWi1Aiie6d+w11QNiig3TAh4BYLZaKreSxKhCxqo1yoDYUpPx31oV6i6IVKrCwfhNleFNBBEuhiSEkPD51Frr0saKtfY/AFxbDHpoDABrDMi58K/eHdrj/mAPPUABgHll9Zd58xbqVOVdlLUv7xJvcUZgVydEZI7Y4pTIrs4IJep86unyezwl1t3oox0tHwI5V33FNXm/uX5qQ4X3UXNP9Jnn2oWIT07myXl46RcASvrAammdSZR8LNl7aseeXYi8WIktx2cq5CwsVZKRsTyyM21SHmBCHR+EDFmjIyIgolzbp9yP2ANNqAH8HM/fBtXUBIWxZO/JjH0dAmGQiAiXy4XPxSYhT61Cxj9EupyRxRAAaC+SQAmAGEd45rLgkocoIvdkr69WhLx8zYuTO+OD5/i/w4mQXbdzzH3CWwqaHKvOuGuvlr7DMATqZp5n7RcwOuyCBA8Sb4hKEhsfh5DZkuEh78ldfxaylkFEzfftGRjNtD3M1fbBC7zLhadqkR+K3hHrPxgiSmZTuoetJikJAL7laGOtvYt5lh+iiWee55XHNBEa2VvjSfRyuQAA8KWxySVBBgtzAFbZXMR8NpHEZo0W4iULFwjH5gKE1AmyROKsKoSWYkLE/CMDDW+jpZ5PPjwREXUIr9iU9miIRWcB5mrFRBL+99Pm8r0v+HLn/KrqgEh4IvcEtuHSZBZYkiCbyrKJhCdNngNCLeDjlHwdsZphauqAmCf4ZCwPXzbRBB2Ioy08416vV5lIlusB4O56mXRCv8vDnINpmmKxaoKmSER31/B+fB/K65CQuqf3arBUCueuq+mvpp9DUDnak+0LX2/I7fo9xIkAAAAASUVORK5CYII=');
break;
case mod.NEW_BUILDING:
new_element.setAttribute('src', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwWDQIiu+yCiAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAC4ElEQVR42u1b27HcIAzVfRSSVCJ1Zm0n24mlTnAlm4+Ahzjgp2DwXTTjH8bWmmMh6RxYgG7dunXr1u1t7cPID/nL2sRfxezbCgBEHIjsMBARUFWKACgChhUAQETAzKYAiAgCAEZgcOmIOGs8DMOrlI3j+ELEl5+86VL7vEOiCtGFiOijgN4KgAQI1FwO2FjLhyebSqhh3OcDssgHVQB4PB564GVJRJCZsyCICC4qRLtJcBiGl1+3R3oKQcTXOI5WPm+VAwQAWFX16NL5SUlQaoX3barAuwGQ5RZnqsrdACAAYETEVBXwbbFaLZHvmpM6QKySZTD6+nIbAPwk0F+nGyERAWY2/frVALhCk8NXj0KfbwWAUSdZrDw2D0CInkgTaKoFrqIHlNQEbsMGAx1mZlRVtsoFzbLBAEIMxAKEH80GeY0Rep8mS6FZNrjGCInITBlqmQxlS97V3qKzwQ7APQAgKLPd1nwnGCZOa5TYShNolg6n+oASmsBt6HApTaB5OlxaEbpVFbilImQ5ceuv3zwAmYlLkwAEzc4agFITD9b6GSGAirtE3d7RPoxD/Gy4Lv1LNL7HNx2491QS3DwGd/Ek1+zf+wEAgMSYHHjeFIDNY3C+CpgKlpEGOINice+lMphjYgnBMhfCyXBX1SMvvvRxugKdAiCh8hIAzBuafiK5sMyFOyzH1phlYIw77q/HBZbREaIip/GnJO8N4jRPPr43gFclAtbo7WL3tkRjNG+dR78HfwViqAdACu0o+UhBAObfj8FW1XkzpUoOyMlRiBhvYFbhS77i8BHBpUgSHIYBE1WgefssEZ4VSVNovKhqDkglwVCSVtRaghWl9+gSjI7MYvUqkFNql1Ugflnwf3y4uuZVlZg5LLfLGsTXkc7LOfePShNfz+fzvzM80zT9ds79Ck6cc6Cq4JyD4GuaptDF0I6xJwC42O+Kz11ol2aDe57LMb81Nrjlt4so3brtsz/AtXPP5JvNxAAAAABJRU5ErkJggg==");
break;
case mod.REFUEL:
new_element.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwWDwYQFNPCYgAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADdUlEQVR42u1abXLjIAxVdnuQ9iTSVXoSqzfpTSJugk/C/gjqYAoB25DFiTXj6UzaoPJ4evrAAKeddtppp532snZptA75p7WJf7rZWysAEHEiaoeBiIAxhgIAuoDRCgAgImDmpgCICAIABmBwb0ZsNZ6myfWy6/XqENH5zTcNtT9HECplFyKiZwG9FAAJEGg4DSjE8urNpgRVP/d6QC304CEAfH19mRX/LIkIMnMWBBHBKEOMK4LTNDkft2tqCkFEd71eW615KA0QAGBjjFkbOs8kgvIoeh8mC7waAL16i0MAQADAiIipLLAlrf7XNBhuakVjlU2Dvi8wrTSiOwB+E+ifXYVQcPoPE8khmqGeDdEhsoCIADMr9Zu2xG+jb1yfHpsfFoDExmX4idDabjAndEEDBQDQ5dRH6AZJRFBBiIHwHR/cDv8YtrYb1Log2/X1HIONkAXEA5Dt+nqOwUZKg3KLkrxO9AZhhDpAjDGGmWtAeE4ANBTugeCFsnmXOEolWJwCEdHTj8XX6MHT9gJSYkHrUBgOgHssiELhKQGoygotWXDIsXhLQRx6LP4IQRx5IPKQUGjWDerUJvX5zlBgZs5OiOE2a6StLfOj3hHaM8yoOeEuw5LTXsEuG+jWi9I9aBz7+uUjFsHi624739giSFx7BeOv5gDofnI+3nI5tqD2aIzhDSD8XHvtzBD1Dv1+/L1CfRosFSEehDD9lKhNt6/Tzxp+8rtgR+o7GQo3CaW7AKSmuQDwc3EZILqgtiIehQuF1NefSk3/O4yomqNwjb8qEP40EhpGRAyLIQWptmbXjaRG5NHnvza/xV+RAblbXT2NIDwWcX25XJQ15JzDQDOMb3BQ1wgYRlB/e7y4Pr/jbz8A8WlkrqwWcZ1bxxijiGFc7vpn9fV5wd9+DdBT1kUzV1YU0XXVuwANFH6XvxoRhPDFxdKVVeOGqGh7/ZW6QfFtKTMzqtomUmAqc9BOJhSr0hb+arLAYkKT6sM1XOLTQES4ifL2zJI74Vb+atPgYkITpRvQwQUzg3MOnXOTcy4sd4svNYVr+zUwU4xJC39qf1O0s9aCiMA8z4uF5nn+sNa+AwBYa2Ge53fv7Hue5w8AeNfvZt7syK4frq2n+/n5CdZaiP7+GwDsXn+13aAkKkG6V+oWStMtpS2s/Ptaf6eddhrAP2FlQCgKYtGgAAAAAElFTkSuQmCC');
break;
case mod.DOCK:
new_element.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwWDwc3qMJGSAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADDUlEQVR42u1aUbLbIAzctD6IexLpZpZPFnGT5iTuR8FDGOxgRzBOHprxvCQPO7DsCkkR0K1bt27duv1Yuxk9h/1lZeqv6jZYAUBEE/P7GKgqnHMcgaCfwCSZpmmxsPv9vkzTtBDR4hcvxux6st9WDPD29oPGcQQzYxxHjOM4AuDH4/EHwF9/fTcDcoyI2GDOhF9X1xYzQ0RARFRDDkPtBagqVLV4sTkZBRBEhCIH+TkAzPPsCibNqkoBhBSI8JkHwBSEqj5gmqbFU7cklhAASkTL/X7f8wfyjT4gHHninHM52UTMMAu8rugE9b9y8r6DmYND/FoAAEALWPDVx+AuCyzzjyvHAbsssJLBpQHYOuosZXD5SLC2dQA6AB2ADkAHoAPQAbikbYa6R4osHw0AEVEu4vOl85Iiy2dL4EXIq98MQBP6XxUABiAt6A80KIqe2HUmIhKR6vRvCQDjdSFzdXpb2remfxMA/ELIX6ednqpCREzpb2nVfhqr/fPY5SPBZOfFeveHKy88XLUWfzkAYieXHHdaS/eDNVXffUbi5KotPNgVe4SqL7pbt26nfECJzlvoN53HW9955BTY7QVs2N+3zsN/J1o5zd1wN+nvkxbzONB9YhsH5LKyqJEp18ezJZ8cU3JjSxh1ShqnAUgan1hV1xxeVeNurmyBI5KMJEA9jd0Yt1lEARBkYS6NPeoxAM38nxE1PQWZhNdJhvc0NrZkXDoPDfdlxjbLBrfotlZ3AEBEMM8z4vdRo8NTJYiZcbvd4vrAVkMEERGpamijO5Q4NSmIBP8Q4nzn3JNkAmW3xvrFu3RnAzjJPYeyxtbZoPoJSkGFSCMZxccr5ypIZ0tlVhKwTIYOZ6Dh75m+oeHNRUus9RCcvOjsksJJxmMJmcKqP43W7zzTSjuc1TWSQmdOv/54XCfnj0ciIuTACu/9rq5j/dG2tbvOOQcRoeg+RoXo8Ewk2OIYFB8DpEdjkRSOJENSkAvkSlh7gZArDITicZLkAnP0eRwIzSVhcqts0DIU3gp5TbPEbj/F/gElRPopq5cMoQAAAABJRU5ErkJggg==');
break;
case mod.HARVEST:
new_element.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwWDDIrHLRm6AAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAEB0lEQVR42u1a65HiMAz+9o5CTCVSKekkopNQCXIndiXcD+ycMXHeQFiiGWZ2vI4UfZZkPQLstNNOO+30vfTzYnkcfkOk4fcrAEiVZiIi5jIGqgprrU0AeCoYPy9Q/E5pZsYQAKqagyGvsog1lVciutZ1fb1cLtc5dLlcrkR0DcrLSPfZjvJzFc9BqOs6BYK/Rvkea+AtxgAGIEREIlL089THHxiMiA8iAmvtKbjEpkj6Tr7DlCX7jYoZdV1v0hUYgNZ1vSSYcQpEH5CBl3zE6c/w3cE4sjUrKJ7+gsA11qIWW8FhDQBK2d2CREZvjyupahsY+wLoOwEYit5zU1m11rKIUApAR5r8VgCKxc0Kp6UAxFrLN51fXygtCn5bva5y+rNR8/8cAD6ddgB2AHYAdgB2AHYAlqRr/RkfL0yEOOkXPCWh+ruUgff+aIwxXcmQc8547/2CZKgiotoYw977IwCTAOG2UAzFTI9KGWKWx0+uMyIfVSUAFAoiTmTrOwGYUjBNfdG2zE7T7eBypKoUwNW3ukBU0BgDY0zJDY7BZN0EnlVVVaaqqrt/RBmqCu+93UKtMbZ7M7YyZHxYS6y3LP6WpiiPefGlbfFnDEc+ajAiIjidTpselg5awgqjMcHGaVUQPm04+gDC1sfjX/+BxP6JzBtcY4wZP1XpnXYadoEuU11iljk/TdZfYfap/Ds5hzGRe4UanImoDnV92yPoWNMnKS9ERAB65RTv7iwZmZOJSawWQyUnhbWnFmpdcg55A0JEHu5jZoaIxA+U8gZHKbKv6TJ9PPvcNe8q3VWdAPSQt59i0ZHcxayqLTCh/cWJAMnv9sRl5iQwU3g+7M32PSRhoa3WdpP+5AlKln0JbjN6KyIRQZsrn1Z/0VqCz01NXzuVj3wznkX5c2QP+SPjsT3d+laSs1871mRCDMj9NdYAGuNSyrMkP/4dzTyTc1dXjJ0LpA0Mzev3xGpO1lobv+vpS3mLJtDzXP6/kvxg3qUaQtP1w4ygVApuKUi0+O4K/hp5jQBTM/fQMeXzodCp4a5AF+5RfkdTIr7fs74SU2stq2oMhGStjWbSXo/B1GigqclrKRzaX/EQaEwATfaOOqhDatYRgKDsnfkl92h6PSL6ewCNiKjdO+e0Ss8FA7ybNJXkh31DB6UA9G4w4r0/OudMVLqqKjAznHNomiYOI84AmnR/BMgYgzjISHKJBoDhG6UBCx1rGnkaY8DM8TljjIFzLg5DGgCuS37HPoNkcGNukxWOM8sUABeYemvtj3POOOegqmiaBufz2QblFf+nPC4FDUALVtbJYQAc+YWXQ8daqxgQ3xWl7lCn/K4uUtc7xqnSGtXgmLR1ajW4Vir8rOp2p51+C/0DkzjscRhTcjIAAAAASUVORK5CYII=');
break;
case mod.EXITSB:
new_element.setAttribute('src', 'data:image/png;base64,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');
break;
case mod.VIEWAMBUSH:
new_element.setAttribute('src', 'data:image/png;base64,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');
break;
case mod.CLEAN_WH:
new_element.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QgcBjsnpkbngAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAEpUlEQVR42u1a8XHrLAyX3+seJRt0A7FJ3UkQm7STGG3QEaxJ+P4I8lOIHbtx0jpfrbtc7gAj9EMSkgBgp5122mmn30vNN/Pz5TdHqfz+FwBYoT0iovfTGKSUgJnZAHBXMJpvEPxEaO89zAGQUqrBoO/SiFsKnxAxhxBy13X5Guq6LiNiLsLTQvPZjvDXCl6DEEKwQPhfI/wFbfBb9AEeAAgRkYgm7dza+NkEC/wDEQEzx2ISmyK6tPMjqkzVb5HPCCFs0hQ8AKQQwhpn5i0Ql4Asc9FD7P4VtjvrR7amBZO7v8JxLdWo1VrwdAsApqK7FYFMOn6eMKU0OMZLDvQnAZjz3teGsomZPRGhBWAkTP5RACaTmxvsVgIAYmZ/lPn7E6VVzm+rx1VNfzaq/o8DwKPTDsAOwA7ADsAOwA7AmnDtcsTnVwZC3tQL7hJQ/V07gYgcnHNuLBjq+96JiKwIhlpEDM45LyIHAHAGiH4LyZBGejgVIVZx/JfzDJ0npYQAgCUh8oZ3+kkAvpIwfXWhQ5ptw+1icphSwgJu+lETUAGdc+CcmzKDQ1HZ/gtztm3burZtTzqUR0oJRIS3kGssrd4szQw9PFhJ7GJa/FuKon7JwteWxe9xOfJQFyNEBDHGTV+WzmrCDa7GCDZONwXh0S5Hz0DY+vX4r38gsT+R+QHTWKLGdxV6p53WmcCYGluVrfs3rc6T2SAiQtu2g8cWEQ8AbSlSvLZt6/2x0xYr1NGFtm21T8qRCJrZHZv+8bBt9yJEBOfcPB9EhBACdF0HOWfIOZ+d62PZmYnSSMeUrI0AAEIIkHOGEMLAa6ztXsJ3XTfK56keSERjMbu3Mb6O0XOdiPTxkh/J+T0AQIwRYown5lHaxkwoXTgx0kz/2VhTVboMgKp7EWa0NFXKXHpO+5QSGkDOSmPPz8/onFNwqI4DTImLQgipgARzY9XUVDBmBkSE6i2BBwDy3icrn45fqiaEiGeFiDJuMA0Tsr5bE3h9fc1zJlTF+brDWfmOjD0xtTrU7rruJHlSc1b5EP/t058lqWjVPqhrzjnB8RFDNG/3+qn6nppK0zTcNE1smoa1DY+r8laTmJnL2MHsxtaoay9jWZ/V2B3X/xjjye6vvhcIISRE1B1JIzXBRQCbPgKACABstXOuTnBtzrC6KmwdW4xxEfOcM475C9WqpmkGrfnCM5t0Tbr8tKRSU7UPZe6maQbHVlTWL6n82lOk5mHnVFVmZgghjH63lgYAmBmUYeUlh9daRASlHk9ltwfbLt/gQq1hs1s45i/Mu2CeOmFuCoDugp7rZtdTjHF4s1cWNqiwjRuK3fZ2seUIHDSstmX1yNYxXbL3K0P3ZQAwM2iwYx1TjPHkzd7ITY0CMGWwJ99bH2DAtrHF8DK8gF2boh/jFULQwOoE4xp8q+FnuYCIADND3/fQ970y7UWkFxFh5qbve6d97+/v8PHxwSLyURblAMBr/+fnJ7y8vLyV7w8AMHyrv9qDi8jB8iAieHt7G9YkIq4ANvAREfbep+KHbDuISNTTSE8mzQnunQ1qgtTOFETqjHFpmOtnQmT1Md9d+Nlpp0eh/wBGwih8LyQSAQAAAABJRU5ErkJggg==');
break;
default:
alert("Undefined desired mod: " + mod_desired);
break;
}
new_element.setAttribute('height', '48');
new_element.setAttribute('width', '48');
return new_element;
}
/*
* Tries to find the correct image for a link by a part filepath match.
*/
function getImgSrcByPartName(match)
{
var imgs = my_document.getElementsByTagName('img');
for(var i = 0; i < imgs.length; i++)
{
if (imgs[i].src.indexOf(match) != -1)
{
return imgs[i].src;
}
}
return null;
}
/*
* Retrieves a reference to the ship information area.
*/
function getShipInfoTable()
{
var tables = my_document.getElementsByTagName("table");
for(i = 0; i < tables.length; i++)
{
if ((tables[i].border == 0) && (tables[i].align == "center"))
return tables[i];
}
}
/*
* Retrieves a reference to the nav tiles.
*/
function getNavTable()
{
var area = my_document.getElementById("navareatransition");
if (area)
return area;
else
return my_document.getElementById("navarea");
}
function createMaxWidthSpacer(spacer_tr)
{
for(var i = 0; i < nav_size_hor; i++)
{
create_spacer(spacer_tr);
}
}
function addProtectionStatusImage(protection_td)
{
var protection_href = my_document.createElement('a');
var protection_img;
var protection = getProtectionStatus();
protection_td.style = "border: 1px solid rgba(200, 200, 200, 0.5);";
// Add the link to check for current protection status, and apply relevant image.
if (protection == PROT.UNKNOWN)
{
protection_img = my_document.createElement('img');
protection_img.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAg9JREFUSMetleFt2zAQhT8JHkAjqBPEBu5/lAnqThB7gsQTuJqg6QR2Jqg3iP3/AKsTVCNog/bPk8HQlC2neQABiTzeI98d7zKuwN1LoALugTJaboEDsDez9pKf7AJBBaxFMgZ7oDaz/Sgidy+ADTAPpnfAbzkLUQF3CdulmXWDRO4+Bd6AQlM1sL0mi+RdSAGADngws+aMKCJpdKqGGyAfG2Aak2WBXG8yaGTQJU69DhKiVUzahPRnvnKtP0enSJEcJU+lsQCOWjtBex/kayrf5DrBk+xWMYmwlqS1mWVmlil+RRCXmGyl3yd3L3JlTAG0ZrYdkL+Ug++Bs/57mtogX618zyd6iACvF+K8CjIxxGxgnsDnGrifBMHdD2TSsT+1uw9lW2Nms4FHvAbKfETWTj/DJud21Bo3IVcajj15/366kba9zy5X9QX4OnJzeYNtb3fIVQQBKlXsa3hMtIuh6t/72+UqIf37+ZHY0yRuVF6xCX1tzawNa90fvYmtmS35D7j7RiWqA2YnIi3OgV/6fTGz1QcICt1koalvZrZ7l96aqG/MwJBkERRe1Gb6+DOJ7O+GNHf3Km7TQcAfo/axjG2zhK4AX/o+M9DaU+iAn5L97J1NErouzazV/LNayFDhbDQOwG6gxZykC0legE63mwcEH2rt76Rz979Xyk19oU+NxkS3mCuYXSRFwyfhH7CD3j/Lh+YKAAAAB3RJTUUH3AUIEBwxD/MvfAAAAABJRU5ErkJggg==');
if (partial_refresh)
protection_href.setAttribute('href', 'javascript:clusterprot()');
else
protection_href.setAttribute('href', current_url + '?ccp=1');
protection_href.appendChild(protection_img);
protection_td.appendChild(protection_href);
improveClickability(protection_href);
}
else if (protection == PROT.NO)
{
protection_img = my_document.createElement('img');
protection_img.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAASFJREFUSMfVltFRwzAMhj9zHSAjdAQeNIA7QckGjAATpEwAmaTdgAyg3GUERmCD9EXmfAHnEtfhQE+ypNxnW7/tOCJT1T3QAB7YW/gD6IBWRAYyzUWQk0Hm7EVETtkgVX0CXhd+8ywib2tBd6paTVYyALWIOBFxQG2xYI1t8ToQ8AhUUT8OInIJBeYfLIfVPuSAjtG4FZHPaZHF2ih0zAH5aNzN1MY5nwOKZ56U7y3S/gba0nZzyXEck+fuh1z6DDmXBqlq1ff9Oacf096qau2mM3POBdB7AcgXbK5HvmCL/C6sYGv7NdXdAhrsHpzehevlveDJuJhwAM7/fuuahF8cdJ/wt9k6ezjZUgzhP4PNQUt686dU1xXkzF6qdSFYB9RXqCRS5RA5dcAAAAAHdElNRQfcBQgQHR69OSNkAAAAAElFTkSuQmCC');
protection_td.appendChild(protection_img);
}
else if (protection == PROT.YES)
{
protection_img = my_document.createElement('img');
protection_img.setAttribute('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAARRJREFUSMfVltFtgzAQhj9HHYARMkIf/gGSCVo26AjtBCQTJEySjuABDokROkI3IC+2hBAgQ0zV/E+nuzMfnH8Zu67rGJNzbjRvZnugAg7APqR/AA/UktrR5y0BmdkpQOZ0lnRaDTKzT+BCmr4kXfuJXcoqMysGX9ICpSQnyQFlyEVVYcTLQMAHUPT24yjpOxZDfAw1Qu/7GtBbL64l/Q4bQq6eWJMMOvRiP9PnJ9Ykg/pv3q6pLQat1ay9p2pZQU3TFMBtOOsV8kA5N7ockGiK2y7RaQ/D/swMTwFqwxk3POdG9fIA6BzPOzOL5nnu0VUTcXbQ60S8zejCT5EtzRDvEGwOStmbf+U6n5Hj50BlJpgHyjuee1TKj0wZywAAAAd0SU1FB9wFCBAdN/+LuwgAAAAASUVORK5CYII=');
protection_td.appendChild(protection_img);
}
return protection_td;
}
/*
* Adds status information retrieved earlier and hacks it into a new row above the nav tiles.
*/
function prepend_status(nav_table)
{
var tbody = firstEChild(nav_table);
var first_row = tbody.childNodes[0];
var status_tr_1 = my_document.createElement('tr');
var status_tr_2 = my_document.createElement('tr');
var spacer_tr = my_document.createElement('tr');
var table;
var sector_td = create_status_td();
var coords_td = create_status_td();
var aps_td = create_status_td();
var res_td = create_status_td();
var fuel_td = create_status_td();
var protection_td = create_status_td();
createMaxWidthSpacer(spacer_tr);
addProtectionStatusImage(protection_td);
// Complete the table data cells entry.
sector_td.appendChild(sector);
coords_td.appendChild(coords);
aps_td.appendChild(ap_img);
aps_td.appendChild(create_spacer_text());
aps_td.appendChild(aps_left);
res_td.appendChild(res_img);
res_td.appendChild(create_spacer_text());
res_td.appendChild(field_res);
fuel_td.appendChild(fuel_img);
fuel_td.appendChild(create_linebreak());
fuel_td.appendChild(fuel);
// Add all the TDs to the TRs.
status_tr_1.appendChild(sector_td);
status_tr_1.appendChild(coords_td);
status_tr_1.appendChild(aps_td);
status_tr_2.appendChild(res_td);
status_tr_2.appendChild(fuel_td);
status_tr_2.appendChild(protection_td);
var status_table = create_status_table();
status_tr_1.setAttribute("width", "100%");
status_table.appendChild(status_tr_1);
status_table.appendChild(status_tr_2);
status_table.appendChild(spacer_tr);
// Prepend desired elements. Include hack for different behaviour
// with partial refreshes enabled.
if (partial_refresh)
{
var previous_status_table = my_document.getElementById("produs_status_table");
var nav = my_document.getElementById("nav");
var navtransition = my_document.getElementById("navtransition");
/* Remove any previously added information before adding more. */
if (previous_status_table)
{
previous_status_table.parentNode.removeChild(previous_status_table);
}
/* Add new status information. */
status_table.id = "produs_status_table";
nav.parentNode.id = "produs_nav_id";
nav.style.top = "92px";
navtransition.style.top = "92px";
nav_table.parentNode.parentNode.insertBefore(status_table, nav_table.parentNode);
}
else
{
nav_table.parentNode.insertBefore(status_table, nav_table);
}
}
function create_status_td()
{
var td = my_document.createElement('td');
td.setAttribute('align', 'center');
td.setAttribute('width', '33.33%');
return td;
}
/*
* Creates a table to fill max width
*/
function create_status_table()
{
var span_table = my_document.createElement('table');
span_table.setAttribute('width', '100%');
span_table.setAttribute('height', '64px');
span_table.setAttribute('cellspacing', '0');
span_table.setAttribute('cellpadding', '0');
span_table.setAttribute('border', '0');
return span_table;
}
/*
* Creates a table inside the tr, which spans all of the nav columns, allowing cleaner layout.
*/
function create_max_colspan_table(tr)
{
var spanning_td = my_document.createElement('td');
var span_table = my_document.createElement('table');
var span_tbody = my_document.createElement('tbody');
span_table.setAttribute('width', '100%');
spanning_td.setAttribute('colspan', nav_size_hor);
span_table.appendChild(span_tbody);
spanning_td.appendChild(span_table);
tr.appendChild(spanning_td);
return span_tbody;
}
/*
* Fills out the row with a separator bar, to separate new areas from the nav tiles.
*/
function create_spacer(tr)
{
var spacer_td = my_document.createElement('td');
var spacer_text = my_document.createTextNode('\u00A0');
spacer_td.setAttribute('style', 'background-image:url(' + img_dir + '/text7.png);background-repeat:repeat-x;');
spacer_td.appendChild(spacer_text);
tr.appendChild(spacer_td);
}
/*
* Creates a line break.
*/
function create_linebreak()
{
return my_document.createElement('BR');
}
/*
* Used to separate images from text.
*/
function create_spacer_text()
{
return my_document.createTextNode(" ");
}
function create_bordered_element(element_type)
{
var el = my_document.createElement(element_type);
el.style = "border: 1px solid rgba(200, 200, 200, 0.5);";
return el;
}
/*
* Attaches commands to the end of the the nav screen tiles.
*/
function append_commands(nav_table)
{
var rows;
var tbody = firstEChild(nav_table);
var commands = new Array();
var commands_tr = my_document.createElement('tr');
var table;
var commands_tr_1 = my_document.createElement('tr');
var commands_tr_2 = my_document.createElement('tr');
var commands_tr_3 = my_document.createElement('tr');
var spacer_tr = my_document.createElement('tr');
var context_td_1, building_td, ambush_td, harvest_td, dock_td, refuel_td, retreat_td, xwarp_td, view_ambush_td, clean_wh_td, mine_ore_td;
createMaxWidthSpacer(spacer_tr);
context_td_1 = create_bordered_element('td');
if (starbase)
{
context_td_1.appendChild(starbase);
}
else if (planet)
{
context_td_1.appendChild(planet);
}
else if (building)
{
context_td_1.appendChild(building);
}
else if (my_building)
{
context_td_1.appendChild(my_building);
}
else if (exitsb)
{
context_td_1.appendChild(exitsb);
}
else if (warp)
{
context_td_1.appendChild(warp);
}
else if (xwarp)
{
context_td_1.appendChild(xwarp);
xwarp_td = create_bordered_element('td');
var warp_box = my_document.getElementById('xholebox');
warp_box.firstChild.setAttribute('style', 'width:48px;height:48px;text-align:center;padding:12px 0;');
warp_box.firstChild.firstChild.text = "?";
xwarp_td.appendChild(warp_box);
}
else if (wreck)
{
context_td_1.appendChild(wreck);
}
else
{
var closed_wh = getImgSrcByPartName("wormholeseal_closed");
if (closed_wh)
{
var new_element = create_bordered_element('img');
new_element.setAttribute('height', '48');
new_element.setAttribute('width', '48');
new_element.setAttribute('src', closed_wh);
context_td_1.appendChild(new_element);
}
}
/* If we're on a nex hole, then ensure that we can select a destination. */
if (xwarp_td)
{
commands.push(xwarp_td);
}
/* Add to the command array, there wont be something here if the PR callback is made without the page having changed. */
if (context_td_1.childNodes.length > 0)
commands.push(context_td_1);
if (new_building)
{
building_td = create_bordered_element('td');
building_td.appendChild(new_building);
commands.push(building_td);
}
if (harvest)
{
harvest_td = create_bordered_element('td');
harvest_td.appendChild(harvest);
commands.push(harvest_td);
}
if (mine_ore)
{
mine_ore_td = create_bordered_element('td');
mine_ore_td.appendChild(mine_ore);
commands.push(mine_ore_td);
}
if (refuel)
{
refuel_td = create_bordered_element('td');
refuel_td.appendChild(refuel);
commands.push(refuel_td);
}
if (clean_wh)
{
clean_wh_td = create_bordered_element('td');
clean_wh_td.appendChild(clean_wh);
commands.push(clean_wh_td);
}
/* Add optional commands if they exist. */
if (ambush)
{
ambush_td = create_bordered_element('td');
ambush_td.appendChild(ambush);
commands.push(ambush_td);
}
if (retreat)
{
retreat_td = create_bordered_element('td');
retreat_td.appendChild(retreat);
commands.push(retreat_td);
}
if (view_ambush)
{
view_ambush_td = create_bordered_element('td');
view_ambush_td.appendChild(view_ambush);
commands.push(view_ambush_td);
}
if (dock)
{
dock_td = create_bordered_element('td');
dock_td.appendChild(dock);
commands.push(dock_td);
}
// Make things a little bit tidier.
tidy_td_arr(commands);
// Add the new table entries.
if (commands.length > 0)
{
var produs_commands_spacer = my_document.getElementById("produs_commands_spacer");
if (produs_commands_spacer)
produs_commands_spacer.parentNode.removeChild(produs_commands_spacer);
}
tbody.appendChild(spacer_tr);
table = create_max_colspan_table(commands_tr);
if (commands.length <= nav_size_hor)
{
rows = 1;
add_one_row(commands, commands_tr_1);
table.appendChild(commands_tr_1);
}
else if (commands.length >= (nav_size_hor * 2))
{
rows = 3;
add_three_rows(commands, commands_tr_1, commands_tr_2, commands_tr_3);
table.appendChild(commands_tr_1);
table.appendChild(commands_tr_2);
table.appendChild(commands_tr_3);
}
else
{
rows = 2;
add_two_rows(commands, commands_tr_1, commands_tr_2);
table.appendChild(commands_tr_1);
table.appendChild(commands_tr_2);
}
/* Hacks for partial refresh. */
if (partial_refresh && (commands.length > 0))
{
/* Remove existing tr before adding new content. */
var produs_commands = my_document.getElementById("produs_commands");
if (produs_commands)
produs_commands.parentNode.removeChild(produs_commands);
var produs_nav = my_document.getElementById("produs_nav_id");
produs_nav.style.height = ((tile_res * nav_size_ver) + (rows * 50) + 115) + "px";
produs_nav.style.backgroundImage = "";
commands_tr.id = "produs_commands";
spacer_tr.id = "produs_commands_spacer";
}
// Add the new table entries.
tbody.appendChild(commands_tr);
}
/*
* Configures the tds to have a tidy layout for each nav screen size.
*/
function tidy_td_arr(tds)
{
for(var i = 0; i < tds.length; i++)
{
tds[i].setAttribute('align', 'center');
if (tds.length < nav_size_hor)
{
tds[i].setAttribute('width', (100 / tds.length) + "%");
}
else
{
tds[i].setAttribute('width', (100 / nav_size_hor) + "%");
}
}
}
/*
* Just adds one tr below the nav tiles.
*/
function add_one_row(commands, tr1)
{
for(var i = 0; i < commands.length; i++)
{
tr1.appendChild(commands[i]);
}
}
/*
* Splits commands into two trs below the nav tiles, we have too many
* to fit in one row.
*/
function add_two_rows(commands, tr1, tr2)
{
for(var i = 0; i < commands.length; i++)
{
if (i < nav_size_hor)
{
tr1.appendChild(commands[i]);
}
else
{
tr2.appendChild(commands[i]);
}
}
}
/*
* Adds three rows, only needed when sitting on one's own building.
*/
function add_three_rows(commands, tr1, tr2, tr3)
{
for( var i = 0; i < commands.length; i++)
{
if (i < nav_size_hor)
{
tr1.appendChild(commands[i]);
}
else if (i >= (nav_size_hor * 2))
{
tr3.appendChild(commands[i]);
}
else
{
tr2.appendChild(commands[i]);
}
}
}