protected void OnGUI()
        {
            if (conditionStyle == null)
            {
                conditionStyle = new GUIStyle(GUI.skin.box);
                conditionStyle.normal.background = TextureUtil.MakeTex(1, 1, new Color(0.627f, 0.627f, 0.627f));
            }

            if (eitherConditionStyle == null)
            {
                eitherConditionStyle = new GUIStyle(GUI.skin.box);
                eitherConditionStyle.normal.background = TextureUtil.MakeTex(1, 1, new Color(0.568f, 0.568f, 0.568f));
                eitherConditionStyle.padding.left      = 15;
            }

            if (closeStyle == null)
            {
                closeStyle                   = new GUIStyle(GUI.skin.button);
                closeStyle.padding           = new RectOffset(0, 0, 0, 0);
                closeStyle.margin            = new RectOffset(0, 5, 2, 0);
                closeStyle.normal.textColor  = Color.red;
                closeStyle.focused.textColor = Color.red;
                closeStyle.active.textColor  = Color.red;
                closeStyle.hover.textColor   = Color.red;
            }

            if (collapseStyle == null)
            {
                collapseStyle                   = new GUIStyle(GUI.skin.button);
                collapseStyle.padding           = new RectOffset(0, 0, 0, 0);
                collapseStyle.margin            = new RectOffset(0, 5, 2, 0);
                collapseStyle.normal.textColor  = Color.blue;
                collapseStyle.focused.textColor = Color.blue;
                collapseStyle.active.textColor  = Color.blue;
                collapseStyle.hover.textColor   = Color.blue;
            }

            using (new GUILayout.VerticalScope())
            {
                var previous = Milestone.getType();
                GUILayout.Label("The milestone will be reached when");
                Milestone.setType((Completable.Milestone.MilestoneType)EditorGUILayout.Popup((int)Milestone.getType(), milestonetypes));
                if (previous != Milestone.getType())
                {
                    Milestone.setId("");
                }

                switch (Milestone.getType())
                {
                case Completable.Milestone.MilestoneType.CHARACTER:
                    SelectElement <NPC>(Milestone, "Character:");
                    break;

                case Completable.Milestone.MilestoneType.ITEM:
                    SelectElement <Item>(Milestone, "Item:");
                    break;

                case Completable.Milestone.MilestoneType.SCENE:
                    SelectElement <IChapterTarget>(Milestone, "Scene:");
                    break;

                case Completable.Milestone.MilestoneType.COMPLETABLE:
                    SelectElement <Completable>(Milestone, "Completable:");
                    break;

                case Completable.Milestone.MilestoneType.CONDITION:
                    if (Milestone.getConditions() == null)
                    {
                        Milestone.setConditions(new ConditionsController(new Conditions()));
                    }

                    using (new GUILayout.VerticalScope(conditionStyle))
                    {
                        GUILayout.Label("CONDITIONS");
                        if (GUILayout.Button("Add Block"))
                        {
                            Milestone.getConditions().Conditions.Add(new FlagCondition(""));
                        }

                        //##################################################################################
                        //############################### CONDITION HANDLING ###############################
                        //##################################################################################

                        var conditions = Milestone.getConditions().Conditions;
                        ConditionEditorWindow.LayoutConditionEditor(conditions);

                        //##################################################################################
                    }

                    break;
                }

                if (GUILayout.Button("Save milestone"))
                {
                    this.Close();
                }
            }
        }