void drawEditorWindow(int id)
        {
            BoxNoBorder = new GUIStyle(GUI.skin.box);
            BoxNoBorder.normal.background = null;
            BoxNoBorder.normal.textColor  = Color.white;

            DeadButton = new GUIStyle(GUI.skin.button);
            DeadButton.normal.background  = null;
            DeadButton.hover.background   = null;
            DeadButton.active.background  = null;
            DeadButton.focused.background = null;
            DeadButton.normal.textColor   = Color.yellow;
            DeadButton.hover.textColor    = Color.white;
            DeadButton.active.textColor   = Color.yellow;
            DeadButton.focused.textColor  = Color.yellow;
            DeadButton.fontSize           = 14;
            DeadButton.fontStyle          = FontStyle.Normal;

            DeadButton2 = new GUIStyle(GUI.skin.button);
            DeadButton2.normal.background  = null;
            DeadButton2.hover.background   = null;
            DeadButton2.active.background  = null;
            DeadButton2.focused.background = null;
            DeadButton2.normal.textColor   = Color.white;
            DeadButton2.hover.textColor    = Color.green;
            DeadButton2.active.textColor   = Color.white;
            DeadButton2.focused.textColor  = Color.white;
            DeadButton2.fontSize           = 14;
            DeadButton2.fontStyle          = FontStyle.Bold;

            DeadButton3 = new GUIStyle(GUI.skin.button);
            DeadButton3.normal.background  = null;
            DeadButton3.hover.background   = null;
            DeadButton3.active.background  = null;
            DeadButton3.focused.background = null;
            DeadButton3.normal.textColor   = Color.white;
            DeadButton3.hover.textColor    = Color.white;
            DeadButton3.active.textColor   = Color.white;
            DeadButton3.focused.textColor  = Color.white;
            DeadButton3.fontSize           = 13;
            DeadButton3.fontStyle          = FontStyle.Bold;

            DeadButtonRed = new GUIStyle(GUI.skin.button);
            DeadButtonRed.normal.background  = null;
            DeadButtonRed.hover.background   = null;
            DeadButtonRed.active.background  = null;
            DeadButtonRed.focused.background = null;
            DeadButtonRed.normal.textColor   = Color.red;
            DeadButtonRed.hover.textColor    = Color.yellow;
            DeadButtonRed.active.textColor   = Color.red;
            DeadButtonRed.focused.textColor  = Color.red;
            DeadButtonRed.fontSize           = 12;
            DeadButtonRed.fontStyle          = FontStyle.Bold;

            string smessage = "";

            GUILayout.BeginHorizontal();
            {
                GUI.enabled = false;
                GUILayout.Button("-KK-", DeadButton, GUILayout.Height(21));

                GUILayout.FlexibleSpace();

                GUILayout.Button("Statics Editor", DeadButton, GUILayout.Height(21));

                GUILayout.FlexibleSpace();

                GUI.enabled = true;

                if (GUILayout.Button("X", DeadButtonRed, GUILayout.Height(21)))
                {
                    KerbalKonstructs.instance.ToggleEditor();
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(1);
            GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4));

            GUILayout.Space(2);

            GUILayout.BeginHorizontal();
            {
                if (foldedIn)
                {
                    tFolded = tFoldOut;
                }
                if (!foldedIn)
                {
                    tFolded = tFoldIn;
                }

                if (GUILayout.Button(tFolded, GUILayout.Height(23), GUILayout.Width(23)))
                {
                    if (foldedIn)
                    {
                        foldedIn = false;
                    }
                    else
                    {
                        foldedIn = true;
                    }
                }

                GUI.enabled = !creatingInstance;

                sButtonText  = "";
                fButtonWidth = 0f;

                if (foldedIn)
                {
                    fButtonWidth = 50f;
                }
                else
                {
                    fButtonWidth = 110f;
                }

                if (foldedIn)
                {
                    sButtonText = "New";
                }
                else
                {
                    sButtonText = "Spawn New";
                }

                if (GUILayout.Button("" + sButtonText, GUILayout.Height(23), GUILayout.Width(fButtonWidth)))
                {
                    EditorGUI.CloseEditors();
                    creatingInstance = true;
                    showLocal        = false;
                }

                GUILayout.Space(5);

                GUI.enabled = creatingInstance || showLocal;

                if (foldedIn)
                {
                    sButtonText = "All";
                }
                else
                {
                    sButtonText = "All Instances";
                }

                if (GUILayout.Button("" + sButtonText, GUILayout.Width(fButtonWidth), GUILayout.Height(23)))
                {
                    EditorGUI.CloseEditors();
                    creatingInstance = false;
                    showLocal        = false;
                    KerbalKonstructs.instance.DeletePreviewObject();
                    KerbalKonstructs.instance.disableAllInstanceEditing = bDisableEditingSetting;
                }

                GUI.enabled = true;
                GUILayout.Space(2);
                GUI.enabled = creatingInstance || !showLocal;

                if (foldedIn)
                {
                    sButtonText = "Local";
                }
                else
                {
                    sButtonText = "Local Instances";
                }

                if (GUILayout.Button("" + sButtonText, GUILayout.Width(fButtonWidth), GUILayout.Height(23)))
                {
                    EditorGUI.CloseEditors();
                    creatingInstance = false;
                    showLocal        = true;
                    KerbalKonstructs.instance.DeletePreviewObject();
                }

                GUI.enabled = true;

                GUILayout.FlexibleSpace();
                if (GUILayout.Button(new GUIContent("Save", "Save all new and edited instances."), GUILayout.Width(fButtonWidth - 10), GUILayout.Height(23)))
                {
                    KerbalKonstructs.instance.saveObjects();
                    smessage = "Saved all changes to all objects.";
                    MiscUtils.HUDMessage(smessage, 10, 2);
                }
            }
            GUILayout.EndHorizontal();

            if (!foldedIn)
            {
                if (creatingInstance)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(15);
                    if (GUILayout.Button("Category", DeadButton, GUILayout.Width(110), GUILayout.Height(23)))
                    {
                        if (bSortCategory)
                        {
                            bSortCategory = false;
                        }
                        else
                        {
                            bSortCategory = true;
                        }
                    }

                    GUILayout.Space(5);
                    if (GUILayout.Button("Title", DeadButton, GUILayout.Height(23)))
                    {
                        if (bSortTitle)
                        {
                            bSortTitle = false;
                        }
                        else
                        {
                            bSortTitle = true;
                        }
                    }
                    GUILayout.FlexibleSpace();
                    GUILayout.Button("Mesh", DeadButton, GUILayout.Width(140), GUILayout.Height(23));
                    GUILayout.Space(15);
                    GUILayout.EndHorizontal();
                }
            }

            bool showStatic = false;

            scrollPos = GUILayout.BeginScrollView(scrollPos);
            if (creatingInstance)
            {
                lStaticModels = KerbalKonstructs.instance.getStaticDB().getModels();

                if (bSortCategory)
                {
                    lStaticModels.Sort(delegate(StaticModel a, StaticModel b)
                    {
                        return(((string)a.getSetting("category")).CompareTo((string)b.getSetting("category")));
                    });
                }

                if (bSortTitle)
                {
                    lStaticModels.Sort(delegate(StaticModel a, StaticModel b)
                    {
                        return(((string)a.getSetting("title")).CompareTo((string)b.getSetting("title")));
                    });
                }

                foreach (StaticModel model in lStaticModels)
                {
                    if (titlefilterset == "" && categoryfilterset == "")
                    {
                        showStatic = true;
                    }

                    if (titlefilterset != "")
                    {
                        sTitleHolder = (string)model.getSetting("title");
                        if (sTitleHolder.Contains(titlefilterset))
                        {
                            showStatic = true;
                        }
                        else
                        {
                            showStatic = false;
                        }
                    }

                    if (categoryfilterset != "")
                    {
                        sCategoryHolder = (string)model.getSetting("category");
                        if (sCategoryHolder.Contains(categoryfilterset))
                        {
                            showStatic = true;
                        }
                        else
                        {
                            showStatic = false;
                        }
                    }

                    if (categoryfilterset != "" && titlefilterset != "")
                    {
                        sTitleHolder    = (string)model.getSetting("title");
                        sCategoryHolder = (string)model.getSetting("category");
                        if (sCategoryHolder.Contains(categoryfilterset) && sTitleHolder.Contains(titlefilterset))
                        {
                            showStatic = true;
                        }
                        else
                        {
                            showStatic = false;
                        }
                    }

                    if (showStatic)
                    {
                        GUILayout.BeginHorizontal();

                        if (!foldedIn)
                        {
                            if (GUILayout.Button(new GUIContent("" + model.getSetting("category"), "Filter"), DeadButton, GUILayout.Width(110), GUILayout.Height(23)))
                            {
                                categoryfilter    = (string)model.getSetting("category");
                                categoryfilterset = categoryfilter;
                                titlefilterset    = titlefilter;
                            }
                            //GUILayout.FlexibleSpace();
                            GUILayout.Space(5);
                        }

                        if (GUILayout.Button(new GUIContent("" + "" + model.getSetting("title"), "Spawn an instance of this static."), DeadButton2, GUILayout.Height(23)))
                        {
                            EditorGUI.CloseEditors();
                            KerbalKonstructs.instance.DeletePreviewObject();
                            KerbalKonstructs.instance.bDisablePositionEditing = false;
                            spawnInstance(model);
                            smessage = "Spawned " + model.getSetting("title");
                            MiscUtils.HUDMessage(smessage, 10, 2);
                        }

                        if (!foldedIn)
                        {
                            GUILayout.FlexibleSpace();
                            if (GUILayout.Button(new GUIContent(" " + model.getSetting("mesh") + " ", "Edit Model Config"), DeadButton, GUILayout.Width(140), GUILayout.Height(23)))
                            {
                                KerbalKonstructs.instance.selectedModel = model;
                                KerbalKonstructs.instance.showModelInfo = true;
                            }
                        }

                        GUILayout.EndHorizontal();
                        GUILayout.Space(2);
                    }
                }
            }

            if (!creatingInstance)
            {
                foreach (StaticObject obj in KerbalKonstructs.instance.getStaticDB().getAllStatics())
                {
                    bool isLocal = true;

                    if (showLocal)
                    {
                        if (obj.pqsCity.sphere == FlightGlobals.currentMainBody.pqsController)
                        {
                            var dist = Vector3.Distance(FlightGlobals.ActiveVessel.GetTransform().position, obj.gameObject.transform.position);
                            isLocal = dist < localRange;
                        }
                        else
                        {
                            isLocal = false;
                        }
                    }

                    string sGroupHolder = "";
                    if (!showLocal)
                    {
                        if (groupfilterset != "")
                        {
                            sGroupHolder = (string)obj.getSetting("Group");
                            if (!sGroupHolder.Contains(groupfilterset))
                            {
                                isLocal = false;
                            }
                        }
                    }

                    string sLaunchType = "";

                    if (isLocal)
                    {
                        GUILayout.BeginHorizontal();
                        if (!foldedIn)
                        {
                            GUILayout.Button("" + obj.getSetting("Group"), DeadButton3, GUILayout.Width(120), GUILayout.Height(23));

                            sLaunchType = (string)obj.getSetting("Category");

                            if (sLaunchType == "Runway" || sLaunchType == "Helipad")
                            {
                                GUILayout.Button(tSPH, DeadButton3, GUILayout.Width(23), GUILayout.Height(23));
                            }
                            else
                            {
                                if (sLaunchType == "RocketPad")
                                {
                                    GUILayout.Button(tVAB, DeadButton3, GUILayout.Width(23), GUILayout.Height(23));
                                }
                                else
                                {
                                    if (sLaunchType == "Other" && obj.settings.ContainsKey("LaunchSiteName"))
                                    {
                                        GUILayout.Button(tANY, DeadButton3, GUILayout.Width(23), GUILayout.Height(23));
                                    }
                                    else
                                    {
                                        GUILayout.Button("", DeadButton3, GUILayout.Width(23), GUILayout.Height(23));
                                    }
                                }
                            }
                        }

                        //GUI.enabled = (obj != selectedObject);
                        if (GUILayout.Button(new GUIContent("" + obj.model.getSetting("title"), "Edit this instance."), GUILayout.Height(23)))
                        {
                            KerbalKonstructs.instance.bDisablePositionEditing = false;
                            enableColliders = true;
                            EditorGUI.CloseEditors();

                            if (selectedObject != null)
                            {
                                selectedObjectPrevious = selectedObject;
                                Color highlightColor = new Color(0, 0, 0, 0);
                                obj.HighlightObject(highlightColor);
                            }

                            if (snapTargetInstance == obj)
                            {
                                snapTargetInstance = null;
                                KerbalKonstructs.instance.snapTargetInstance = null;
                            }

                            if (!KerbalKonstructs.instance.disableAllInstanceEditing)
                            {
                                KerbalKonstructs.instance.selectObject(obj, false, true, false);
                            }
                            else
                            {
                                if (!showLocal)
                                {
                                    KerbalKonstructs.instance.bDisablePositionEditing = true;
                                    KerbalKonstructs.instance.selectObject(obj, false, false, false);
                                }
                                else
                                {
                                    KerbalKonstructs.instance.selectObject(obj, false, true, false);
                                }
                            }
                            //obj.selectObject(false);

                            Color highlightColor2 = XKCDColors.Green_Yellow;
                            obj.HighlightObject(highlightColor2);
                        }
                        //GUI.enabled = true;

                        if (showLocal)
                        {
                            GUI.enabled = (snapTargetInstance != obj && obj != selectedObject);
                            if (GUILayout.Button(new GUIContent(tFocus, "Set as snap target."), GUILayout.Height(23), GUILayout.Width(23)))
                            {
                                if (snapTargetInstance != null)
                                {
                                    snapTargetInstancePrevious = snapTargetInstance;
                                    Color highlightColor3 = new Color(0, 0, 0, 0);
                                    snapTargetInstance.HighlightObject(highlightColor3);
                                }

                                snapTargetInstance = obj;
                                KerbalKonstructs.instance.setSnapTarget(obj);

                                Color highlightColor4 = XKCDColors.RedPink;
                                obj.HighlightObject(highlightColor4);
                            }
                            GUI.enabled = true;
                        }
                        GUILayout.EndHorizontal();
                        GUILayout.Space(2);
                    }
                }
            }
            GUILayout.EndScrollView();

            GUI.enabled = true;

            if (!foldedIn)
            {
                if (creatingInstance)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("Filter by ");
                    GUILayout.Label(" Category:");
                    categoryfilter = GUILayout.TextField(categoryfilter, 30, GUILayout.Width(90));
                    if (GUILayout.Button(new GUIContent(tSearch, "Apply Filter."), GUILayout.Width(23), GUILayout.Height(23)))
                    {
                        categoryfilterset = categoryfilter;
                        titlefilterset    = titlefilter;
                    }
                    if (GUILayout.Button(new GUIContent(tCancelSearch, "Remove Filter."), GUILayout.Width(23), GUILayout.Height(23)))
                    {
                        categoryfilter    = "";
                        categoryfilterset = "";
                    }
                    GUILayout.Label("  Title:");
                    titlefilter = GUILayout.TextField(titlefilter, 30, GUILayout.Width(90));
                    if (GUILayout.Button(new GUIContent(tSearch, "Apply Filter."), GUILayout.Width(23), GUILayout.Height(23)))
                    {
                        categoryfilterset = categoryfilter;
                        titlefilterset    = titlefilter;
                    }
                    if (GUILayout.Button(new GUIContent(tCancelSearch, "Remove Filter."), GUILayout.Width(23), GUILayout.Height(23)))
                    {
                        titlefilter    = "";
                        titlefilterset = "";
                    }
                    GUILayout.EndHorizontal();
                }
            }

            if (!foldedIn)
            {
                if (!showLocal && !creatingInstance)
                {
                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.Label("Filter by Group:", GUILayout.Width(140));
                        //GUILayout.FlexibleSpace();
                        groupfilter = GUILayout.TextField(groupfilter, 40, GUILayout.Width(140));
                        if (GUILayout.Button(new GUIContent(tSearch, "Apply Filter."), GUILayout.Width(23), GUILayout.Height(23)))
                        {
                            groupfilterset = groupfilter;
                        }
                        if (GUILayout.Button(new GUIContent(tCancelSearch, "Remove Filter."), GUILayout.Width(23), GUILayout.Height(23)))
                        {
                            groupfilter    = "";
                            groupfilterset = "";
                        }
                    }
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.Label("Pack Name: ", GUILayout.Width(140));
                        //GUILayout.FlexibleSpace();
                        sPackName = GUILayout.TextField(sPackName, 30, GUILayout.Width(140));
                        //GUILayout.FlexibleSpace();

                        GUI.enabled = (sPackName != "" && groupfilter != "");
                        if (GUILayout.Button("Export Group"))
                        {
                            //Validate the groupfilter to see if it is a Group name
                            bool bValidGroupName = false;

                            foreach (StaticObject obj in KerbalKonstructs.instance.getStaticDB().getAllStatics())
                            {
                                if ((string)obj.getSetting("Group") == groupfilter)
                                {
                                    bValidGroupName = true;
                                    break;
                                }
                            }

                            if (bValidGroupName)
                            {
                                KerbalKonstructs.instance.exportCustomInstances(sPackName, "", groupfilter);
                                smessage = "Exported custom instances to GameData/KerbalKonstructs/ExportedInstances/" + sPackName + "/" + groupfilter;
                                MiscUtils.HUDMessage(smessage, 10, 2);
                            }
                            else
                            {
                                smessage = "Group filter is not a valid Group name. Please filter with a complete and valid Group name before exporting a group.";
                                MiscUtils.HUDMessage(smessage, 20, 2);
                            }
                        }
                        GUI.enabled = true;

                        GUI.enabled = (sPackName != "");
                        if (GUILayout.Button("Export All"))
                        {
                            KerbalKonstructs.instance.exportCustomInstances(sPackName, "All");
                            smessage = "Exported all custom instances to GameData/KerbalKonstructs/ExportedInstances/" + sPackName + "/";
                            MiscUtils.HUDMessage(smessage, 10, 2);
                        }
                        GUI.enabled = true;
                    }
                    GUILayout.EndHorizontal();

                    if (!KerbalKonstructs.instance.disableAllInstanceEditing)
                    {
                        GUILayout.BeginHorizontal();
                        if (GUILayout.Button("Disable Camera Focus/Position Editing", GUILayout.Height(23)))
                        {
                            KerbalKonstructs.instance.disableAllInstanceEditing = true;
                            bDisableEditingSetting = true;
                        }

                        GUILayout.Button(tCross, DeadButton, GUILayout.Height(23), GUILayout.Width(23));
                        GUILayout.EndHorizontal();
                    }
                    else
                    {
                        GUILayout.BeginHorizontal();
                        if (GUILayout.Button("Disable Camera Focus/Position Editing", GUILayout.Height(23)))
                        {
                            KerbalKonstructs.instance.disableAllInstanceEditing = false;
                            bDisableEditingSetting = false;
                        }

                        GUILayout.Button(tTick, DeadButton, GUILayout.Height(23), GUILayout.Width(23));
                        GUILayout.EndHorizontal();
                    }
                }
            }

            if (showLocal)
            {
                GUILayout.BeginHorizontal();
                if (!foldedIn)
                {
                    GUILayout.Label("Local:");
                }

                GUI.enabled = false;
                GUILayout.Label(localRange.ToString("0") + " m", GUILayout.Width(50));
                GUI.enabled = showLocal;
                if (GUILayout.Button("-", GUILayout.Width(25)))
                {
                    if (localRange < 5000)
                    {
                    }
                    else
                    {
                        localRange = localRange / 2;
                    }
                }
                if (GUILayout.Button("+", GUILayout.Width(25)))
                {
                    if (localRange > 79999)
                    {
                    }
                    else
                    {
                        localRange = localRange * 2;
                    }
                }
                GUI.enabled = true;
                GUILayout.FlexibleSpace();
                if (!foldedIn)
                {
                    GUILayout.Label("Group:");
                }
                else
                {
                    GUILayout.Label("Group");
                }
                // GUILayout.Space(5);
                GUI.enabled = showLocal;
                if (!foldedIn)
                {
                    customgroup = GUILayout.TextField(customgroup, 25, GUILayout.Width(125));
                }
                else
                {
                    customgroup = GUILayout.TextField(customgroup, 25, GUILayout.Width(45));
                }

                GUI.enabled = true;

                GUI.enabled = showLocal;

                if (!foldedIn)
                {
                    sButtonText = "Set as Group";
                }
                else
                {
                    sButtonText = "Set";
                }
                if (!foldedIn)
                {
                    fButtonWidth = 100;
                }
                else
                {
                    fButtonWidth = 35;
                }

                if (GUILayout.Button("" + sButtonText, GUILayout.Width(fButtonWidth)))
                {
                    setLocalsGroup(customgroup, localRange);
                    smessage = "Set group as " + customgroup;
                    MiscUtils.HUDMessage(smessage, 10, 2);
                }
                GUI.enabled = true;
                GUILayout.EndHorizontal();
            }

            GUILayout.Space(1);
            GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4));

            GUILayout.Space(2);

            if (GUI.tooltip != "")
            {
                var labelSize = GUI.skin.GetStyle("Label").CalcSize(new GUIContent(GUI.tooltip));
                GUI.Box(new Rect(Event.current.mousePosition.x - (25 + (labelSize.x / 2)), Event.current.mousePosition.y - 40, labelSize.x + 10, labelSize.y + 5), GUI.tooltip);
            }

            GUI.DragWindow(new Rect(0, 0, 10000, 10000));
        }