Produs (Proddable Pardus)

Makes Pardus a little more touch-friendly.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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]);
        }
    }
}