Ted's market UI

Ted's Diamond Hunt 2 custom market user interface

目前为 2017-04-07 提交的版本。查看 最新版本

// ==UserScript==
// @name         Ted's market UI
// @namespace    Ted's market UI
// @version      1.235
// @description  Ted's Diamond Hunt 2 custom market user interface
// @author       ted120
// @match        http://*.diamondhunt.co/game.php
// @match        https://*.diamondhunt.co/game.php
// @run-at       document-idle
// @grant        none
// ==/UserScript==

$(document).ready(function () {
    // Customisable
    var myItemList = [["Stone",1],["Blue Axe Orb",60000000]]; //itemname,price - highlights these pink if matched price or lower (has priority over hideItemList)
    var hideItemList = ["Sand","Promethium","Glass","Bronze Bar","Iron Bar","Silver Bar","Gold Bar","Snapegrass Seeds","Snapegrass","Raw Shrimp","Raw Sardine","Shrimp","Sardine","Wheat","Snake Skin","Bat Skin","Bear Fur","Stinger","Iron Dagger","Ashes"];
    var notEnoughCoinsOpacity = true, showMaxCanBuy = true;
    var smallMarketImages = true, marketImageSize = 30; //pixels, default:50, suggested: 30-40
    var itemTooltips = true;
    var autoUndercut = true, undercutBy = 2, matchLowestPriceAt = 20;
    var marketSlotsCustomUi = true; //incomplete

    /* TODO
    add some form of local storage for settings
    */

    // Below is not intended to be changed

    var debugToConsole = false;
    var arrMarketItems = [];
    var arrMarketSlots = [[0, 0]]; //updateMarketSlots()
    var marketInterval;
    var marketOn = true;
    var quickCalcOn = true, quickCalcElement = document.createElement('div');
    var defaultUndercutOnce;
    var zMarket = document.createElement("div");
    var zMap = document.createElement("span");
    zMap.setAttribute("id","mapSpan");
    zMap.setAttribute("style","color:gold");
    zMap.innerHTML = " You have an incomplete map!";
    var tickStart = new Date().getTime();
    var tickEnd = new Date().getTime();
    var tickTime = tickEnd - tickStart;
    var tickCheck = 0;
    var marketCancelCooldownElement;
    var arrSortItemsList = [
        "Stardust",
        "Blood Diamond","Diamond","Emerald","Ruby","Sapphire",
        "Empty Chisel",
        "Blue Axe Orb","Blue Rake Orb","Blue Hammer Orb","Blue Pickaxe Orb","Blue Chisel Orb","Blue Fishing Rod Orb","Blue Oil Pipe Orb","Blue Shovel Orb",
        "Essence",
        "Skeleton Sword","Skeleton Shield","Bone Amulet",
        "Iron Dagger","Stinger",
        "Stardust Logs","Maple Logs","Willow Logs","Oak Logs","Logs",
        "Bones","Ashes",
        "Stardust Tree Seeds","Maple Tree Seeds","Willow Tree Seeds","Oak Tree Seeds","Tree Seeds",
        "Striped Crystal Leaf Seeds","Crystal Leaf Seeds","Striped Gold Leaf Seeds","Gold Leaf Seeds","Blewit Mushroom Seeds","Red Mushroom Seeds","Lime Leaf Seeds","Green Leaf Seeds","Dotted Green Leaf Seeds","Snapegrass Seeds",
        "Striped Crystal Leaf","Crystal Leaf","Striped Gold Leaf","Gold Leaf","Blewit Mushroom","Red Mushroom","Strange Leaf","Lime Leaf","Green Leaf","Dotted Green Leaf","Snapegrass",
        "Rainbowfish","Whale","Shark","Eel","Swordfish","Lobster","Tuna","Salmon","Sardine","Shrimp",
        "Raw Rainbowfish","Raw Whale","Raw Shark","Raw Eel","Raw Swordfish","Raw Lobster","Raw Tuna","Raw Salmon","Raw Sardine","Raw Shrimp",
        "Prometheum","Marble","Quartz","Sand","Stone",
        "Runite Bar","Promethium Bar","Gold Bar","Silver Bar","Iron Bar","Bronze Bar","Glass",
        "Bear Fur","Bat Skin","Snake Skin",
        "Wheat"
    ];

    function drawButtons() {
        zMarket = document.createElement("div");
        zMarket.setAttribute("id","zMarketId");
        zMarket.innerHTML = "<button id='marketButton' type='button'>Ted's market UI = "+marketOn+"</button><button id='quickCalcButton' type='button'>quickCalc = "+quickCalcOn+"</button>";
        document.getElementById("game-div").appendChild(zMarket);
        document.getElementById("zMarketId").appendChild(zMap);
        document.getElementById("marketButton").addEventListener(
            "click", marketButtonClickAction, false
        );
        document.getElementById("quickCalcButton").addEventListener(
            "click", quickCalcButtonClickAction, false
        );
    }
    function removeButtons() {
        document.getElementById("game-div").removeChild(zMarket);
    }
    function buttonMain() {
        removeButtons();
        drawButtons();
    }
    function nextTick() {
        if (playtime > tickCheck) {
            tickCheck = playtime;
            tickEnd = new Date().getTime();
            tickTime = tickEnd - tickStart;
            if (debugToConsole) { console.log("Tick time: "+ tickTime); }
            tickStart = new Date().getTime();
            return true;
        } else return false;
    }
    function isInArray(array, search)
    {
        return array.indexOf(search) >= 0;
    }
    function itemNameFix(string) { // market style name to var style name; Bat Skin > batSkin
        var a = string.replace(/\s/g, "");
        return a.charAt(0).toLowerCase() + a.slice(1);
    }
    function numberWithCommas(x) {
        return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    }
    function defaultUndercut() {
        if (autoUndercut) {
            if (document.getElementById("dialogue-market-chosenpostitem").parentElement.style.display != "none" && document.getElementById("chosenpostitem-price").value === "" && document.getElementById("chosenpostitem-itemName").value != defaultUndercutOnce) {
                defaultUndercutOnce = document.getElementById("chosenpostitem-itemName").value;
                for (var i = 0; i < arrMarketItems.length; i++) {
                    if (itemNameFix(arrMarketItems[i][0]) == document.getElementById("chosenpostitem-itemName").value) {
                        if (arrMarketItems[i][2][0] > matchLowestPriceAt) {
                            document.getElementById("chosenpostitem-price").value = (arrMarketItems[i][2][0] - undercutBy);
                        } else if (arrMarketItems[i][2][0] <= matchLowestPriceAt) {
                            document.getElementById("chosenpostitem-price").value = arrMarketItems[i][2][0];
                        }
                    }
                }
            } else if (document.getElementById("dialogue-market-chosenpostitem").parentElement.style.display == "none") {
                if (defaultUndercutOnce !== "") {
                    defaultUndercutOnce = "";
                }
                if (document.getElementById("chosenpostitem-price").value !== "") {
                    document.getElementById("chosenpostitem-price").value = "";
                }
                if (document.getElementById("chosenpostitem-itemName").value !== "") {
                    document.getElementById("chosenpostitem-itemName").value = "";
                }
            }
        }
    }
    function addItemTooltips() {
        if (itemTooltips) {
            for (var i = 0; i < arrMarketItems.length; i++) {
                var fixedName = itemNameFix(arrMarketItems[i][0]);
                if (document.getElementById("tooltip-"+fixedName) !== null) {
                    var newTooltip = "<b>Market price: </b><img class='image-icon-20' src='images/coins.png'> "+numberWithCommas(arrMarketItems[i][2][0]);
                    if (document.getElementById("tooltip-"+fixedName).lastElementChild.tagName == "DIV") {
                        document.getElementById("tooltip-"+fixedName).removeChild(document.getElementById("tooltip-"+fixedName).lastChild);
                    }
                    var tooltipElement = document.createElement("div");
                    tooltipElement.innerHTML = newTooltip;
                    document.getElementById("tooltip-"+fixedName).appendChild(tooltipElement);
                }
            }
        }
    }
    function quickCalcMain() {
        if (quickCalcOn) {
            var i, a, b;
            var arrQuickCalcHeat = ["Error, search for all (infinity symbol)", 999999, 0, 999999]; // name, heatprice, amount, logprice, heat
            var arrStargemInput = [["Blewit Mushroom",100,0,0],["Gold Leaf",1,0,0],["Sapphire",1,0,0],["Emerald",1,0,0],["Ruby",1,0,0],["Diamond",1,0,0]];//name,amt need, amt have, ttl price
            var arrStargemOutput = [["Stardust",0]];
            quickCalcElement.style.display = "";
            quickCalcElement.style.color = "#F5F5F5";
            quickCalcElement.innerHTML = "Quick Calc: (for accurate data search market>all before using Quick Calc)<br><br>";
            if (typeof(document.getElementById("market-table").rows[1]) == "undefined" || document.getElementById("market-table").rows[1] === null) {
                quickCalcElement.innerHTML += "Invalid data: search market for ALL first";
            } else if (typeof(document.getElementById("market-table").rows[1]) != "undefined" || document.getElementById("market-table").rows[1] !== null) {
                //heat calc
                for (i = 0; i < arrMarketItems.length; i++) {
                    var arrLogs = [["Logs",1],["Oak Logs",2],["Willow Logs",5],["Maple Logs",10],["Stardust Logs",20]];
                    for (a = 0; a < arrLogs.length; a++) {
                        if (arrMarketItems[i][0] == arrLogs[a][0]) {
                            if (arrMarketItems[i][2][0]/arrLogs[a][1] < arrQuickCalcHeat[1]) {
                                arrQuickCalcHeat[0] = arrMarketItems[i][0];
                                arrQuickCalcHeat[1] = arrMarketItems[i][2][0]/arrLogs[a][1];
                                arrQuickCalcHeat[2] = arrMarketItems[i][2][1];
                                arrQuickCalcHeat[3] = arrMarketItems[i][2][0];
                                arrQuickCalcHeat[4] = arrLogs[a][1];
                            }
                            if (debugToConsole) { console.log(arrMarketItems[i][0],arrMarketItems[i][2][0]/arrLogs[a][1],arrMarketItems[i][2][1]); }
                            if (debugToConsole) { console.log(arrQuickCalcHeat[0],arrQuickCalcHeat[1],arrQuickCalcHeat[2]); }
                        }
                    }
                    //stargem
                    for (a = 0; a < arrStargemInput.length; a++) {
                        if (arrMarketItems[i][0] == arrStargemInput[a][0]) {
                            for (b = 2; b < arrMarketItems[i].length; b++) {
                                if (arrStargemInput[a][2] < arrStargemInput[a][1]) {
                                    if (arrMarketItems[i][b][1] < arrStargemInput[a][1]-arrStargemInput[a][2]) {
                                        arrStargemInput[a][2] += arrMarketItems[i][b][1];
                                        arrStargemInput[a][3] += arrMarketItems[i][b][0]*arrMarketItems[i][b][1];
                                    } else if (arrMarketItems[i][b][1] >= arrStargemInput[a][1]-arrStargemInput[a][2]) {
                                        arrStargemInput[a][3] += (arrStargemInput[a][1]-arrStargemInput[a][2])*arrMarketItems[i][b][0];
                                        arrStargemInput[a][2] = arrStargemInput[a][1];
                                    }
                                    if (debugToConsole) { console.log(arrStargemInput[a][0], arrStargemInput[a][1], arrStargemInput[a][2], arrStargemInput[a][3]); }
                                }
                            }
                        }
                    }
                    for (a = 0; a < arrStargemOutput.length; a++) {
                        if (arrMarketItems[i][0] == arrStargemOutput[a][0]) {
                            arrStargemOutput[a][1] = arrMarketItems[i][2][0];
                            break;
                        }
                    }
                }
                quickCalcElement.innerHTML += "Cheapest heat:<br>"+arrQuickCalcHeat[0]+"<br>Total logs: "+numberWithCommas(arrQuickCalcHeat[2])+" | Total Heat: "+numberWithCommas(arrQuickCalcHeat[4]*arrQuickCalcHeat[2])+"<br>Heat price: "+numberWithCommas(arrQuickCalcHeat[1])+" | Log price: "+numberWithCommas(arrQuickCalcHeat[3])+" | Total price: "+numberWithCommas((arrQuickCalcHeat[3]*arrQuickCalcHeat[2]))+"<br><br>";
                quickCalcElement.innerHTML += "Stargem potion:<br>Input: ";
                for (a = 0; a < 2; a++) {
                    if (arrStargemInput[a][2] != arrStargemInput[a][1]) {
                        quickCalcElement.innerHTML += "!!! < "+arrStargemInput[a][1]+" "+arrStargemInput[a][0]+" x"+arrStargemInput[a][2]+" + ";
                    } else quickCalcElement.innerHTML += numberWithCommas(arrStargemInput[a][3])+" "+arrStargemInput[a][0]+" x"+arrStargemInput[a][2]+" + ";
                }
                for (a = 2; a < arrStargemInput.length; a++) {
                    if (arrStargemInput[a][2] != arrStargemInput[a][1]) {
                        quickCalcElement.innerHTML += "<br>!!! < "+arrStargemInput[a][1]+" "+arrStargemInput[a][0]+" x"+arrStargemInput[a][2]+" + ";
                    } else quickCalcElement.innerHTML += "<br>"+numberWithCommas(arrStargemInput[a][3])+" "+arrStargemInput[a][0]+" = "+numberWithCommas((arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
                }
                quickCalcElement.innerHTML += "<br>Output: "+arrStargemOutput[0][0]+"<br>@ "+arrStargemOutput[0][1]+" | @ "+(arrStargemOutput[0][1]-1)+" net gain/loss";
                for (a = 2; a < arrStargemInput.length; a++) {
                    if (arrStargemInput[a][2] != arrStargemInput[a][1]) {
                        //
                    } else if (arrStargemInput[a][2] == arrStargemInput[a][1]) {
                        var stargemNet, stargemNet1;
                        if (a == 5) {
                            stargemNet = numberWithCommas(((arrStargemOutput[0][1]-1)*(a*120000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
                            stargemNet1 = numberWithCommas(((arrStargemOutput[0][1]-1)*(a*120000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
                            quickCalcElement.innerHTML += "<br>"+stargemNet+" | "+stargemNet1+" "+arrStargemInput[a][0]+": "+arrStargemOutput[0][0]+ " x"+numberWithCommas(a*120000)+" = "+numberWithCommas((arrStargemOutput[0][1]*(a*120000)));
                            continue;
                        }
                        stargemNet = numberWithCommas((arrStargemOutput[0][1]*((a-1)*100000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
                        stargemNet1 = numberWithCommas(((arrStargemOutput[0][1]-1)*((a-1)*100000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
                        quickCalcElement.innerHTML += "<br>"+stargemNet+" | "+stargemNet1+" "+arrStargemInput[a][0]+": "+arrStargemOutput[0][0]+ " x"+numberWithCommas(((a-1)*100000))+" = "+numberWithCommas((arrStargemOutput[0][1]*((a-1)*100000)));
                    }
                }
            }
        } else if (quickCalcOn === false) {
            quickCalcElement.style.display = "none";
        }

    }
    function quickCalcButtonClickAction (zEvent) {
        if (quickCalcOn === true) {
            quickCalcOn = false;
            quickCalcMain();
            buttonMain();
        } else if (quickCalcOn === false) {
            quickCalcOn = true;
            quickCalcMain();
            buttonMain();
        }
    }
    function getMarketItems() {
        var currentItemId, itemName, itemId, itemPrice, itemAmount, itemMarketId, uniqueMarketItems = 0;
        arrMarketItems = [];
        for (var i = 1; i < document.getElementById("market-table").rows.length; i++) {
            if (typeof(document.getElementById("market-table").rows[i].childNodes[0]) != "undefined" && document.getElementById("market-table").rows[i].childNodes[0] !== null) {
                itemName = document.getElementById("market-table").rows[i].childNodes[0].innerHTML;
                itemId = document.getElementById("market-table").rows[i].getAttribute("data-market-itemid");
                itemPrice = document.getElementById("market-table").rows[i].getAttribute("data-market-price");
                itemAmount = document.getElementById("market-table").rows[i].getAttribute("data-market-amount");
                itemMarketId = document.getElementById("market-table").rows[i].getAttribute("data-market-marketid");
                if (itemId != currentItemId) {
                    currentItemId = itemId;
                    uniqueMarketItems++;
                    arrMarketItems.push([itemName, itemId]);
                }
                arrMarketItems[uniqueMarketItems-1].push([itemPrice, itemAmount, itemMarketId, i]);
            }
        }
    }
    function alterMarketSlots() {
        if (marketSlotsCustomUi) {
            if (typeof(document.getElementById("market-slot-1").parentNode) != "undefined" && document.getElementById("market-slot-1").parentNode !== null) {
                var tedMarketUiElement = document.createElement("div");
                tedMarketUiElement.setAttribute("style","position:relative;height:325px;width:230px;float:left;margin:0px 10px;background:linear-gradient(gold,silver);display:inline-block;");
                tedMarketUiElement.setAttribute("id","ted-market-ui");
                var tedMarketTopImageElement = document.createElement("img");
                tedMarketTopImageElement.setAttribute("src","images/shootingstar.png");
                tedMarketTopImageElement.setAttribute("class","image-icon-70");
                marketCancelCooldownElement = document.createElement("div");
                marketCancelCooldownElement.setAttribute("style","border-bottom:1px solid black;border-top:1px solid black;");
                marketCancelCooldownElement.innerHTML = "<br>Cooldown<br><br>"+marketCancelCooldown+"<br><br>";
                var noteElement = document.createTextNode("Note: Must click 'Browse' once, will fix at some point. PM if you can help ;) Avoid using this button more than once every 5s");
                var browseAllElementWrapper = document.createElement("div");
                browseAllElementWrapper.setAttribute("id","browseAllElementWrapper");
                browseAllElementWrapper.setAttribute("style","position:absolute;left:0;bottom:0;width:100%;");
                var browseAllElement = document.createElement("div");
                browseAllElement.setAttribute("style","margin:10px");
                browseAllElement.setAttribute("class","basic-smallbox-grey");
                browseAllElement.setAttribute("id","ted-browse-all");
                browseAllElement.innerHTML = "<input type='image' data-item-name='All Items' onclick='postItemDialogue(document.getElementById(&quot;dialogue-market-postitem-buyorsell&quot;), &quot;ALL&quot;, this);' src='images/icons/infinity.png' class='image-icon-50'>";
                document.getElementById("market-slot-1").parentNode.appendChild(tedMarketUiElement);
                document.getElementById("ted-market-ui").appendChild(tedMarketTopImageElement);
                document.getElementById("ted-market-ui").appendChild(marketCancelCooldownElement);
                document.getElementById("ted-market-ui").appendChild(noteElement);
                document.getElementById("ted-market-ui").appendChild(browseAllElementWrapper);
                document.getElementById("browseAllElementWrapper").appendChild(browseAllElement);
            }
        }
    }
    function sortMarketTable() {
        var i, arrToAppend = [];
        if (document.getElementById("market-table").getAttribute("isSorted") == "false") {
            for (var s = 0; s < arrSortItemsList.length; s++) {
                for (i = 0; i < arrMarketItems.length; i++) {
                    if (arrMarketItems[i][0] == arrSortItemsList[s]) {
                        for (var a = 2; a < arrMarketItems[i].length; a++) {
                            arrToAppend.push(document.getElementById("market-table").rows[arrMarketItems[i][a][3]]);
                        }
                        break;
                    }
                }
            }
            for (i = 0; i < arrToAppend.length; i++) {
                document.getElementById("market-table").append(arrToAppend[i]);
            }
            document.getElementById("market-table").setAttribute("isSorted","true");
        }
    }
    function alterMarketTable() {
        var i, a, s, maxCanBuy;
        document.getElementById("market-table").rows[0].style.backgroundColor = "gold";
        document.getElementById("market-table").setAttribute("isSorted", "false");
        if (debugToConsole) { console.log(arrMarketItems); }
        for (i = 0; i < arrMarketItems.length; i++) {
            for (a = 2; a < arrMarketItems[i].length; a++) {
                if (smallMarketImages) {
                    document.getElementById("market-table").childNodes[0].childNodes[arrMarketItems[i][a][3]].childNodes[1].childNodes[0].style = "height: "+marketImageSize+"px;width: "+marketImageSize+"px;";
                }
                maxCanBuy = Math.floor(coins / arrMarketItems[i][a][0]);
                if (showMaxCanBuy) {
                    if (maxCanBuy < arrMarketItems[i][a][1]) {
                        document.getElementById("market-table").rows[arrMarketItems[i][a][3]].cells[3].append(" (x"+numberWithCommas(maxCanBuy)+")");
                    } else if (maxCanBuy >= arrMarketItems[i][a][1]) {
                        maxCanBuy = arrMarketItems[i][a][1];
                    }
                }
                if (notEnoughCoinsOpacity && maxCanBuy === 0) {
                    document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.opacity = "0.3";
                }
                if (document.getElementById("market-table").rows.length > 12) {
                    if (document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor === "") {
                        document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "red";
                    }
                    if (document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display === "" ) {
                        document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "none";
                    }
                    /*if (isInArray(hideItemList,arrMarketItems[i][0])) {
                        document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "red";
                        document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "none";
                    }*/
                    if (i == arrMarketItems.length - 1 && a == arrMarketItems[i].length - 1) { //after last item in arrMarketItems
                        quickCalcMain();
                    }
                }
                if (arrMarketItems[i].length == 3 && (!isInArray(hideItemList,arrMarketItems[i][0]))) {
                    document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#ffff66"; //lightyellow
                    document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "table-row";
                } else if (arrMarketItems[i].length >= 4 && !isInArray(hideItemList,arrMarketItems[i][0])) {
                    if (arrMarketItems[i][2][0] < Math.ceil(arrMarketItems[i][3][0] * 0.86) && arrMarketItems[i][2][0]) {
                        document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.backgroundColor = "#ffcc66"; //lightorange
                        document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.display = "table-row";
                    }
                }
                for (s = 0; s < arrMarketSlots.length; s++) {
                    if (arrMarketSlots[s][1] === false) {
                        if (arrMarketItems[i][a][2] == arrMarketSlots[s][0]) {
                            if (a == 2) {
                                document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "table-row";
                                document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "#bffffd"; //lightblue
                                if (arrMarketItems[i].length >= 4) {
                                    if ((arrMarketItems[i][3][0] - arrMarketItems[i][2][0]) >= 3) {
                                        document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.display = "table-row";
                                        document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.backgroundColor = "#6ffffd"; //blue
                                    }
                                }
                            } else if (a > 2) {
                                document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "#ffcccc"; //lighterred
                                document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "table-row";
                                document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#ff7878"; //lightred
                                document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "table-row";
                            } else console.log("for (a... error");
                        }
                    }
                }
            }
            if (arrMarketItems[i].length >= 4 && !isInArray(hideItemList,arrMarketItems[i][0])) {
                if (arrMarketItems[i][2][0] < Math.ceil(arrMarketItems[i][3][0] * 0.86) && arrMarketItems[i][2][0]) {
                    document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#90ee90"; //lightgreen
                    document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "table-row";
                    document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.fontWeight = 700;
                }
            }
            // myItemList
            for (var b = 0; b < myItemList.length; b++) {
                if (myItemList[b][0] == arrMarketItems[i][0]) {
                    if (arrMarketItems[i][2][0] <= myItemList[b][1]) {
                        document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#ff99ff"; //pink
                        document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "table-row";
                        if (arrMarketItems[i].length >= 4) {
                            document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.backgroundColor = "#ffccff"; //pink
                            document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.display = "table-row";
                        }
                    }
                }
            }
        }
        sortMarketTable();
    }
    function updateMarketSlots() {
        arrMarketSlots = [[marketSlot1, false]];
        for (var i = 0; i < arrMarketSlots.length; i++) {
            if (document.getElementById("market-slot-"+(i + 1)+"-free").style.display === "") {
                arrMarketSlots[i][1] = true;
            }
        }
    }
    function marketReloaded() {
        if (typeof(document.getElementById("market-table").rows[0]) != "undefined" && document.getElementById("market-table").rows[0] !== null) {
            // exists
            if (document.getElementById("market-table").rows[0].style.backgroundColor == "silver") {
                updateMarketSlots();
                getMarketItems();
                addItemTooltips();
                alterMarketTable();
            }
        }
    }
    function marketMain() {
        if (marketOn === true) {
            marketInterval = setInterval(marketReloaded, 0);
        }
    }
    function marketButtonClickAction (zEvent) {
        if (marketOn === true) {
            marketOn = false;
            clearInterval(marketInterval);
            buttonMain();
        } else if (marketOn === false) {
            marketOn = true;
            marketMain();
            buttonMain();
        }
    }
    function persistentInterval() {
        if (nextTick()) {
            if (treasureMap > 0 && document.getElementById("mapSpan").style.display !== "") {
                document.getElementById("mapSpan").style.display = "";
            } else if (treasureMap === 0 && document.getElementById("mapSpan").style.display != "none") {
                document.getElementById("mapSpan").style.display = "none";
            }
            marketCancelCooldownElement.innerHTML = "<br>Cooldown<br><br>"+marketCancelCooldown+"<br><br>";
        }
        defaultUndercut();
    }
    //tedMarketUiSettings();
    drawButtons();
    marketMain();
    document.body.append(quickCalcElement);
    alterMarketSlots();
    setInterval(persistentInterval, 100);
});