Flunik Tools reloaded

Windowed variant, Base Upgrade info and POI info

当前为 2015-12-04 提交的版本,查看 最新版本

// ==UserScript==
// @name        Flunik Tools reloaded
// @namespace   FlunikTools reloaded
// @description Windowed variant, Base Upgrade info and POI info
// @version     4.2.4
// @author      dbendure
// @include     http*://prodgame*.alliances.commandandconquer.com/*/index.aspx*
// ==/UserScript==

//change meaning the increase, the difference between pre and post upgarde
 //cost, change and time until.
(function() {
    var FlunikTools_main = function() {
        try {
            function CCTAWrapperIsInstalled() {
                return (typeof(CCTAWrapper_IsInstalled) != 'undefined' && CCTAWrapper_IsInstalled);
            }

            function createFlunikTools() {
                console.log('FLUNIKTOLS createFlunikTools');

                qx.Class.define("FlunikTools.Main", {
                    type: "singleton",
                    extend: qx.core.Object,
                    members: {
                        AutoUpdateButton: null,
                        cmdButton: null,
                        autoUpdateHandleAll: null,
                        composite: null,
                        tabView: null,
                        tabViewA: null,
                        tabViewB: null,
                        page1: null,
                        win: null,
                        //checkGB : null,
                        groupBoxA: null,
                        groupBoxB: null,
                        groupBoxC: null,
                        groupBoxD: null,
                        checkBoxA: null,

                        checkBoxB: null,
                        checkBoxC: null,
                        cityPage: null,
                        cmdB: null,
                        textfield: null,
                        tableModel: null,
                        table: null,
                        poiRows: null,
                        createRandomRows: null,


                        initialize: function() {


                            console.log('FLUNIKTOLS initialize');



                            win = new qx.ui.window.Window("First Window");
                            win.setWidth(600);
                            win.setHeight(300);
                            win.setShowMinimize(false);
                            win.setLayout(new qx.ui.layout.VBox());
                            //////////////////////////////////////////////////////////
                            composite = new qx.ui.container.Composite();
                            composite.setLayout(new qx.ui.layout.Basic());
                            ////////////////////////////////////////////////////////////////



                            // table model
                            tableModel = new qx.ui.table.model.Simple();
                            //tableModel.setColumns([ "ID", "Type", "Level", "Score" ]);
                            if (this.poiRows() != null) {
                                this.poiRows();
                            }
                            tableModelA = new qx.ui.table.model.Simple();
                            tableModelA.setColumns(["Name", "Type", "Level", "ProductionA", "NewLvlDeltaA", "ProductionB", "NewLvlDeltaB", "ProductonC", "NewLvlDeltaC", "TibCost", "PowCost", "x", "y"]);
                            // make second column editable
                            //tableModel.setColumnEditable(1, true);

                            // table
                            var table = new qx.ui.table.Table(tableModel).set({
                                decorator: null,
                                Padding: 1,

                            });
                            var tableA = new qx.ui.table.Table(tableModelA).set({
                                decorator: null,
                                Padding: 1,
                                height: 200,
                                width: 600

                            });
                            ////////////////////////////////////////////////////////////////
                            page2 = new qx.ui.tabview.Page("Base Upgrade");
                            page2.setLayout(new qx.ui.layout.VBox());
                            ////////////////////////////////////////////////////////////////
                            page3 = new qx.ui.tabview.Page("Poi Info");
                            page3.setLayout(new qx.ui.layout.VBox());
                            page3.add(table);
                            ////////////////////////////////////////////////////////////////
                            tabView = new qx.ui.tabview.TabView();
                            tabView.setBarPosition('left');
                            //page2.add(tabView);
                            //////////////////////////////////////////////////////////////////
                            tabViewB = new qx.ui.tabview.TabView();
                            tabViewB.setBarPosition('left');
                            tibPage = new qx.ui.tabview.Page("Tib", "https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/98abd73f92a4fb8f5f3a28a1b2a82344.png");
                            tibPage.setLayout(new qx.ui.layout.VBox());
                            cryPage = new qx.ui.tabview.Page("Cry", "https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/61f096dde442bd3be1843a0929900194.png");
                            cryPage.setLayout(new qx.ui.layout.VBox());
                            powPage = new qx.ui.tabview.Page("Pow", "https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/fa6798783e2c662ce81e861990aef03a.png");
                            powPage.setLayout(new qx.ui.layout.VBox());
                            defPage = new qx.ui.tabview.Page("Def", "https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/58f5d05df06e0f7a168de22ecd3baaf8.png");
                            defPage.setLayout(new qx.ui.layout.VBox());
                            infPage = new qx.ui.tabview.Page("Inf", "https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/2a86e68b80393142036e6b9121852555.png");
                            infPage.setLayout(new qx.ui.layout.VBox());
                            vehPage = new qx.ui.tabview.Page("Veh", "https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/fdb2ebef642e14b91439d4b152c6c401.png");
                            vehPage.setLayout(new qx.ui.layout.VBox());
                            airPage = new qx.ui.tabview.Page("Air", "https://eaassets-a.akamaihd.net/cncalliancesgame/cdn/data/b8735956fb36d35b16faf087bbcbd293.png");
                            airPage.setLayout(new qx.ui.layout.VBox());
                            tabViewB.add(tibPage);
                            tabViewB.add(cryPage);
                            tabViewB.add(powPage);
                            tabViewB.add(defPage);
                            tabViewB.add(infPage);
                            tabViewB.add(vehPage);
                            tabViewB.add(airPage);
                            page3.add(tabViewB);

                            //////////////////////////////////////////////////////////////////
                            tabViewA = new qx.ui.tabview.TabView();
                            tabViewA.setBarPosition('top');
                            tabViewA.add(page2);
                            tabViewA.add(page3);
                            //////////////////////////////////////////////////////////////////
                            page1 = new qx.ui.tabview.Page("BaseName");
                            page1.setLayout(new qx.ui.layout.VBox());
                            //page1.add(new qx.ui.basic.Label("Page Content"));
                            //tabView.add(page1);
                            /////////////////////////////////////////////////////////////////
                            /*checkGB = new qx.ui.groupbox.CheckGroupBox("Label");
                            checkGB.setLayout(new qx.ui.layout.VBox());*/
                            /////////////////////////////////////////////////////////////////
                            groupBoxA = new qx.ui.groupbox.GroupBox("Buildings");
                            groupBoxA.setLayout(new qx.ui.layout.Grid());
                            groupBoxB = new qx.ui.groupbox.GroupBox("Defense");
                            groupBoxB.setLayout(new qx.ui.layout.Grid());
                            groupBoxC = new qx.ui.groupbox.GroupBox("Offence");
                            groupBoxC.setLayout(new qx.ui.layout.Grid());
                            groupBoxD = new qx.ui.groupbox.GroupBox("Base");
                            groupBoxD.setLayout(new qx.ui.layout.VBox());
                            groupBoxE = new qx.ui.groupbox.GroupBox();
                            groupBoxE.setLayout(new qx.ui.layout.VBox());
                            groupBoxF = new qx.ui.groupbox.GroupBox().set({
                                height: 300,
                                width: 600
                            });
                            groupBoxF.setLayout(new qx.ui.layout.VBox());
                            //////////////////////////////////////////////////////////////////
                            /*
							checkBoxA = new qx.ui.form.CheckBox("stuffA");
                            checkBoxCy = new qx.ui.form.CheckBox("Construction_Yard");
                            checkBoxRe = new qx.ui.form.CheckBox("Refinery");
                            checkBoxPp = new qx.ui.form.CheckBox("PowerPlant");
                            checkBoxCc = new qx.ui.form.CheckBox("Command_Center");
                            checkBoxDh = new qx.ui.form.CheckBox("Defense_HQ");
                            checkBoxBa = new qx.ui.form.CheckBox("Barracks");
                            checkBoxFa = new qx.ui.form.CheckBox("Factory");
                            checkBoxAi = new qx.ui.form.CheckBox("Airport");
                            checkBoxDf = new qx.ui.form.CheckBox("Defense_Facility");
                            //checkBoxA = new qx.ui.form.CheckBox(ClientLib.Base.ETechName.Research_BaseFound
                            //checkBoxA = new qx.ui.form.CheckBox(ClientLib.Base.ETechName.Harvester_Crystal
                            checkBoxHa = new qx.ui.form.CheckBox("Harvester");
                            checkBoxSai = new qx.ui.form.CheckBox("Support_Air");
                            checkBoxSio = new qx.ui.form.CheckBox("Support_Ion");
                            checkBoxSar = new qx.ui.form.CheckBox("Support_Art");
                            checkBoxSi = new qx.ui.form.CheckBox("Silo");
                            checkBoxAc = new qx.ui.form.CheckBox("Accumulator");
							
                            checkBoxB = new qx.ui.form.CheckBox("stuffB");
							
                            checkBoxC = new qx.ui.form.CheckBox("stuffC");
                            */
                            //////////////////////////////////////////////////////////////////
                            textfield = new qx.ui.form.TextArea("Change me...");
                            //textfield.setLiveUpdate(true);
                            //var label = new qx.ui.basic.Label("Change me...");
                            //textfield.bind("value", label, "value");
                            /////////////////////////////////////////////////////////////////////
                            //groupBoxA.add(checkBoxCy, {row : 0, column : 0});
                            //groupBoxA.add(checkBoxRe, {row : 0, column : 1});
                            //groupBoxA.add(checkBoxPp, {row : 0, column : 2});
                            //groupBoxA.add(checkBoxCc, {row : 0, column : 3});
                            //groupBoxA.add(checkBoxDh, {row : 1, column : 0});
                            //groupBoxA.add(checkBoxBa, {row : 1, column : 1});
                            //groupBoxA.add(checkBoxFa, {row : 1, column : 2});
                            //groupBoxA.add(checkBoxAi, {row : 1, column : 3});
                            //groupBoxA.add(checkBoxDf, {row : 2, column : 0});
                            //groupBoxA.add(checkBoxHa, {row : 2, column : 1});
                            //groupBoxA.add(checkBoxSai, {row : 3, column : 1});
                            //groupBoxA.add(checkBoxSio, {row : 3, column : 2});
                            //groupBoxA.add(checkBoxSar, {row : 3, column : 0});
                            //groupBoxA.add(checkBoxSi, {row : 2, column : 2});
                            //groupBoxA.add(checkBoxAc, {row : 2, column : 3});
                            //groupBoxB.add(checkBoxB, {row : 3, column : 3});
                            //groupBoxC.add(checkBoxC, {row : 4, column : 0});
                            groupBoxF.add(tableA);

                            groupBoxD.add(groupBoxA);
                            groupBoxD.add(groupBoxB);
                            groupBoxD.add(groupBoxC);
                            //groupBoxF.add(textfield);
                            //groupBoxF.add(label);

                            /*checkGB.add(groupBoxA);
                            checkGB.add(groupBoxB);
                            checkGB.add(groupBoxC);*/

                            page2.add(groupBoxE);
                            page2.add(tabView);
                            page2.add(groupBoxF);
                            //page2.add(label);


                            page1.add(groupBoxD);

                            composite.add(tabViewA);

                            win.add(tabViewA);
                            //win.open();

                            /*this.getRoot().add(win, {left:20, top:20});
                            win.open();*/


                            AutoUpdateButton = new qx.ui.form.Button("Toggle Autoupdate", null).set({
                                toolTipText: "Autoupdate",
                                width: 100,
                                height: 40,
                                maxWidth: 100,
                                maxHeight: 40,
                                appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                center: true
                            });

                            cmdButton = new qx.ui.form.RepeatButton("command", null).set({
                                    toolTipText: "Autoupdate",
                                    width: 100,
                                    height: 40,
                                    maxWidth: 100,
                                    maxHeight: 40,
                                    appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                    center: true,
                                    firstInterval: 10000,
                                    interval: 10000,
                                    minTimer: 0,
                                    timerDecrease: 1000

                                }),

                                tibButton = new qx.ui.form.Button("Tib", null).set({
                                    toolTipText: "press to refresh table",
                                    width: 100,
                                    height: 40,
                                    maxWidth: 100,
                                    maxHeight: 40,
                                    appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                    center: true
                                });

                            cryButton = new qx.ui.form.Button("command", null).set({
                                toolTipText: "press to refresh table",
                                width: 100,
                                height: 40,
                                maxWidth: 100,
                                maxHeight: 40,
                                appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                center: true
                            });

                            powButton = new qx.ui.form.Button("command", null).set({
                                toolTipText: "press to refresh table",
                                width: 100,
                                height: 40,
                                maxWidth: 100,
                                maxHeight: 40,
                                appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                center: true
                            });

                            defButton = new qx.ui.form.Button("command", null).set({
                                toolTipText: "press to refresh table",
                                width: 100,
                                height: 40,
                                maxWidth: 100,
                                maxHeight: 40,
                                appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                center: true
                            });

                            infButton = new qx.ui.form.Button("command", null).set({
                                toolTipText: "press to refresh table",
                                width: 100,
                                height: 40,
                                maxWidth: 100,
                                maxHeight: 40,
                                appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                center: true
                            });

                            vehButton = new qx.ui.form.Button("command", null).set({
                                toolTipText: "press to refresh table",
                                width: 100,
                                height: 40,
                                maxWidth: 100,
                                maxHeight: 40,
                                appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                center: true
                            });

                            airButton = new qx.ui.form.Button("command", null).set({
                                toolTipText: "press to refresh table",
                                width: 100,
                                height: 40,
                                maxWidth: 100,
                                maxHeight: 40,
                                appearance: ("button-playarea-mode-frame"), //"button-standard-"+factionText), button-playarea-mode-red-frame
                                center: true
                            });

                            table.addListener("cellTap", function(e) {
                                if (table.getFocusedRow() != null) {
                                    var x = table.getTableModel().getData()[table.getFocusedRow()][3];
                                    var y = table.getTableModel().getData()[table.getFocusedRow()][4];
                                    FlunikTools.Main.getInstance().viewPOI(x, y);
                                }
                                //webfrontend.gui.UtilView.centerCoordinatesOnRegionViewWindow(parseInt('554', 10), parseInt('194', 10));
                            }, this);

                            tibButton.addListener("click", function(e) {
                                if (tabViewB.getSelection()[0].getLabel() == "Tib") {
                                    FlunikTools.Main.getInstance().poiRows();
                                }

                            }, this);
                            tibPage.add(tibButton);

                            cryButton.addListener("click", function(e) {
                                if (tabViewB.getSelection()[0].getLabel() == "Cry") {
                                    FlunikTools.Main.getInstance().poiRows();
                                }

                            }, this);
                            cryPage.add(cryButton);

                            powButton.addListener("click", function(e) {
                                if (tabViewB.getSelection()[0].getLabel() == "Pow") {
                                    FlunikTools.Main.getInstance().poiRows();
                                }

                            }, this);
                            powPage.add(powButton);

                            defButton.addListener("click", function(e) {
                                if (tabViewB.getSelection()[0].getLabel() == "Def") {
                                    FlunikTools.Main.getInstance().poiRows();
                                }

                            }, this);
                            defPage.add(defButton);

                            infButton.addListener("click", function(e) {
                                if (tabViewB.getSelection()[0].getLabel() == "Inf") {
                                    FlunikTools.Main.getInstance().poiRows();
                                }

                            }, this);
                            infPage.add(infButton);

                            vehButton.addListener("click", function(e) {
                                if (tabViewB.getSelection()[0].getLabel() == "Veh") {
                                    FlunikTools.Main.getInstance().poiRows();
                                }

                            }, this);
                            vehPage.add(vehButton);

                            airButton.addListener("click", function(e) {
                                if (tabViewB.getSelection()[0].getLabel() == "Air") {
                                    FlunikTools.Main.getInstance().poiRows();
                                }

                            }, this);
                            airPage.add(airButton);


                            cmdButton.addListener("execute", function(e) {
                                //numb = 0;
                                if (FlunikTools.Main.getInstance().autoUpdateHandleAll != null) {
                                    //numb = 0;
                                    FlunikTools.Main.getInstance().stopAutoUpdate();

                                    cmdButton.setLabel("cmd.OFF");
                                    //FlunikTools.Main.getInstance().clearCheckBox();

                                    //FlunikTools.Main.getInstance().NumberCount(numb);
                                } else {
                                    this.startAutoUpdate();

                                    cmdButton.setLabel("cmd.ON");

                                    //win.open();


                                }
                                //groupBoxE.add(cmdButton);
                                //page.add(new qx.ui.form.CheckBox("Reading"));
                            }, this);



                            AutoUpdateButton.addListener("click", function(e) {
                                //numb = 0;
                                if (FlunikTools.Main.getInstance().cmdB != null) {
                                    //numb = 0;
                                    FlunikTools.Main.getInstance().stopCmdAutoUpdate();
                                    AutoUpdateButton.setLabel("B.OFF");
                                    //FlunikTools.Main.getInstance().clearCheckBox();
                                    //win.close();
                                    //FlunikTools.Main.getInstance().NumberCount(numb);
                                } else {

                                    FlunikTools.Main.getInstance().cmdUpdate();
                                    AutoUpdateButton.setLabel("B.ON");
                                    //win.open();



                                }
                                if (AutoUpdateButton.getLabel() == "B.ON") {
                                    win.open();
                                    if (FlunikTools.Main.getInstance().poiRows() != null) {
                                        FlunikTools.Main.getInstance().poiRows();
                                    }
                                } else {
                                    win.close();
                                }
                                //page.add(new qx.ui.form.CheckBox("Reading"));
                            }, this);
                            groupBoxE.add(new qx.ui.basic.Label("Options"));

                            groupBoxE.add(cmdButton);

                            var app = qx.core.Init.getApplication();

                            app.getDesktop().add(AutoUpdateButton, {
                                right: 120,
                                bottom: 100
                            });

                            /*if(win.isActive()){
                            	FlunikTools.Main.getInstance().startAutoUpdate();
                            } else {
                            	FlunikTools.Main.getInstance().stopAutoUpdate();
                            }*/


                        },

                        viewPOI: function(coordx, coordy) {

                            return webfrontend.gui.UtilView.centerCoordinatesOnRegionViewWindow(parseInt(coordx.toString(), 10), parseInt(coordy.toString(), 10));
                        },

                        buildingRows: function(arr, building, type, prodA, prodB, prodC, costA, costB, deltaA, deltaB, deltaC) {
                            var _this = FlunikTools.Main.getInstance();
                            var buildingName = building.get_UnitGameData_Obj().dn;
                            var x = building.get_CoordX();
                            var y = building.get_CoordY();
							
							if(building.get_TechName() == ClientLib.Base.ETechName.PowerPlant){
							tableModelA.setColumns(["Name", "Type", "Level", "PowerProduction", "NewLvlDeltaA", "CrystalProduction", "NewLvlDeltaB", "CreditProducton", "NewLvlDeltaC", "TibCost", "PowCost", "x", "y"]);
							arr.push([buildingName, type, building.get_CurrentLevel(), prodA, deltaA, prodB, deltaB, prodC, deltaC, costA, costB, x, y]);
							}
							
							if(building.get_TechName() == ClientLib.Base.ETechName.Refinery){
							tableModelA.setColumns(["Name", "Type", "Level", "PowerCreditProduction", "NewLvlDeltaA", "TibCreditProduction", "NewLvlDeltaB",  "TibCost", "PowCost", "x", "y", "", ""]);
							arr.push([buildingName, type, building.get_CurrentLevel(), prodA, deltaA, prodB, deltB, costA, costB, x, y, "",  ""]);
							}
							
							if(building.get_TechName() == ClientLib.Base.ETechName.Harvester){
							tableModelA.setColumns(["Name", "Type", "Level", "TibProduction", "NewLvlDeltaA", "CryProduction", "NewLvlDeltaB", "TibCost", "PowCost", "x", "y", "", ""]);
							arr.push([buildingName, type, building.get_CurrentLevel(), prodA, deltaA, prodB, deltaB, costA, costB, x, y,  "", ""]);
							}
							
							if(building.get_TechName() == ClientLib.Base.ETechName.Silo){
							tableModelA.setColumns(["Name", "Type", "Level", "TibProduction", "NewLvlDeltaA", "CryProduction", "NewLvlDeltaB", "TibCost", "PowCost", "x", "y", "", ""]);
							arr.push([buildingName, type, building.get_CurrentLevel(), prodA, deltaA, prodB, deltaB, costA, costB, x, y,  "", ""]);
							}
							
							if(building.get_TechName() == ClientLib.Base.ETechName.Accumulator){
							tableModelA.setColumns(["Name", "Type", "Level", "PowerProduction", "NewLvlDelta", "TibCost", "PowCost", "x", "y",  "", "",  "", ""]);
							arr.push([buildingName, type, building.get_CurrentLevel(), prodA, deltaA, costA, costB, x, y,  "", "",  "", ""]);
							}
							
							
							
							tableModelA.setData(arr);
                            //rowData = [];

                        },

                        poiRows: function() {
                            //var inputField = document.querySelector('input:focus, textarea:focus');
                            //if (inputField != null) {
                            var num = -1;
                            var tibArr = [];
                            var rowData = [];
                            var poiSorceHolder = [];
                            poiRank_Score = ClientLib.Data.MainData.GetInstance().get_Alliance().get_POIRankScore();
                            tableModel.setColumns(["ifLost", "Level", "Score", "XCoord", "YCoord"]);

                            for (var key in ClientLib.Data.MainData.GetInstance().get_Alliance().get_OwnedPOIs()) {

                                var obj = ClientLib.Data.MainData.GetInstance().get_Alliance().get_OwnedPOIs()[key];

                                tibArr[num] = obj;

                                //var objCoords = obj.x, obj.y;//document.write(webfrontend.gui.util.BBCode.createCoordsLinkText(obj.x, obj.y));
                                if (tabViewB.getSelection()[0].getLabel() == "Tib" && obj.t == ClientLib.Base.EPOIType.TiberiumBonus) {
                                    num++;
                                    poiSorceHolder[num] = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l);
                                    if (num >= 0) {
                                        if (num == 0) {
                                            rowData.push([poiRank_Score[0].s, "", "", "", ""]);
                                            val = poiRank_Score[0].s - poiSorceHolder[num];
                                        } else if (num >= 1) {
                                            val = poiRank_Score[0].s - poiSorceHolder.reduce(function(previousValue, currentValue, index, array) {
                                                return (previousValue + currentValue);
                                            });
                                        }

                                    }
                                    rowData.push([val, obj.l, ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l), obj.x, obj.y]);
                                }
                                if (tabViewB.getSelection()[0].getLabel() == "Cry" && obj.t == ClientLib.Base.EPOIType.CrystalBonus) {
                                    num++;
                                    poiSorceHolder[num] = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l);
                                    if (num >= 0) {
                                        if (num == 0) {
                                            rowData.push([poiRank_Score[1].s, "", "", "", ""]);
                                            val = poiRank_Score[1].s - poiSorceHolder[num];
                                        } else if (num >= 1) {
                                            val = poiRank_Score[1].s - poiSorceHolder.reduce(function(previousValue, currentValue, index, array) {
                                                return (previousValue + currentValue);
                                            });
                                        }

                                    }
                                    rowData.push([val, obj.l, ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l), obj.x, obj.y]);
                                }
                                if (tabViewB.getSelection()[0].getLabel() == "Pow" && obj.t == ClientLib.Base.EPOIType.PowerBonus) {
                                    num++;
                                    poiSorceHolder[num] = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l);
                                    if (num >= 0) {
                                        if (num == 0) {
                                            rowData.push([poiRank_Score[2].s, "", "", "", ""]);
                                            val = poiRank_Score[2].s - poiSorceHolder[num];
                                        } else if (num >= 1) {
                                            val = poiRank_Score[2].s - poiSorceHolder.reduce(function(previousValue, currentValue, index, array) {
                                                return (previousValue + currentValue);
                                            });
                                        }

                                    }
                                    rowData.push([val, obj.l, ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l), obj.x, obj.y]);
                                }
                                if (tabViewB.getSelection()[0].getLabel() == "Inf" && obj.t == ClientLib.Base.EPOIType.InfanteryBonus) {
                                    num++;
                                    poiSorceHolder[num] = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l);
                                    if (num >= 0) {
                                        if (num == 0) {
                                            rowData.push([poiRank_Score[3].s, "", "", "", ""]);
                                            val = poiRank_Score[3].s - poiSorceHolder[num];
                                        } else if (num >= 1) {
                                            val = poiRank_Score[3].s - poiSorceHolder.reduce(function(previousValue, currentValue, index, array) {
                                                return (previousValue + currentValue);
                                            });
                                        }

                                    }
                                    rowData.push([val, obj.l, ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l), obj.x, obj.y]);
                                }
                                if (tabViewB.getSelection()[0].getLabel() == "Veh" && obj.t == ClientLib.Base.EPOIType.VehicleBonus) {
                                    num++;
                                    poiSorceHolder[num] = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l);
                                    if (num >= 0) {
                                        if (num == 0) {
                                            rowData.push([poiRank_Score[4].s, "", "", "", ""]);
                                            val = poiRank_Score[4].s - poiSorceHolder[num];
                                        } else if (num >= 1) {
                                            val = poiRank_Score[4].s - poiSorceHolder.reduce(function(previousValue, currentValue, index, array) {
                                                return (previousValue + currentValue);
                                            });
                                        }

                                    }
                                    rowData.push([val, obj.l, ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l), obj.x, obj.y]);
                                }
                                if (tabViewB.getSelection()[0].getLabel() == "Air" && obj.t == ClientLib.Base.EPOIType.AirBonus) {
                                    num++;
                                    poiSorceHolder[num] = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l);
                                    if (num >= 0) {
                                        if (num == 0) {
                                            rowData.push([poiRank_Score[5].s, "", "", "", ""]);
                                            val = poiRank_Score[5].s - poiSorceHolder[num];
                                        } else if (num >= 1) {
                                            val = poiRank_Score[5].s - poiSorceHolder.reduce(function(previousValue, currentValue, index, array) {
                                                return (previousValue + currentValue);
                                            });
                                        }

                                    }
                                    rowData.push([val, obj.l, ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l), obj.x, obj.y]);
                                }
                                if (tabViewB.getSelection()[0].getLabel() == "Def" && obj.t == ClientLib.Base.EPOIType.DefenseBonus) {
                                    num++;
                                    poiSorceHolder[num] = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l);
                                    if (num >= 0) {
                                        if (num == 0) {
                                            rowData.push([poiRank_Score[6].s, "", "", "", ""]);
                                            val = poiRank_Score[6].s - poiSorceHolder[num];
                                        } else if (num >= 1) {
                                            val = poiRank_Score[6].s - poiSorceHolder.reduce(function(previousValue, currentValue, index, array) {
                                                return (previousValue + currentValue);
                                            });
                                        }

                                    }
                                    rowData.push([val, obj.l, ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(obj.l), obj.x, obj.y]);
                                }
                                //num++;
                            }


                            tableModel.setData(rowData);
                            rowData = [];
                            //tableModel.setData(FlunikTools.Main.getInstance().createRandomRows(tibArr.length));
                            //return tibArr.length
                            //}
                        },

                        cityPage: function(city, num) {
                            var _this = FlunikTools.Main.getInstance();
                            var pageArr = new Array();
                            var groupBoxArrA = new Array();
                            var groupBoxArrB = new Array();
                            var groupBoxArrC = new Array();
                            var groupBoxArr = new Array();
                            //var checkBoxArr = new Array();
                            if (num == 0 && num >= tabView.getChildren().length) {
                                //page1.resetLabel();
                                //page1.setLabel(city.m_SupportDedicatedBaseName);
                                ////groupBoxD.resetLegend();
                                //groupBoxD.setLegend("Upgrade on this base: " + city.m_SupportDedicatedBaseName);
                                page = new qx.ui.tabview.Page(city.m_SupportDedicatedBaseName);
                                pageArr[num] = page;
                                pageArr[num].setLayout(new qx.ui.layout.VBox());

                                groupBoxArrA[num] = new qx.ui.groupbox.GroupBox("Buildings");
                                groupBoxArrA[num].setLayout(new qx.ui.layout.Grid());

                                groupBoxArrB[num] = new qx.ui.groupbox.GroupBox("Defense");
                                groupBoxArrB[num].setLayout(new qx.ui.layout.Grid());

                                groupBoxArrC[num] = new qx.ui.groupbox.GroupBox("Offense");
                                groupBoxArrC[num].setLayout(new qx.ui.layout.Grid());

                                groupBoxArr[num] = new qx.ui.groupbox.GroupBox("Upgrade on this base: " + city.m_SupportDedicatedBaseName);
                                groupBoxArr[num].setLayout(new qx.ui.layout.VBox());



                                groupBoxArr[num].add(groupBoxArrA[num]);
                                groupBoxArr[num].add(groupBoxArrB[num]);
                                groupBoxArr[num].add(groupBoxArrC[num]);
                                pageArr[num].add(groupBoxArr[num]);
                                tabView.add(pageArr[num]);
                                //console.log(num, page1.getLabel(), page1.setLabel(city.m_SupportDedicatedBaseName) );
                            }
                            if (num > 0 && num >= tabView.getChildren().length) {

                                page = new qx.ui.tabview.Page(city.m_SupportDedicatedBaseName);
                                pageArr[num] = page;
                                pageArr[num].setLayout(new qx.ui.layout.VBox());

                                groupBoxArrA[num] = new qx.ui.groupbox.GroupBox("Buildings");
                                groupBoxArrA[num].setLayout(new qx.ui.layout.Grid());

                                groupBoxArrB[num] = new qx.ui.groupbox.GroupBox("Defense");
                                groupBoxArrB[num].setLayout(new qx.ui.layout.Grid());

                                groupBoxArrC[num] = new qx.ui.groupbox.GroupBox("Offense");
                                groupBoxArrC[num].setLayout(new qx.ui.layout.Grid());

                                groupBoxArr[num] = new qx.ui.groupbox.GroupBox("Upgrade on this base: " + city.m_SupportDedicatedBaseName);
                                groupBoxArr[num].setLayout(new qx.ui.layout.VBox());



                                groupBoxArr[num].add(groupBoxArrA[num]);
                                groupBoxArr[num].add(groupBoxArrB[num]);
                                groupBoxArr[num].add(groupBoxArrC[num]);
                                pageArr[num].add(groupBoxArr[num]);
                                tabView.add(pageArr[num]);
                            }

                        },
                        buildingBox(building, num, tech, arr, typeNum) {
                            var groupBoxArrA = new Array();

                            var checkBox;
                            //console.log(building, tech, num, arr);
                            if (num == 0) {

                                if (tech == ClientLib.Base.ETechName.Research_BaseFound) {
                                    checkBox;
                                } else if (tech == ClientLib.Base.ETechName.Construction_Yard && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 0
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Refinery && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 1
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.PowerPlant && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Command_Center && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 3
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                    //continue;
                                } else if (tech == ClientLib.Base.ETechName.Defense_HQ && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 0
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Barracks && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 1
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Factory && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Airport && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 3
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Defense_Facility && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 0
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Harvester && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 1
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Support_Air && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                    //continue;
                                } else if (tech == ClientLib.Base.ETechName.Support_Ion && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Support_Art && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Silo && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 3
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Accumulator && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 3,
                                                column: 0
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }

                                }




                            }
                            if (num > 0) {
                                //console.log(tabView.getSelectables()[num]);
                                if (tech == ClientLib.Base.ETechName.Research_BaseFound) {
                                    checkBox;
                                } else if (tech == ClientLib.Base.ETechName.Construction_Yard && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 0
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                    //tabView.getChildren()[num].getChildren()[0].getChildren()[0].add(new qx.ui.form.CheckBox(building), {row : 0, column : 0});
                                    //continue;
                                } else if (tech == ClientLib.Base.ETechName.Refinery && tech == arr[building]) {
                                    try {

                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 1
                                            });
                                        }



                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }


                                } else if (tech == ClientLib.Base.ETechName.PowerPlant && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Command_Center && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 0,
                                                column: 3
                                            });
                                        }
                                        //FlunikTools.Main.getInstance().plzCheckBox(num, building, typeNum);
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Defense_HQ && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 0
                                            });
                                        }
                                        //FlunikTools.Main.getInstance().plzCheckBox(num, building, typeNum);
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Barracks && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 1
                                            });
                                        }
                                        //FlunikTools.Main.getInstance().plzCheckBox(num, building, typeNum);
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Factory && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 2
                                            });
                                        }
                                        //FlunikTools.Main.getInstance().plzCheckBox(num, building, typeNum);
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Airport && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 1,
                                                column: 3
                                            });
                                        }
                                        //FlunikTools.Main.getInstance().plzCheckBox(num, building, typeNum);
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Defense_Facility && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 0
                                            });
                                        }
                                        //FlunikTools.Main.getInstance().plzCheckBox(num, building, typeNum);
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Harvester && tech == arr[building]) {
                                    try {

                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 1
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }


                                } else if (tech == ClientLib.Base.ETechName.Support_Air && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Support_Ion && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                }
                                //continue;
                                else if (tech == ClientLib.Base.ETechName.Support_Art && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 2
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                } else if (tech == ClientLib.Base.ETechName.Silo && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 2,
                                                column: 3
                                            });
                                        }
                                        //groupBoxArrA[0].add(new qx.ui.form.CheckBox(building), {row : 2, column : 3});
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }

                                } else if (tech == ClientLib.Base.ETechName.Accumulator && tech == arr[building]) {
                                    try {
                                        if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, building, typeNum) == false) {
                                            tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(building), {
                                                row: 3,
                                                column: 0
                                            });
                                        }
                                    } catch (e) {
                                        console.log("createFlunikTools: ", e);
                                    }
                                }
                            }

                        },

                        plzCheckBox: function(num, building, typeNum) {
                            var bool = false;
                            for (var key in tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].getChildren()) {

                                var obj = tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].getChildren()[key];

                                //if(obj.getLabel() == building || obj.toString() == "undefined"){
                                if (cmdButton.getLabel() == "cmd.On") {
                                    obj.setValue() = true;

                                }
                            }
                            //return bool;
                        },

                        isCheckBoxChecked: function(num, building, typeNum) {
                            var bool = false;
                            for (var key in tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].getChildren()) {

                                var obj = tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].getChildren()[key];

                                //if(obj.getLabel() == building || obj.toString() == "undefined"){
                                if (obj.getValue() && obj.getLabel() == building) {
                                    bool = true;

                                }
                            }
                            return bool;
                        },
                        isCheckBoxPlaced: function(num, building, typeNum) {
                            var bool = false;
                            for (var key in tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].getChildren()) {

                                var obj = tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].getChildren()[key];

                                if (obj.getLabel() == building || obj.toString() == "undefined") {

                                    bool = true;

                                }
                            }
                            return bool;
                        },
                        clearCheckBox: function() {
                            var bool = false;
                            for (var key in tabView.getSelectables()) {
                                var piece = tabView.getSelectables()[key];
                                for (var aKey in piece.getChildren()[0].getChildren()[typeNum].getChildren()) {

                                    var obj = piece.getChildren()[0].getChildren()[aKey];

                                    if (obj.toString() != "undefined") {

                                        bool = obj.removeAll();

                                    }
                                }
                            }
                            return bool;
                        },
                        unitBox: function(unitName, num, typeNum, xNum, yNum) {
                            if (typeNum == 2) {
                                //console.log(unitName, num, typeNum, xNum, yNum);
                                if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, unitName, typeNum) == false) {
                                    tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(unitName), {
                                        row: xNum,
                                        column: yNum
                                    });
                                    //console.log(unitName, num, typeNum, xNum, yNum);
                                }
                            } else if (typeNum == 1) {
                                //console.log(unitName, num, typeNum, xNum, yNum);
                                if (FlunikTools.Main.getInstance().isCheckBoxPlaced(num, unitName, typeNum) == false) {
                                    tabView.getSelectables()[num].getChildren()[0].getChildren()[typeNum].add(new qx.ui.form.CheckBox(unitName), {
                                        row: xNum,
                                        column: yNum
                                    });
                                    //console.log(unitName, num, typeNum, xNum, yNum);
                                }
                            }

                        },

                        canUpgradeUnit: function(unit, city) {
                            var _this = FlunikTools.Main.getInstance();
                            var nextLevel = unit.get_CurrentLevel() + 1;
                            var gameDataTech = unit.get_UnitGameData_Obj();
                            var hasEnoughResources = city.HasEnoughResources(ClientLib.Base.Util.GetTechLevelResourceRequirements_Obj(nextLevel, gameDataTech));
                            if (gameDataTech == null || unit.get_IsDamaged() || city.get_IsLocked() || !hasEnoughResources) {
                                return false;
                            }
                            var id = _this.getMainProductionBuildingMdbId(gameDataTech.pt, gameDataTech.f);
                            var building = city.get_CityBuildingsData().GetBuildingByMDBId(id);
                            if ((building == null) || (building.get_CurrentDamage() > 0)) {
                                return false;
                            }
                            var levelReq = ClientLib.Base.Util.GetUnitLevelRequirements_Obj(nextLevel, gameDataTech);
                            var reqTechIndexes = _this.getMissingTechIndexesFromTechLevelRequirement(levelReq, true, city);
                            if ((reqTechIndexes != null) && (reqTechIndexes.length > 0)) {
                                return false;
                            }
                            return true;
                        },

                        getMainProductionBuildingMdbId: function(placementType, faction) {
                            var mdbId = -1;
                            var techNameId = -1;
                            if (placementType == 2) {
                                techNameId = 3;
                            } else {
                                techNameId = 4;
                            }
                            if (techNameId > 0) {
                                mdbId = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction(techNameId, faction);
                            }
                            return mdbId;
                        },

                        getMissingTechIndexesFromTechLevelRequirement: function(levelRequirements, breakAtFirst, city) {
                            var reqTechIndexes = [];
                            if (levelRequirements != null && levelRequirements.length > 0) {
                                for (var lvlIndex = 0;
                                    (lvlIndex < levelRequirements.length); lvlIndex++) {
                                    var lvlReq = levelRequirements[lvlIndex];
                                    var requirementsMet = false;
                                    var amountCounter = lvlReq.Amount;
                                    for (var buildingIndex in city.get_Buildings().d) {
                                        if (city.get_Buildings().d[buildingIndex].get_MdbBuildingId() == lvlReq.RequiredTechId && city.get_Buildings().d[buildingIndex].get_CurrentLevel() >= lvlReq.Level) {
                                            amountCounter--;
                                            if (amountCounter <= 0) {
                                                requirementsMet = true;
                                                break;
                                            }
                                        }
                                    }
                                    if (!requirementsMet) {
                                        requirementsMet = ClientLib.Data.MainData.GetInstance().get_Player().get_PlayerResearch().IsResearchMinLevelAvailable(lvlReq.RequiredTechId, lvlReq.Level);
                                    }
                                    if (!requirementsMet) {
                                        reqTechIndexes.push(lvlIndex);
                                        if (breakAtFirst) {
                                            return reqTechIndexes;
                                        }
                                    }
                                }
                            }
                            return reqTechIndexes;
                        },

                        // Add the below function to your code and then use
                        // this.canUpgradeBuilding(building, city)
                        // instead of
                        // building.CanUpgrade()
                        //Thanks to KRS_L

                        canUpgradeBuilding: function(building, city) {
                            var nextLevel = (building.get_CurrentLevel() + 1);
                            var gameDataTech = building.get_TechGameData_Obj();
                            var hasEnoughResources = city.HasEnoughResources(ClientLib.Base.Util.GetTechLevelResourceRequirements_Obj(nextLevel, gameDataTech));
                            return (!building.get_IsDamaged() && !city.get_IsLocked() && hasEnoughResources);
                        },

                        startAutoUpdate: function() {
                            //var _this = FlunikTools.Main.getInstance();
                            //_this.win.open();
                            //_this.autoUpgrade();
                            this.autoUpdateHandleAll = window.setInterval(this.autoUpgrade(), 30000);


                            //return setInterval(upgrade, _this.autoUpdateHandleAll);
                        },
                        stopAutoUpdate: function() {
                            var _this = FlunikTools.Main.getInstance();
                            clearInterval(this.autoUpdateHandleAll);
                            this.autoUpdateHandleAll = null;
                        },

                        cmdUpdate: function() {
                            var _this = FlunikTools.Main.getInstance();
                            //this.autoUpgrade();
                            _this.cmdB = 1;
                        },
                        stopCmdAutoUpdate: function() {
                            var _this = FlunikTools.Main.getInstance();

                            _this.cmdB = null;
                        },

                        autoUpgrade: function() {
                            console.log("Start of Main Function");
                            var _this = FlunikTools.Main.getInstance();
                            var num = -1;
                            var checkBoxes = null;
                            var buildArr = [];
                            //_this.cityPageTab(_this.cityName(), _this.buildingName());
                            //page2.getChildren()[1].getChildren()[num] == 0;
                            for (var nCity in ClientLib.Data.MainData.GetInstance().get_Cities().get_AllCities().d) {
                                num++;

                                var city = ClientLib.Data.MainData.GetInstance().get_Cities().get_AllCities().d[nCity];
                                console.log(city.m_SupportDedicatedBaseName);

                                try {
                                    _this.cityPage(city, num);
                                } catch (e) {
                                    console.log("error : ", e)
                                }




                                var buildings = city.get_Buildings();
                                //console.log(city);

                                var fNum = 0;
                                var B_obj = 0;
                                var D_obj = 0;
                                var O_obj = 0;
                                var x = -1;
                                var y = -1;
                                var nameArr = new Array();
                                var gNum = -1;


                                var typeArr5 = [];
                                //typeArr5[num] = new Array();

                                for (var nBuildings in buildings.d) {
                                    var aNum = -1;
                                    var bNum = -1;
                                    var cNum = -1;
                                    var dNum = -1;
                                    var eNum = -1;

                                    var type = "";
                                    var building = buildings.d[nBuildings];

                                    var tech = building.get_TechName();
                                    var buildingName = building.get_UnitGameData_Obj().dn;
                                    nameArr[buildingName] = tech;
                                    //_this.buildingBox(buildingName, num, tech);continue;
                                    //if(num == 0){
                                    aNum = 0;
                                    //console.log(aNum, bNum, cNum, dNum, eNum);
                                    if (tech == ClientLib.Base.ETechName.Construction_Yard) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    } //ClientLib.Base.ETechName.Construction_Yard
                                    if (tech == ClientLib.Base.ETechName.Refinery) {
                                        gNum++;
                                        type = "Credits";
										var Delta = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].NewLvlDelta;
                                        var refPro = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].TotalValue;
                                        var refPac = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsPackageSize].TotalValue;
                                        var refPacperH = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsBonusTimeToComplete].TotalValue;
                                        var tibCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0].Count;
                                        var powCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[1].Count;
                                        
										var LinkTypes0 = 0;
                                        var LinkTypes1 = 0;
										var deltaA = 0;
										var deltaB = 0;

                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[36] != undefined) {
                                            LinkTypes0 = (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.PowerplantCreditBonus].Value);
											deltaA = (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.PowerplantCreditBonus].NewLvlDelta)
                                            //var refTotalPro = refPro + (refPac/(refPacperH/3600)) +  LinkTypes0 ;
                                        } else {
                                            LinkTypes0 = 0;
											deltaA = 0;
                                        }

                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[37] != undefined) {
                                            LinkTypes1 = (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.TiberiumCreditProduction].Value);
                                            deltaB = (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.TiberiumCreditProduction].NewLvlDelta)
											//var refTotalPro = refPro + (refPac/(refPacperH/3600)) +  LinkTypes0 +  LinkTypes1  ;
                                        } else {
                                            LinkTypes1 = 0;
                                        }
                                        if (_this.isCheckBoxChecked(num, buildingName, aNum)) {
                                            _this.buildingRows(buildArr, building, type, LinkTypes0, LinkTypes1, "", tibCost, powCost, deltaA, deltaB);
											//_this.buildingRows(buildArr, building, type, LinkTypes0, LinkTypes1, tibCost, powCost, change, time);
                                        }
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);

                                    }
                                    if (tech == ClientLib.Base.ETechName.PowerPlant) {
                                        gNum++;
                                        type = "Power";
										var Delta = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].NewLvlDelta;
                                        var powPro = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].TotalValue;
                                        var powPac = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerPackageSize].TotalValue;
                                        var powPacperH = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerBonusTimeToComplete].TotalValue;
                                        var tibCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0].Count;
                                        var powCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[1].Count;
                                        var LinkTypes0 = 0;
                                        var LinkTypes1 = 0;
                                        var LinkTypes2 = 0;
                                        var powTotalProOfLevel12 = 605 + (7260 / 6) + 570 + 456 + 484;
										var deltaA = 0;
										var deltaB = 0;
										var deltaC = 0;
										


                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.AccumulatorPowerBonus] != undefined) {
                                            LinkTypes0 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.AccumulatorPowerBonus].Value;
                                            deltaA = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.AccumulatorPowerBonus].NewLvlDelta;
											//LinkTypes1 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.CrystalCreditProduction].Value ;
                                        } else {
                                            LinkTypes0 = 0;
                                        }

                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.CrystalCreditProduction] != undefined) {
                                            LinkTypes1 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.CrystalCreditProduction].Value;
											deltaB = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.CrystalCreditProduction].NewLvlDelta;
										} else {
                                            LinkTypes1 = 0;
                                        }

                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[42] != undefined) {
                                            LinkTypes2 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.RefineryPowerBonus].Value;
											deltaC = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CreditsProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.RefineryPowerBonus].NewLvlDelta;
										} else {
                                            LinkTypes2 = 0;
                                        }

                                        if (_this.isCheckBoxChecked(num, buildingName, aNum)) {
                                            _this.buildingRows(buildArr, building, type, LinkTypes0, LinkTypes1, LinkTypes2, tibCost, powCost, deltaA, deltaB, deltaC);
                                        }
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Command_Center) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Defense_HQ) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Barracks) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Factory) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Airport) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Defense_Facility) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }

                                    if (tech == ClientLib.Base.ETechName.Harvester) {
                                        gNum++;
                                        var LinkTypes0 = 0;
                                        var LinkTypes1 = 0;
										var deltaA = 0;
										var deltaB = 0;
                                        //OwnProdModifiers.d[1].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloTiberiumProduction].Value - 

                                        if ((city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[1, 25, 33])) {
                                            type = "Tiberium";
											var Delta = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].NewLvlDelta;
                                            var hartibPro = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].TotalValue;
                                            //var LinkTypes0 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloTiberiumProduction].Value;
                                            var hartibPac = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumPackageSize].TotalValue;
                                            var hartibPacperH = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumBonusTimeToComplete].TotalValue;
											var tibCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0].Count;
											var powCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[1].Count;

                                            if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloTiberiumProduction] != undefined) {
                                                LinkTypes0 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloTiberiumProduction].Value;
												deltaA = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloTiberiumProduction].NewLvlDelta
                                            } else {
                                                LinkTypes0 = 0;
                                            }

                                            if (_this.isCheckBoxChecked(num, buildingName, aNum)) {
                                                _this.buildingRows(buildArr, building, type, LinkTypes0, LinkTypes1,"" , tibCost, powCost, deltaA, deltaB);
                                            }
                                        }

                                        if ((city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[4, 26, 34])) {
                                            type = "Crystal";
											var Delta = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].NewLvlDelta;
                                            var harcryPro = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].TotalValue;
                                            //var LinkTypes1 =  city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloCrystalProduction].Value;
                                            var harcryPac = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalPackageSize].TotalValue;
                                            var harcryPacperH = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalBonusTimeToComplete].TotalValue;
											var tibCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0].Count;
											var powCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[1].Count;

                                            //var harCryCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0 || 1].Count;

                                            if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloCrystalProduction] != undefined) {
                                                LinkTypes1 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloCrystalProduction].Value;
                                                deltaB = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.SiloCrystalProduction].NewLvlDelta;
												//var harCryTotalPro = harcryPro + (harcryPac/(harcryPacperH/3600)) + LinkTypes1;
                                            } else {
                                                var LinkTypes1 = 0;
                                            }
                                            if (_this.isCheckBoxChecked(num, buildingName, aNum)) {
                                                _this.buildingRows(buildArr, building, type, LinkTypes0, LinkTypes1,"" ,tibCost, powCost, deltaA, deltaB);
                                            }
                                        }
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Support_Air) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Support_Ion) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Support_Art) {
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Silo) {
                                        gNum++;
                                        type = "Tib + Cry";
                                        var LinkTypes1 = 0;
                                        var LinkTypes0 = 0;
										var deltaA = 0;
										var deltaB = 0;
                                        var silTotalPro = 0;
										var DeltaA = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].NewLvlDelta;
										var DeltaB = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].NewLvlDelta;
                                        var silCryPro = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].TotalValue;
                                        //var LinkTypes1 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterCrystalProduction].Value;
                                        var silTibPro = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].TotalValue;
                                        //var LinkTypes0 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterTiberiumProduction].Value;
                                        var silCrySto = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalStorage].TotalValue;
                                        var silTibSto = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumStorage].TotalValue;
                                        //var silCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0 || 1].Count;
										var tibCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0].Count;
										var powCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[1].Count;

                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterCrystalProduction] == undefined) {

                                            LinkTypes1 = 0;
                                        } else {
                                            LinkTypes1 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterCrystalProduction].Value;
                                            deltaA = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.CrystalProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterCrystalProduction].NewLvlDelta;
											//silTotalPro = LinkTypes1 + LinkTypes0;
                                        }

                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterTiberiumProduction] == undefined) {

                                            LinkTypes0 = 0;
                                        } else {
                                            LinkTypes0 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterTiberiumProduction].Value;
                                            deltaB = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.TiberiumProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.HarvesterTiberiumProduction].NewLvlDelta;
											//silTotalPro = LinkTypes1 + LinkTypes0;
                                        }
                                        console.log(building);
                                        if (_this.isCheckBoxChecked(num, buildingName, aNum)) {
                                            _this.buildingRows(buildArr, building, type, LinkTypes0, LinkTypes1, "",tibCost, powCost, deltaB, deltaA);
                                        }
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    if (tech == ClientLib.Base.ETechName.Accumulator) {
                                        var LinkTypes0 = 0;
                                        //OwnProdModifiers.d[6].ConnectedLinkTypes.d[41].Value
                                        gNum++;
                                        type = "Power";
										var deltaA = 0;
										var Delta = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].NewLvlDelta;
                                        var accPro = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].TotalValue;
                                        //var LinkTypes0 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.PowerPlantAccumulatorBonus].Value;
                                        var accSto = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerStorage].TotalValue;
										var tibCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0].Count;
										var powCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[1].Count;
                                        //var accCost = ClientLib.Base.Util.GetUnitLevelResourceRequirements_Obj((building.get_CurrentLevel() + 1), building.get_UnitGameData_Obj())[0 || 1].Count;
                                        //var accTotalPro = accPro ;

                                        if (city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.PowerPlantAccumulatorBonus] != undefined) {
                                            LinkTypes0 = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.PowerPlantAccumulatorBonus].Value;
											deltaA = city.GetBuildingCache(building.get_Id()).DetailViewInfo.OwnProdModifiers.d[ClientLib.Base.EModifierType.PowerProduction].ConnectedLinkTypes.d[ClientLib.Base.ELinkType.PowerPlantAccumulatorBonus].NewLvlDelta;
                                            //var accTotalPro = LinkTypes0;
                                        } else {
                                            LinkTypes0 = 0;
                                        }
                                        if (_this.isCheckBoxChecked(num, buildingName, aNum)) {
                                            _this.buildingRows(buildArr, building, type, LinkTypes0, "", "",tibCost, powCost, deltaA);
                                        }
                                        _this.buildingBox(buildingName, num, tech, nameArr, aNum);
                                    }
                                    //_this.buildingBox(building, num);
                                    //}
                                    //console.log(_this.isCheckBoxChecked(num, buildingName, aNum), buildingName, aNum, city.m_SupportDedicatedBaseName );
                                    //if(!_this.canUpgradeBuilding(building, city))continue;
                                    if (_this.isCheckBoxChecked(num, buildingName, aNum)) {
                                        console.log(_this.isCheckBoxChecked(num, buildingName, aNum), buildingName, aNum, city.m_SupportDedicatedBaseName);
                                        //_this.buildingRows(gNum, building, type, LinkTypes0, LinkTypes1, LinkTypes2);

                                        B_obj = {
                                                cityid: city.get_Id(),
                                                basename: city.m_SupportDedicatedBaseName,
                                                //Ratio: unitHealthperCost,
                                                unitname: building.get_UnitGameData_Obj().dn,
                                                level: building.get_CurrentLevel(),
                                                type: "Building",
                                                posX: building.get_CoordX(),
                                                posY: building.get_CoordY(),
                                                //upgradepossiblity: canUpgrade,
                                                unitId: building.get_Id()
                                            }
                                            //var label = new qx.ui.basic.Label(_this.isCheckBoxChecked(num, buildingName, aNum), buildingName, aNum, B_obj );
                                            //console.log((_this.isCheckBoxChecked(num, buildingName, aNum), buildingName, aNum, B_obj ));
                                            //page2.add(label);
                                    }

                                } //building loop


                                var units = city.get_CityUnitsData();

                                var offenceUnits = units.get_OffenseUnits();
                                var gNum = 0;
                                var hNum = 0;
                                for (var nUnit in offenceUnits.d) {

                                    var unit = offenceUnits.d[nUnit];
                                    //console.log(_this.canUpgradeUnit(unit, city));

                                    var unitTech = unit.get_UnitGameData_Obj().at;
                                    var unitName = unit.get_UnitGameData_Obj().dn;
                                    var offNum = 2;
                                    //typeArr5[unitName] == unitTech;
                                    //console.log(ClientLib.Base.EUnitType.Infantry);
                                    //console.log(ClientLib.Base.EUnitType.Tank);
                                    //console.log(ClientLib.Base.EUnitType.Air);
                                    if (unitTech == ClientLib.Base.EUnitType.Infantry) {
                                        //fNum = 0;
                                        _this.unitBox(unitName, num, offNum, 0, fNum++);
                                        //console.log(typeArr5);
                                    }
                                    if (unitTech == ClientLib.Base.EUnitType.Tank) {
                                        //gNum = 0;
                                        _this.unitBox(unitName, num, offNum, 1, gNum++);

                                    }
                                    if (unitTech == ClientLib.Base.EUnitType.Air) {
                                        //hNum = 0;
                                        _this.unitBox(unitName, num, offNum, 2, hNum++);

                                    }
                                    if (!_this.canUpgradeUnit(unit, city)) continue;
                                    if (_this.isCheckBoxChecked(num, unitName, offNum)) {
                                        console.log(_this.isCheckBoxChecked(num, unitName, offNum), unitName, offNum, city.m_SupportDedicatedBaseName);


                                        //console.log(ClientLib.Base.EUnitType.Structure);

                                        O_obj = {
                                                cityid: city.get_Id(),
                                                basename: city.m_SupportDedicatedBaseName,
                                                //Ratio: unitHealthperCost,
                                                unitname: unit.get_UnitGameData_Obj().dn,
                                                level: unit.get_CurrentLevel(),
                                                type: "Offence",
                                                posX: unit.get_CoordX(),
                                                posY: unit.get_CoordY(),
                                                //upgradepossiblity: canUpgrade,
                                                unitId: unit.get_Id()
                                            }
                                            //textfield.setValue(_this.isCheckBoxChecked(num, unitName, offNum), unitName, offNum, O_obj );
                                    }

                                } //off loop
                                var xNum = 0;
                                var yNum = 0;
                                var zNum = 0;

                                var defenceUnits = units.get_DefenseUnits();
                                for (var nUnit in defenceUnits.d) {
                                    var unit = defenceUnits.d[nUnit];
                                    //if(!_this.canUpgradeUnit(unit, city))continue;
                                    var unitTech = unit.get_UnitGameData_Obj().at;
                                    var unitName = unit.get_UnitGameData_Obj().dn;
                                    var defNum = 1;
                                    if (unitTech == ClientLib.Base.EUnitType.Infantry) {

                                        _this.unitBox(unitName, num, defNum, 0, xNum++);
                                        //console.log(typeArr5);
                                    }
                                    if (unitTech == ClientLib.Base.EUnitType.Tank) {
                                        //gNum++;
                                        _this.unitBox(unitName, num, defNum, 1, yNum++);

                                    }
                                    if (unitTech == ClientLib.Base.EUnitType.Structure) {
                                        //hNum++;
                                        _this.unitBox(unitName, num, defNum, 2, zNum++);

                                    }
                                    if (!_this.canUpgradeUnit(unit, city)) continue;
                                    if (_this.isCheckBoxChecked(num, unitName, defNum)) {

                                        console.log(_this.isCheckBoxChecked(num, unitName, aNum), unitName, aNum, city.m_SupportDedicatedBaseName, num);
                                        //if(!_this.canUpgradeUnit(unit, city))continue;

                                        D_obj = {
                                                cityid: city.get_Id(),
                                                basename: city.m_SupportDedicatedBaseName,
                                                //Ratio: unitHealthperCost,
                                                unitname: unit.get_UnitGameData_Obj().dn,
                                                level: unit.get_CurrentLevel(),
                                                type: "Defense",
                                                posX: unit.get_CoordX(),
                                                posY: unit.get_CoordY(),
                                                //upgradepossiblity: canUpgrade,
                                                unitId: unit.get_Id()
                                            }
                                            //textfield.add(_this.isCheckBoxChecked(num, unitName, defNum), unitName, defNum, D_obj);
                                    }
                                } //def loop

                                /*
								if(B_obj != 0){
									console.log(B_obj);
									//ClientLib.Net.CommunicationManager.GetInstance().SendCommand("UpgradeBuilding", B_obj, null, null, true);
									//continue;
									}
								
								//ClientLib.Net.CommunicationManager.GetInstance().SendCommand("UnitUpgrade", O_obj, null, null, true);
								
								if(D_obj != 0){
									console.log(D_obj);
									//ClientLib.Net.CommunicationManager.GetInstance().SendCommand("UnitUpgrade", D_obj, null, null, true);
									//continue;
									}
								if(O_obj != 0){
									console.log(D_obj);
									//ClientLib.Net.CommunicationManager.GetInstance().SendCommand("UnitUpgrade", O_obj, null, null, true);
									//continue;
									}
							*/
                                //container.add(tabView);
                                //win.add(container);
                                //win.open();

                                //continue;	
                            } //city loop
                            console.log("End of Main Function");



                        }
                    }
                });
            }
        } catch (e) {
            console.log("createFlunikTools: ", e);
        }

        function FlunikTools_checkIfLoaded() {
            try {
                if (typeof qx != 'undefined' && qx.core.Init.getApplication() && qx.core.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_NAVIGATION) && qx.core.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_NAVIGATION).isVisible()) {
                    createFlunikTools();
                    // var interval = window.setInterval
                    FlunikTools.Main.getInstance().initialize();
                    if (FlunikTools.Main.getInstance().cmdButton.getLabel != null) {
                        console.log(FlunikTools.Main.getInstance().cmdButton.getLabel);
                    }
                    /*if (FlunikTools.Main.getInstance().cmdButton.getLabel == "cmd.OFF") {
                                    //numb = 0;
                                    FlunikTools.Main.getInstance().stopAutoUpdate();
                                } else {
                                    FlunikTools.Main.getInstance()..startAutoUpdate();
                                }*/



                } else {
                    setTimeout(FlunikTools_checkIfLoaded, 1000);
                }
            } catch (e) {
                console.log("FlunikTools_checkIfLoaded: ", e);
            }
        }
        if (/commandandconquer\.com/i.test(document.domain)) {
            setTimeout(FlunikTools_checkIfLoaded, 1000);
        }
    }

    try {
        var FlunikScript = document.createElement("script");
        FlunikScript.innerHTML = "(" + FlunikTools_main.toString() + ")();";
        FlunikScript.type = "text/javascript";
        if (/commandandconquer\.com/i.test(document.domain)) {
            document.getElementsByTagName("head")[0].appendChild(FlunikScript);
        }
    } catch (e) {
        console.log("FlunikTools: init error: ", e);
    }
})();