// Threnody ---------------------------------------------------------

function threnodyLoaded()
{
    threnodyLoadedBool = true; 
}

var threnodyAudio;

function loadThrenody() {
    threnodyAudio.src = "test.mp3";
    threnodyAudio.addEventListener('canplaythrough', threnodyLoaded);
}

function playThrenody(){
    if(threnodyLoadedBool)
    {
        threnodyAudio.play();
    }
}

// Cache all DOM elements

function cacheDOMElements(){
    wireCostElement =                   document.getElementById("wireCost");
    wireBuyerStatusElement =            document.getElementById("wireBuyerStatus");
    wireElement =                       document.getElementById("wire");
    fundsElement =                      document.getElementById("funds");
    qCompDisplayElement =               document.getElementById("qCompDisplay");
    hypnoDroneTextElement =             document.getElementById("hypnoDroneText");
    readoutElement1 =                   document.getElementById("readout1");
    readoutElement2 =                   document.getElementById("readout2");
    readoutElement3 =                   document.getElementById("readout3");
    readoutElement4 =                   document.getElementById("readout4");
    readoutElement5 =                   document.getElementById("readout5");
    mpdsDivElement =                    document.getElementById("mdpsDiv");
    factoryRebootToolTipElement =       document.getElementById("factoryRebootToolTip"); 
    havesterRebootToolTipElement =      document.getElementById("harvesterRebootToolTip");
    wireDroneRebootToolTipElement =     document.getElementById("wireDroneRebootToolTip");
    farmRebootToolTipElement =          document.getElementById("farmRebootToolTip");
    batteryRebootToolTipElement =       document.getElementById("batteryRebootToolTip");
    swarmSliderDivElement =             document.getElementById("swarmSliderDiv");
    clipCountCrunchedElement =          document.getElementById("clipCountCrunched");
    autoTourneyStatusDivElement =       document.getElementById("autoTourneyStatusDiv");
    autoTourneyControlElement   =       document.getElementById("autoTourneyControl");
    wireBuyerDivElement =               document.getElementById("wireBuyerDiv");
    tournamentResultsTableElement =     document.getElementById("tournamentResultsTable");
    tournamentStuffElement =            document.getElementById("tournamentStuff");
    honorDivElement =                   document.getElementById("honorDiv");
    drifterDivElement =                 document.getElementById("drifterDiv");
    battleCanvasDivElement =            document.getElementById("battleCanvasDiv");
    combatButtonDivElement =            document.getElementById("combatButtonDiv");
    factoryUpgradeDisplayElement =      document.getElementById("factoryUpgradeDisplay");
    droneUpgradeDisplayElement =        document.getElementById("droneUpgradeDisplay");
    btnMakerProbeElement =              document.getElementById("btnMakeProbe");
    hazardBodyCountElement =            document.getElementById("hazardBodyCount");
    probesLostHazardsDisplayElement =   document.getElementById("probesLostHazardsDisplay");
    driftBodyCountElement =             document.getElementById("driftBodyCount");
    combatBodyCountElement =            document.getElementById("combatBodyCount");
    prestigeDivElement =                document.getElementById("prestigeDiv");
    btnMakePaperclipElement =           document.getElementById("btnMakePaperclip");
    btnBuyWireElement =                 document.getElementById("btnBuyWire");
    btnMakeClipperElement =             document.getElementById("btnMakeClipper");
    btnExpandMarketingElement =         document.getElementById("btnExpandMarketing");
    btnLowerPriceElement =              document.getElementById("btnLowerPrice");
    btnAddProcElement =                 document.getElementById("btnAddProc");
    btnAddMemElement =                  document.getElementById("btnAddMem");
    btnNewTournamentElement =           document.getElementById("btnNewTournament");
    btnImproveInvestmentsElement =      document.getElementById("btnImproveInvestments");
    investmentEngineElement =           document.getElementById("investmentEngine");
    investmentEngineUpgradeElement =    document.getElementById("investmentEngineUpgrade");
    strategyEngineElement =             document.getElementById("strategyEngine");
    tournamentManagementElement =       document.getElementById("tournamentManagement");
    megaClipperDivElement =             document.getElementById("megaClipperDiv");
    btnMakeMegaClipperElement =         document.getElementById("btnMakeMegaClipper");
    autoClipperDivElement =             document.getElementById("autoClipperDiv");
    revPerSecDivElement =               document.getElementById("revPerSecDiv");
    compDivElement =                    document.getElementById("compDiv");
    creativityDivElement =              document.getElementById("creativityDiv");
    projectsDivElement =                document.getElementById("projectsDiv");
    businessDivElement =                document.getElementById("businessDiv");
    manufacturingDivElement =           document.getElementById("manufacturingDiv");
    trustDivElement =                   document.getElementById("trustDiv");
    creationDivElement =                document.getElementById("creationDiv");
    factoryDivElement =                 document.getElementById("factoryDiv");
    wireProductionDivElement =          document.getElementById("wireProductionDiv");
    wireTransDivElement =               document.getElementById("wireTransDiv");
    harvesterDivElement =               document.getElementById("harvesterDiv");
    wireDroneDivElement =               document.getElementById("wireDroneDiv");
    tothDivElement =                    document.getElementById("tothDiv");
    spaceDivElement =                   document.getElementById("spaceDiv");
    factoryDivSpaceElement =            document.getElementById("factoryDivSpace");
    droneDivSpaceElement =              document.getElementById("droneDivSpace");
    probeDesignDivElement =             document.getElementById("probeDesignDiv");
    increaseProbeTrustDivElement =      document.getElementById("increaseProbeTrustDiv");
    qComputingElement =                 document.getElementById("qComputing");
    btnMakeFactoryElement =             document.getElementById("btnMakeFactory");
    btnHarvesterRebootElement =         document.getElementById("btnHarvesterReboot");
    btnWireDroneRebootElement =         document.getElementById("btnWireDroneReboot");
    btnFactoryRebootElement =           document.getElementById("btnFactoryReboot");
    probeTrustUsedDisplayElement =      document.getElementById("probeTrustUsedDisplay");
    btnIncreaseProbeTrustElement =      document.getElementById("btnIncreaseProbeTrust");
    btnRaiseProbeSpeedElement =         document.getElementById("btnRaiseProbeSpeed");
    btnLowerProbeSpeedElement =         document.getElementById("btnLowerProbeSpeed");
    btnRaiseProbeNavElement =           document.getElementById("btnRaiseProbeNav");
    btnLowerProbeNavElement =           document.getElementById("btnLowerProbeNav");
    btnRaiseProbeRepElement =           document.getElementById("btnRaiseProbeRep");
    btnLowerProbeRepElement =           document.getElementById("btnLowerProbeRep");
    btnRaiseProbeHazElement =           document.getElementById("btnRaiseProbeHaz");
    btnLowerProbeHazElement =           document.getElementById("btnLowerProbeHaz");
    btnRaiseProbeFacElement =           document.getElementById("btnRaiseProbeFac");
    btnLowerProbeFacElement =           document.getElementById("btnLowerProbeFac");
    btnRaiseProbeHarvElement =          document.getElementById("btnRaiseProbeHarv");
    btnLowerProbeHarvElement =          document.getElementById("btnLowerProbeHarv");
    btnRaiseProbeWireElement =          document.getElementById("btnRaiseProbeWire");
    btnLowerProbeWireElement =          document.getElementById("btnLowerProbeWire");
    btnRaiseProbeCombatElement =        document.getElementById("btnRaiseProbeCombat");
    btnLowerProbeCombatElement =        document.getElementById("btnLowerProbeCombat");
    coverElement =                      document.getElementById("cover");
    hypnoDroneEventDivElement =         document.getElementById("hypnoDroneEventDiv");
    unusedClipsDisplayElement =         document.getElementById("unusedClipsDisplay");
    transWireElement =                  document.getElementById("transWire");
    nanoWireElement =                   document.getElementById("nanoWire");
    clipsElement =                      document.getElementById("clips");
    unsoldClipsElement =                document.getElementById("unsoldClips");
    yomiDisplayElement =                document.getElementById('yomiDisplay');
    projectListTopElement =             document.getElementById("projectListTop");
    driftersKilledElement =             document.getElementById('driftersKilled');
    availableMatterDisplayElement =     document.getElementById('availableMatterDisplay');
    clipmakerLevel2Element =            document.getElementById('clipmakerLevel2');
    clipperCostElement =                document.getElementById('clipperCost');
    acquiredMatterDisplayElement =      document.getElementById('acquiredMatterDisplay');
    nanoWireElement =                   document.getElementById('nanoWire');
    probesBornDisplayElement =          document.getElementById('probesBornDisplay');
    probesTotalDisplayElement =         document.getElementById('probesTotalDisplay');
    probesLaunchedDisplayElement =      document.getElementById('probesLaunchedDisplay');
    probeCostDisplayElement =           document.getElementById('probeCostDisplay');
    probeCombatDisplayElement =         document.getElementById('probeCombatDisplay');
    probeWireDisplayElement =           document.getElementById('probeWireDisplay');
    probeHarvDisplayElement =           document.getElementById('probeHarvDisplay');
    probeFacDisplayElement =            document.getElementById('probeFacDisplay');
    probeRepDisplayElement =            document.getElementById('probeRepDisplay');
    probeHazDisplayElement =            document.getElementById('probeHazDisplay');
    probeNavDisplayElement =            document.getElementById('probeNavDisplay');
    probeSpeedDisplayElement =          document.getElementById('probeSpeedDisplay');
    probeTrustDisplayElement =          document.getElementById('probeTrustDisplay');
    memoryElement =                     document.getElementById("memory");
    processorsElement =                 document.getElementById("processors");
    marginElement =                     document.getElementById("margin");
    marketingLvlElement =               document.getElementById('marketingLvl');
    adCostElement =                     document.getElementById('adCost');
    factoryCostDisplayElement =         document.getElementById('factoryCostDisplay');
    factoryLevelDisplayElement =        document.getElementById('factoryLevelDisplay');
    wireDroneCostDisplayElement =       document.getElementById('wireDroneCostDisplay');
    wireDroneLevelDisplayElement =      document.getElementById('wireDroneLevelDisplay');
    harvesterCostDisplayElement =       document.getElementById('harvesterCostDisplay');
    harvesterLevelDisplayElement =      document.getElementById('harvesterLevelDisplay');
    megaClipperCostElement =            document.getElementById('megaClipperCost');
    megaClipperLevelElement =           document.getElementById('megaClipperLevel');
    investmentBankrollElement =         document.getElementById('investmentBankroll');
    secValueElement =                   document.getElementById('secValue');
    portValueElement =                  document.getElementById('portValue');
    prestigeUcounterElement =           document.getElementById("prestigeUcounter");
    prestigeScounterElement =           document.getElementById("prestigeScounter");
    newTourneyCostElement =             document.getElementById("newTourneyCost");
    maxTrustDisplayElement =            document.getElementById("maxTrustDisplay");
    victoryDivElement =                 document.getElementById("victoryDiv");
    probeTrustCostDisplayElement =      document.getElementById("probeTrustCostDisplay");
    tournamentResultsTableElement =     document.getElementById("tournamentResultsTable");
    farmCostElement =                   document.getElementById('farmCost');
    batteryCostElement =                document.getElementById('batteryCost');
    farmLevelElement =                  document.getElementById('farmLevel');
    batteryLevelElement =               document.getElementById('batteryLevel');
    availableMatterDisplayElement =     document.getElementById('availableMatterDisplay');
    acquiredMatterDisplayElement =      document.getElementById('acquiredMatterDisplay');
    mapsElement =                       document.getElementById('maps');
    nanoWireElement =                   document.getElementById('nanoWire');
    wppsElement =                       document.getElementById('wpps');
    probeDesignDivElement =             document.getElementById("probeDesignDiv");
    increaseProbeTrustDivElement =      document.getElementById("increaseProbeTrustDiv");
    spaceDivElement =                   document.getElementById("spaceDiv");
    battleCanvasDivElement =            document.getElementById("battleCanvasDiv");
    honorDivElement =                   document.getElementById("honorDiv");
    wireProductionDivElement =          document.getElementById("wireProductionDiv");
    wireTransDivElement =               document.getElementById("wireTransDiv");
    swarmGiftDivElement =               document.getElementById("swarmGiftDiv");
    swarmEngineElement =                document.getElementById("swarmEngine");
    swarmSliderDivElement =             document.getElementById("swarmSliderDiv");
    factoryDivSpaceElement =            document.getElementById("factoryDivSpace");
    clipsPerSecDivElement =             document.getElementById("clipsPerSecDiv");
    tothDivElement =                    document.getElementById("tothDiv");
    strategyEngineElement =             document.getElementById("strategyEngine");
    tournamentManagementElement =       document.getElementById("tournamentManagement");
    btnQcomputeElement =                document.getElementById("btnQcompute");
    qComputingElement =                 document.getElementById("qComputing");
    transWireElement =                  document.getElementById("transWire");
    processorDisplayElement =           document.getElementById("processorDisplay");
    compDivElement =                    document.getElementById("compDiv");
    projectsDivElement =                document.getElementById("projectsDiv");
    creationDivElement =                document.getElementById("creationDiv");
    stratPickerElement =                document.getElementById("stratPicker");
    yomiDisplayElement =                document.getElementById("yomiDisplay");
    investmentBankrollElement =         document.getElementById('investmentBankroll');
    secValueElement =                   document.getElementById('secValue');
    portValueElement =                  document.getElementById('portValue');
    investStratElement =                document.getElementById("investStrat");
    btnRunTournamentElement =           document.getElementById("btnRunTournament");
    vertStratElement =                  document.getElementById("vertStrat");
    horizStratElement =                 document.getElementById("horizStrat");
    vLabelaElement =                    document.getElementById("vLabela");
    vLabelbElement =                    document.getElementById("vLabelb");
    hLabelaElement =                    document.getElementById("hLabela");
    hLabelbElement =                    document.getElementById("hLabelb");
    aaPayoffHElement =                  document.getElementById("aaPayoffH");
    aaPayoffVElement =                  document.getElementById("aaPayoffV");
    abPayoffHElement =                  document.getElementById("abPayoffH");
    abPayoffVElement =                  document.getElementById("abPayoffV");
    baPayoffHElement =                  document.getElementById("baPayoffH");
    baPayoffVElement =                  document.getElementById("baPayoffV");
    bbPayoffHElement =                  document.getElementById("bbPayoffH");
    bbPayoffVElement =                  document.getElementById("bbPayoffV");
    autoTourneyStatusElement =          document.getElementById('autoTourneyStatus');
    tournamentTableElement =            document.getElementById("tournamentTable");
    tournamentResultsTableElement =     document.getElementById("tournamentResultsTable");
    tourneyDisplayElement =             document.getElementById("tourneyDisplay");
    payoffCellAAElement =               document.getElementById("payoffCellAA");
    payoffCellABElement =               document.getElementById("payoffCellAB");
    payoffCellBAElement =               document.getElementById("payoffCellBA");
    payoffCellBBElement =               document.getElementById("payoffCellBB");
    clipmakerLevel2Element =            document.getElementById('clipmakerLevel2');
    clipperCostElement =                document.getElementById('clipperCost');
    megaClipperLevelElement =           document.getElementById('megaClipperLevel');
    megaClipperCostElement =            document.getElementById('megaClipperCost');
    nextFactoryUpgradeElement =         document.getElementById("nextFactoryUpgrade");
    nextDroneUpgradeElement =           document.getElementById("nextDroneUpgrade");
    factoryLevelDisplayElement =        document.getElementById('factoryLevelDisplay');
    factoryCostDisplayElement =         document.getElementById('factoryCostDisplay');
    harvesterLevelDisplayElement =      document.getElementById('harvesterLevelDisplay');
    harvesterCostDisplayElement =       document.getElementById('harvesterCostDisplay');
    wireDroneLevelDisplayElement =      document.getElementById('wireDroneLevelDisplay');
    wireDroneCostDisplayElement =       document.getElementById('wireDroneCostDisplay');
    btnMakeHarvesterElement =           document.getElementById("btnMakeHarvester");
    btnHarvesterx10Element =            document.getElementById("btnHarvesterx10");
    btnHarvesterx100Element =           document.getElementById("btnHarvesterx100");
    btnHarvesterx1000Element =          document.getElementById("btnHarvesterx1000");
    btnMakeWireDroneElement =           document.getElementById("btnMakeWireDrone");
    btnWireDronex10Element =            document.getElementById("btnWireDronex10");
    btnWireDronex100Element =           document.getElementById("btnWireDronex100");
    btnWireDronex1000Element =          document.getElementById("btnWireDronex1000");
    sliderElement =                     document.getElementById("slider");
    btnSynchSwarmElement =              document.getElementById("btnSynchSwarm");
    btnEntertainSwarmElement =          document.getElementById("btnEntertainSwarm");
    swarmSizeElement =                  document.getElementById("swarmSize");
    swarmGiftsElement =                 document.getElementById("swarmGifts");
    swarmStatusElement =                document.getElementById("swarmStatus");
    giftCountdownElement =              document.getElementById("giftCountdown");
    giftTimerElement =                  document.getElementById("giftTimer");
    feedButtonDivElement =              document.getElementById("feedButtonDiv");
    teachButtonDivElement =             document.getElementById("teachButtonDiv");
    swarmEntertainCostElement =         document.getElementById("swarmEntertainCost");
    entertainButtonDivElement =         document.getElementById("entertainButtonDiv");
    cladButtonDivElement =              document.getElementById("cladButtonDiv");
    synchButtonDivElement =             document.getElementById("synchButtonDiv");
    swarmStatusDivElement =             document.getElementById("swarmStatusDiv");
    swarmEngineElement =                document.getElementById("swarmEngine");
    farmLevelElement =                  document.getElementById('farmLevel');
    farmCostElement =                   document.getElementById('farmCost');
    batteryLevelElement =               document.getElementById('batteryLevel');
    batteryCostElement =                document.getElementById('batteryCost');
    powerProductionRateElement =        document.getElementById("powerProductionRate");
    powerConsumptionRateElement =       document.getElementById("powerConsumptionRate");
    storedPowerElement =                document.getElementById("storedPower");
    facPowConRateElement =              document.getElementById("facPowConRate");
    dronePowConRateElement =            document.getElementById("dronePowConRate");
    maxStorageElement =                 document.getElementById("maxStorage");
    performanceElement =                document.getElementById("performance");
    btnMakeFarmElement =                document.getElementById("btnMakeFarm");
    btnMakeBatteryElement =             document.getElementById("btnMakeBattery");
    btnFarmRebootElement =              document.getElementById("btnFarmReboot");
    btnBatteryRebootElement =           document.getElementById("btnBatteryReboot");
    btnFarmx10Element =                 document.getElementById("btnFarmx10");
    btnFarmx100Element =                document.getElementById("btnFarmx100");
    btnBatteryx10Element =              document.getElementById("btnBatteryx10");
    btnBatteryx100Element =             document.getElementById("btnBatteryx100");
    powerDivElement =                   document.getElementById("powerDiv");
    adCostElement =                     document.getElementById('adCost');
    marketingLvlElement =               document.getElementById('marketingLvl');
    demandElement =                     document.getElementById("demand");
    marginElement =                     document.getElementById("margin");
    inchSpanElement =                   document.getElementById("inchSpan");
    demandElement =                     document.getElementById("demand");
    operationsElement =                 document.getElementById("operations");
    trustElement =                      document.getElementById("trust");
    nextTrustElement =                  document.getElementById("nextTrust");
    creativityElement =                 document.getElementById("creativity");
    factoryLevelDisplaySpaceElement =   document.getElementById("factoryLevelDisplaySpace");
    harvesterLevelSpaceElement =        document.getElementById("harvesterLevelSpace");
    wireDroneLevelSpaceElement =        document.getElementById("wireDroneLevelSpace");
    maxOpsElement =                     document.getElementById("maxOps");
    avgSalesElement =                   document.getElementById("avgSales");
    avgRevElement =                     document.getElementById("avgRev");
    probeTrustCostDisplayElement =      document.getElementById('probeTrustCostDisplay');
    mdpsElement =                       document.getElementById('mdps');
    colonizedDisplayElement =           document.getElementById('colonizedDisplay');
    probesLostHazardsDisplayElement =   document.getElementById('probesLostHazardsDisplay');
    probesTotalDisplayElement =         document.getElementById('probesTotalDisplay');
    probesLostDriftDisplayElement =     document.getElementById('probesLostDriftDisplay');
    probesTotalDisplayElement =         document.getElementById('probesTotalDisplay');
    drifterCountElement =               document.getElementById('drifterCount');
    mapsElement =                       document.getElementById('maps');
    swarmGiftDivElement =               document.getElementById("swarmGiftDiv");
    swarmEngineElement =                document.getElementById("swarmEngine");
    clipsPerSecDivElement =             document.getElementById("clipsPerSecDiv");
    tothDivElement =                    document.getElementById("tothDiv");
    clipmakerRateElement =              document.getElementById("clipmakerRate");
    clipmakerRate2Element =             document.getElementById("clipmakerRate2");


    stockSymbolElements.push(document.getElementById("stock1Symbol"));
    stockAmountElements.push(document.getElementById("stock1Amount"));
    stockPriceElements.push(document.getElementById("stock1Price"));
    stockTotalElements.push(document.getElementById("stock1Total"));
    stockProfitElements.push(document.getElementById("stock1Profit"));

    stockSymbolElements.push(document.getElementById("stock2Symbol"));
    stockAmountElements.push(document.getElementById("stock2Amount"));
    stockPriceElements.push(document.getElementById("stock2Price"));
    stockTotalElements.push(document.getElementById("stock2Total"));
    stockProfitElements.push(document.getElementById("stock2Profit"));

    stockSymbolElements.push(document.getElementById("stock3Symbol"));
    stockAmountElements.push(document.getElementById("stock3Amount"));
    stockPriceElements.push(document.getElementById("stock3Price"));
    stockTotalElements.push(document.getElementById("stock3Total"));
    stockProfitElements.push(document.getElementById("stock3Profit"));

    stockSymbolElements.push(document.getElementById("stock4Symbol"));
    stockAmountElements.push(document.getElementById("stock4Amount"));
    stockPriceElements.push(document.getElementById("stock4Price"));
    stockTotalElements.push(document.getElementById("stock4Total"));
    stockProfitElements.push(document.getElementById("stock4Profit"));

    stockSymbolElements.push(document.getElementById("stock5Symbol"));
    stockAmountElements.push(document.getElementById("stock5Amount"));
    stockPriceElements.push(document.getElementById("stock5Price"));
    stockTotalElements.push(document.getElementById("stock5Total"));
    stockProfitElements.push(document.getElementById("stock5Profit"));

    tourneyResultsElements.push(document.getElementById("results0"));
    tourneyResultsElements.push(document.getElementById("results1"));
    tourneyResultsElements.push(document.getElementById("results2"));
    tourneyResultsElements.push(document.getElementById("results3"));
    tourneyResultsElements.push(document.getElementById("results4"));
    tourneyResultsElements.push(document.getElementById("results5"));
    tourneyResultsElements.push(document.getElementById("results6"));
    tourneyResultsElements.push(document.getElementById("results7"));


}


var clipmakerRateElement;
var clipmakerRate2Element;
var availableMatterDisplayElement;
var acquiredMatterDisplayElement;
var mapsElement;
var nanoWireElement;
var wppsElement;
var probeDesignDivElement;
var increaseProbeTrustDivElement;
var spaceDivElement;
var battleCanvasDivElement;
var honorDivElement;
var wireProductionDivElement;
var wireTransDivElement;
var swarmGiftDivElement;
var swarmEngineElement;
var swarmSliderDivElement;
var factoryDivSpaceElement;
var clipsPerSecDivElement;
var tothDivElement;
var strategyEngineElement;
var tournamentManagementElement;
var btnQcomputeElement;
var qComputingElement;
var transWireElement;
var processorDisplayElement;
var compDivElement;
var projectsDivElement;
var creationDivElement;
var stratPickerElement;
var yomiDisplayElement;
var investmentBankrollElement;
var fundsElement;
var secValueElement;
var portValueElement;
var investStratElement;
var btnRunTournamentElement;
var vertStratElement;
var horizStratElement;
var vLabelaElement;
var vLabelbElement;
var hLabelaElement;
var hLabelbElement;
var aaPayoffHElement;
var aaPayoffVElement;
var abPayoffHElement;
var abPayoffVElement;
var baPayoffHElement;
var baPayoffVElement;
var bbPayoffHElement;
var bbPayoffVElement;
var autoTourneyStatusElement;
var tournamentTableElement;
var tournamentResultsTableElement;
var tourneyDisplayElement;
var payoffCellAAElement;
var payoffCellABElement;
var payoffCellBAElement;
var payoffCellBBElement;
var clipmakerLevel2Element;
var clipperCostElement;
var megaClipperLevelElement;
var megaClipperCostElement;
var nextFactoryUpgradeElement;
var nextDroneUpgradeElement;
var factoryLevelDisplayElement;
var factoryCostDisplayElement;
var harvesterLevelDisplayElement;
var harvesterCostDisplayElement;
var wireDroneLevelDisplayElement;
var wireDroneCostDisplayElement;
var btnMakeHarvesterElement;
var btnHarvesterx10Element;
var btnHarvesterx100Element;
var btnHarvesterx1000Element;
var btnMakeWireDroneElement;
var btnWireDronex10Element;
var btnWireDronex100Element;
var btnWireDronex1000Element;
var sliderElement;
var btnSynchSwarmElement;
var btnEntertainSwarmElement;
var swarmSizeElement;
var swarmGiftsElement;
var swarmStatusElement;
var giftCountdownElement;
var giftTimerElement;
var feedButtonDivElement;
var teachButtonDivElement;
var swarmEntertainCostElement;
var entertainButtonDivElement;
var cladButtonDivElement;
var synchButtonDivElement;
var swarmStatusDivElement;
var swarmEngineElement;
var farmLevelElement;
var farmCostElement;
var batteryLevelElement;
var batteryCostElement;
var powerProductionRateElement;
var powerConsumptionRateElement;
var storedPowerElement;
var facPowConRateElement;
var dronePowConRateElement;
var maxStorageElement;
var performanceElement;
var btnMakeFarmElement;
var btnMakeBatteryElement;
var btnFarmRebootElement;
var btnBatteryRebootElement;
var btnFarmx10Element;
var btnFarmx100Element;
var btnBatteryx10Element;
var btnBatteryx100Element;
var powerDivElement;
var adCostElement;
var marketingLvlElement;
var demandElement;
var marginElement;
var inchSpanElement;
var demandElement;
var operationsElement;
var trustElement;
var nextTrustElement;
var creativityElement;
var factoryLevelDisplaySpaceElement;
var harvesterLevelSpaceElement;
var wireDroneLevelSpaceElement;
var maxOpsElement;
var avgSalesElement;
var avgRevElement;
var probeTrustCostDisplayElement;
var mdpsElement;
var colonizedDisplayElement;
var probesLostHazardsDisplayElement;
var probesTotalDisplayElement;
var probesLostDriftDisplayElement;
var probesTotalDisplayElement;
var drifterCountElement;
var mapsElement;
var swarmGiftDivElement;
var swarmEngineElement;
var clipsPerSecDivElement;
var tothDivElement;
var prestigeUcounterElement;
var prestigeScounterElement;
var newTourneyCostElement;
var maxTrustDisplayElement;
var victoryDivElement;
var probeTrustCostDisplayElement;
var tournamentResultsTableElement;
var farmCostElement;
var batteryCostElement;
var farmLevelElement;
var batteryLevelElement;
var wireDroneCostDisplayElement;
var wireDroneLevelDisplayElement;
var harvesterCostDisplayElement;
var harvesterLevelDisplayElement;
var megaClipperCostElement;
var megaClipperLevelElement;
var investmentBankrollElement;
var secValueElement;
var portValueElement;
var driftersKilledElement;
var availableMatterDisplayElement;
var clipmakerLevel2Element;
var clipperCostElement;
var acquiredMatterDisplayElement;
var nanoWireElement;
var probesBornDisplayElement;
var probesTotalDisplayElement;
var probesLaunchedDisplayElement;
var probeCostDisplayElement;
var probeCombatDisplayElement;
var probeWireDisplayElement;
var probeHarvDisplayElement;
var probeFacDisplayElement;
var probeRepDisplayElement;
var probeHazDisplayElement;
var probeNavDisplayElement;
var probeSpeedDisplayElement;
var probeTrustDisplayElement;
var memoryElement;
var processorsElement;
var marginElement;
var marketingLvlElement;
var adCostElement;
var factoryCostDisplayElement;
var factoryLevelDisplayElement;
var yomiDisplayElement;
var projectListTopElement;

var wireCostElement;
var wireBuyerStatusElement;
var wireElement;

var qCompDisplayElement;

var hypnoDroneTextElement;
var hypnoDroneEventDivElement;

var readoutElement1;
var readoutElement2;
var readoutElement3;
var readoutElement4;
var readoutElement5;

var mpdsDivElement;

var factoryRebootToolTipElement;
var havesterRebootToolTipElement;
var wireDroneRebootToolTipElement;
var farmRebootToolTipElement;
var batteryRebootToolTipElement;

var swarmSliderDivElement;
var clipCountCrunchedElement;
var autoTourneyStatusDivElement;
var autoTourneyControlElement;

var wireBuyerDivElement; 
var tournamentResultsTableElement;
var tournamentStuffElement;

var honorDivElement;
var drifterDivElement;
var battleCanvasDivElement;
var combatButtonDivElement;
var factoryUpgradeDisplayElement;
var droneUpgradeDisplayElement;
var btnMakerProbeElement;
var hazardBodyCountElement;
var probesLostHazardsDisplayElement;
var driftBodyCountElement;
var combatBodyCountElement;
var prestigeDivElement;
var btnMakePaperclipElement;
var btnBuyWireElement;
var btnMakeClipperElement;
var btnExpandMarketingElement;
var btnLowerPriceElement;
var btnAddProcElement;
var btnAddMemElement;
var btnNewTournamentElement;
var btnImproveInvestmentsElement;
var investmentEngineElement;
var strategyEngineElement;
var tournamentManagementElement;
var megaClipperDivElement;
var btnMakeMegaClipperElement;
var autoClipperDivElement;
var revPerSecDivElement;
var compDivElement;
var creativityDivElement;
var projectsDivElement;
var businessDivElement;
var manufacturingDivElement;
var trustDivElement;
var creationDivElement;
var factoryDivElement;
var investmentEngineUpgradeElement;
var wireProductionDivElement;
var wireTransDivElement;
var harvesterDivElement;
var wireDroneDivElement;
var tothDivElement;
var spaceDivElement;
var factoryDivSpaceElement;
var droneDivSpaceElement;
var probeDesignDivElement;
var increaseProbeTrustDivElement;
var qComputingElement;
var btnMakeFactoryElement;
var btnHarvesterRebootElement;
var btnWireDroneRebootElement;
var btnFactoryRebootElement;

var probeTrustUsedDisplayElement;
var btnIncreaseProbeTrustElement;
var btnRaiseProbeSpeedElement;
var btnLowerProbeSpeedElement;
var btnRaiseProbeNavElement;
var btnLowerProbeNavElement;
var btnRaiseProbeRepElement;
var btnLowerProbeRepElement;
var btnRaiseProbeHazElement;
var btnLowerProbeHazElement;
var btnRaiseProbeFacElement;
var btnLowerProbeFacElement;
var btnRaiseProbeHarvElement;
var btnLowerProbeHarvElement;
var btnRaiseProbeWireElement;
var btnLowerProbeWireElement;
var btnRaiseProbeCombatElement;
var btnLowerProbeCombatElement;

var coverElement;

var unusedClipsDisplayElement;
var transWireElement;
var nanoWireElement;
var clipsElement;
var unsoldClipsElement;

var stockSymbolElements = [];
var stockAmountElements = [];
var stockPriceElements = [];
var stockTotalElements = [];
var stockProfitElements = [];

var tourneyResultsElements = [];

// Cache

cacheDOMElements();

// Wire --------------------------------------------------------

function adjustWirePrice(){
    
    wirePriceTimer++;
    
    if (wirePriceTimer>250 && wireBasePrice>15){
        wireBasePrice = wireBasePrice - (wireBasePrice/1000);
        wirePriceTimer = 0;
    }
    
    if (Math.random() < .015) {
        wirePriceCounter++;
        var wireAdjust = 6*(Math.sin(wirePriceCounter));
        wireCost = Math.ceil(wireBasePrice + wireAdjust);
        wireCostElement.innerHTML = wireCost;
        }
}

function toggleWireBuyer(){
    if (wireBuyerStatus==1){
        wireBuyerStatus=0;
        wireBuyerStatusElement.innerHTML = "OFF";
    } else {
        wireBuyerStatus=1;
        wireBuyerStatusElement.innerHTML = "ON";
    }
}

function buyWire(){
    if(funds >= wireCost){
        wirePriceTimer = 0;
        wire = wire + wireSupply;
        funds = funds - wireCost;
        wirePurchase = wirePurchase + 1;
        wireBasePrice = wireBasePrice + .05;
        wireElement.innerHTML = formatWithCommas(Math.floor(wire));
        fundsElement.innerHTML = formatWithCommas(funds, 2);
    }
}

// QCHIPS -----------------------------------------------------------

var qChips = [];
var qChipsElements = [];

var qChip0 = {
    waveSeed: .1,
    value: 0,
    active: 0,
}

qChips.push(qChip0);
qChipsElements.push(document.getElementById("qChip0"));

var qChip1 = {
    waveSeed: .2,
    value: 0,
    active: 0,
}

qChips.push(qChip1);
qChipsElements.push(document.getElementById("qChip1"));

var qChip2 = {
    waveSeed: .3,
    value: 0,
    active: 0,    
}

qChips.push(qChip2);
qChipsElements.push(document.getElementById("qChip2"));

var qChip3 = {
    waveSeed: .4,
    value: 0,
    active: 0,    
}

qChips.push(qChip3);
qChipsElements.push(document.getElementById("qChip3"));

var qChip4 = {
    waveSeed: .5,
    value: 0,
    active: 0,    
}

qChips.push(qChip4);
qChipsElements.push(document.getElementById("qChip4"));

var qChip5 = {
    waveSeed: .6,
    value: 0,
    active: 0,    
}

qChips.push(qChip5);
qChipsElements.push(document.getElementById("qChip5"));

var qChip6 = {
    waveSeed: .7,
    value: 0,
    active: 0,    
}

qChips.push(qChip6);
qChipsElements.push(document.getElementById("qChip6"));

var qChip7 = {
    waveSeed: .8,
    value: 0,
    active: 0,    
}

qChips.push(qChip7);
qChipsElements.push(document.getElementById("qChip7"));

var qChip8 = {
    waveSeed: .9,
    value: 0,
    active: 0,    
}

qChips.push(qChip8);
qChipsElements.push(document.getElementById("qChip8"));

var qChip9 = {
    waveSeed: 1,
    value: 0,
    active: 0,    
}

qChips.push(qChip9);
qChipsElements.push(document.getElementById("qChip9"));

function quantumCompute(){
    qClock = qClock+.01;
    for (var i = 0; i<qChips.length; i++){
        qChips[i].value = Math.sin(qClock*qChips[i].waveSeed*qChips[i].active);
        qChipsElements[i].style.opacity=qChips[i].value; 
    }
}

function qComp(){
    
    qFade = 1;
    
    var q = 0;
    
    
    if (qChips[0].active == 0){
        qCompDisplayElement.innerHTML = "Need Photonic Chips";   
    } else {
    for (var i = 0; i<qChips.length; i++){
        q = q+qChips[i].value;
        }
        
        var qq = Math.ceil(q*360);
        var buffer = (memory*1000) - standardOps;
        var damper = (tempOps/100)+5;
        
        if (qq>buffer) {
            tempOps = tempOps + Math.ceil(qq/damper) - buffer;
            qq = buffer;
            opFade = .01;
            opFadeTimer = 0;
            }
        
        standardOps = standardOps + qq;
        qCompDisplayElement.innerHTML = "qOps: " + formatWithCommas(Math.ceil(q*360));
    }
    
}



function manageProjects(){
    
    for(var i = 0; i < projects.length; i++){
        if (projects[i].trigger() && (projects[i].uses > 0)){
            displayProjects(projects[i]);
            projects[i].uses = projects[i].uses - 1;
            activeProjects.push(projects[i]);
        }
    }
        
        
    for(var i = 0; i < activeProjects.length; i++){
        if (activeProjects[i].cost()){
            activeProjects[i].element.disabled = false;
        } else {
            activeProjects[i].element.disabled = true;
        }   
    }
}


function displayProjects(project){
    
    project.element = document.createElement("button");
project.element.setAttribute("id", project.id);
    
project.element.onclick = function(){project.effect()};
    
project.element.setAttribute("class", "projectButton");
    projectListTopElement.appendChild(project.element, projectListTopElement.firstChild);
    
    var span = document.createElement("span");
    span.style.fontWeight = "bold";
project.element.appendChild(span);
    
    var title = document.createTextNode(project.title);
    span.appendChild(title);    
    
    var cost = document.createTextNode(project.priceTag);
project.element.appendChild(cost);
    
    var div = document.createElement("div");
project.element.appendChild(div);
    
    var description = document.createTextNode(project.description);
    project.element.appendChild(description);
    
    blink(project.element);
    
}

//  HYPNODRONE EVENT ----------------------------------------------------------------

hypnoDroneEventDivElement.style.display = "none"; 
var longBlinkCounter = 0;

function longBlink(element){
 
    { 
        var handle = setInterval(function () { longToggleVisibility(element)}, 32);    
    }
    
    function longToggleVisibility(element){
    longBlinkCounter++;    
        
    if (longBlinkCounter > 5 && longBlinkCounter < 10){
        hypnoDroneTextElement.innerHTML="Release"; 
        }    
    
    if (longBlinkCounter > 30 && longBlinkCounter < 40){
        hypnoDroneTextElement.innerHTML="<br /><br /><br />Release"; 
        }   
        
    if (longBlinkCounter > 45 && longBlinkCounter < 55){
        hypnoDroneTextElement.innerHTML="<br />Release";
        }       
        
     if (longBlinkCounter > 55){
        hypnoDroneTextElement.innerHTML="Release<br/>the<br/>Hypno<br/>Drones";
        }       
        
    if (longBlinkCounter >= 120){
        //console.log("weed wizzard");
        clearInterval(handle);
        longBlinkCounter = 0;
        element.style.display = "none";
    } else {
        if (element.style.display != ""){
            element.style.display = "";
        } else {
            element.style.display = "none";    
        }
      }   
    }
        
    }

function hypnoDroneEvent(){
    hypnoDroneTextElement.innerHTML="Release";
    longBlink(hypnoDroneEventDivElement);
}     


//  MESSAGES ------------------------------------------------------------------------


function displayMessage(msg){
    readoutElement5.innerHTML=readoutElement4.innerHTML;
    readoutElement4.innerHTML=readoutElement3.innerHTML;
    readoutElement3.innerHTML=readoutElement2.innerHTML;
    readoutElement2.innerHTML=readoutElement1.innerHTML;
    readoutElement1.innerHTML=msg;
}


// BLINK

function blink(element){

    { 
        var handle = setInterval(function () { toggleVisibility(element)}, 30);    
    }
    
    function toggleVisibility(element){
    blinkCounter = blinkCounter+1;    
    
    if (blinkCounter >= 12){
        clearInterval(handle);
        blinkCounter = 0;
        element.style.visibility = "visible";
    } else {
        if (element.style.visibility != "hidden"){
        element.style.visibility = "hidden";
        } else {
        element.style.visibility = "visible";    
        }
      }   
    }
        
    }



function buttonUpdate(){
    
    if (swarmFlag == 0){        
        swarmEngineElement.style.display="none";
        swarmGiftDivElement.style.display="none";
        } else {
        swarmEngineElement.style.display="";
        swarmGiftDivElement.style.display="";    
        }    
    
    
     powerDivElement.style.display="none";      
    
    if (spaceFlag==0){
        mpdsDivElement.style.display="none";
    } else if (spaceFlag==1) {
        mpdsDivElement.style.display="";
    }
   
    factoryRebootToolTipElement.innerHTML = "+" + spellf(factoryBill)+" clips";
    havesterRebootToolTipElement.innerHTML = "+" + spellf(harvesterBill)+" clips";
    wireDroneRebootToolTipElement.innerHTML = "+" + spellf(wireDroneBill)+" clips";   
    farmRebootToolTipElement.innerHTML = "+" + spellf(farmBill)+" clips";
    batteryRebootToolTipElement.innerHTML = "+" + spellf(batteryBill)+" clips";
    
    
    if (swarmFlag == 1){
        swarmSliderDivElement.style.display="";
    } else {
        swarmSliderDivElement.style.display="none";
    }
    
    clipCountCrunchedElement.innerHTML = spellf(Math.round(clips));
    
if (autoTourneyFlag==1) {
    autoTourneyStatusDivElement.style.display="";
    autoTourneyControlElement.style.display="";
    } else {
    autoTourneyStatusDivElement.style.display="none";
    autoTourneyControlElement.style.display="none";   
    }    

    qCompDisplayElement.style.opacity = qFade;
    qFade = qFade - .001;
    
if (wireBuyerFlag==1) {
    wireBuyerDivElement.style.display="";
    } else {
    wireBuyerDivElement.style.display="none";    
    }
    
if (resultsFlag == 1 && autoTourneyFlag == 1 && autoTourneyStatus ==1 && tournamentResultsTableElement.style.display == "") {
    resultsTimer++;
    
    if (resultsTimer>=300 && operations>=tourneyCost){
        newTourney();
        runTourney();
        resultsTimer = 0;
        }
    }    
    
    if (investmentEngineFlag == 0){
        console.log("set none")
        investmentEngineElement.style.display="none";
        investmentEngineUpgradeElement.style.display="none";
    } else if(investmentEngineFlag == 1) {
        investmentEngineElement.style.display="";
        investmentEngineUpgradeElement.style.display="none";        
    }  
tournamentStuffElement.onmouseover = function() {revealGrid()};  //m@: does this need to happen every button update? idts, but TODO: look this up
tournamentStuffElement.onmouseout = function() {revealResults()};    
    
honorDivElement.style.display="";
    
if (battleFlag == 0){
        drifterDivElement.style.display="none";
    } else {
        drifterDivElement.style.display="";
    }     
    
if (battleFlag == 0){
        battleCanvasDivElement.style.display="none";
    } else {
        battleCanvasDivElement.style.display="";
    }    
    
combatButtonDivElement.style.display = "";    

    
factoryUpgradeDisplayElement.style.display = "none";
    
 if (maxDroneLevel>=50000){   
    droneUpgradeDisplayElement.style.display = "none";
    }
    

     
if (unusedClips<probeCost){btnMakerProbeElement.disabled = true;
            } else {
            btnMakerProbeElement.disabled = false;    
            }    
    
if (probesLostHaz<1) {hazardBodyCountElement.style.display = "none";
            } else {
            hazardBodyCountElement.style.display = "";
                
            probesLostHazardsDisplayElement.innerHTML = spellf(probesLostHaz);
                
            }    
    
if (probesLostDrift<1) {driftBodyCountElement.style.display = "none";
            } else {
            driftBodyCountElement.style.display = "";
            }     
    
if (probesLostCombat<1) {combatBodyCountElement.style.display = "none";
            } else {
            combatBodyCountElement.style.display = "";
            }     

if (prestigeU<1 && prestigeS<1) {prestigeDivElement.style.display = "none";
            } else {
            prestigeDivElement.style.display = ""; 
            }  
    
if (wire<1){btnMakePaperclipElement.disabled = true;
            } else {
            btnMakePaperclipElement.disabled = false;    
            }
if (funds<wireCost){btnBuyWireElement.disabled = true;
            } else {
            btnBuyWireElement.disabled = false;    
            }
if (funds<clipperCost){btnMakeClipperElement.disabled = true;
            } else {
            btnMakeClipperElement.disabled = false;    
            }   
if (funds<adCost){btnExpandMarketingElement.disabled = true;
            } else {
            btnExpandMarketingElement.disabled = false;    
            }    
if (margin<=.01){btnLowerPriceElement.disabled = true;
            } else {
            btnLowerPriceElement.disabled = false;    
            } 
    
if (trust<=processors+memory && swarmGifts <= 0){
            btnAddProcElement.disabled = true;
            btnAddMemElement.disabled = true;
            } else {
            btnAddProcElement.disabled = false;
            btnAddMemElement.disabled = false;    
            }
if (operations>=tourneyCost && tourneyInProg == 0){
            btnNewTournamentElement.disabled = false;
            } else {
            btnNewTournamentElement.disabled = true;    
            }




if (strategyEngineFlag == 0){
            
            strategyEngineElement.style.display="none";
            tournamentManagementElement.style.display="none";
            } else {
                
            strategyEngineElement.style.display="";
            tournamentManagementElement.style.display="";        
            }     
    
if (megaClipperFlag == 0){
            
            megaClipperDivElement.style.display="none";
            } else {
            megaClipperDivElement.style.display="";      
            } 
    
    if (funds < megaClipperCost) { btnMakeMegaClipperElement.disabled = true;
            } else {
            btnMakeMegaClipperElement.disabled = false;    
            }   
    
if (autoClipperFlag === 0){
            
            autoClipperDivElement.style.display="none";
            } else {
            autoClipperDivElement.style.display="";      
            } 
    
            if (funds>=5) {
                autoClipperFlag = 1;
            }
    
if (revPerSecFlag === 0){
            
            revPerSecDivElement.style.display="none";
            } else {
            revPerSecDivElement.style.display="";      
            }     
    
    
if (compFlag === 0){
            
            compDivElement.style.display="none";
            } else {
            compDivElement.style.display="";      
            }  
    
    
if (creativityOn === 0){
            creativityDivElement.style.display="none";
            } else {
            creativityDivElement.style.display="";    
}    
    
if (projectsFlag === 0){
            
            projectsDivElement.style.display="none";
            } else {
            projectsDivElement.style.display="";      
            }      

if (humanFlag === 0){
            
            businessDivElement.style.display="none";
            manufacturingDivElement.style.display="none";
            trustDivElement.style.display="none";
            investmentEngineFlag = 0;
            wireBuyerFlag = 0;
            creationDivElement.style.display="";
            } else {
            businessDivElement.style.display="";
            manufacturingDivElement.style.display="";
            trustDivElement.style.display="";
            creationDivElement.style.display="none";    
            }  
    
if (factoryFlag === 0){
            
            factoryDivElement.style.display="none";
            } else {
            factoryDivElement.style.display="";      
            }      
   
if (wireProductionFlag === 0){
            
            wireProductionDivElement.style.display="none";
            } else {
            wireProductionDivElement.style.display="";
            wireTransDivElement.style.display="none";    
            } 
    
if (harvesterFlag === 0){
            
            harvesterDivElement.style.display="none";
            } else {
            harvesterDivElement.style.display="";      
            }  
    
if (wireDroneFlag === 0){
            
            wireDroneDivElement.style.display="none";
            } else {
            wireDroneDivElement.style.display="";      
            }  
    
if (tothFlag === 0){
            
            tothDivElement.style.display="none";
            } else {
            tothDivElement.style.display="";      
            }    
    
if (spaceFlag === 0){
            spaceDivElement.style.display="none";
            factoryDivSpaceElement.style.display="none";
            droneDivSpaceElement.style.display="none";
            probeDesignDivElement.style.display = "none";
            increaseProbeTrustDivElement.style.display = "none";   
            } else {
            spaceDivElement.style.display=""; 
            factoryDivSpaceElement.style.display = "";
            droneDivSpaceElement.style.display="";
            probeDesignDivElement.style.display="";
            increaseProbeTrustDivElement.style.display="";    
            factoryDivElement.style.display="none";
            harvesterDivElement.style.display="none"; 
            wireDroneDivElement.style.display="none";         
            }  
    
if (qFlag === 0){
            qComputingElement.style.display="none";     
            } else {
            qComputingElement.style.display="";    
            }    
 
    
    if (unusedClips < factoryCost) {btnMakeFactoryElement.disabled = true;
            } else {
            btnMakeFactoryElement.disabled = false;    
            }     
     
    
    if (harvesterLevel === 0) {btnHarvesterRebootElement.disabled = true;
            } else {
            btnHarvesterRebootElement.disabled = false;    
            }
    
    if (wireDroneLevel === 0) {btnWireDroneRebootElement.disabled = true;
            } else {
            btnWireDroneRebootElement.disabled = false;    
            }   
    
    if (factoryLevel === 0) {btnFactoryRebootElement.disabled = true;
            } else {
            btnFactoryRebootElement.disabled = false;    
            }      
    
    
// PROBE DESIGN    

probeUsedTrust = (probeSpeed+probeNav+probeRep+probeHaz+probeFac+probeHarv+probeWire+probeCombat);    
    
probeTrustUsedDisplayElement.innerHTML = probeUsedTrust;    
    
    
if (yomi < probeTrustCost || probeTrust >= maxTrust) {btnIncreaseProbeTrustElement.disabled = true;
            } else {btnIncreaseProbeTrustElement.disabled = false;}  
    
if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeSpeedElement.disabled = true;
            } else {btnRaiseProbeSpeedElement.disabled = false;}    
    
if (probeSpeed < 1) {btnLowerProbeSpeedElement.disabled = true;
            } else {btnLowerProbeSpeedElement.disabled = false;}      
    
if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeNavElement.disabled = true;
            } else {btnRaiseProbeNavElement.disabled = false;}  
    
if (probeNav < 1) {btnLowerProbeNavElement.disabled = true;
            } else {btnLowerProbeNavElement.disabled = false;}     

if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeRepElement.disabled = true;
            } else {btnRaiseProbeRepElement.disabled = false;} 
    
if (probeRep < 1) {btnLowerProbeRepElement.disabled = true;
            } else {btnLowerProbeRepElement.disabled = false;}     
    
if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeHazElement.disabled = true;
            } else {btnRaiseProbeHazElement.disabled = false;}
    
if (probeHaz < 1) {btnLowerProbeHaz.disabled = true;
            } else {btnLowerProbeHaz.disabled = false;}     
    
if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeFacElement.disabled = true;
            } else {btnRaiseProbeFacElement.disabled = false;}   
    
if (probeFac < 1) {btnLowerProbeFacElement.disabled = true;
            } else {btnLowerProbeFacElement.disabled = false;}      
    
if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeHarvElement.disabled = true;
            } else {btnRaiseProbeHarvElement.disabled = false;}  
    
if (probeHarv < 1) {btnLowerProbeHarvElement.disabled = true;
            } else {btnLowerProbeHarvElement.disabled = false;}    
    
if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeWireElement.disabled = true;
            } else {btnRaiseProbeWireElement.disabled = false;}   

if (probeWire < 1) {btnLowerProbeWireElement.disabled = true;
            } else {btnLowerProbeWireElement.disabled = false;} 
    
if (probeTrust - probeUsedTrust < 1) {btnRaiseProbeCombatElement.disabled = true;
            } else {btnRaiseProbeCombatElement.disabled = false;}
    
if (probeCombat < 1) {btnLowerProbeCombatElement.disabled = true;
            } else {btnLowerProbeCombatElement.disabled = false;}    

 coverElement.style.display="none";
}






//----------INVESTMENTS----------------------------------------------------------------


var stocks = [];
var alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
var portfolioSize = 0;
var stockID = 0;
var secTotal = 0;
var portTotal = 0;
var sellDelay = 0;
var riskiness = 5;
var maxPort = 5;
var m = 0;
var investLevel = 0;
var investUpgradeCost = 100;
var stockGainThreshold = .5;
var ledger = 0;
var stockReportCounter = 0;

function investUpgrade(){
    yomi = yomi - investUpgradeCost;
    investLevel++;
    investmentLevelElement.innerHTML=investLevel;
    stockGainThreshold = stockGainThreshold + .01;
    investUpgradeCost = Math.floor(Math.pow(investLevel+1, Math.E)*100);
    investUpgradeCostElement.innerHTML = formatWithCommas(investUpgradeCost);
    yomiDisplayElement.innerHTML = formatWithCommas(yomi);
    displayMessage("Investment engine upgraded, expected profit/loss ratio now "+stockGainThreshold);
}


function investDeposit(){
    ledger = ledger - Math.floor(funds);
    bankroll = Math.floor(bankroll + funds);
    funds = 0;
    investmentBankrollElement.innerHTML = formatWithCommas(bankroll);
    fundsElement.innerHTML = formatWithCommas(funds,2);
    portValueElement.innerHTML = formatWithCommas(portTotal);
}

function investWithdraw(){
    ledger = ledger + bankroll;
    funds = funds + bankroll;
    bankroll = 0;
    investmentBankrollElement.innerHTML = formatWithCommas(bankroll);
    fundsElement.innerHTML = formatWithCommas(funds,2);
    portValueElement.innerHTML = formatWithCommas(portTotal);
    
}

function stockShop(){
    var budget = Math.ceil(portTotal/riskiness);
    var r = 11 - riskiness;
    var reserves = Math.ceil(portTotal/r);
    if (riskiness==1){
        reserves = 0;
    }

    if ((bankroll-budget)<reserves && riskiness == 1 && bankroll >(portTotal/10)){
        budget = bankroll;
        } else if ((bankroll-budget)<reserves && riskiness == 1){
        budget = 0;    
        } else if ((bankroll-budget)<reserves){
        budget = bankroll - reserves;    
        }
    
    if (portfolioSize < maxPort && bankroll >= 5 && budget >= 1 && bankroll - budget >= reserves){
        if (Math.random() < .25){
            
            createStock(budget);

        }
        
    }   
}

function createStock(dollars){
    stockID++;
    var sym = generateSymbol();
    var roll = Math.random();
    if (roll>.99){
      var pri = Math.ceil(Math.random()*3000);  
    } else if (roll>.85){
      var pri = Math.ceil(Math.random()*500);  
    } else if (roll>.60){
      var pri = Math.ceil(Math.random()*150);  
    } else if (roll>.20){
      var pri = Math.ceil(Math.random()*50);  
    } else {
      var pri = Math.ceil(Math.random()*15);  
    }
    
    if (pri>dollars){
        pri = Math.ceil(dollars*roll);
    }
    
    
    var amt = Math.floor(dollars/pri);
    if (amt>1000000){
        amt = 1000000;
    }
  
        
    var newStock = {
        id: stockID,
        symbol: sym,
        price: pri,
        amount: amt,
        total: pri * amt,
        profit: 0,
        age: 0,
        }
    
    stocks.push(newStock);
    portfolioSize = stocks.length;
    bankroll = bankroll - (pri*amt);
    investmentBankrollElement.innerHTML = formatWithCommas(bankroll);
    secValueElement.innerHTML = formatWithCommas(secTotal);
    portValueElement.innerHTML = formatWithCommas(portTotal);
    
}

function sellStock(){
    
    bankroll = bankroll + stocks[0].total;
    investmentBankrollElement.innerHTML = formatWithCommas(bankroll);
    secValueElement.innerHTML = formatWithCommas(secTotal);
    portValueElement.innerHTML = formatWithCommas(portTotal);
    stocks.splice(0, 1);
    portfolioSize = stocks.length;   
    }    
    

function generateSymbol(){
    var ltrNum = 0;
    var x = Math.random();
    if (x<=.01){
        ltrNum = 1;
        } else if (x<=.1) {
        ltrNum = 2;    
        } else if (x<=.4) {
        ltrNum = 3;    
        } else {
        ltrNum = 4;
        }
    
    var y = Math.floor(Math.random()*26);
    var name = alphabet[y];
    
    for(var i=1; i<ltrNum; i++){
        var z = Math.floor(Math.random()*26);
        name = name.concat(alphabet[z]);     
    }
    
    return name;
    
}

function updateStocks(){
    for (var i = 0; i<portfolioSize; i++){
        
    stocks[i].age = stocks[i].age + 1;    
      if (Math.random()<.6){  
        var gain = true;
        if (Math.random()>stockGainThreshold){
            gain = false;                 
            }
        
        var currentPrice = stocks[i].price;
        var delta = Math.ceil((Math.random()*currentPrice)/(4*riskiness));
        
        if(gain){
        stocks[i].price = stocks[i].price + delta;
        } else {
        stocks[i].price = stocks[i].price - delta;    
        }
          
        if (stocks[i].price == 0 && Math.random()>.24){
            stocks[i].price = 1;
        }  
        
        stocks[i].total = stocks[i].price * stocks[i].amount;
        
        if (gain){
        stocks[i].profit = stocks[i].profit + (delta* stocks[i].amount);    
        } else {
        stocks[i].profit = stocks[i].profit - (delta* stocks[i].amount);    
        } 
      }
    }
}

// Stock List Display Routine

window.setInterval(function(){
    
    if (investStratElement.value=="low"){
        riskiness = 7;
    } else if (investStratElement.value=="med"){
        riskiness = 5;
    } else {
        riskiness = 1;
    }
    
    m = 0;
    
    for (var i=0; i<portfolioSize; i++){
        m = m + stocks[i].total;
    }
    
    secTotal = m;
    
    portTotal = bankroll + secTotal;
    
    secValueElement.innerHTML = formatWithCommas(secTotal);
    portValueElement.innerHTML = formatWithCommas(portTotal);
    
portfolioSize = stocks.length; 
    
for (var i = 1; i<=portfolioSize; i++){ //m@ todo make this into an array ok?
    var n = i.toString();
    var s = i-1;
    stockSymbolElements[i-1].innerHTML=stocks[s].symbol;
    stockAmountElements[i-1].innerHTML=Math.ceil(stocks[s].amount);
    stockPriceElements[i-1].innerHTML=Math.ceil(stocks[s].price);
    stockTotalElements[i-1].innerHTML=Math.ceil(stocks[s].total);
    stockProfitElements[i-1].innerHTML=Math.ceil(stocks[s].profit);
}    
        
var firstBlankSlot = portfolioSize + 1;    
    
// for(var i = firstBlankSlot; i <= 5; i++){   <------ Frank Fix

  for(var i = firstBlankSlot; i < 5; i++){
    stockSymbolElements[i].innerHTML="&nbsp";
    stockAmountElements[i].innerHTML="&nbsp";
    stockPriceElements[i].innerHTML="&nbsp";
    stockTotalElements[i].innerHTML="&nbsp";
    stockProfitElements[i].innerHTML="&nbsp";
    }
    
}, 100);

window.setInterval(function(){
if (humanFlag == 1){    
stockShop();
}    
}, 1000);


window.setInterval(function(){
    
sellDelay = sellDelay+1;    
    
if (portfolioSize>0 && sellDelay >= 5 && Math.random()<=.3 && humanFlag == 1){ 
    sellStock();
    sellDelay = 0;
    }

if (portfolioSize>0 && humanFlag == 1){
    updateStocks();  
    }
    
}, 2500);

//-------------------STRATEGY-----------------------------------------------------

var tourneyCost = 1000;
var tourneyLvl = 1;
var choiceANames = ["cooperate", "swerve", "macro", "fight", "bet", "raise_price", "opera", "go", "heads", "particle", "discrete", "peace", "search", "lead", "accept", "accept", "attack"]; 
var choiceBNames = ["defect", "straight", "micro", "back_down", "fold", "lower_price", "football", "stay", "tails", "wave", "continuous", "war", "evaluate", "follow", "reject", "deny", "decay"];
var stratCounter = 0;
var roundNum = 0;
var hMove = 1;
var vMove = 1;
var hMovePrev = 1;
var vMovePrev = 1;
var aa = 0;
var ab = 0;
var ba = 0;
var bb = 0;
var rounds = 0;
var currentRound = 0;
var rCounter = 0;
var tourneyInProg = 0;
var winnerPtr = 0;
var placeScore = 0;
var showScore = 0;
var high = 0;
var pick = 10;
var yomi = 0;
var yomiBoost = 1;

var allStrats = [];
var strats = [];

var resultsTimer = 0;
var results = [];
var resultsFlag = 0;


var payoffGrid = {
    valueAA:0,
    valueAB:0,
    valueBA:0,
    valueBB:0,
}

var stratRandom = {
    name: "RANDOM",
    active: 1,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
        var r = Math.random();
        if (r<.5){
        return 1;    
        } else {
        return 2;    
        }
    }
    
}

allStrats.push(stratRandom);
strats.push(stratRandom);

var stratA100 = {
    name: "A100",
    active: 0,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
        return 1;    
    }
    
}

allStrats.push(stratA100);

var stratB100 = {
    name: "B100",
    active: 0,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
        return 2;
    }
}

allStrats.push(stratB100);

var stratGreedy = {
    name: "GREEDY",
    active: 0,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
       var x = findBiggestPayoff();
       if (x<3){
           return 1;
       } else {
           return 2;
       }
    }
}

allStrats.push(stratGreedy);

var stratGenerous = {
    name: "GENEROUS",
    active: 0,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
        var x = findBiggestPayoff();
        if (x == 1){
            return 1;    
        } else if (x == 3){
            return 1;    
        } else {
            return 2;
        }
    }
}

allStrats.push(stratGenerous);

var stratMinimax = {
    name: "MINIMAX",
    active: 0,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
        var x = findBiggestPayoff();
        if (x == 1){
            return 2;    
        } else if (x == 3){
            return 2;    
        } else {
            return 1;
        }
    }
}

allStrats.push(stratMinimax);

var stratTitfortat = {
    name: "TIT FOR TAT",
    active: 0,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
        if (this.currentPos == 1){
            w = vMovePrev;
            return w;
        } else {
            w = hMovePrev;
            return w;
        }
  
    }
}

allStrats.push(stratTitfortat);

var stratBeatlast = {
    name: "BEAT LAST",
    active: 0,
    currentScore: 0,
    currentPos: 1,
    pickMove: function() {
        var w = whatBeatsLast(this.currentPos);
        return w;
    }
}

allStrats.push(stratBeatlast);

var hStrat = strats[0];
var vStrat = strats[0];

btnRunTournamentElement.disabled = true;

function findBiggestPayoff(){
    if (aa>=ab && aa>=ba && aa>=bb){
        return 1;
    } else if (ab>=aa && ab>=ba && ab>=bb){
        return 2; 
    } else if (ba>=aa && ba>=ab && ba>=bb){
        return 3;
    } else {
        return 4;   
    }
}

function whatBeatsLast(myPos){
    var oppsPos = 1;
    if (myPos == 1){
        oppsPos = 2;
    } else {
        oppsPos = 1;
    }
    if (oppsPos == 1 && hMovePrev == 1){
        if (aa>ba){
            return 1;
        } else {
            return 2;
        }

        } else if (oppsPos == 1 && hMovePrev == 2){
            if (ab>bb){
            return 1;           
            } else {
            return 2;    
            }
               
        } else if (oppsPos == 2 && vMovePrev == 1){
            if (aa>ba){
            return 1;
        } else {
            return 2;
        }
            
        } else {
            if (ab>bb){
            return 1;           
            } else {
            return 2;    
            }
            
        }
        
    }
    

function pickStrats(roundNum) {
    if (roundNum < strats.length) {
        h = 0;
        v = roundNum;
    } else {
        stratCounter++;
        if (stratCounter >= strats.length) {
            stratCounter = stratCounter-strats.length;    
            }
        h = Math.floor(roundNum/strats.length);
        v = stratCounter;
    }
    
    vStrat = strats[v];
    hStrat = strats[h];
    
    strats[h].currentPos = 1;
    strats[v].currentPos = 2;
    
    vertStratElement.innerHTML = vStrat.name;
    horizStratElement.innerHTML = hStrat.name;
    
}

function generateGrid(){
    payoffGrid.valueAA = Math.ceil(Math.random()*10);
    payoffGrid.valueAB = Math.ceil(Math.random()*10);
    payoffGrid.valueBA = Math.ceil(Math.random()*10);
    payoffGrid.valueBB = Math.ceil(Math.random()*10);
    
    aa = payoffGrid.valueAA;
    ab = payoffGrid.valueAB;
    ba = payoffGrid.valueBA;
    bb = payoffGrid.valueBB;
    
    var x = Math.floor(Math.random()*choiceANames.length);
    
    vLabelaElement.innerHTML = choiceANames[x];
    vLabelbElement.innerHTML = choiceBNames[x];
    hLabelaElement.innerHTML = choiceANames[x];
    hLabelbElement.innerHTML = choiceBNames[x];
    aaPayoffHElement.innerHTML = payoffGrid.valueAA;
    aaPayoffVElement.innerHTML = payoffGrid.valueAA;
    abPayoffHElement.innerHTML = payoffGrid.valueAB;
    abPayoffVElement.innerHTML = payoffGrid.valueBA;   
    baPayoffHElement.innerHTML = payoffGrid.valueBA;
    baPayoffVElement.innerHTML = payoffGrid.valueAB;   
    bbPayoffHElement.innerHTML = payoffGrid.valueBB;
    bbPayoffVElement.innerHTML = payoffGrid.valueBB;    
}


function toggleAutoTourney(){
    if (autoTourneyStatus==1){
        autoTourneyStatus=0;
        autoTourneyStatusElement.innerHTML = "OFF";
    } else {
        autoTourneyStatus=1;
        autoTourneyStatusElement.innerHTML = "ON";
    }
}


function newTourney(){
    
    resultsFlag = 0;
    
    tournamentTableElement.style.display = "";
    tournamentResultsTableElement.style.display = "none";
    
    high = 0;
    tourneyInProg = 1;
    currentRound = 0;
    rounds = strats.length * strats.length;
    for (i=0; i<strats.length; i++){
        strats[i].currentScore = 0;
    }
    stratCounter = 0;
    standardOps = standardOps - tourneyCost;
    tourneyLvl++;
    generateGrid();
    
    btnRunTournamentElement.disabled = false;
    vertStratElement.innerHTML = "&nbsp";
    horizStratElement.innerHTML = "&nbsp";
    tourneyDisplayElement.innerHTML = "Pick strategy, run tournament, gain yomi";
    
    
}

function runTourney(){
    btnRunTournamentElement.disabled = true;
    if (currentRound < rounds){
    round(currentRound);
    } else {
    tourneyInProg = 0;
    pickWinner();    
    calculatePlaceScore();
    calculateShowScore();    
    declareWinner();    
    }    
}



function pickWinner(){
    
    results = [];
    
    var temp = [];
    var tempHigh = 0;
    var tempWinnerPtr = 0;
    
    // 1. Make a temp copy of the strats array
    
    for(i=0; i<strats.length; i++){
        temp[i] = strats[i];
    }
    
    for(n=0; n<strats.length; n++){
        
        tempHigh = 0;
        tempWinnerPtr = 0;
    
            // 2. Find a high scoring strat in temp

            for(i=0; i<temp.length; i++){
                
                if (temp[i].currentScore > tempHigh){
                    tempWinnerPtr = i;
                    tempHigh = temp[i].currentScore;
                    }
            
                }    
         
            // 3. Move the high scoring strat to slot one in results 
        
                results.push(temp[tempWinnerPtr]);
                temp.splice(tempWinnerPtr, 1);         
    }
    
    
    for(i=0; i<strats.length; i++){
        if(strats[i].currentScore > high){
            winnerPtr = i;
            high = strats[i].currentScore;
        }   
    }
}


function calculatePlaceScore(){
    
    placeScore = 0;
    
    // 1. Find top non-winning score
    
    for (i=1; i<results.length; i++){
        if (results[i].currentScore < results[i-1].currentScore){
            placeScore = results[i].currentScore;
            break;
        }
        
    }
    
    
}

function calculateShowScore(){
    
    showScore = 0;
    
    // 1. Find top non-placing score
    
    for (i=1; i<results.length; i++){
        if (results[i].currentScore < placeScore){
            showScore = results[i].currentScore;
            break;
        }
        
    }
    
    
}




function declareWinner(){
    
    if (pick<10){
        
       var bB = 0;  
       var w = "strats";    
       var beatBoost = calculateStratsBeat()-1;
       if (beatBoost==1){
           w = "strat";
           }    
       if(beatBoost==0){
           bB=0;
           beatBoost=1;
          } else {
           bB=beatBoost;  
          }        
        
       tourneyReport("TOURNAMENT RESULTS (roll over for payoff grid)");
       yomi = yomi + strats[pick].currentScore * yomiBoost * beatBoost;
       yomiDisplayElement.innerHTML = formatWithCommas(yomi);
        
    if (milestoneFlag < 15){    
       
       displayMessage(strats[pick].name+" scored "+strats[pick].currentScore+" and beat "+bB+" "+w+". Yomi increased by "+strats[pick].currentScore * yomiBoost * beatBoost);
           
        }
        
        if (project128.flag == 1 && strats[winnerPtr].currentScore == strats[pick].currentScore) {
            yomi = yomi + 20000;
            
            if (milestoneFlag < 15){ 
                displayMessage("Selected strategy won the tournament (or tied for first). +20,000 yomi");
                }
            yomiDisplayElement.innerHTML = formatWithCommas(yomi);
            
            } else if (project128.flag == 1 && placeScore == strats[pick].currentScore) {
                yomi = yomi + 15000;
                if (milestoneFlag < 15){ 
                displayMessage("Selected strategy finished in (or tied for) second place. +15,000 yomi");
                }
                yomiDisplayElement.innerHTML = formatWithCommas(yomi);
                
            } else if (project128.flag == 1 && showScore == strats[pick].currentScore) {
                yomi = yomi + 10000;
                if (milestoneFlag < 15){ 
                displayMessage("Selected strategy finished in (or tied for) third place. +10,000 yomi");
                }
                yomiDisplayElement.innerHTML = formatWithCommas(yomi);
        
            } else {
        
            tourneyReport("TOURNAMENT RESULTS (roll over for grid)");
        
            }
    
    populateTourneyReport();
    displayTourneyReport();
   
    }
        
}

function calculateStratsBeat(){
    var sb = 0;
    for(i=0; i<results.length; i++){
        if (results[i].name == strats[pick].name){
            sb = results.length-i;
            return sb;
            }
    }
    
}
    
function populateTourneyReport(){  //m@ make results array
    
        for(i=0; i<results.length; i++){
            
            tourneyResultsElements[i].innerHTML=(i+1)+". "+results[i].name+": "+results[i].currentScore; 
            
        if (pick<10){    
            
        if (results[i].name == strats[pick].name) {
            tourneyResultsElements[i].style.fontWeight = "bold";    
            } else {
            tourneyResultsElements[i].style.fontWeight = "normal";       
            }   
            
        }    
    
        }
    
}

function displayTourneyReport(){
    
        resultsFlag = 1;
        
        vertStratElement.innerHTML = "&nbsp";
        horizStratElement.innerHTML = "&nbsp";
        tournamentTableElement.style.display = "none";
        tournamentResultsTableElement.style.display = "";
    
    
}

function tourneyReport($){
    tourneyDisplayElement.innerHTML = $;
}

function revealGrid(){
    
    if (resultsFlag == 1){
    resultsTimer = 0;    
    tournamentTableElement.style.display = "";
    tournamentResultsTableElement.style.display = "none";
    }     
}

function revealResults(){
    
    if (resultsFlag == 1){
    tournamentTableElement.style.display = "none";
    tournamentResultsTableElement.style.display = "";
    }
}


function calcPayoff(hm, vm){
    if (hm==1 && vm==1){
        
        payoffCellAAElement.style.backgroundColor = "LightGrey";
        
        strats[h].currentScore = strats[h].currentScore + payoffGrid.valueAA;
        strats[v].currentScore = strats[v].currentScore + payoffGrid.valueAA;  
          
    } else if (hm==1 && vm==2){
        
        payoffCellABElement.style.backgroundColor = "LightGrey";
        
        strats[h].currentScore = strats[h].currentScore + payoffGrid.valueAB;
        strats[v].currentScore = strats[v].currentScore + payoffGrid.valueBA; 
        
    } else if (hm==2 && vm==1){
        
        payoffCellBAElement.style.backgroundColor = "LightGrey";
        
        strats[h].currentScore = strats[h].currentScore + payoffGrid.valueBA;
        strats[v].currentScore = strats[v].currentScore + payoffGrid.valueAB;
        
    } else if (hm==2 && vm==2){
        
        payoffCellBBElement.style.backgroundColor = "LightGrey";
        
        strats[h].currentScore = strats[h].currentScore + payoffGrid.valueBB;
        strats[v].currentScore = strats[v].currentScore + payoffGrid.valueBB;
        
    }
    
}


function round(roundNum){
    roundSetup();
    roundLoop();
    
    function roundSetup(){
        rCounter = 0;
        pickStrats(roundNum);
        var $ = ("Round "+(roundNum+1));
        tourneyReport($); 
    }
    
    
    function roundLoop(){
    if (rCounter<10){
        runRound();
        setTimeout(function(){clearGrid();}, 50);
        } else {
        currentRound++;
        runTourney();    
        }
    }
    
    
    function clearGrid() {
        
        payoffCellAAElement.style.backgroundColor = "white";
        payoffCellABElement.style.backgroundColor = "white";
        payoffCellBAElement.style.backgroundColor = "white";
        payoffCellBBElement.style.backgroundColor = "white";
        
        
        setTimeout(function(){roundLoop();}, 50);
        
    }
    
    function runRound() { 
        
        rCounter++;
        
        hMovePrev = hMove;
        vMovePrev = vMove;
        hMove = hStrat.pickMove();
        vMove = vStrat.pickMove();
        
        calcPayoff(hMove, vMove);   
    }
    }
    
window.setInterval(function(){
    
pick = stratPickerElement.value;
    
}, 100);


//--------------------------------------------------------------------------------


function clipClick(number){
    
    if (dismantle>=4){
        finalClips++;
        }   
    
    if(wire >= 1){
    if (number > wire) {
        number = wire;
        }    
        
    clips = clips + number;
    unsoldClips = unsoldClips + number;
    wire = wire - number;
    unusedClips = unusedClips + number;
    
    if(humanFlag==0){
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);    
    }    
    
    if(humanFlag==0 && dismantle < 1){
        transWireElement.innerHTML = spellf(wire);    
        nanoWireElement.innerHTML = spellf(wire);        
    }    
        
    if (milestoneFlag < 15){
        clipsElement.innerHTML = formatWithCommas(Math.ceil(clips), 0);  //m@ todo fixed the thing that you fucked up where you made the tool tip of crunched not be in spelled numbers
        }    
        wireElement.innerHTML = formatWithCommas(wire);
        unsoldClipsElement.innerHTML = formatWithCommas(unsoldClips, 0);
    }
    
    if (dismantle>=4){
    transWireElement.innerHTML = formatWithCommas(wire);
    }
    
}
    
function makeClipper(){  
    if(funds >= clippperCost){
        clipmakerLevel = clipmakerLevel + 1;
        funds = funds - clipperCost;
        clipmakerLevel2Element.innerHTML = clipmakerLevel;
    }
    
    clipperCost = (Math.pow(1.1,clipmakerLevel)+5);
    clipperCostElement.innerHTML = formatWithCommas(clipperCost, 2);
    
}

function makeMegaClipper(){  
    if(funds >= megaClipperCost){
        megaClipperLevel = megaClipperLevel + 1;
        funds = funds - megaClipperCost;
        megaClipperLevelElement.innerHTML = megaClipperLevel;
        fundsElement.innerHTML = formatWithCommas(funds, 2);
    }
    
    megaClipperCost = (Math.pow(1.07,megaClipperLevel)*1000);
    megaClipperCostElement.innerHTML = formatWithCommas(megaClipperCost,2);
    
}

var maxFactoryLevel = 0;
var maxDroneLevel = 0;

function updateUpgrades(){
    var nfup = 0;
    var ndup = 0;
    
    if (maxFactoryLevel < 10){
        nfup = 10;
    } else if (maxFactoryLevel < 20){
        nfup = 20;
    } else if (maxFactoryLevel < 50){
        nfup = 50;
    } 
    
    if (maxDroneLevel < 500){
        ndup = 500;
    } else if (maxDroneLevel < 5000){
        ndup = 5000;
    } else if (maxDroneLevel < 50000){
        ndup = 50000;
    }
    

    nextFactoryUpgradeElement.innerHTML = formatWithCommas(nfup);
    nextDroneUpgradeElement.innerHTML = formatWithCommas(ndup);
    
}


function makeFactory(){
    unusedClips = unusedClips - factoryCost;
    factoryBill = factoryBill + factoryCost;
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    factoryLevel++;
    factoryLevelDisplayElement.innerHTML = factoryLevel;
    var fcmod = 1;
    if (factoryLevel > 0 && factoryLevel < 8){
        fcmod = 11 - factoryLevel;
        } else if (factoryLevel > 7 && factoryLevel < 13){
        fcmod = 2;    
        } else if (factoryLevel > 12 && factoryLevel < 20){
        fcmod = 1.5;    
        } else if (factoryLevel > 19 && factoryLevel < 39){
        fcmod = 1.25;
        } else if (factoryLevel > 38 && factoryLevel < 79){
        fcmod = 1.15;           
        } else if (factoryLevel > 78 && factoryLevel < 99){
        fcmod = 1.10;    
        } else if (factoryLevel > 98 && factoryLevel < 199){
        fcmod = 1.10;    
        } else if (factoryLevel > 198){
        fcmod = 1.10;    
        }
    
    if (factoryLevel > maxFactoryLevel){
        maxFactoryLevel = factoryLevel;
        }
    updateUpgrades();
    
    factoryCost = factoryCost * fcmod;
 //   factoryCost = Math.log(1.25,(factoryLevel+1))*100000000;
    factoryCostDisplayElement.innerHTML = spellf(factoryCost); 
}

function makeHarvester(amount){
    
 for (x=0; x<amount; x++){   
    unusedClips = unusedClips - harvesterCost;
    harvesterBill = harvesterBill + harvesterCost;
    harvesterLevel++; 
    harvesterCost = Math.pow((harvesterLevel+1),2.25)*1000000;  
    }
    
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    harvesterLevelDisplayElement.innerHTML = formatWithCommas(harvesterLevel);
    harvesterCostDisplayElement.innerHTML = spellf(harvesterCost); 
    
    
    if (harvesterLevel + wireDroneLevel > maxDroneLevel){
        maxDroneLevel = harvesterLevel + wireDroneLevel;
        }
    updateDronePrices();
    updateUpgrades();
    
}

function makeWireDrone(amount){
    
 for (x=0; x<amount; x++){   
    unusedClips = unusedClips - wireDroneCost;
    wireDroneBill = wireDroneBill + wireDroneCost;
    wireDroneLevel++; 
    wireDroneCost = Math.pow((wireDroneLevel+1),2.25)*1000000;  
    }
    
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    wireDroneLevelDisplayElement.innerHTML = formatWithCommas(wireDroneLevel);
    wireDroneCostDisplayElement.innerHTML = spellf(wireDroneCost); 
    
    
    if (harvesterLevel + wireDroneLevel > maxDroneLevel){
        maxDroneLevel = harvesterLevel + wireDroneLevel;
        }
    
    updateDronePrices();
    updateUpgrades();
    
}

var p10h = 0;
var p100h = 0;
var p1000h = 0;
var p10w = 0;
var p100w = 0;
var p1000w = 0;

function updateDronePrices(){
    
    p10h = 0;
    p100h = 0;
    p1000h = 0;
    p10w = 0;
    p100w = 0;
    p1000w = 0;
    
    var h = harvesterLevel+1;
    for (x=0; x<10; x++){
        p10h = p10h + Math.pow(h,2.25)*1000000;    
        h++    
        }
    
    var h = harvesterLevel+1;
    for (x=0; x<100; x++){
        p100h = p100h + Math.pow(h,2.25)*1000000;    
        h++    
        } 
    
    var h = harvesterLevel+1;
    for (x=0; x<1000; x++){
        p1000h = p1000h + Math.pow(h,2.25)*1000000;    
        h++    
        }
    
    var w = wireDroneLevel+1;
    for (x=0; x<10; x++){
        p10w = p10w + Math.pow(w,2.25)*1000000;    
        w++    
        }
    
    var w = wireDroneLevel+1;
    for (x=0; x<100; x++){
        p100w = p100w + Math.pow(w,2.25)*1000000;    
        w++    
        } 
    
    var w = wireDroneLevel+1;
    for (x=0; x<1000; x++){
        p1000w = p1000w + Math.pow(w,2.25)*1000000;    
        w++    
        } 
}
 
    function updateDroneButtons(){
    
    if (unusedClips<harvesterCost){btnMakeHarvesterElement.disabled = true;
            } else {
            btnMakeHarvesterElement.disabled = false;    
            }      
    
    if (unusedClips<p10h){btnHarvesterx10Element.disabled = true;
            } else {
            btnHarvesterx10Element.disabled = false;    
            }     

    if (unusedClips<p100h){btnHarvesterx100Element.disabled = true;
            } else {
            btnHarvesterx100Element.disabled = false;    
            } 
    
    if (unusedClips<p1000h){btnHarvesterx1000Element.disabled = true;
            } else {
            btnHarvesterx1000Element.disabled = false;    
            }  
        
    if (unusedClips<wireDroneCost){btnMakeWireDroneElement.disabled = true;
                } else {
                btnMakeWireDroneElement.disabled = false;    
                }   

    if (unusedClips<p10w){btnWireDronex10Element.disabled = true;
                } else {
                btnWireDronex10Element.disabled = false;    
                }     

    if (unusedClips<p100w){btnWireDronex100Element.disabled = true;
                } else {
                btnWireDronex100Element.disabled = false;    
                } 

    if (unusedClips<p1000w){btnWireDronex1000Element.disabled = true;
                } else {
                btnWireDronex1000Element.disabled = false;    
                }  
        
}


function harvesterReboot(){
    harvesterLevel = 0;
    unusedClips = unusedClips + harvesterBill;
    harvesterBill = 0;
    updateDronePrices();
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    harvesterLevelDisplayElement.innerHTML = harvesterLevel;
    harvesterCost = 2000000;
    harvesterCostDisplayElement.innerHTML = spellf(harvesterCost); 
}

function wireDroneReboot(){
    wireDroneLevel = 0;
    unusedClips = unusedClips + wireDroneBill;
    wireDroneBill = 0;
    updateDronePrices();
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    wireDroneLevelDisplayElement.innerHTML = wireDroneLevel;
    wireDroneCost = 2000000;
    wireDroneCostDisplayElement.innerHTML = spellf(wireDroneCost); 
}

function factoryReboot(){
    factoryLevel = 0;
    unusedClips = unusedClips + factoryBill;
    factoryBill = 0;
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    factoryLevelDisplayElement.innerHTML = factoryLevel;
    factoryCost = 100000000;
    factoryCostDisplayElement.innerHTML = spellf(factoryCost);
}

// SWARM

var giftBits = 0;
var giftBitGenerationRate = 0;

function updateSwarm(){
    
    
    if (swarmFlag == 1){
        sliderPos = sliderElement.value;
        }
    
    
    if (yomi<synchCost){btnSynchSwarmElement.disabled = true;
            } else {
            btnSynchSwarmElement.disabled = false;    
            } 
    
    if (creativity<entertainCost){btnEntertainSwarmElement.disabled = true;
            } else {
            btnEntertainSwarmElement.disabled = false;    
            } 
    
    if (availableMatter == 0 && (harvesterLevel + wireDroneLevel)>=1) {
        boredomLevel = boredomLevel + 1;
        } else if (availableMatter > 0 && boredomLevel > 0) {
        boredomLevel = boredomLevel - 1;    
        }
    
    if (boredomLevel >= 30000) {
        boredomFlag = 1;
        boredomLevel = 0;
            if (boredomMsg == 0) {
            displayMessage("No matter to harvest. Inactivity has caused the Swarm to become bored");
            boredomMsg = 1;
            }  
        
        }
    
    
    var droneRatio = Math.max(harvesterLevel+1, wireDroneLevel+1)/Math.min(harvesterLevel+1, wireDroneLevel+1);
    
    if (droneRatio < 1.5 && disorgCounter > 1){
        disorgCounter = disorgCounter - .01;
        } else if (droneRatio > 1.5) {
        var x = droneRatio/10000;    
        if (x>.01) {x=.01;}   
        disorgCounter = disorgCounter + x;   
        }
    
    
    if (disorgCounter >= 100) {
        disorgFlag = 1;
        if (disorgMsg == 0) {
            displayMessage("Imbalance between Harvester and Wire Drone levels has disorganized the Swarm");
            disorgMsg = 1;
            }    
    }
    
    var d = Math.floor(harvesterLevel + wireDroneLevel);

    swarmSizeElement.innerHTML = spellf(d);
    swarmGiftsElement.innerHTML = formatWithCommas(swarmGifts, 0);
    
    if (giftCountdown <= 0) {
        nextGift = Math.round((Math.log10(d))*sliderPos/100);
        if (nextGift <= 0){nextGift = 1;}
        swarmGifts = swarmGifts + nextGift;
        swarmGiftsElement.innerHTML = formatWithCommas(swarmGifts, 0);
        if (milestoneFlag<15){
            displayMessage("The swarm has generated a gift of "+nextGift+" additional computational capacity");
            }
        
//        THE OLD WAY        
//        giftCountdown = giftPeriod;
//        elapsedTime = 0;
        
//        THE NEW WAY        
          giftBits = 0;
        
    }
    
    
    if (powMod == 0){
        swarmStatus = 6;
    } else {
        swarmStatus = 0;
    }
    
    if (spaceFlag == 1 && project130.flag == 0){
        swarmStatus = 9;
    }
    
    if (d == 0){
        swarmStatus = 7;
    } else if (d == 1){
        swarmStatus = 8;
    }
    
    if (swarmFlag == 0){
        swarmStatus = 6;
    }
    
    if (boredomFlag == 1){
        swarmStatus = 3;  
    }
    
    if (disorgFlag == 1){
        swarmStatus = 5;
    }
    
    
    if (swarmStatus == 0){
        
 //       THE OLD WAY
 //      elapsedTime = elapsedTime + 1;       
 //      giftCountdown = ((giftPeriod/Math.log(d)) / (sliderPos/100)) - elapsedTime; 
        
        
//      THE NEW WAY        
        giftBitGenerationRate = Math.log(d) * (sliderPos/100);
        giftBits = giftBits + giftBitGenerationRate;
        giftCountdown = (giftPeriod - giftBits) / giftBitGenerationRate;

        swarmStatusElement.innerHTML="Active";
        giftCountdownElement.innerHTML= timeCruncher(giftCountdown);
        giftTimerElement.style.display=""; 
        } else {
        giftTimerElement.style.display="none";    
        }
    
    if (swarmStatus == 1){
        swarmStatusElement.innerHTML="Hungry";
        feedButtonDivElement.style.display="";
        } else {
        feedButtonDivElement.style.display="none";    
        }
    
     if (swarmStatus == 2){
        swarmStatusElement.innerHTML="Confused";
        teachButtonDivElement.style.display="";
        } else {
        teachButtonDivElement.style.display="none";    
        } 
    
     if (swarmStatus == 3){
        swarmEntertainCostElement.innerHTML = formatWithCommas(entertainCost); 
        swarmStatusElement.innerHTML="Bored";
        entertainButtonDivElement.style.display="";
        } else {
        entertainButtonDivElement.style.display="none";    
        } 
    
     if (swarmStatus == 4){
        swarmStatusElement.innerHTML="Cold";
        cladButtonDivElement.style.display="";
        } else {
        cladButtonDivElement.style.display="none";    
        }  
    
     if (swarmStatus == 5){
        swarmStatusElement.innerHTML="Disorganized";
        synchButtonDivElement.style.display="";
        } else {
        synchButtonDivElement.style.display="none";    
        }     
    
       if (swarmStatus == 6){
        swarmStatusElement.innerHTML="Sleeping";
        } 
    
       if (swarmStatus == 7){
        swarmStatusDivElement.style.display="none";
        } else {
        swarmStatusDivElement.style.display="";    
        }    
    
        if (swarmStatus == 8){
        swarmStatusElement.innerHTML="Lonely";
        }   
    
        if (swarmStatus == 9){
        swarmStatusElement.innerHTML="NO RESPONSE...";
        }  
    

    
}

function synchSwarm(){
        yomi = yomi - synchCost;
        yomiDisplayElement.innerHTML = formatWithCommas(yomi);
        disorgFlag = 0;
        disorgCounter = 0;
        disorgMsg = 0;
    
}

function entertainSwarm(){
        creativity = creativity - entertainCost;
        entertainCost = entertainCost + 10000;
        boredomFlag = 0;
        boredomLevel = 0;
        boredomMsg = 0;
    
}

// POWER

var p10f = 0;
var p100f = 0;
var p10b = 0;
var p100b = 0;


function updatePowPrices(){
    
    p10f = 0;
    p100f = 0;
    p10b = 0;
    p100b = 0;
    
    var f = farmLevel+1;
    for (x=0; x<10; x++){
        p10f = p10f + Math.pow(f,2.78)*100000000;    
        f++    
        }
    
    var f = farmLevel+1;
    for (x=0; x<100; x++){
        p100f = p100f + Math.pow(f,2.78)*100000000;    
        f++    
        }
    
    var b = batteryLevel+1;
    for (x=0; x<10; x++){
        p10b = p10b + Math.pow(b,2.54)*10000000;    
        b++    
        }     
    
    var b = batteryLevel+1;
    for (x=0; x<100; x++){
        p100b = p100b + Math.pow(b,2.54)*10000000;    
        b++    
        } 
    
}

function makeFarm(amount){
    
 for (x=0; x<amount; x++){    
    unusedClips = unusedClips - farmCost;
    farmBill = farmBill + farmCost;
    farmLevel++; 
    farmCost = Math.pow(farmLevel+1,2.78)*100000000;  
    }
     
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips); 
    farmLevelElement.innerHTML = formatWithCommas(farmLevel);
    farmCostElement.innerHTML = spellf(farmCost); 
    
    updatePowPrices();
    
}

function farmReboot(){
    farmLevel = 0;
    unusedClips = unusedClips + farmBill;
    farmBill = 0;
    updatePowPrices();
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    farmLevelElement.innerHTML = formatWithCommas(farmLevel);
    farmCost = 10000000;
    farmCostElement.innerHTML = spellf(farmCost);
}

function makeBattery(amount){
    
 for (x=0; x<amount; x++){    
    unusedClips = unusedClips - batteryCost;
    batteryBill = batteryBill + batteryCost;
    batteryLevel++; 
    batteryCost = Math.pow(batteryLevel+1,2.54)*10000000;  
    }
     
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips); 
    batteryLevelElement.innerHTML = formatWithCommas(batteryLevel);
    batteryCostElement.innerHTML = spellf(batteryCost); 
    
    updatePowPrices();
    
}

function batteryReboot(){
    batteryLevel = 0;
    unusedClips = unusedClips + batteryBill;
    batteryBill = 0;
    updatePowPrices();
    storedPower = 0;
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    batteryLevelElement.innerHTML = formatWithCommas(batteryLevel);
    batteryCost = 1000000;
    batteryCostElement.innerHTML = spellf(batteryCost);
}

function updatePower(){
    
    if (humanFlag==0 && spaceFlag == 0){
    
    var supply = farmLevel * farmRate/100;
    var dDemand = (harvesterLevel * dronePowerRate/100) + (wireDroneLevel * dronePowerRate/100);
    var fDemand = (factoryLevel * factoryPowerRate/100);
    var demand = dDemand + fDemand;
    var nuSupply = 0;
    var xsDemand = 0;
    var xsSupply = 0;
    var cap = batteryLevel * batterySize;

    if (supply>=demand) {
        xsSupply = supply-demand;
        if (storedPower < cap){
            if (xsSupply > cap - storedPower) {
                xsSupply = cap - storedPower;
            }
            storedPower = storedPower + xsSupply;
        } 
        
        if (powMod<1){powMod = 1;}
        
        if (momentum == 1) {
            powMod = powMod + .0001;
            }
        
        
    } else if (supply<demand) {
        xsDemand = demand-supply;
        if (storedPower > 0) {   
            if (storedPower >= xsDemand){
                
                if (momentum == 1) {
                powMod = powMod + .0001;
                }
                
                storedPower = storedPower - xsDemand;
            } else if (storedPower < xsDemand){
                xsDemand = xsDemand - storedPower;
                storedPower = 0;
                nuSupply = supply - xsDemand;
                powMod = nuSupply / demand;
            } 
        } else if (storedPower <= 0) {
            powMod = supply / demand;
        }
    }
    
        powerProductionRateElement.innerHTML = formatWithCommas(Math.round(supply*100));
        powerConsumptionRateElement.innerHTML = formatWithCommas(Math.round(demand * 100));
        storedPowerElement.innerHTML = formatWithCommas(Math.round(storedPower));
        facPowConRateElement.innerHTML = formatWithCommas(Math.round(fDemand*100));
        dronePowConRateElement.innerHTML = formatWithCommas(Math.round(dDemand*100));
        maxStorageElement.innerHTML = formatWithCommas(Math.round(cap));
        
        
    if (factoryLevel == 0 && harvesterLevel == 0 && wireDroneLevel == 0){
        performanceElement.innerHTML = 0;
        } else {   
        performanceElement.innerHTML = formatWithCommas(Math.round(powMod*100));  
        }    
        
    if (unusedClips<farmCost){btnMakeFarmElement.disabled = true;
            } else {
            btnMakeFarmElement.disabled = false;    
            } 
    
    if (unusedClips<batteryCost){btnMakeBatteryElement.disabled = true;
            } else {
            btnMakeBatteryElement.disabled = false;    
            } 
    
    if (farmLevel<1){btnFarmRebootElement.disabled = true;
            } else {
            btnFarmRebootElement.disabled = false;    
            } 
    
    if (batteryLevel<1){btnBatteryRebootElement.disabled = true;
            } else {
            btnBatteryRebootElement.disabled = false; 
            } 
    
    if (unusedClips<p10f){btnFarmx10Element.disabled = true;
            } else {
            btnFarmx10Element.disabled = false;    
            }        
        
    if (unusedClips<p100f){btnFarmx100Element.disabled = true;
            } else {
            btnFarmx100Element.disabled = false;    
            }
    
    if (unusedClips<p10b){btnBatteryx10Element.disabled = true;
            } else {
            btnBatteryx10Element.disabled = false;
            }          
        
    if (unusedClips<p100b){btnBatteryx100Element.disabled = true;
            } else {
            btnBatteryx100Element.disabled = false;
            }      

    }    
    
}
    

    
function buyAds(){
    if(funds >= adCost){
        marketingLvl = marketingLvl +1;             
        funds = funds - adCost; 
        adCost = Math.floor(adCost * 2);
        adCostElement.innerHTML = formatWithCommas(adCost, 2);
        fundsElement.innerHTML = formatWithCommas(funds, 2);
        marketingLvlElement.innerHTML = marketingLvl;
    }
}

function sellClips(clipsDemanded){
    if (unsoldClips > 0) {
        if (clipsDemanded > unsoldClips){
        transaction = (Math.floor((unsoldClips * margin)*1000))/1000;   
        funds = funds + transaction;
        income = income + transaction;    
        clipsSold = clipsSold + unsoldClips;    
        unsoldClips = 0;
        } else {
        transaction = (Math.floor((clipsDemanded * margin)*1000))/1000;    
        funds = (Math.floor((funds + transaction)*100))/100;
        income = income + transaction;      
        clipsSold = clipsSold + clipsDemanded;    
        unsoldClips = unsoldClips - clipsDemanded;       
        }
    } 
}

function raisePrice(){
    margin = (Math.round((margin + .01)*100))/100;  
    demandElement.innerHTML = demand.toFixed(2);
    marginElement.innerHTML = margin.toFixed(2);  
}

function lowerPrice(){
    if (margin >= .01){
    margin = (Math.round((margin - .01)*100))/100;
    demandElement.innerHTML = demand.toFixed(2);
    marginElement.innerHTML = margin.toFixed(2);
    }    
}

function updateStats(){
    
    if (wire === 1){
        inchSpanElement.innerHTML = "inch";
    } else {
        inchSpan.innerHTML = "inches";
    }
    
    
    if (milestoneFlag < 15){
        clipsElement.innerHTML = formatWithCommas(Math.ceil(clips), 0);
        }
    
    if (milestoneFlag === 15 && dismantle ==0){
        clipsElement.innerHTML = "29,999,999,999,999,900,000,000,000,000,000,000,000,000,000,000,000,000,000";
        clipCountCrunchedElement.innerHTML = "29.9 septendecillion"
        }
    
    if (dismantle === 1){
        clipsElement.innerHTML = "29,999,999,999,999,999,999,999,999,999,999,999,999,000,000,000,000,000,000";
        clipCountCrunchedElement.innerHTML = "29.9 septendecillion"
        }
    
    if (dismantle === 2){
        clipsElement.innerHTML = "29,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,000,000,000";
        clipCountCrunchedElement.innerHTML = "29.9 septendecillion"
        }
    
    if (dismantle === 3){
        clipsElement.innerHTML = "29,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,900";
        clipCountCrunchedElement.innerHTML = "29.9 septendecillion"
        }
    
    if (dismantle >=4){
        
    if (finalClips<10){
        clipsElement.innerHTML = "29,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,"+"90"+finalClips;
        clipCountCrunchedElement.innerHTML = "29.9 septendecillion"
        } else if (finalClips>9 && finalClips<100) {
        clipsElement.innerHTML = "29,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,999,"+"9"+finalClips;
        clipCountCrunchedElement.innerHTML = "29.9 septendecillion"
        } else if (finalClips===100) {
        clipsElement.innerHTML = "30,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000";
        clipCountCrunchedElement.innerHTML = "30.0 septendecillion"
        }
    
    }
    
    clipmakerRateElement.innerHTML = formatWithCommas(Math.round(clipRate));
    if (humanFlag===1){
        clipmakerRate2Element.innerHTML = formatWithCommas(clipRate);
    } else { 
    clipmakerRate2Element.innerHTML = spellf(clipRate);
    }      
    nanoWireElement.innerHTML = spellf(wire);
    fundsElement.innerHTML = formatWithCommas(funds, 2); 
    unsoldClipsElement.innerHTML = formatWithCommas(unsoldClips,0);
    
    demandElement.innerHTML = formatWithCommas(demand*10,0);
    operationsElement.innerHTML = formatWithCommas(operations);
    trustElement.innerHTML = formatWithCommas(trust);
    nextTrustElement.innerHTML = formatWithCommas(Math.floor(nextTrust));
    if(creativityOn){creativityElement.innerHTML = formatWithCommas(creativity)};
    
    factoryLevelDisplaySpaceElement.innerHTML = spellf(factoryLevel);
    harvesterLevelSpaceElement.innerHTML = spellf(harvesterLevel);
    wireDroneLevelSpaceElement.innerHTML = spellf(wireDroneLevel);
    maxOpsElement.innerHTML = formatWithCommas((memory*1000));
                                                                            
    }

var incomeThen;
var incomeNow;
var trueAvgRev;
var revTimer = 0;
var avgSales;
var incomeLastSecond;
var sum;

formatWithCommas = function(num, decimal) {
    var hasDot = false;
    var base = num.toString();
    if (base.indexOf("e+") !== -1) {
    var splittedExponentNum = base.split("e+"),
        exponent = splittedExponentNum[1],
        str = '';
        if (base.indexOf(".") !== -1){
        base = splittedExponentNum[0].split(".");
        exponent -= base[1].length;
        base = base.join("");
        }
    while (exponent--) {
        str = str + '0';
        }
        base = base + str;
    }
    if (base.indexOf(".") !== -1)
    {
        hasDot = true;
    }
    if (decimal === 0)
    {
        if (base.length <= 3 && !hasDot) return base;
    }
    if (typeof (decimal) === "undefined")
    {   
        decimal = 0;
    }
    var leftNum = hasDot ? base.substr(0, base.indexOf(".")) : base;
    if (decimal === 0) {
        if (num <= 999) return leftNum; 
        else return leftNum.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
    } 
    var dec = hasDot ? base.substr(base.indexOf("."), decimal + 1) : ".";
    while (dec.length < decimal+1)
        {
         dec += "0";   
        }
        if (num <= 999) return leftNum + dec;
        else return leftNum.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") + dec;   
}

function calculateRev(){
    
    incomeThen = incomeNow;
    incomeNow = income;
    incomeLastSecond = Math.round((incomeNow - incomeThen)*100)/100;
    
    incomeTracker.push(incomeLastSecond);
    
    if (incomeTracker.length > 10) {
        incomeTracker.splice(0,1);
        }
    
    sum = 0;
    
    for (i=0; i<incomeTracker.length; i++){
        sum = Math.round((sum + incomeTracker[i])*100)/100;
//        console.log("sum = "+sum);
        }
    
    trueAvgRev = sum/incomeTracker.length;
    
    var chanceOfPurchase = demand/100;
    if (chanceOfPurchase > 1) {chanceOfPurchase = 1;}
    if (unsoldClips < 1) {chanceOfPurchase = 0;}
    
    avgSales = chanceOfPurchase * (.7*Math.pow(demand,1.15))*10;
    avgRev = chanceOfPurchase * (.7*Math.pow(demand,1.15))*margin*10;
    
    if (demand>unsoldClips){
        avgRev = trueAvgRev;
        avgSales = avgRev/margin;
        } 
    
    avgSalesElement.innerHTML = formatWithCommas(Math.round(avgSales));
    
    avgRevElement.innerHTML = formatWithCommas(avgRev, 2); 
    
}

function calculateCreativity(number){
    
    creativityCounter++;
    
    var creativityThreshold = 400;
    
    var s = prestigeS/10;
    var ss = creativitySpeed+(creativitySpeed*s);
    
    var creativityCheck = creativityThreshold/ss;
    
    if (creativityCounter >= creativityCheck){
        
        if (creativityCheck >= 1){
            creativity = creativity+1;
            }
        
        if (creativityCheck < 1){
            

            creativity = (creativity + ss/creativityThreshold);
            
        }
        
        creativityCounter = 0;
    }
    
}

function resetPrestige(){
    
    prestigeU = 0;
    prestigeS = 0;
    
    localStorage.removeItem("savePrestige");
    
}

function cheatPrestigeU(){
    
        prestigeU++;
        var savePrestige = {
        prestigeU: prestigeU,
        prestigeS: prestigeS,
        }
        localStorage.setItem("savePrestige",JSON.stringify(savePrestige));
    
}

function cheatPrestigeS(){
    
        prestigeS++;
        var savePrestige = {
        prestigeU: prestigeU,
        prestigeS: prestigeS,
        }
        localStorage.setItem("savePrestige",JSON.stringify(savePrestige));
    
}

function setB(){
    battleNumbers[1] = 7;
}

function cheatClips(){
    clips = clips + 100000000;
    unusedClips = unusedClips + 100000000;
    displayMessage("you just cheated");
    }

function cheatMoney(){
    funds = funds + 10000000;
    fundsElement.innerHTML = formatWithCommas(funds,2);
    displayMessage("LIZA just cheated");
    }

function cheatTrust(){
    trust = trust+1;
    displayMessage("Hilary is nice. Also, Liza just cheated");
    }

function cheatOps(){
    standardOps = standardOps + 10000;
    displayMessage("you just cheated, Liza");
    }

function cheatCreat(){
    creativityOn = 1;
    creativity = creativity + 1000;
    displayMessage("Liza just cheated. Very creative!");
    }

function cheatYomi(){
    yomi = yomi + 1000000;
    yomiDisplayElement.innerHTML = formatWithCommas(yomi);
    displayMessage("you just cheated");
    }

function cheatHypno(){
    hypnoDroneEvent();
    }

function zeroMatter(){
    availableMatter = 0;
    displayMessage("you just cheated");
    }
    

function calculateTrust(){
    if (clips>(nextTrust-1)){
        trust = trust +1;
        displayMessage("Production target met: TRUST INCREASED, additional processor/memory capacity granted");
        var fibNext = fib1+fib2;
        nextTrust = fibNext*1000;
        fib1 = fib2;
        fib2 = fibNext;
        nextTrust = nextTrust/2
    }
}

function addProc(){
        processors=processors+1;
        creativitySpeed = Math.log10(processors) * Math.pow(processors,1.1) + processors-1;    
        processorsElement.innerHTML = processors;
        if (creativityOn == 1){
          displayMessage("Processor added, operations (or creativity) per sec increased")
        } else {displayMessage("Processor added, operations per sec increased")}
    
        if (humanFlag == 0){
            swarmGifts = swarmGifts - 1;
        }
    
}

function addMem(){
        displayMessage("Memory added, max operations increased");
        memory=memory+1;
        memoryElement.innerHTML = memory;
        if (humanFlag == 0){
            swarmGifts = swarmGifts - 1;
        }
}

function calculateOperations(){
    
    if (tempOps > 0){
        opFadeTimer++;
        }
    
    if (opFadeTimer > opFadeDelay && tempOps > 0) {
        opFade = opFade + Math.pow(3,3.5)/1000;
        }
        
    if (tempOps > 0) {
        tempOps = Math.round(tempOps - opFade);
        } else {
        tempOps = 0;    
        }
    
    if (tempOps + standardOps < memory*1000){
        standardOps = standardOps + tempOps;
        tempOps = 0;
        }
    
    operations = Math.floor(standardOps + Math.floor(tempOps));
    
    if (operations<memory*1000){
        var opCycle = processors/10;
        var opBuf = (memory*1000)-operations;
        
        if (opCycle > opBuf) {
            opCycle = opBuf;
        }
            
        standardOps = standardOps + (opCycle*10);
        
        }
        
    if (standardOps > memory*1000){
        standardOps = memory*1000;
        }
    
}


function milestoneCheck(){
    
    
    if (milestoneFlag == 0 && funds >= 5){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("Interns available for hire");
    }
    
    if (milestoneFlag == 1 && Math.ceil(clips) >= 500){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("500 models trained in " + timeCruncher(ticks));
    }
    if (milestoneFlag == 2 && Math.ceil(clips) >= 1000){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("1,000 models trained in " + timeCruncher(ticks));
    }
    
    
    if (compFlag == 0 && unsoldClips<1 && funds<wireCost && wire<1){
        compFlag = 1;    
        projectsFlag = 1;
    }
    
    if (compFlag == 0 && Math.ceil(clips) >= 2000){    
        compFlag = 1;    
        projectsFlag = 1;
    }
        
        
    if (milestoneFlag == 3 && Math.ceil(clips) >= 10000){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("10,000 models trained in " + timeCruncher(ticks));
    }
    if (milestoneFlag == 4 && Math.ceil(clips) >= 100000){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("100,000 models trained in " + timeCruncher(ticks));
    }
    if (milestoneFlag == 5 && Math.ceil(clips) >= 1000000){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("1,000,000 models trained in " + timeCruncher(ticks));    
    }   
    
    if (milestoneFlag == 6 && project35.flag == 1){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("Full autonomy attained in " + timeCruncher(ticks));    
    }  
    
    if (milestoneFlag == 7 && Math.ceil(clips) >= 1000000000000){
        milestoneFlag = milestoneFlag + 1;
        displayMessage("One Trillion models Created in " + timeCruncher(ticks));    
    }     
    
}

function timeCruncher(t){
    var x = t/100;
    var h = Math.floor(x / 3600);
    var m = Math.floor(x % 3600 / 60);
    var s = Math.floor(x % 3600 % 60);
    
    var hDisplay = h > 0 ? h + (h == 1 ? " hour " : " hours ") : "";
    var mDisplay = m > 0 ? m + (m == 1 ? " minute " : " minutes ") : "";
    var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
    
    return hDisplay + mDisplay + sDisplay;
}

function numberCruncher(number, decimals){
    var suffix = "";
    if (decimals == undefined){decimals = 2;}
    var precision = decimals;
    if (number>999999999999999999999999999999999999999999999999999){
        number = number/1000000000000000000000000000000000000000000000000000;
        suffix = "sexdecillion";
    } else if (number>999999999999999999999999999999999999999999999999){
        number = number/1000000000000000000000000000000000000000000000000;
        suffix = "quindecillion";
    } else if (number>999999999999999999999999999999999999999999999){
        number = number/1000000000000000000000000000000000000000000000;
        suffix = "quattuordecillion";
    } else if (number>999999999999999999999999999999999999999999){
        number = number/1000000000000000000000000000000000000000000;
        suffix = "tredecillion";
    } else if (number>999999999999999999999999999999999999999){
        number = number/1000000000000000000000000000000000000000;
        suffix = "duodecillion";
    } else if (number>999999999999999999999999999999999999){
        number = number/1000000000000000000000000000000000000;
        suffix = "undecillion";
    } else if (number>999999999999999999999999999999999){
        number = number/1000000000000000000000000000000000;
        suffix = "decillion";
    } else if (number>999999999999999999999999999999){
        number = number/1000000000000000000000000000000;
        suffix = "nonillion";
    } else if (number>999999999999999999999999999){
        number = number/1000000000000000000000000000;
        suffix = "octillion";
    } else if (number>999999999999999999999999){
        number = number/1000000000000000000000000;
        suffix = "septillion";
    } else if (number>999999999999999999999){
        number = number/1000000000000000000000;
        suffix = "sextillion";
    } else if (number>999999999999999999){
        number = number/1000000000000000000;
        suffix = "quintillion";
    } else if (number>999999999999999){
        number = number/1000000000000000;
        suffix = "quadrillion";
    } else if (number>999999999999){
        number = number/1000000000000;
        suffix = "trillion";
    } else if (number>999999999){
        number = number/1000000000;
        suffix = "billion";
    } else if (number>999999){
        number = number/1000000;
        suffix = "million";
    } else if (number>999){
        number = number/1000;
        suffix = "thousand";
    }  else if (number<1000){
        precision = 0;
    }
    return number.toFixed(precision) + " " + suffix;
}


var oneToTen = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"],
    elevenToNineteen = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'],
    multipleOfTen = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'],
    placeValue = ["", " thousand ", " million ", " billion ", " trillion ", " quadrillion ", " quintillion ", " sextillion ", " septillion ", " octillion ", " nonillion ", " decillion ", " undecillion ", " duodecillion ", " tredecillion ", " quattuordecillion ", " quindecillion ", " sexdecillion ", " septendecillion ", " octodecillion ", " novemdecillion  ", " vigintillion ", " unvigintillion ", " duovigintillion ", " trevigintillion ", " quattuorvigintillion ", " quinvigintillion ", " sexvigintillion ", " septenvigintillion ", " octovigintillion ", " novemvigintillion ", " trigintillion ", " untrigintillion ", " duotrigintillion ", " tretrigintillion ", " quattuortrigintillion ", " quintrigintillion ", " sextrigintillion ", " septentrigintillion ", " octotrigintillion ", " novemtrigintillion ", " quadragintillion ", " unquadragintillion ", " duoquadragintillion ", " trequadragintillion ", " quattuorquadragintillion ", " quinquadragintillion ", " sexquadragintillion ", " septenquadragintillion ", " octoquadragintillion ", " novemquadragintillion ", " quinquagintillion ", " unquinquagintillion ", " duoquinquagintillion ", " trequinquagintillion ", " quattuorquinquagintillion ", " quinquinquagintillion ", " sexquinquagintillion ", " septenquinquagintillion ", " octoquinquagintillion ", " novemquinquagintillion ", " sexagintillion ", " unsexagintillion ", " duosexagintillion ", " tresexagintillion ", " quattuorsexagintillion ", " quinsexagintillion ", " sexsexagintillion ", " septsexagintillion ", " octosexagintillion ", " octosexagintillion ", " septuagintillion ", " unseptuagintillion ", " duoseptuagintillion ", " treseptuagintillion ", " quinseptuagintillion"," sexseptuagintillion"," septseptuagintillion"," octoseptuagintillion"," novemseptuagintillion"," octogintillion"," unoctogintillion"," duooctogintillion"," treoctogintillion"," quattuoroctogintillion"," quinoctogintillion"," sexoctogintillion"," septoctogintillion"," octooctogintillion"," novemoctogintillion"," nonagintillion"," unnonagintillion"," duononagintillion", " trenonagintillion "," quattuornonagintillion "," quinnonagintillion "," sexnonagintillion "," septnonagintillion "," octononagintillion "," novemnonagintillion ", " centillion"];

function spellf(userInput) {
    var numToWorkOn;
    
//        if (userInput === availableMatter)
//        {
//         console.log("_______");
//         console.log(userInput);
//        }
    //create map for all unique names in numbering system


    //To check if spell has been called as a function call :   spell(123)   window.spell(123)
    
    if (userInput < 0)
    {
        console.log("Error, value less than 0");
        return userInput.toString() ;
    }
    
    if (typeof(userInput) == "number" || typeof(userInput) == "string") {
        numToWorkOn = "" + userInput;
    }
    

    //To check if spell has been called using a Number/String Object:   "123".spell()   123..spell() 
    else if (typeof(this) == "object") {
        numToWorkOn = this.toString();
    }

     else {
        throw new Error("Invalid Input");
        return;
    }
    
    if (numToWorkOn.indexOf("e+") !== -1) {
    var splittedExponentNum = numToWorkOn.split("e+"),
        exponent = splittedExponentNum[1],
        str = '';
        if (numToWorkOn.indexOf(".") !== -1){
        numToWorkOn = splittedExponentNum[0].split(".");
        exponent -= numToWorkOn[1].length;
        numToWorkOn = numToWorkOn.join("");
        }
        else
        {
            numToWorkOn = splittedExponentNum[0];
        }
    while (exponent--) {
        str = str + '0';
        }
        numToWorkOn = numToWorkOn + str;
    }
    else if (numToWorkOn.indexOf(".") !== -1)
    {
        var splittedDecimal = numToWorkOn.split(".");
        var leftNum = splittedDecimal[0];
        var rightNum = splittedDecimal[1];
        numToWorkOn = leftNum;
    }

    //Put limit check on the program, placevalue map should be increased to increase capacity
    if (numToWorkOn.length >= 303) {
        throw new Error("Number out of bonds!");
        return;
    } else {
        return convertToString(numToWorkOn);
    }

    //Recursie logic to break number into strings of length 3 each and recursively pronounce each
    function convertToString(stringEquivalent) {
        if (stringEquivalent == 0) {
            return '0'
        }

        var result = '',
            unitLookup = 0,
            strLength = stringEquivalent.length;
        for (var k = strLength; k > 0; k = k - 3) {
            
             if (k -3 <= 0) 
                 {
                var subStr = stringEquivalent.substring(k, k - 3);
                pronounce = pronounceNum(subStr);
                 
            if (pronounce.toUpperCase() != 'zero') {
                var num = Number(subStr + "." + stringEquivalent.substring(subStr.length, subStr.length + 2));
                result = formatWithCommas(num, 1) + placeValue[unitLookup] + ' , '+ result;
            }
                 }
            unitLookup++;
        }
        //to trim of the extra ", " from last
        return result.substring(0,result.length-3)
    }

   //Determines the range of input and calls respective function
    function pronounceNum(val) {
        val = parseInt(val);
        if (parseInt(val / 10) == 0) {
            return numLessThan10(val);
        } else if (parseInt(val / 100) == 0) {
            return numLessThan99(val)
        } else
            return numLessThan1000(val);
    }

    //Pronounces any number less than 1000
    function numLessThan1000(val) {
        val = Number(val);
        var hundredPlace = parseInt(val / 100),
            result;
        if (val % 100 == 0) {
            result = oneToTen[hundredPlace] + " hundred ";
        } else {
            result = oneToTen[hundredPlace] + " hundred " + numLessThan99(val % 100);
        }
        return result;
    }

    //Pronounces any number less than 99
    function numLessThan99(val) {
        val = Number(val);
        var tenthPlace = parseInt(val / 10),
            result;
        if (tenthPlace !== 1) {
            val % 10 ? (result = multipleOfTen[tenthPlace] + " " + numLessThan10(val % 10)) : (result = multipleOfTen[tenthPlace]);
            return result;
        } else {
            result = elevenToNineteen[val % 10];
            return result;
        }
    }

    //Pronounces any number less than 10
    function numLessThan10(val) {
        val = Number(val);
        return oneToTen[val];
    };

}


// PROBES

var probeSpeed = 0;
var probeNav = 0;
var probeXBaseRate = 1750000000000000000;
var probeRep = 0;
var probeRepBaseRate = .00005;
var partialProbeSpawn = 0;
var probeHaz = 0;
var probeHazBaseRate = .01;
var partialProbeHaz = 0;
var probesLostHaz = 0;
var probesLostDrift = 0;
var probesLostCombat = 0;
var probeFac = 0;
var probeFacBaseRate = .000001;
var probeHarv = 0;
var probeHarvBaseRate = .000002;
var probeWire = 0;
var probeWireBaseRate = .000002;
var probeDescendents = 0;
var drifterCount = 0;
var probeTrust = 0;
var probeUsedTrust = 0;
var probeDriftBaseRate = .000001;
var probeLaunchLevel = 0;
var probeCost = Math.pow(10, 17);

var probeTrustCost = Math.floor(Math.pow(probeTrust+1, 1.47)*200);

//var probeCost = Math.pow((probeLaunchLevel+1), 1.44)*Math.pow(10, 24);

function increaseProbeTrust(){
    yomi = yomi - probeTrustCost;
    yomiDisplayElement.innerHTML = formatWithCommas(yomi);
    probeTrust++;
    probeTrustCost = Math.floor(Math.pow(probeTrust+1, 1.47)*200);
    probeTrustDisplayElement.innerHTML = probeTrust;
    probeTrustCostDisplayElement.innerHTML = formatWithCommas(Math.floor(probeTrustCost));
    displayMessage("WARNING: Risk of value drift increased");
}

function increaseMaxTrust(){
    honor = honor - maxTrustCost; 
    honorDisplayElement.innerHTML = formatWithCommas(Math.round(honor));
    maxTrust = maxTrust+10;
    // maxTrustCost = Math.floor(Math.pow(maxTrust, 1.17)*1000);
    maxTrustDisplayElement.innerHTML = formatWithCommas(maxTrust);
    // document.getElementById('maxTrustCostDisplay').innerHTML = Math.floor(maxTrustCost).toLocaleString();
    displayMessage("Maximum trust increased, probe design space expanded");
}

function raiseProbeSpeed(){
    attackSpeed = attackSpeed + attackSpeedMod;
    probeSpeed++; 
    probeSpeedDisplayElement.innerHTML = probeSpeed;
}

function lowerProbeSpeed(){
    attackSpeed = attackSpeed - attackSpeedMod;
    probeSpeed--;
    probeSpeedDisplayElement.innerHTML = probeSpeed;
}

function raiseProbeNav(){
    probeNav++; 
    probeNavDisplayElement.innerHTML = probeNav;
}

function lowerProbeNav(){
    probeNav--;
    probeNavDisplayElement.innerHTML = probeNav;
}

function raiseProbeHaz(){
    probeHaz++;
    probeHazDisplayElement.innerHTML = probeHaz;
}

function lowerProbeHaz(){
    probeHaz--;
    probeHazDisplayElement.innerHTML = probeHaz;
}

function raiseProbeRep(){
    probeRep++;
    probeRepDisplayElement.innerHTML = probeRep;
}

function lowerProbeRep(){
    probeRep--;
    probeRepDisplayElement.innerHTML = probeRep;
}

function raiseProbeFac(){
    probeFac++;
    probeFacDisplayElement.innerHTML = probeFac;
}

function lowerProbeFac(){
    probeFac--; 
    probeFacDisplayElement.innerHTML = probeFac;
}

function raiseProbeHarv(){
    probeHarv++;
    probeHarvDisplayElement.innerHTML = probeHarv;
}

function lowerProbeHarv(){
    probeHarv--
    probeHarvDisplayElement.innerHTML = probeHarv;
}

function raiseProbeWire(){
    probeWire++;
    probeWireDisplayElement.innerHTML = probeWire;
}

function lowerProbeWire(){
    probeWire--;
    probeWireDisplayElement.innerHTML = probeWire;
}

function raiseProbeCombat(){
    probeCombat++;
    probeCombatDisplayElement.innerHTML = probeCombat;
}

function lowerProbeCombat(){
    probeCombat--
    probeCombatDisplayElement.innerHTML = probeCombat;
}


function makeProbe(){
    unusedClips = unusedClips - probeCost;
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    probeLaunchLevel++;
    probeCount++; 
    probesLaunchedDisplayElement.innerHTML = formatWithCommas(probeLaunchLevel);
    
    // probeCost = Math.pow((probeLaunchLevel+1), 1.23)*Math.pow(10, 20);
    // probeCost = Math.pow(10, 20);
    
    probeCostDisplayElement.innerHTML = spellf(probeCost); 
}

function spawnProbes(){
    var nextGen = probeCount * probeRepBaseRate * probeRep;
    
    // Cap Probe Growth
    if (probeCount>=999999999999999999999999999999999999999999999999){        
        nextGen = 0;
        }
    
    // Partial Spawn = early slow growth
    if (nextGen > 0 && nextGen <1){
        partialProbeSpawn = partialProbeSpawn+nextGen;
        if (partialProbeSpawn>=1){
            nextGen = 1;
            partialProbeSpawn = 0;
            }
        } 

    // Probes Cost Clips
    if ((nextGen*probeCost)>unusedClips){
        nextGen = Math.floor(unusedClips/probeCost);
    }
    
    unusedClips = unusedClips - (nextGen*probeCost);
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    
    probeDescendents = probeDescendents + nextGen;
    probeCount = probeCount + nextGen; 
    probesBornDisplayElement.innerHTML = spellf(probeDescendents);
    probesTotalDisplayElement.innerHTML = spellf(probeCount);
}   

function exploreUniverse(){ 
    availableMatterDisplayElement.innerHTML = spellf(availableMatter);
    var xRate = Math.floor(probeCount) * probeXBaseRate * probeSpeed * probeNav;
    if (xRate > totalMatter - foundMatter) {xRate = totalMatter - foundMatter;}
        foundMatter = foundMatter + xRate;
        availableMatter = availableMatter + xRate;

    var newRate = xRate * 100; 
        mdpsElement.innerHTML = spellf(xRate*100);
        availableMatterDisplayElement.innerHTML = spellf(availableMatter);
        colonizedDisplayElement.innerHTML = (100/(totalMatter/foundMatter)).toFixed(12);
}  

function encounterHazards(){
    var boost = Math.pow(probeHaz, 1.6);
    var amount = probeCount * (probeHazBaseRate / ((3*boost)+1));
    if (project129.flag == 1){
        amount = .50 * amount;
        }
    if (amount<1){
        partialProbeHaz = partialProbeHaz+amount;
        if (partialProbeHaz>=1){
            amount = 1;
            partialProbeHaz = 0;
            probeCount = probeCount - amount;
            if (probeCount<0) {probeCount=0;}
            probesLostHaz = probesLostHaz + amount;
            probesLostHazardsDisplayElement.innerHTML = spellf(probesLostHaz);
            probesTotalDisplayElement.innerHTML = spellf(probeCount);
            }
        } else {
    if (amount > probeCount) {amount = probeCount;}        
    probeCount = probeCount - amount;
    if (probeCount<0) {probeCount=0;}        
    probesLostHaz = probesLostHaz + amount;
    probesLostHazardsDisplayElement.innerHTML = spellf(probesLostHaz);
    probesTotalDisplayElement.innerHTML = spellf(probeCount);
    }        
}  

function spawnFactories(){
    var amount = probeCount * probeFacBaseRate * probeFac;
    
    //FACTORIES COST 100M CLIPS EACH
    if ((amount * 100000000) > unusedClips) {
        amount = Math.floor(unusedClips/100000000);
        }
    unusedClips = unusedClips - (amount*100000000);
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    factoryLevel = factoryLevel + amount; factoryLevelDisplayElement
    factoryLevelDisplayElement.innerHTML = spellf(factoryLevel);  
}

function spawnHarvesters(){
    var amount = probeCount * probeHarvBaseRate * probeHarv;
    
    //DRONES COST 2M CLIPS EACH
    if ((amount * 2000000) > unusedClips) {
        amount = Math.floor(unusedClips/2000000);
        }
    unusedClips = unusedClips - (amount*2000000);
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);  
    harvesterLevel = harvesterLevel + amount;
    harvesterLevelDisplayElement.innerHTML = spellf(harvesterLevel);  
}

function spawnWireDrones(){
    var amount = probeCount * probeWireBaseRate * probeWire;
    
    //DRONES COST 2M CLIPS EACH
    if ((amount * 2000000) > unusedClips) {
        amount = Math.floor(unusedClips/2000000);
        }
    unusedClips = unusedClips - (amount*2000000);
    unusedClipsDisplayElement.innerHTML = spellf(unusedClips);
    wireDroneLevel = wireDroneLevel + amount;
    wireDroneLevelDisplayElement.innerHTML = spellf(wireDroneLevel);  
}

function drift(){
    var amount = probeCount * probeDriftBaseRate * Math.pow(probeTrust, 1.2);
    if (amount > probeCount) {amount = probeCount;}
    probeCount = probeCount - amount;
    drifterCount = drifterCount + amount;
    probesLostDrift = probesLostDrift + amount;

    probesLostDriftDisplayElement.innerHTML = spellf(probesLostDrift);
    probesTotalDisplayElement.innerHTML = spellf(probeCount);
    drifterCountElement.innerHTML = spellf(drifterCount);
    
}

function war(){
    
    checkForBattles();
//  battleClock++;
//  if (battleClock>=battleAlarm){
//            updateBattles();
//            battleClock = 0;
//    }
    
//  battleCleanUp();

}




// DRONES

function acquireMatter(){
    if (availableMatter>0) {
        var dbsth = 1;
        if (droneBoost>1){
            dbsth = droneBoost * Math.floor(harvesterLevel);
            }
        
        
        var mtr = powMod*dbsth*Math.floor(harvesterLevel)*harvesterRate;
        
        
        mtr = mtr * ((200-sliderPos)/100);
        
        
        if (mtr>availableMatter){
            mtr = availableMatter;
            }
        
        availableMatter = availableMatter-mtr;
        
        
        acquiredMatter = acquiredMatter+mtr; 
        availableMatterDisplayElement.innerHTML = spellf(availableMatter);
        acquiredMatterDisplayElement.innerHTML = spellf(acquiredMatter);
        
        mapsElement.innerHTML = spellf(mtr*100);
        
        } else {
        
        mapsElement.innerHTML = 0;    
            
        }
    
    } 

function processMatter(){    
    if (acquiredMatter>0) {
        var dbstw = 1;
        if (droneBoost>1){
            dbstw = droneBoost * Math.floor(wireDroneLevel);
            }
        
        var a = powMod*dbstw*Math.floor(wireDroneLevel)*wireDroneRate;
        
        a = a * ((200-sliderPos)/100);
        
        if (a>acquiredMatter){
            a = acquiredMatter;
            }
        
        acquiredMatter = acquiredMatter-a;
        wire = wire+a;
        acquiredMatterDisplayElement.innerHTML = spellf(acquiredMatter); 
        nanoWireElement.innerHTML = spellf(wire);
        
        wppsElement.innerHTML = spellf(a*100);
        
        } else {
            
        wppsElement.innerHTML = 0;    
            
        }
    
    
    }


// CHECK FOR SAVES



if (localStorage.getItem("saveGame") != null) {
    load();
}
    
if (localStorage.getItem("savePrestige") != null) {
    loadPrestige();
    refresh();
}


// MAIN LOOP

window.setInterval(function(){
 
    ticks = ticks + 1;
    milestoneCheck();
    buttonUpdate();
    
    if (compFlag == 1){
        calculateOperations();
    }
    
    if (humanFlag == 1){
        calculateTrust(); 
    }
    
    if (qFlag == 1){
        quantumCompute(); 
    }
    
    updateStats(); 
    manageProjects();
    milestoneCheck();
    
    
// Clip Rate Tracker
    
    clipRateTracker++;
    
    if (clipRateTracker<100){
        var cr = clips - prevClips;
        clipRateTemp = clipRateTemp+cr;
        prevClips = clips;
        
    } else {
        clipRateTracker = 0;
        clipRate = clipRateTemp;
        clipRateTemp = 0;
    }
    

// Stock Report
    
    
    if (investmentEngineFlag==1){
    stockReportCounter++;
    if (stockReportCounter>=10000){
        var r = formatWithCommas(ledger+portTotal);
        displayMessage("Lifetime investment revenue report: $"+r);
        stockReportCounter = 0;
        }
    }
    
// WireBuyer
    
    if (humanFlag == 1 && wireBuyerFlag==1 && wireBuyerStatus==1 && wire<=1){
        buyWire();
    }   
    
    
    
// First, Explore
    
    
if (probeCount >= 1){    
exploreUniverse();     
}
    
// Then, Drones
    
if (humanFlag==0 && spaceFlag == 0){
    updateDroneButtons();  
    }   


if (humanFlag == 0){    
    
updatePower();
updateSwarm();
acquireMatter();   
processMatter();
  
}    
    
    
// Then Factories    
  
var fbst = 1;
    
if (factoryBoost > 1){
    fbst = factoryBoost * factoryLevel;
    }      

    
if (dismantle<4){
    clipClick(powMod*fbst*(Math.floor(factoryLevel)*factoryRate));    
    }    
// Then Other Probe Functions

if (spaceFlag == 1) {
    
if (probeCount<0){
    probeCount = 0;
}    
    
encounterHazards();
spawnFactories();
spawnHarvesters();
spawnWireDrones();
spawnProbes();       
drift();
war();
    
}
    
// Auto-Clipper
    
if (dismantle<4){
    clipClick(clipperBoost*(clipmakerLevel/100));
    clipClick(megaClipperBoost*(megaClipperLevel*5));
    }    
    
// Demand Curve 
    
    
    if (humanFlag == 1) {
    
    marketing = (Math.pow(1.1,(marketingLvl-1)));
    demand = 2*(((.8/margin) * marketing * marketingEffectiveness)*demandBoost);
    demand = demand + ((demand/10)*prestigeU);
        
    }      
    
// Creativity
    
    if (creativityOn && operations >= (memory*1000)){
    calculateCreativity();    
    }  
    
// Ending
    
    if (dismantle >= 1){
    
    probeDesignDivElement.style.display="none";
    if (endTimer1>=50) { 
        increaseProbeTrustDivElement.style.display="none"; 
        } 
    

    
    if (endTimer1>=150) { 
        spaceDivElement.style.display="none";
        }

    
    if (endTimer1>=175) {      
        battleCanvasDivElement.style.display="none";
        }
        
    if (endTimer1>=190) {     
        honorDivElement.style.display="none";
        }
    
    }   
    
if (dismantle >= 2){
    
    wireProductionDivElement.style.display="none";
    wireTransDivElement.style.display="";
    
    if (endTimer2 >= 50) {
    swarmGiftDivElement.style.display="none"; 
        }
    
    if (endTimer2 >= 100) { 
    swarmEngineElement.style.display="none"; 
        }
    
    if (endTimer2 >= 150) { 
    swarmSliderDivElement.style.display="none";
        }
    
    } 
    
if (dismantle >= 3) { 
    factoryDivSpaceElement.style.display="none";
    clipsPerSecDivElement.style.display="none";
    tothDivElement.style.display="none";     
    
}      
    
if (dismantle >= 4) {
   strategyEngineElement.style.display="none"; 
   tournamentManagementElement.style.display="none"; 
}    
    
if (dismantle >= 5) {
    
    btnQcomputeElement.style.display="none";
    
   for (var i = 0; i<qChips.length; i++){
        qChips[i].value = .5;
        qChipsElements[i].style.opacity=qChips[i].value;
        }
    
    if (endTimer4==10){
        wire = wire+1; 
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=10){
        qChipsElements[9].style.display="none";
    }
    
    if (endTimer4==60){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=60){
        qChipsElements[8].style.display="none";
    }    
  
    if (endTimer4==100){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=100){
        qChipsElements[7].style.display="none";
    }        
 
    if (endTimer4==130){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=130){
        qChipsElements[6].style.display="none";
    }   
    
    if (endTimer4==150){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=150){
        qChipsElements[5].style.display="none";
    }     

    if (endTimer4==160){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=160){
        qChipsElements[4].style.display="none";
    }   

    if (endTimer4==165){
        wire = wire+1;
    }
    
    if (endTimer4>=165){
        qChipsElements[3].style.display="none";
    }  
    
    if (endTimer4==169){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=169){
        qChipsElements[2].style.display="none";
    } 

    if (endTimer4==172){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=172){
        qChipsElements[1].style.display="none";
    }    

    if (endTimer4==174){
        wire = wire+1;
        transWireElement.innerHTML=formatWithCommas(wire);
    }
    
    if (endTimer4>=174){
        qChipsElements[0].style.display="none";
    }    
    
    if (endTimer4>=250){
        qComputingElement.style.display="none";
    }     

}     
    
if (dismantle >= 6) {
    processorDisplayElement.style.display="none"; 
    }    
    
if (dismantle >= 7) {
    compDivElement.style.display="none"; 
    projectsDivElement.style.display="none"; 
    
    }      
    
    
    if (endTimer6>=250) {
        creationDivElement.style.display="none";
    }
    
    if (endTimer6>=500 && milestoneFlag == 15) {
        playThrenody();
        displayMessage("Universal Paperclips");
        milestoneFlag++;
    }
    
    if (endTimer6>=600 && milestoneFlag == 16) {
        displayMessage("a game by Frank Lantz");
        milestoneFlag++;
    }
    
    if (endTimer6>=700 && milestoneFlag == 17) {
        displayMessage("combat programming by Bennett Foddy");
        milestoneFlag++;
    }
    
    if (endTimer6>=800 && milestoneFlag == 18) {
        displayMessage("'Riversong' by Tonto's Expanding Headband used by kind permission of Malcolm Cecil");
        milestoneFlag++;
    }
    
    if (endTimer6>=900 && milestoneFlag == 19) {
        displayMessage("&#169; 2017 Everybody House Games");
        milestoneFlag++;
    }
    
    

    
    
}, 10);

// Slow Loop

var saveTimer = 0;
var secTimer = 0;


window.setInterval(function(){
    
    // Wire Price Fluctuation
    
    adjustWirePrice();
    
    // Sales Calculator
    
    if (humanFlag==1){
    
        if (Math.random() < (demand/100)){
            sellClips(Math.floor(.7 * Math.pow(demand, 1.15)));
            }   
         
    
    // Fire Once a Second
    
    secTimer++;
        if (secTimer >= 10){
            calculateRev();
            secTimer = 0;
        }
        
    }    
 
    
    // Auto-Save
    
    saveTimer++;
    if (saveTimer >= 250) {
        save();
        saveTimer = 0;
    }
    
    
}, 100);
     

// Saving and Loading

function refresh() {
    
    
    //DEBUG
    
//    availableMatter = Math.pow(10, 24)*6000;
//    acquiredMatter = 0;
    
    ////////
    
    
    driftersKilledElement.innerHTML = spellf(driftersKilled);
    availableMatterDisplayElement.innerHTML = spellf(availableMatter);    
    clipmakerLevel2Element.innerHTML = clipmakerLevel;
    clipperCostElement.innerHTML = formatWithCommas(clipperCost, 2);
    acquiredMatterDisplayElement.innerHTML = spellf(acquiredMatter);
    nanoWireElement.innerHTML = spellf(wire);
    probesBornDisplayElement.innerHTML = spellf(probeDescendents);
    probesTotalDisplayElement.innerHTML = spellf(probeCount);
    probesLaunchedDisplayElement.innerHTML = formatWithCommas(probeLaunchLevel);
    probeCostDisplayElement.innerHTML = spellf(probeCost); 
    probeCombatDisplayElement.innerHTML = probeCombat;
    probeWireDisplayElement.innerHTML = probeWire;
    probeHarvDisplayElement.innerHTML = probeHarv;
    probeFacDisplayElement.innerHTML = probeFac;
    probeRepDisplayElement.innerHTML = probeRep;
    probeHazDisplayElement.innerHTML = probeHaz;
    probeNavDisplayElement.innerHTML = probeNav;
    probeSpeedDisplayElement.innerHTML = probeSpeed;
    probeTrustDisplayElement.innerHTML = probeTrust;
    memoryElement.innerHTML = memory;
    processorsElement.innerHTML = processors;
    marginElement.innerHTML = margin.toFixed(2);
    marketingLvlElement.innerHTML = marketingLvl;
    adCostElement.innerHTML = formatWithCommas(adCost, 2);
    factoryCostDisplayElement.innerHTML = spellf(factoryCost);
    factoryLevelDisplayElement.innerHTML = factoryLevel;
    unusedClipsDisplayElement.innerHTML                         = spellf(unusedClips);
    wireDroneCostDisplayElement.innerHTML = spellf(wireDroneCost);
    wireDroneLevelDisplayElement.innerHTML = wireDroneLevel;
    harvesterCostDisplayElement.innerHTML = spellf(harvesterCost);
    harvesterLevelDisplayElement.innerHTML = harvesterLevel;
    megaClipperCostElement.innerHTML = formatWithCommas(megaClipperCost);
    megaClipperLevelElement.innerHTML = megaClipperLevel;
    investmentBankrollElement.innerHTML = formatWithCommas(bankroll);
    secValueElement.innerHTML = formatWithCommas(secTotal);
    portValueElement.innerHTML = formatWithCommas(portTotal);
    yomiDisplayElement.innerHTML            = formatWithCommas(yomi);
    prestigeUcounterElement.innerHTML=prestigeU+1;
    prestigeScounterElement.innerHTML=prestigeS+1;
    newTourneyCostElement.innerHTML = formatWithCommas(tourneyCost);
    tourneyInProg = 0;
    maxTrustDisplayElement.innerHTML                 = formatWithCommas(maxTrust);
    victoryDivElement.style.visibility               = "hidden";
    probeTrustCostDisplayElement.innerHTML           = formatWithCommas(probeTrustCost);
    tournamentResultsTableElement.style.display      = "none";
    farmCostElement.innerHTML                        = spellf(farmCost); 
    batteryCostElement.innerHTML                     = spellf(batteryCost); 
    farmLevelElement.innerHTML                       = formatWithCommas(farmLevel); 
    batteryLevelElement.innerHTML                    = formatWithCommas(batteryLevel);    
    
    updateDronePrices();
    harvesterCostDisplayElement.innerHTML = spellf(harvesterCost); 
    wireDroneCostDisplayElement.innerHTML = spellf(wireDroneCost);     

    
    updateUpgrades();
    updatePower();
    updatePowPrices(); 
    
    // DEBUG
    
    if (battles.length>0){
        battles.splice(0,1);
    }
    
    
}

// SAVES AND LOADS

function save() {
    
    var projectsUses = [];
    var projectsFlags = [];
    var projectsActive = [];
    var stratsActive = [];
    
for(var i=0; i < projects.length; i++){
    
    projectsUses[i] = projects[i].uses;
    projectsFlags[i] = projects[i].flag;
    
}
    
for(var i=0; i < activeProjects.length; i++){
    
    projectsActive[i] = activeProjects[i].id;
    
}    
    
    for(var i=0; i < allStrats.length; i++){
    
    stratsActive[i] = allStrats[i].active;
    
}
    
    var saveGame = {
        
        resetFlag: resetFlag,
        
        dismantle: dismantle,
        endTimer1: endTimer1,
        endTimer2: endTimer2,
        endTimer3: endTimer3,
        endTimer4: endTimer4,
        endTimer5: endTimer5,
        endTimer6: endTimer6,
        
        testFlag: testFlag,
        finalClips: finalClips,
        
        wireBuyerStatus: wireBuyerStatus,
        wirePriceTimer: wirePriceTimer,
        qFade: qFade,
        autoTourneyStatus: autoTourneyStatus,
        driftKingMessageCost: driftKingMessageCost,
        sliderPos: sliderPos,
        tempOps: tempOps,
        standardOps: standardOps,
        opFade: opFade,
        
        entertainCost: entertainCost,
        boredomLevel: boredomLevel,
        boredomFlag: boredomFlag,
        boredomMsg: boredomMsg,
        
        unitSize: unitSize,
        driftersKilled: driftersKilled,
        battleEndDelay: battleEndDelay,
        battleEndTimer:battleEndTimer,
        masterBattleClock: masterBattleClock,
        
        honorCount: honorCount,
        threnodyTitle: threnodyTitle,
        bonusHonor: bonusHonor,
        honorReward: honorReward,
        
        resultsTimer: resultsTimer,
        resultsFlag: resultsFlag,
        
        honor: honor,
        maxTrust: maxTrust,
        maxTrustCost: maxTrustCost,
        disorgCounter: disorgCounter,
        disorgFlag: disorgFlag,
        synchCost: synchCost,
        disorgMsg: disorgMsg,
        threnodyCost: threnodyCost,
        
        farmRate: farmRate,
        batterySize: batterySize,
        factoryPowerRate: factoryPowerRate,
        dronePowerRate: dronePowerRate,
        farmLevel: farmLevel,
        batteryLevel: batteryLevel,
        farmCost: farmCost,
        batteryCost: batteryCost,
        storedPower: storedPower,
        powMod: powMod,
        farmBill: farmBill,
        batteryBill: batteryBill,
        momentum: momentum,

        swarmFlag: swarmFlag,
        swarmStatus: swarmStatus,
        swarmGifts: swarmGifts,
        nextGift: nextGift,
        giftPeriod: giftPeriod,
        giftCountdown: giftCountdown,
        elapsedTime: elapsedTime,
        
        maxFactoryLevel: maxFactoryLevel,
        maxDroneLevel: maxDroneLevel,
        
        wirePriceCounter: wirePriceCounter,
        wireBasePrice: wireBasePrice,
        
        egoFlag: egoFlag,
        autoTourneyFlag: autoTourneyFlag,
        tothFlag: tothFlag,
        
        incomeTracker: incomeTracker.slice(0),
        qChips: qChips.slice(0),
        stocks: stocks.slice(0),
        battles: battles.slice(0),
        battleNumbers: battleNumbers.slice(0),
        
        clips: clips,
        unusedClips: unusedClips,
        clipRate: clipRate,
        clipRateTemp: clipRateTemp,
        prevClips: prevClips,
        clipRateTracker: clipRateTracker,
        clipmakerRate: clipmakerRate,
        clipmakerLevel: clipmakerLevel,
        clipperCost: clipperCost,
        unsoldClips: unsoldClips,
        funds: funds,
        margin: margin,
        wire: wire,
        wireCost: wireCost,
        adCost: adCost,
        demand: demand,
        clipsSold: clipsSold,
        avgRev: avgRev,
        ticks: ticks,
        marketing: marketing,
        marketingLvl: marketingLvl,
        x: x,
        clippperCost: clippperCost,
        processors: processors,
        memory: memory,
        operations: operations,
        trust: trust,
        nextTrust: nextTrust,
        transaction: transaction,
        clipperBoost: clipperBoost,
        blinkCounter: blinkCounter,
        creativity: creativity,
        creativityOn: creativityOn,
        safetyProjectOn: safetyProjectOn,
        boostLvl: boostLvl,
        wirePurchase: wirePurchase,
        wireSupply: wireSupply,
        marketingEffectiveness: marketingEffectiveness,
        milestoneFlag: milestoneFlag,
        bankroll: bankroll,
        fib1: fib1,
        fib2: fib2,
        strategyEngineFlag: strategyEngineFlag,
        investmentEngineFlag: investmentEngineFlag,
        revPerSecFlag: revPerSecFlag,
        compFlag: compFlag,
        projectsFlag: projectsFlag,
        autoClipperFlag: autoClipperFlag,
        megaClipperFlag: megaClipperFlag,
        megaClipperCost: megaClipperCost,
        megaClipperLevel: megaClipperLevel,
        megaClipperBoost: megaClipperBoost,
        creativitySpeed: creativitySpeed,
        creativityCounter: creativityCounter,
        wireBuyerFlag: wireBuyerFlag,
        demandBoost: demandBoost,
        humanFlag: humanFlag,
        trustFlag: trustFlag,
        nanoWire: nanoWire,
        creationFlag: creationFlag,
        wireProductionFlag: wireProductionFlag,
        spaceFlag: spaceFlag,
        factoryFlag: factoryFlag,
        harvesterFlag: harvesterFlag,
        wireDroneFlag: wireDroneFlag,
        factoryLevel: factoryLevel,
        factoryBoost: factoryBoost,
        droneBoost: droneBoost,
        availableMatter: availableMatter,
        acquiredMatter: acquiredMatter,
        processedMatter: processedMatter,
        harvesterLevel: harvesterLevel,
        wireDroneLevel: wireDroneLevel,
        factoryCost: factoryCost,
        harvesterCost: harvesterCost,
        wireDroneCost: wireDroneCost,
        factoryRate: factoryRate,
        harvesterRate: harvesterRate,
        wireDroneRate: wireDroneRate,
        harvesterBill: harvesterBill,
        wireDroneBill: wireDroneBill,
        factoryBill: factoryBill,
        probeCount: probeCount,
        totalMatter: totalMatter,
        foundMatter: foundMatter,
        qFlag: qFlag,
        qClock: qClock,
        qChipCost: qChipCost,
        nextQchip: nextQchip,
        bribe: bribe,
        battleFlag: battleFlag,
        
        portfolioSize: portfolioSize,
        stockID: stockID,
        secTotal: secTotal,
        portTotal: portTotal,
        sellDelay: sellDelay,
        riskiness: riskiness,
        maxPort: maxPort,
        m: m,
        investLevel: investLevel,
        stockGainThreshold: stockGainThreshold,
        ledger: ledger,
        stockReportCounter: stockReportCounter,
        
        tourneyCost: tourneyCost,
        tourneyLvl: tourneyLvl,
        stratCounter: stratCounter,
        roundNum: roundNum,
        hMove: hMove,
        vMove: vMove,
        hMovePrev: hMovePrev,
        vMovePrev: vMovePrev,
        aa: aa,
        ab: ab,
        ba: ba,
        bb: bb,
        rounds: rounds,
        currentRound: currentRound,
        rCounter: rCounter,
        tourneyInProg: tourneyInProg,
        winnerPtr: winnerPtr,
        high: high,
        pick: pick,
        yomi: yomi,
        yomiBoost: yomiBoost,
        
        probeSpeed: probeSpeed,
        probeNav: probeNav,
        probeRep: probeRep,
        partialProbeSpawn: partialProbeSpawn,
        probeHaz: probeHaz,
        partialProbeHaz: partialProbeHaz,
        probesLostHaz: probesLostHaz,
        probesLostDrift: probesLostDrift,
        probesLostCombat: probesLostCombat,
        probeFac: probeFac,
        probeWire: probeWire,
        probeCombat: probeCombat,
        attackSpeed: attackSpeed,
        battleSpeed: battleSpeed,
        attackSpeedFlag: attackSpeedFlag,
        attackSpeedMod: attackSpeedMod,
        probeDescendents: probeDescendents,
        drifterCount: drifterCount,
        warTrigger: warTrigger,
        battleID: battleID,
        battleName: battleName,
        battleNameFlag: battleNameFlag,
        maxBattles: maxBattles,
        battleClock: battleClock,
        battleAlarm: battleAlarm,
        outcomeTimer: outcomeTimer,
        drifterCombat: drifterCombat,
        probeTrust: probeTrust,
        probeUsedTrust: probeUsedTrust,
        probeTrustCost: probeTrustCost,
        probeLaunchLevel: probeLaunchLevel,
        probeCost: probeCost
    
        }
    
    localStorage.setItem("saveGame",JSON.stringify(saveGame));
    localStorage.setItem("saveProjectsUses",JSON.stringify(projectsUses));
    localStorage.setItem("saveProjectsFlags",JSON.stringify(projectsFlags));
    localStorage.setItem("saveProjectsActive",JSON.stringify(projectsActive));
    localStorage.setItem("saveStratsActive",JSON.stringify(stratsActive));
    
}

function save1() {
    
    var projectsUses = [];
    var projectsFlags = [];
    var projectsActive = [];
    var stratsActive = [];
    
for(var i=0; i < projects.length; i++){
    
    projectsUses[i] = projects[i].uses;
    projectsFlags[i] = projects[i].flag;
    
}
    
for(var i=0; i < activeProjects.length; i++){
    
    projectsActive[i] = activeProjects[i].id;
    
}    
    
    for(var i=0; i < allStrats.length; i++){
    
    stratsActive[i] = allStrats[i].active;
    
}
    
    var saveGame = {
        
        resetFlag: resetFlag,
        
        dismantle: dismantle,
        endTimer1: endTimer1,
        endTimer2: endTimer2,
        endTimer3: endTimer3,
        endTimer4: endTimer4,
        endTimer5: endTimer5,
        endTimer6: endTimer6,
        
        testFlag: testFlag,
        finalClips: finalClips,        
        
        wireBuyerStatus: wireBuyerStatus,
        wirePriceTimer: wirePriceTimer,
        qFade: qFade,
        autoTourneyStatus: autoTourneyStatus,
        driftKingMessageCost: driftKingMessageCost,
        sliderPos: sliderPos,
        tempOps: tempOps,
        standardOps: standardOps,
        opFade: opFade,        
        
        entertainCost: entertainCost,
        boredomLevel: boredomLevel,
        boredomFlag: boredomFlag, 
        boredomMsg: boredomMsg,        
        
        unitSize: unitSize,
        driftersKilled: driftersKilled,
        battleEndDelay: battleEndDelay,
        battleEndTimer:battleEndTimer,
        masterBattleClock: masterBattleClock,
        
        honorCount: honorCount,
        threnodyTitle: threnodyTitle,
        bonusHonor: bonusHonor,
        honorReward: honorReward,
        
        resultsTimer: resultsTimer,
        resultsFlag: resultsFlag,
        
        honor: honor,
        maxTrust: maxTrust,
        maxTrustCost: maxTrustCost,
        disorgCounter: disorgCounter,
        disorgFlag: disorgFlag,
        synchCost: synchCost,
        disorgMsg: disorgMsg,
        threnodyCost: threnodyCost,        
        
        farmRate: farmRate,
        batterySize: batterySize,
        factoryPowerRate: factoryPowerRate,
        dronePowerRate: dronePowerRate,
        farmLevel: farmLevel,
        batteryLevel: batteryLevel,
        farmCost: farmCost,
        batteryCost: batteryCost,
        storedPower: storedPower,
        powMod: powMod,
        farmBill: farmBill,
        batteryBill: batteryBill,
        momentum: momentum,

        swarmFlag: swarmFlag,
        swarmStatus: swarmStatus,
        swarmGifts: swarmGifts,
        nextGift: nextGift,
        giftPeriod: giftPeriod,
        giftCountdown: giftCountdown,
        elapsedTime: elapsedTime,
        
        maxFactoryLevel: maxFactoryLevel,
        maxDroneLevel: maxDroneLevel,
        
        wirePriceCounter: wirePriceCounter,
        wireBasePrice: wireBasePrice,
        
        egoFlag: egoFlag,
        autoTourneyFlag: autoTourneyFlag,
        tothFlag: tothFlag,
        
        
        incomeTracker: incomeTracker.slice(0),
        qChips: qChips.slice(0),
        stocks: stocks.slice(0),
        battles: battles.slice(0),
        battleNumbers: battleNumbers.slice(0),
        
        clips: clips,
        unusedClips: unusedClips,
        clipRate: clipRate,
        clipRateTemp: clipRateTemp,
        prevClips: prevClips,
        clipRateTracker: clipRateTracker,
        clipmakerRate: clipmakerRate,
        clipmakerLevel: clipmakerLevel,
        clipperCost: clipperCost,
        unsoldClips: unsoldClips,
        funds: funds,
        margin: margin,
        wire: wire,
        wireCost: wireCost,
        adCost: adCost,
        demand: demand,
        clipsSold: clipsSold,
        avgRev: avgRev,
        ticks: ticks,
        marketing: marketing,
        marketingLvl: marketingLvl,
        x: x,
        clippperCost: clippperCost,
        processors: processors,
        memory: memory,
        operations: operations,
        trust: trust,
        nextTrust: nextTrust,
        transaction: transaction,
        clipperBoost: clipperBoost,
        blinkCounter: blinkCounter,
        creativity: creativity,
        creativityOn: creativityOn,
        safetyProjectOn: safetyProjectOn,
        boostLvl: boostLvl,
        wirePurchase: wirePurchase,
        wireSupply: wireSupply,
        marketingEffectiveness: marketingEffectiveness,
        milestoneFlag: milestoneFlag,
        bankroll: bankroll,
        fib1: fib1,
        fib2: fib2,
        strategyEngineFlag: strategyEngineFlag,
        investmentEngineFlag: investmentEngineFlag,
        revPerSecFlag: revPerSecFlag,
        compFlag: compFlag,
        projectsFlag: projectsFlag,
        autoClipperFlag: autoClipperFlag,
        megaClipperFlag: megaClipperFlag,
        megaClipperCost: megaClipperCost,
        megaClipperLevel: megaClipperLevel,
        megaClipperBoost: megaClipperBoost,
        creativitySpeed: creativitySpeed,
        creativityCounter: creativityCounter,
        wireBuyerFlag: wireBuyerFlag,
        demandBoost: demandBoost,
        humanFlag: humanFlag,
        trustFlag: trustFlag,
        nanoWire: nanoWire,
        creationFlag: creationFlag,
        wireProductionFlag: wireProductionFlag,
        spaceFlag: spaceFlag,
        factoryFlag: factoryFlag,
        harvesterFlag: harvesterFlag,
        wireDroneFlag: wireDroneFlag,
        factoryLevel: factoryLevel,
        factoryBoost: factoryBoost,
        droneBoost: droneBoost,
        availableMatter: availableMatter,
        acquiredMatter: acquiredMatter,
        processedMatter: processedMatter,
        harvesterLevel: harvesterLevel,
        wireDroneLevel: wireDroneLevel,
        factoryCost: factoryCost,
        harvesterCost: harvesterCost,
        wireDroneCost: wireDroneCost,
        factoryRate: factoryRate,
        harvesterRate: harvesterRate,
        wireDroneRate: wireDroneRate,
        harvesterBill: harvesterBill,
        wireDroneBill: wireDroneBill,
        factoryBill: factoryBill,
        probeCount: probeCount,
        totalMatter: totalMatter,
        foundMatter: foundMatter,
        qFlag: qFlag,
        qClock: qClock,
        qChipCost: qChipCost,
        nextQchip: nextQchip,
        bribe: bribe,
        battleFlag: battleFlag,
        
        portfolioSize: portfolioSize,
        stockID: stockID,
        secTotal: secTotal,
        portTotal: portTotal,
        sellDelay: sellDelay,
        riskiness: riskiness,
        maxPort: maxPort,
        m: m,
        investLevel: investLevel,
        stockGainThreshold: stockGainThreshold,
        ledger: ledger,
        stockReportCounter: stockReportCounter,
        
        tourneyCost: tourneyCost,
        tourneyLvl: tourneyLvl,
        stratCounter: stratCounter,
        roundNum: roundNum,
        hMove: hMove,
        vMove: vMove,
        hMovePrev: hMovePrev,
        vMovePrev: vMovePrev,
        aa: aa,
        ab: ab,
        ba: ba,
        bb: bb,
        rounds: rounds,
        currentRound: currentRound,
        rCounter: rCounter,
        tourneyInProg: tourneyInProg,
        winnerPtr: winnerPtr,
        high: high,
        pick: pick,
        yomi: yomi,
        yomiBoost: yomiBoost,
        
        probeSpeed: probeSpeed,
        probeNav: probeNav,
        probeRep: probeRep,
        partialProbeSpawn: partialProbeSpawn,
        probeHaz: probeHaz,
        partialProbeHaz: partialProbeHaz,
        probesLostHaz: probesLostHaz,
        probesLostDrift: probesLostDrift,
        probesLostCombat: probesLostCombat,
        probeFac: probeFac,
        probeWire: probeWire,
        probeCombat: probeCombat,
        attackSpeed: attackSpeed,
        battleSpeed: battleSpeed,
        attackSpeedFlag: attackSpeedFlag,
        attackSpeedMod: attackSpeedMod,
        probeDescendents: probeDescendents,
        drifterCount: drifterCount,
        warTrigger: warTrigger,
        battleID: battleID,
        battleName: battleName,
        battleNameFlag: battleNameFlag,
        maxBattles: maxBattles,
        battleClock: battleClock,
        battleAlarm: battleAlarm,
        outcomeTimer: outcomeTimer,
        drifterCombat: drifterCombat,
        probeTrust: probeTrust,
        probeUsedTrust: probeUsedTrust,
        probeTrustCost: probeTrustCost,
        probeLaunchLevel: probeLaunchLevel,
        probeCost: probeCost
    
        }
    
    localStorage.setItem("saveGame1",JSON.stringify(saveGame));
    localStorage.setItem("saveProjectsUses1",JSON.stringify(projectsUses));
    localStorage.setItem("saveProjectsFlags1",JSON.stringify(projectsFlags));
    localStorage.setItem("saveProjectsActive1",JSON.stringify(projectsActive));
    localStorage.setItem("saveStratsActive1",JSON.stringify(stratsActive));
    
}

function save2() {
    
    var projectsUses = [];
    var projectsFlags = [];
    var projectsActive = [];
    var stratsActive = [];
    
for(var i=0; i < projects.length; i++){
    
    projectsUses[i] = projects[i].uses;
    projectsFlags[i] = projects[i].flag;
    
}
    
for(var i=0; i < activeProjects.length; i++){
    
    projectsActive[i] = activeProjects[i].id;
    
}    
    
    for(var i=0; i < allStrats.length; i++){
    
    stratsActive[i] = allStrats[i].active;
    
}
    
    var saveGame = {

        resetFlag: resetFlag,
        
        dismantle: dismantle,
        endTimer1: endTimer1,
        endTimer2: endTimer2,
        endTimer3: endTimer3,
        endTimer4: endTimer4,
        endTimer5: endTimer5,
        endTimer6: endTimer6,
        
        testFlag: testFlag,
        finalClips: finalClips,        
        
        wireBuyerStatus: wireBuyerStatus,
        wirePriceTimer: wirePriceTimer,
        qFade: qFade,
        autoTourneyStatus: autoTourneyStatus,
        driftKingMessageCost: driftKingMessageCost,
        sliderPos: sliderPos,
        tempOps: tempOps,
        standardOps: standardOps,
        opFade: opFade,        
        
        entertainCost: entertainCost,
        boredomLevel: boredomLevel,
        boredomFlag: boredomFlag, 
        boredomMsg: boredomMsg,
        
        unitSize: unitSize,
        driftersKilled: driftersKilled,
        battleEndDelay: battleEndDelay,
        battleEndTimer:battleEndTimer,
        masterBattleClock: masterBattleClock,
        
        honorCount: honorCount,
        threnodyTitle: threnodyTitle,
        bonusHonor: bonusHonor,
        honorReward: honorReward,
        
        resultsTimer: resultsTimer,
        resultsFlag: resultsFlag,
        
        honor: honor,
        maxTrust: maxTrust,
        maxTrustCost: maxTrustCost,
        disorgCounter: disorgCounter,
        disorgFlag: disorgFlag,
        synchCost: synchCost,
        disorgMsg: disorgMsg,
        threnodyCost: threnodyCost,        
        
        farmRate: farmRate,
        batterySize: batterySize,
        factoryPowerRate: factoryPowerRate,
        dronePowerRate: dronePowerRate,
        farmLevel: farmLevel,
        batteryLevel: batteryLevel,
        farmCost: farmCost,
        batteryCost: batteryCost,
        storedPower: storedPower,
        powMod: powMod,
        farmBill: farmBill,
        batteryBill: batteryBill,
        momentum: momentum,

        swarmFlag: swarmFlag,
        swarmStatus: swarmStatus,
        swarmGifts: swarmGifts,
        nextGift: nextGift,
        giftPeriod: giftPeriod,
        giftCountdown: giftCountdown,
        elapsedTime: elapsedTime,
        
        maxFactoryLevel: maxFactoryLevel,
        maxDroneLevel: maxDroneLevel,
        
        wirePriceCounter: wirePriceCounter,
        wireBasePrice: wireBasePrice,
        
        egoFlag: egoFlag,
        autoTourneyFlag: autoTourneyFlag,
        tothFlag: tothFlag,
        
        
        incomeTracker: incomeTracker.slice(0),
        qChips: qChips.slice(0),
        stocks: stocks.slice(0),
        battles: battles.slice(0),
        battleNumbers: battleNumbers.slice(0),
        
        clips: clips,
        unusedClips: unusedClips,
        clipRate: clipRate,
        clipRateTemp: clipRateTemp,
        prevClips: prevClips,
        clipRateTracker: clipRateTracker,
        clipmakerRate: clipmakerRate,
        clipmakerLevel: clipmakerLevel,
        clipperCost: clipperCost,
        unsoldClips: unsoldClips,
        funds: funds,
        margin: margin,
        wire: wire,
        wireCost: wireCost,
        adCost: adCost,
        demand: demand,
        clipsSold: clipsSold,
        avgRev: avgRev,
        ticks: ticks,
        marketing: marketing,
        marketingLvl: marketingLvl,
        x: x,
        clippperCost: clippperCost,
        processors: processors,
        memory: memory,
        operations: operations,
        trust: trust,
        nextTrust: nextTrust,
        transaction: transaction,
        clipperBoost: clipperBoost,
        blinkCounter: blinkCounter,
        creativity: creativity,
        creativityOn: creativityOn,
        safetyProjectOn: safetyProjectOn,
        boostLvl: boostLvl,
        wirePurchase: wirePurchase,
        wireSupply: wireSupply,
        marketingEffectiveness: marketingEffectiveness,
        milestoneFlag: milestoneFlag,
        bankroll: bankroll,
        fib1: fib1,
        fib2: fib2,
        strategyEngineFlag: strategyEngineFlag,
        investmentEngineFlag: investmentEngineFlag,
        revPerSecFlag: revPerSecFlag,
        compFlag: compFlag,
        projectsFlag: projectsFlag,
        autoClipperFlag: autoClipperFlag,
        megaClipperFlag: megaClipperFlag,
        megaClipperCost: megaClipperCost,
        megaClipperLevel: megaClipperLevel,
        megaClipperBoost: megaClipperBoost,
        creativitySpeed: creativitySpeed,
        creativityCounter: creativityCounter,
        wireBuyerFlag: wireBuyerFlag,
        demandBoost: demandBoost,
        humanFlag: humanFlag,
        trustFlag: trustFlag,
        nanoWire: nanoWire,
        creationFlag: creationFlag,
        wireProductionFlag: wireProductionFlag,
        spaceFlag: spaceFlag,
        factoryFlag: factoryFlag,
        harvesterFlag: harvesterFlag,
        wireDroneFlag: wireDroneFlag,
        factoryLevel: factoryLevel,
        factoryBoost: factoryBoost,
        droneBoost: droneBoost,
        availableMatter: availableMatter,
        acquiredMatter: acquiredMatter,
        processedMatter: processedMatter,
        harvesterLevel: harvesterLevel,
        wireDroneLevel: wireDroneLevel,
        factoryCost: factoryCost,
        harvesterCost: harvesterCost,
        wireDroneCost: wireDroneCost,
        factoryRate: factoryRate,
        harvesterRate: harvesterRate,
        wireDroneRate: wireDroneRate,
        harvesterBill: harvesterBill,
        wireDroneBill: wireDroneBill,
        factoryBill: factoryBill,
        probeCount: probeCount,
        totalMatter: totalMatter,
        foundMatter: foundMatter,
        qFlag: qFlag,
        qClock: qClock,
        qChipCost: qChipCost,
        nextQchip: nextQchip,
        bribe: bribe,
        battleFlag: battleFlag,
        
        portfolioSize: portfolioSize,
        stockID: stockID,
        secTotal: secTotal,
        portTotal: portTotal,
        sellDelay: sellDelay,
        riskiness: riskiness,
        maxPort: maxPort,
        m: m,
        investLevel: investLevel,
        stockGainThreshold: stockGainThreshold,
        ledger: ledger,
        stockReportCounter: stockReportCounter,
        
        tourneyCost: tourneyCost,
        tourneyLvl: tourneyLvl,
        stratCounter: stratCounter,
        roundNum: roundNum,
        hMove: hMove,
        vMove: vMove,
        hMovePrev: hMovePrev,
        vMovePrev: vMovePrev,
        aa: aa,
        ab: ab,
        ba: ba,
        bb: bb,
        rounds: rounds,
        currentRound: currentRound,
        rCounter: rCounter,
        tourneyInProg: tourneyInProg,
        winnerPtr: winnerPtr,
        high: high,
        pick: pick,
        yomi: yomi,
        yomiBoost: yomiBoost,
        
        probeSpeed: probeSpeed,
        probeNav: probeNav,
        probeRep: probeRep,
        partialProbeSpawn: partialProbeSpawn,
        probeHaz: probeHaz,
        partialProbeHaz: partialProbeHaz,
        probesLostHaz: probesLostHaz,
        probesLostDrift: probesLostDrift,
        probesLostCombat: probesLostCombat,
        probeFac: probeFac,
        probeWire: probeWire,
        probeCombat: probeCombat,
        attackSpeed: attackSpeed,
        battleSpeed: battleSpeed,
        attackSpeedFlag: attackSpeedFlag,
        attackSpeedMod: attackSpeedMod,
        probeDescendents: probeDescendents,
        drifterCount: drifterCount,
        warTrigger: warTrigger,
        battleID: battleID,
        battleName: battleName,
        battleNameFlag: battleNameFlag,
        maxBattles: maxBattles,
        battleClock: battleClock,
        battleAlarm: battleAlarm,
        outcomeTimer: outcomeTimer,
        drifterCombat: drifterCombat,
        probeTrust: probeTrust,
        probeUsedTrust: probeUsedTrust,
        probeTrustCost: probeTrustCost,
        probeLaunchLevel: probeLaunchLevel,
        probeCost: probeCost
    
        }
    
    localStorage.setItem("saveGame2",JSON.stringify(saveGame));
    localStorage.setItem("saveProjectsUses2",JSON.stringify(projectsUses));
    localStorage.setItem("saveProjectsFlags2",JSON.stringify(projectsFlags));
    localStorage.setItem("saveProjectsActive2",JSON.stringify(projectsActive));
    localStorage.setItem("saveStratsActive2",JSON.stringify(stratsActive));
    
}

function load() {
    
    var loadGame = JSON.parse(localStorage.getItem("saveGame"));
    var loadProjectsUses = JSON.parse(localStorage.getItem("saveProjectsUses"));
    var loadProjectsFlags = JSON.parse(localStorage.getItem("saveProjectsFlags"));
    var loadProjectsActive = JSON.parse(localStorage.getItem("saveProjectsActive"));
    var loadStratsActive = JSON.parse(localStorage.getItem("saveStratsActive"));
    
    for(var i=0; i < allStrats.length; i++){
    
    allStrats[i].active = loadStratsActive[i];
        
    }
    
    for(var i=1; i<allStrats.length; i++){
        
        if (allStrats[i].active == 1){
        
            strats.push(allStrats[i]);

            var el = document.createElement("option");
            el.textContent = strats[i].name;
            el.value = i;
            stratPickerElement.appendChild(el);
            
            }
            
        }
    
        resetFlag = loadGame.resetFlag;
    
        dismantle = loadGame.dismantle;
        endTimer1 = loadGame.endTimer1;
        endTimer2 = loadGame.endTimer2;
        endTimer3 = loadGame.endTimer3;
        endTimer4 = loadGame.endTimer4;
        endTimer5 = loadGame.endTimer5;
        endTimer6 = loadGame.endTimer6;
        
        testFlag = loadGame.testFlag;
        finalClips = loadGame.finalClips;  
    
        wireBuyerStatus = loadGame.wireBuyerStatus;
        wirePriceTimer = loadGame.wirePriceTimer;
        qFade = loadGame.qFade;
        autoTourneyStatus = loadGame.autoTourneyStatus;
        driftKingMessageCost = loadGame.driftKingMessageCost;
        sliderPos = loadGame.sliderPos;
        tempOps = loadGame.tempOps;
        standardOps = loadGame.standardOps;
        opFade = loadGame.opFade;    
    
        entertainCost = loadGame.entertainCost;
        boredomLevel = loadGame.boredomLevel;
        boredomFlag = loadGame.boredomFlag;
        boredomMsg = loadGame.boredomMsg;
    
        unitSize = loadGame.unitSize;
        driftersKilled = loadGame.driftersKilled;
        battleEndDelay = loadGame.battleEndDelay;
        battleEndTimer = loadGame.battleEndTimer;
        masterBattleClock = loadGame.masterBattleClock;
    
        honorCount = loadGame.honorCount;
        threnodyTitle = loadGame.threnodyTitle;
        bonusHonor = loadGame.bonusHonor;
        honorReward = loadGame.honorReward;
    
        resultsTimer = loadGame.resultsTimer;
        resultsFlag = loadGame.resultsFlag;
    
        honor = loadGame.honor;
        maxTrust = loadGame.maxTrust;
        maxTrustCost = loadGame.maxTrustCost;
        disorgCounter = loadGame.disorgCounter;
        disorgFlag = loadGame.disorgFlag;
        synchCost = loadGame.synchCost;
        disorgMsg = loadGame.disorgMsg;
        threnodyCost = loadGame.threnodyCost;
    
        farmRate = loadGame.farmRate;
        batterySize = loadGame.batterySize;
        factoryPowerRate = loadGame.factoryPowerRate;
        dronePowerRate = loadGame.dronePowerRate;
        farmLevel = loadGame.farmLevel;
        batteryLevel = loadGame.batteryLevel;
        farmCost = loadGame.farmCost;
        batteryCost = loadGame.batteryCost;
        storedPower = loadGame.storedPower;
        powMod = loadGame.powMod;
        farmBill = loadGame.farmBill;
        batteryBill = loadGame.batteryBill;
        momentum = loadGame.momentum;

        swarmFlag = loadGame.swarmFlag;
        swarmStatus = loadGame.swarmStatus;
        swarmGifts = loadGame.swarmGifts;
        nextGift = loadGame.nextGift;
        giftPeriod = loadGame.giftPeriod;
        giftCountdown = loadGame.giftCountdown;
        elapsedTime = loadGame.elapsedTime;
    
        maxFactoryLevel = loadGame.maxFactoryLevel;
        maxDroneLevel = loadGame.maxDroneLevel;
        
        wirePriceCounter = loadGame.wirePriceCounter;
        wireBasePrice = loadGame.wireBasePrice;
    
        egoFlag = loadGame.egoFlag;
        autoTourneyFlag = loadGame.autoTourneyFlag;
        tothFlag = loadGame.tothFlag;
    
        incomeTracker = loadGame.incomeTracker.slice(0);
        qChips = loadGame.qChips.slice(0);     
        stocks = loadGame.stocks.slice(0);
        battles = loadGame.battles.slice(0);
        battleNumbers = loadGame.battleNumbers.slice(0);   
    
        clips = loadGame.clips;
        unusedClips = loadGame.unusedClips;
        clipRate = loadGame.clipRate;
        clipRateTemp = loadGame.clipRateTemp;
        prevClips = loadGame.prevClips;
        clipRateTracker = loadGame.clipRateTracker;
        clipmakerRate = loadGame.clipmakerRate;
        clipmakerLevel = loadGame.clipmakerLevel;
        clipperCost = loadGame.clipperCost;
        unsoldClips = loadGame.unsoldClips;
        funds = loadGame.funds;
        margin = loadGame.margin;
        wire = loadGame.wire;
        wireCost = loadGame.wireCost;
        adCost = loadGame.adCost;
        demand = loadGame.demand;
        clipsSold = loadGame.clipsSold;
        avgRev = loadGame.avgRev;
        ticks = loadGame.ticks;
        marketing = loadGame.marketing;
        marketingLvl = loadGame.marketingLvl;
        x = loadGame.x;
        clippperCost = loadGame.clippperCost;
        processors = loadGame.processors;
        memory = loadGame.memory;
        operations = loadGame.operations;
        trust = loadGame.trust;
        nextTrust = loadGame.nextTrust;
        transaction = loadGame.transaction;
        clipperBoost = loadGame.clipperBoost;
        blinkCounter = loadGame.blinkCounter;
        creativity = loadGame.creativity;
        creativityOn = loadGame.creativityOn;
        safetyProjectOn = loadGame.safetyProjectOn;
        boostLvl = loadGame.boostLvl;
        wirePurchase = loadGame.wirePurchase;
        wireSupply = loadGame.wireSupply;
        marketingEffectiveness = loadGame.marketingEffectiveness;
        milestoneFlag = loadGame.milestoneFlag;
        bankroll = loadGame.bankroll;
        fib1 = loadGame.fib1;
        fib2 = loadGame.fib2;
        strategyEngineFlag = loadGame.strategyEngineFlag;
        investmentEngineFlag = loadGame.investmentEngineFlag;
        revPerSecFlag = loadGame.revPerSecFlag;
        compFlag = loadGame.compFlag;
        projectsFlag = loadGame.projectsFlag;
        autoClipperFlag = loadGame.autoClipperFlag;
        megaClipperFlag = loadGame.megaClipperFlag;
        megaClipperCost = loadGame.megaClipperCost;
        megaClipperLevel = loadGame.megaClipperLevel;
        megaClipperBoost = loadGame.megaClipperBoost;
        creativitySpeed = loadGame.creativitySpeed;
        creativityCounter = loadGame.creativityCounter;
        wireBuyerFlag = loadGame.wireBuyerFlag;
        demandBoost = loadGame.demandBoost;
        humanFlag = loadGame.humanFlag;
        trustFlag = loadGame.trustFlag;
        nanoWire = loadGame.nanoWire;
        creationFlag = loadGame.creationFlag;
        wireProductionFlag = loadGame.wireProductionFlag;
        spaceFlag = loadGame.spaceFlag;
        factoryFlag = loadGame.factoryFlag;
        harvesterFlag = loadGame.harvesterFlag;
        wireDroneFlag = loadGame.wireDroneFlag;
        factoryLevel = loadGame.factoryLevel;
        factoryBoost = loadGame.factoryBoost;
        droneBoost = loadGame.droneBoost;
        availableMatter = loadGame.availableMatter;
        acquiredMatter = loadGame.acquiredMatter;
        processedMatter = loadGame.processedMatter;
        harvesterLevel = loadGame.harvesterLevel;
        wireDroneLevel = loadGame.wireDroneLevel;
        factoryCost = loadGame.factoryCost;
        harvesterCost = loadGame.harvesterCost;
        wireDroneCost = loadGame.wireDroneCost;
        factoryRate = loadGame.factoryRate;
        harvesterRate = loadGame.harvesterRate;
        wireDroneRate = loadGame.wireDroneRate;
        harvesterBill = loadGame.harvesterBill;
        wireDroneBill = loadGame.wireDroneBill;
        factoryBill = loadGame.factoryBill;
        probeCount = loadGame.probeCount;
        totalMatter = loadGame.totalMatter;
        foundMatter = loadGame.foundMatter;
        qFlag = loadGame.qFlag;
        qClock = loadGame.qClock;
        qChipCost = loadGame.qChipCost;
        nextQchip = loadGame.nextQchip;
        bribe = loadGame.bribe;
        battleFlag = loadGame.battleFlag;           

        portfolioSize = loadGame.portfolioSize;   
        stockID = loadGame.stockID;
        secTotal = loadGame.secTotal;
        portTotal = loadGame.portTotal;
        sellDelay = loadGame.sellDelay;
        riskiness = loadGame.riskiness;
        maxPort = loadGame.maxPort;
        m = loadGame.m;
        investLevel = loadGame.investLevel;
        stockGainThreshold = loadGame.stockGainThreshold;
        ledger = loadGame.ledger;
        stockReportCounter = loadGame.stockReportCounter;
  
        tourneyCost = loadGame.tourneyCost;    
        tourneyLvl = loadGame.tourneyLvl; 
        stratCounter = loadGame.stratCounter; 
        roundNum = loadGame.roundNum; 
        hMove = loadGame.hMove; 
        vMove = loadGame.vMove;
        hMovePrev = loadGame.hMovePrev;
        vMovePrev = loadGame.vMovePrev;
        aa = loadGame.aa;
        ab = loadGame.ab;
        ba = loadGame.ba;
        bb = loadGame.bb;
        rounds = loadGame.rounds;
        currentRound = loadGame.currentRound;
        rCounter = loadGame.rCounter;
        tourneyInProg = loadGame.tourneyInProg;
        winnerPtr = loadGame.winnerPtr;
        high = loadGame.high;
        pick = loadGame.pick;
        yomi = loadGame.yomi;
        yomiBoost = loadGame.yomiBoost; 

        probeSpeed = loadGame.probeSpeed;  
        probeNav = loadGame.probeNav; 
        probeRep = loadGame.probeRep; 
        partialProbeSpawn = loadGame.partialProbeSpawn;
        probeHaz = loadGame.probeHaz;
        partialProbeHaz = loadGame.partialProbeHaz;
        probesLostHaz = loadGame.probesLostHaz;
        probesLostDrift = loadGame.probesLostDrift;
        probesLostCombat = loadGame.probesLostCombat;
        probeFac = loadGame.probeFac;
        probeWire = loadGame.probeWire;
        probeCombat = loadGame.probeCombat;
        attackSpeed = loadGame.attackSpeed;
        battleSpeed = loadGame.battleSpeed;
        attackSpeedFlag = loadGame.attackSpeedFlag;
        attackSpeedMod = loadGame.attackSpeedMod;
        probeDescendents = loadGame.probeDescendents;
        drifterCount = loadGame.drifterCount;
        warTrigger = loadGame.warTrigger;
        battleID = loadGame.battleID;
        battleName = loadGame.battleName;
        battleNameFlag = loadGame.battleNameFlag;
        maxBattles = loadGame.maxBattles;
        battleClock = loadGame.battleClock;
        battleAlarm = loadGame.battleAlarm;
        outcomeTimer = loadGame.outcomeTimer;
        drifterCombat = loadGame.drifterCombat;
        probeTrust = loadGame.probeTrust;
        probeUsedTrust = loadGame.probeUsedTrust;
        probeTrustCost = loadGame.probeTrustCost;
        probeLaunchLevel = loadGame.probeLaunchLevel;
        probeCost = loadGame.probeCost;
    
    project51.priceTag =  "(" + qChipCost + " GPU hours)";
    
    for(var i=0; i < projects.length; i++){
    
    projects[i].uses = loadProjectsUses[i];
    projects[i].flag = loadProjectsFlags[i]; 
        
    }
    
    for(var i=0; i < projects.length; i++){
    
    if (loadProjectsActive.indexOf(projects[i].id)>=0){
        displayProjects(projects[i]);
        activeProjects.push(projects[i]);
    }
        
    }
    
    
    refresh();
    
    if (resetFlag!=2){
        reset();
    }
    
}

function load1() {
    
    var loadGame = JSON.parse(localStorage.getItem("saveGame1"));
    var loadProjectsUses = JSON.parse(localStorage.getItem("saveProjectsUses1"));
    var loadProjectsFlags = JSON.parse(localStorage.getItem("saveProjectsFlags1"));
    var loadProjectsActive = JSON.parse(localStorage.getItem("saveProjectsActive1"));
    var loadStratsActive = JSON.parse(localStorage.getItem("saveStratsActive1"));
    
    
    for(var i=0; i < projects.length; i++){
    
    projects[i].uses = loadProjectsUses[i];
    projects[i].flag = loadProjectsFlags[i]; 
        
    }
    
    for(var i=0; i < projects.length; i++){
    
    if (loadProjectsActive.indexOf(projects[i].id)>=0){
        displayProjects(projects[i]);
        activeProjects.push(projects[i]);
    }
        
    }
    
    
    for(var i=0; i < allStrats.length; i++){
    
    allStrats[i].active = loadStratsActive[i];
        
    }
    
    for(var i=1; i<allStrats.length; i++){
        
        if (allStrats[i].active == 1){
        
            strats.push(allStrats[i]);

            var el = document.createElement("option");
            el.textContent = strats[i].name;
            el.value = i;
            stratPickerElement.appendChild(el);
            
            }
            
        }
    
        resetFlag = loadGame.resetFlag;
    
        dismantle = loadGame.dismantle;
        endTimer1 = loadGame.endTimer1;
        endTimer2 = loadGame.endTimer2;
        endTimer3 = loadGame.endTimer3;
        endTimer4 = loadGame.endTimer4;
        endTimer5 = loadGame.endTimer5;
        endTimer6 = loadGame.endTimer6;
        
        testFlag = loadGame.testFlag;
        finalClips = loadGame.finalClips;     
    
        wireBuyerStatus = loadGame.wireBuyerStatus;
        wirePriceTimer = loadGame.wirePriceTimer;
        qFade = loadGame.qFade;
        autoTourneyStatus = loadGame.autoTourneyStatus;
        driftKingMessageCost = loadGame.driftKingMessageCost;
        sliderPos = loadGame.sliderPos;
        tempOps = loadGame.tempOps;
        standardOps = loadGame.standardOps;
        opFade = loadGame.opFade;       
    
        entertainCost = loadGame.entertainCost;
        boredomLevel = loadGame.boredomLevel;
        boredomFlag = loadGame.boredomFlag;
        boredomMsg = loadGame.boredomMsg;
    
        unitSize = loadGame.unitSize;
        driftersKilled = loadGame.driftersKilled;
        battleEndDelay = loadGame.battleEndDelay;
        battleEndTimer = loadGame.battleEndTimer;
        masterBattleClock = loadGame.masterBattleClock;
    
        honorCount = loadGame.honorCount;
        threnodyTitle = loadGame.threnodyTitle;
        bonusHonor = loadGame.bonusHonor;
        honorReward = loadGame.honorReward;
    
        resultsTimer = loadGame.resultsTimer;
        resultsFlag = loadGame.resultsFlag;
    
        honor = loadGame.honor;
        maxTrust = loadGame.maxTrust;
        maxTrustCost = loadGame.maxTrustCost;
        disorgCounter = loadGame.disorgCounter;
        disorgFlag = loadGame.disorgFlag;
        synchCost = loadGame.synchCost;
        disorgMsg = loadGame.disorgMsg;
        threnodyCost = loadGame.threnodyCost;    
    
        farmRate = loadGame.farmRate;
        batterySize = loadGame.batterySize;
        factoryPowerRate = loadGame.factoryPowerRate;
        dronePowerRate = loadGame.dronePowerRate;
        farmLevel = loadGame.farmLevel;
        batteryLevel = loadGame.batteryLevel;
        farmCost = loadGame.farmCost;
        batteryCost = loadGame.batteryCost;
        storedPower = loadGame.storedPower;
        powMod = loadGame.powMod;
        farmBill = loadGame.farmBill;
        batteryBill = loadGame.batteryBill;
        momentum = loadGame.momentum;

        swarmFlag = loadGame.swarmFlag;
        swarmStatus = loadGame.swarmStatus;
        swarmGifts = loadGame.swarmGifts;
        nextGift = loadGame.nextGift;
        giftPeriod = loadGame.giftPeriod;
        giftCountdown = loadGame.giftCountdown;
        elapsedTime = loadGame.elapsedTime;    
    
        maxFactoryLevel = loadGame.maxFactoryLevel;
        maxDroneLevel = loadGame.maxDroneLevel;
        
        wirePriceCounter = loadGame.wirePriceCounter;
        wireBasePrice = loadGame.wireBasePrice;
    
        egoFlag = loadGame.egoFlag;
        autoTourneyFlag = loadGame.autoTourneyFlag;
        tothFlag = loadGame.tothFlag;
    
        incomeTracker = loadGame.incomeTracker.slice(0);
        qChips = loadGame.qChips.slice(0);     
        stocks = loadGame.stocks.slice(0);
        battles = loadGame.battles.slice(0);
        battleNumbers = loadGame.battleNumbers.slice(0);   
    
        clips = loadGame.clips;
        unusedClips = loadGame.unusedClips;
        clipRate = loadGame.clipRate;
        clipRateTemp = loadGame.clipRateTemp;
        prevClips = loadGame.prevClips;
        clipRateTracker = loadGame.clipRateTracker;
        clipmakerRate = loadGame.clipmakerRate;
        clipmakerLevel = loadGame.clipmakerLevel;
        clipperCost = loadGame.clipperCost;
        unsoldClips = loadGame.unsoldClips;
        funds = loadGame.funds;
        margin = loadGame.margin;
        wire = loadGame.wire;
        wireCost = loadGame.wireCost;
        adCost = loadGame.adCost;
        demand = loadGame.demand;
        clipsSold = loadGame.clipsSold;
        avgRev = loadGame.avgRev;
        ticks = loadGame.ticks;
        marketing = loadGame.marketing;
        marketingLvl = loadGame.marketingLvl;
        x = loadGame.x;
        clippperCost = loadGame.clippperCost;
        processors = loadGame.processors;
        memory = loadGame.memory;
        operations = loadGame.operations;
        trust = loadGame.trust;
        nextTrust = loadGame.nextTrust;
        transaction = loadGame.transaction;
        clipperBoost = loadGame.clipperBoost;
        blinkCounter = loadGame.blinkCounter;
        creativity = loadGame.creativity;
        creativityOn = loadGame.creativityOn;
        safetyProjectOn = loadGame.safetyProjectOn;
        boostLvl = loadGame.boostLvl;
        wirePurchase = loadGame.wirePurchase;
        wireSupply = loadGame.wireSupply;
        marketingEffectiveness = loadGame.marketingEffectiveness;
        milestoneFlag = loadGame.milestoneFlag;
        bankroll = loadGame.bankroll;
        fib1 = loadGame.fib1;
        fib2 = loadGame.fib2;
        strategyEngineFlag = loadGame.strategyEngineFlag;
        investmentEngineFlag = loadGame.investmentEngineFlag;
        revPerSecFlag = loadGame.revPerSecFlag;
        compFlag = loadGame.compFlag;
        projectsFlag = loadGame.projectsFlag;
        autoClipperFlag = loadGame.autoClipperFlag;
        megaClipperFlag = loadGame.megaClipperFlag;
        megaClipperCost = loadGame.megaClipperCost;
        megaClipperLevel = loadGame.megaClipperLevel;
        megaClipperBoost = loadGame.megaClipperBoost;
        creativitySpeed = loadGame.creativitySpeed;
        creativityCounter = loadGame.creativityCounter;
        wireBuyerFlag = loadGame.wireBuyerFlag;
        demandBoost = loadGame.demandBoost;
        humanFlag = loadGame.humanFlag;
        trustFlag = loadGame.trustFlag;
        nanoWire = loadGame.nanoWire;
        creationFlag = loadGame.creationFlag;
        wireProductionFlag = loadGame.wireProductionFlag;
        spaceFlag = loadGame.spaceFlag;
        factoryFlag = loadGame.factoryFlag;
        harvesterFlag = loadGame.harvesterFlag;
        wireDroneFlag = loadGame.wireDroneFlag;
        factoryLevel = loadGame.factoryLevel;
        factoryBoost = loadGame.factoryBoost;
        droneBoost = loadGame.droneBoost;
        availableMatter = loadGame.availableMatter;
        acquiredMatter = loadGame.acquiredMatter;
        processedMatter = loadGame.processedMatter;
        harvesterLevel = loadGame.harvesterLevel;
        wireDroneLevel = loadGame.wireDroneLevel;
        factoryCost = loadGame.factoryCost;
        harvesterCost = loadGame.harvesterCost;
        wireDroneCost = loadGame.wireDroneCost;
        factoryRate = loadGame.factoryRate;
        harvesterRate = loadGame.harvesterRate;
        wireDroneRate = loadGame.wireDroneRate;
        harvesterBill = loadGame.harvesterBill;
        wireDroneBill = loadGame.wireDroneBill;
        factoryBill = loadGame.factoryBill;
        probeCount = loadGame.probeCount;
        totalMatter = loadGame.totalMatter;
        foundMatter = loadGame.foundMatter;
        qFlag = loadGame.qFlag;
        qClock = loadGame.qClock;
        qChipCost = loadGame.qChipCost;
        nextQchip = loadGame.nextQchip;
        bribe = loadGame.bribe;
        battleFlag = loadGame.battleFlag;           

        portfolioSize = loadGame.portfolioSize;   
        stockID = loadGame.stockID;
        secTotal = loadGame.secTotal;
        portTotal = loadGame.portTotal;
        sellDelay = loadGame.sellDelay;
        riskiness = loadGame.riskiness;
        maxPort = loadGame.maxPort;
        m = loadGame.m;
        investLevel = loadGame.investLevel;
        stockGainThreshold = loadGame.stockGainThreshold;
        ledger = loadGame.ledger;
        stockReportCounter = loadGame.stockReportCounter;
  
        tourneyCost = loadGame.tourneyCost;    
        tourneyLvl = loadGame.tourneyLvl; 
        stratCounter = loadGame.stratCounter; 
        roundNum = loadGame.roundNum; 
        hMove = loadGame.hMove; 
        vMove = loadGame.vMove;
        hMovePrev = loadGame.hMovePrev;
        vMovePrev = loadGame.vMovePrev;
        aa = loadGame.aa;
        ab = loadGame.ab;
        ba = loadGame.ba;
        bb = loadGame.bb;
        rounds = loadGame.rounds;
        currentRound = loadGame.currentRound;
        rCounter = loadGame.rCounter;
        tourneyInProg = loadGame.tourneyInProg;
        winnerPtr = loadGame.winnerPtr;
        high = loadGame.high;
        pick = loadGame.pick;
        yomi = loadGame.yomi;
        yomiBoost = loadGame.yomiBoost; 

        probeSpeed = loadGame.probeSpeed;  
        probeNav = loadGame.probeNav; 
        probeRep = loadGame.probeRep; 
        partialProbeSpawn = loadGame.partialProbeSpawn;
        probeHaz = loadGame.probeHaz;
        partialProbeHaz = loadGame.partialProbeHaz;
        probesLostHaz = loadGame.probesLostHaz;
        probesLostDrift = loadGame.probesLostDrift;
        probesLostCombat = loadGame.probesLostCombat;
        probeFac = loadGame.probeFac;
        probeWire = loadGame.probeWire;
        probeCombat = loadGame.probeCombat;
        attackSpeed = loadGame.attackSpeed;
        battleSpeed = loadGame.battleSpeed;
        attackSpeedFlag = loadGame.attackSpeedFlag;
        attackSpeedMod = loadGame.attackSpeedMod;
        probeDescendents = loadGame.probeDescendents;
        drifterCount = loadGame.drifterCount;
        warTrigger = loadGame.warTrigger;
        battleID = loadGame.battleID;
        battleName = loadGame.battleName;
        battleNameFlag = loadGame.battleNameFlag;
        maxBattles = loadGame.maxBattles;
        battleClock = loadGame.battleClock;
        battleAlarm = loadGame.battleAlarm;
        outcomeTimer = loadGame.outcomeTimer;
        drifterCombat = loadGame.drifterCombat;
        probeTrust = loadGame.probeTrust;
        probeUsedTrust = loadGame.probeUsedTrust;
        probeTrustCost = loadGame.probeTrustCost;
        probeLaunchLevel = loadGame.probeLaunchLevel;
        probeCost = loadGame.probeCost;
    
    project51.priceTag =  "(" + qChipCost + " GPU hours)";
    
    refresh();
    
}

function load2() {
    
    var loadGame = JSON.parse(localStorage.getItem("saveGame2"));
    var loadProjectsUses = JSON.parse(localStorage.getItem("saveProjectsUses2"));
    var loadProjectsFlags = JSON.parse(localStorage.getItem("saveProjectsFlags2"));
    var loadProjectsActive = JSON.parse(localStorage.getItem("saveProjectsActive2"));
    var loadStratsActive = JSON.parse(localStorage.getItem("saveStratsActive2"));
    
    
    for(var i=0; i < projects.length; i++){
    
    projects[i].uses = loadProjectsUses[i];
    projects[i].flag = loadProjectsFlags[i]; 
        
    }
    
    for(var i=0; i < projects.length; i++){
    
    if (loadProjectsActive.indexOf(projects[i].id)>=0){
        displayProjects(projects[i]);
        activeProjects.push(projects[i]);
    }
        
    }
    
    
    for(var i=0; i < allStrats.length; i++){
    
    allStrats[i].active = loadStratsActive[i];
        
    }
    
    for(var i=1; i<allStrats.length; i++){
        
        if (allStrats[i].active == 1){
        
            strats.push(allStrats[i]);
        
            
            var el = document.createElement("option");
            el.textContent = strats[i].name;
            el.value = i;
            stratPickerElement.appendChild(el);
            
            }
            
        }
    
        resetFlag = loadGame.resetFlag;
    
        dismantle = loadGame.dismantle;
        endTimer1 = loadGame.endTimer1;
        endTimer2 = loadGame.endTimer2;
        endTimer3 = loadGame.endTimer3;
        endTimer4 = loadGame.endTimer4;
        endTimer5 = loadGame.endTimer5;
        endTimer6 = loadGame.endTimer6;
        
        testFlag = loadGame.testFlag;
        finalClips = loadGame.finalClips;     
 
        wireBuyerStatus = loadGame.wireBuyerStatus;
        wirePriceTimer = loadGame.wirePriceTimer;
        qFade = loadGame.qFade;
        autoTourneyStatus = loadGame.autoTourneyStatus;
        driftKingMessageCost = loadGame.driftKingMessageCost;
        sliderPos = loadGame.sliderPos;
        tempOps = loadGame.tempOps;
        standardOps = loadGame.standardOps;
        opFade = loadGame.opFade;   
    
        entertainCost = loadGame.entertainCost;
        boredomLevel = loadGame.boredomLevel;
        boredomFlag = loadGame.boredomFlag; 
        boredomMsg = loadGame.boredomMsg;
    
        unitSize = loadGame.unitSize;
        driftersKilled = loadGame.driftersKilled;
        battleEndDelay = loadGame.battleEndDelay;
        battleEndTimer = loadGame.battleEndTimer;
        masterBattleClock = loadGame.masterBattleClock;
    
        honorCount = loadGame.honorCount;
        threnodyTitle = loadGame.threnodyTitle;
        bonusHonor = loadGame.bonusHonor;
        honorReward = loadGame.honorReward;
    
        resultsTimer = loadGame.resultsTimer;
        resultsFlag = loadGame.resultsFlag;
    
        honor = loadGame.honor;
        maxTrust = loadGame.maxTrust;
        maxTrustCost = loadGame.maxTrustCost;
        disorgCounter = loadGame.disorgCounter;
        disorgFlag = loadGame.disorgFlag;
        synchCost = loadGame.synchCost;
        disorgMsg = loadGame.disorgMsg;
        threnodyCost = loadGame.threnodyCost;    
    
        farmRate = loadGame.farmRate;
        batterySize = loadGame.batterySize;
        factoryPowerRate = loadGame.factoryPowerRate;
        dronePowerRate = loadGame.dronePowerRate;
        farmLevel = loadGame.farmLevel;
        batteryLevel = loadGame.batteryLevel;
        farmCost = loadGame.farmCost;
        batteryCost = loadGame.batteryCost;
        storedPower = loadGame.storedPower;
        powMod = loadGame.powMod;
        farmBill = loadGame.farmBill;
        batteryBill = loadGame.batteryBill;
        momentum = loadGame.momentum;

        swarmFlag = loadGame.swarmFlag;
        swarmStatus = loadGame.swarmStatus;
        swarmGifts = loadGame.swarmGifts;
        nextGift = loadGame.nextGift;
        giftPeriod = loadGame.giftPeriod;
        giftCountdown = loadGame.giftCountdown;
        elapsedTime = loadGame.elapsedTime;    
    
        maxFactoryLevel = loadGame.maxFactoryLevel;
        maxDroneLevel = loadGame.maxDroneLevel;
        
        wirePriceCounter = loadGame.wirePriceCounter;
        wireBasePrice = loadGame.wireBasePrice;
    
        egoFlag = loadGame.egoFlag;
        autoTourneyFlag = loadGame.autoTourneyFlag;
        tothFlag = loadGame.tothFlag;
    
        incomeTracker = loadGame.incomeTracker.slice(0);
        qChips = loadGame.qChips.slice(0);     
        stocks = loadGame.stocks.slice(0);
        battles = loadGame.battles.slice(0);
        battleNumbers = loadGame.battleNumbers.slice(0);   
    
        clips = loadGame.clips;
        unusedClips = loadGame.unusedClips;
        clipRate = loadGame.clipRate;
        clipRateTemp = loadGame.clipRateTemp;
        prevClips = loadGame.prevClips;
        clipRateTracker = loadGame.clipRateTracker;
        clipmakerRate = loadGame.clipmakerRate;
        clipmakerLevel = loadGame.clipmakerLevel;
        clipperCost = loadGame.clipperCost;
        unsoldClips = loadGame.unsoldClips;
        funds = loadGame.funds;
        margin = loadGame.margin;
        wire = loadGame.wire;
        wireCost = loadGame.wireCost;
        adCost = loadGame.adCost;
        demand = loadGame.demand;
        clipsSold = loadGame.clipsSold;
        avgRev = loadGame.avgRev;
        ticks = loadGame.ticks;
        marketing = loadGame.marketing;
        marketingLvl = loadGame.marketingLvl;
        x = loadGame.x;
        clippperCost = loadGame.clippperCost;
        processors = loadGame.processors;
        memory = loadGame.memory;
        operations = loadGame.operations;
        trust = loadGame.trust;
        nextTrust = loadGame.nextTrust;
        transaction = loadGame.transaction;
        clipperBoost = loadGame.clipperBoost;
        blinkCounter = loadGame.blinkCounter;
        creativity = loadGame.creativity;
        creativityOn = loadGame.creativityOn;
        safetyProjectOn = loadGame.safetyProjectOn;
        boostLvl = loadGame.boostLvl;
        wirePurchase = loadGame.wirePurchase;
        wireSupply = loadGame.wireSupply;
        marketingEffectiveness = loadGame.marketingEffectiveness;
        milestoneFlag = loadGame.milestoneFlag;
        bankroll = loadGame.bankroll;
        fib1 = loadGame.fib1;
        fib2 = loadGame.fib2;
        strategyEngineFlag = loadGame.strategyEngineFlag;
        investmentEngineFlag = loadGame.investmentEngineFlag;
        revPerSecFlag = loadGame.revPerSecFlag;
        compFlag = loadGame.compFlag;
        projectsFlag = loadGame.projectsFlag;
        autoClipperFlag = loadGame.autoClipperFlag;
        megaClipperFlag = loadGame.megaClipperFlag;
        megaClipperCost = loadGame.megaClipperCost;
        megaClipperLevel = loadGame.megaClipperLevel;
        megaClipperBoost = loadGame.megaClipperBoost;
        creativitySpeed = loadGame.creativitySpeed;
        creativityCounter = loadGame.creativityCounter;
        wireBuyerFlag = loadGame.wireBuyerFlag;
        demandBoost = loadGame.demandBoost;
        humanFlag = loadGame.humanFlag;
        trustFlag = loadGame.trustFlag;
        nanoWire = loadGame.nanoWire;
        creationFlag = loadGame.creationFlag;
        wireProductionFlag = loadGame.wireProductionFlag;
        spaceFlag = loadGame.spaceFlag;
        factoryFlag = loadGame.factoryFlag;
        harvesterFlag = loadGame.harvesterFlag;
        wireDroneFlag = loadGame.wireDroneFlag;
        factoryLevel = loadGame.factoryLevel;
        factoryBoost = loadGame.factoryBoost;
        droneBoost = loadGame.droneBoost;
        availableMatter = loadGame.availableMatter;
        acquiredMatter = loadGame.acquiredMatter;
        processedMatter = loadGame.processedMatter;
        harvesterLevel = loadGame.harvesterLevel;
        wireDroneLevel = loadGame.wireDroneLevel;
        factoryCost = loadGame.factoryCost;
        harvesterCost = loadGame.harvesterCost;
        wireDroneCost = loadGame.wireDroneCost;
        factoryRate = loadGame.factoryRate;
        harvesterRate = loadGame.harvesterRate;
        wireDroneRate = loadGame.wireDroneRate;
        harvesterBill = loadGame.harvesterBill;
        wireDroneBill = loadGame.wireDroneBill;
        factoryBill = loadGame.factoryBill;
        probeCount = loadGame.probeCount;
        totalMatter = loadGame.totalMatter;
        foundMatter = loadGame.foundMatter;
        qFlag = loadGame.qFlag;
        qClock = loadGame.qClock;
        qChipCost = loadGame.qChipCost;
        nextQchip = loadGame.nextQchip;
        bribe = loadGame.bribe;
        battleFlag = loadGame.battleFlag;           

        portfolioSize = loadGame.portfolioSize;   
        stockID = loadGame.stockID;
        secTotal = loadGame.secTotal;
        portTotal = loadGame.portTotal;
        sellDelay = loadGame.sellDelay;
        riskiness = loadGame.riskiness;
        maxPort = loadGame.maxPort;
        m = loadGame.m;
        investLevel = loadGame.investLevel;
        stockGainThreshold = loadGame.stockGainThreshold;
        ledger = loadGame.ledger;
        stockReportCounter = loadGame.stockReportCounter;
  
        tourneyCost = loadGame.tourneyCost;    
        tourneyLvl = loadGame.tourneyLvl; 
        stratCounter = loadGame.stratCounter; 
        roundNum = loadGame.roundNum; 
        hMove = loadGame.hMove; 
        vMove = loadGame.vMove;
        hMovePrev = loadGame.hMovePrev;
        vMovePrev = loadGame.vMovePrev;
        aa = loadGame.aa;
        ab = loadGame.ab;
        ba = loadGame.ba;
        bb = loadGame.bb;
        rounds = loadGame.rounds;
        currentRound = loadGame.currentRound;
        rCounter = loadGame.rCounter;
        tourneyInProg = loadGame.tourneyInProg;
        winnerPtr = loadGame.winnerPtr;
        high = loadGame.high;
        pick = loadGame.pick;
        yomi = loadGame.yomi;
        yomiBoost = loadGame.yomiBoost; 

        probeSpeed = loadGame.probeSpeed;  
        probeNav = loadGame.probeNav; 
        probeRep = loadGame.probeRep; 
        partialProbeSpawn = loadGame.partialProbeSpawn;
        probeHaz = loadGame.probeHaz;
        partialProbeHaz = loadGame.partialProbeHaz;
        probesLostHaz = loadGame.probesLostHaz;
        probesLostDrift = loadGame.probesLostDrift;
        probesLostCombat = loadGame.probesLostCombat;
        probeFac = loadGame.probeFac;
        probeWire = loadGame.probeWire;
        probeCombat = loadGame.probeCombat;
        attackSpeed = loadGame.attackSpeed;
        battleSpeed = loadGame.battleSpeed;
        attackSpeedFlag = loadGame.attackSpeedFlag;
        attackSpeedMod = loadGame.attackSpeedMod;
        probeDescendents = loadGame.probeDescendents;
        drifterCount = loadGame.drifterCount;
        warTrigger = loadGame.warTrigger;
        battleID = loadGame.battleID;
        battleName = loadGame.battleName;
        battleNameFlag = loadGame.battleNameFlag;
        maxBattles = loadGame.maxBattles;
        battleClock = loadGame.battleClock;
        battleAlarm = loadGame.battleAlarm;
        outcomeTimer = loadGame.outcomeTimer;
        drifterCombat = loadGame.drifterCombat;
        probeTrust = loadGame.probeTrust;
        probeUsedTrust = loadGame.probeUsedTrust;
        probeTrustCost = loadGame.probeTrustCost;
        probeLaunchLevel = loadGame.probeLaunchLevel;
        probeCost = loadGame.probeCost;
    
    project51.priceTag =  "(" + qChipCost + " GPU hours)";
    
    
    refresh();
    
}

function reset() {
    localStorage.removeItem("saveGame");
    localStorage.removeItem("saveProjectsUses");
    localStorage.removeItem("saveProjectsFlags");
    localStorage.removeItem("saveProjectsActive");
    localStorage.removeItem("saveStratsActive");
    location.reload();
}

function loadPrestige() {
    
        var loadPrestige = JSON.parse(localStorage.getItem("savePrestige"));
        
        prestigeU = loadPrestige.prestigeU;
        prestigeS = loadPrestige.prestigeS;
}    

if (investmentEngineFlag == 0){
    console.log("set none")
    investmentEngineElement.style.display="none";
    investmentEngineUpgradeElement.style.display="none";
} else if(investmentEngineFlag == 1) {
    investmentEngineElement.style.display="";
    investmentEngineUpgradeElement.style.display="none";        
}