public GameObject settingsPanel;                                //The panel for the options menu.
#endif

    #endregion _iMMOSETTINGS

    #endregion Variables

    #region Functions

    // Grabs our hidden components controls.

    private void Start()
    {
        network       = GameObject.Find("NetworkManager").GetComponent <NetworkManagerMMO>();
        auth          = network.GetComponent <NetworkAuthenticatorMMO>();
        popup         = GameObject.Find("Popup").GetComponent <UIPopup>();
        loginUI       = GameObject.Find("Login").GetComponent <UILogin>();
        mainMenuPanel = transform.GetChild(0).gameObject;

#if _iMMOSETTINGS
        settingsButton = transform.GetChild(0).transform.GetChild(0).transform.GetChild(1).transform.GetChild(0).gameObject.GetComponent <Button>();
        settingsPanel  = GameObject.Find("UCE_UI_Settings");
#endif
    }
    // -----------------------------------------------------------------------------------
    // Update
    // -----------------------------------------------------------------------------------
    private void Update()
    {
        Player player = Player.localPlayer;

        if (!player)
        {
            return;
        }

        if (manager == null)
        {
            manager = FindObjectOfType <NetworkManagerMMO>();
        }

        if (auth == null)
        {
            auth = manager.GetComponent <NetworkAuthenticatorMMO>();
        }

        if (manager != null && panel.activeSelf)
        {
            // item slot
            if (itemIndex != -1)
            {
                ScriptableItem item = player.inventory.slots[itemIndex].item.data;
                itemSlot.GetComponent <Image>().color           = Color.white;
                itemSlot.GetComponent <Image>().sprite          = item.image;
                itemSlot.GetComponent <UIShowToolTip>().enabled = true;
                itemSlot.GetComponent <UIShowToolTip>().text    = item.ToolTip();
            }
            else
            {
                itemSlot.GetComponent <Image>().color           = Color.clear;
                itemSlot.GetComponent <Image>().sprite          = null;
                itemSlot.GetComponent <UIShowToolTip>().enabled = false;
            }

            // no one selected yet, show search box
            if (string.IsNullOrEmpty(recipient))
            {
                searchPanel.gameObject.SetActive(true);
                messagePanel.gameObject.SetActive(false);
                itemIndex = -1;

                if (search.text.Length > 0 &&
                    search.text.Length <= auth.accountMaxLength &&
                    Regex.IsMatch(search.text, @"^[a-zA-Z0-9_]+$"))
                {
                    searchButton.interactable = true;
                }
                else
                {
                    searchButton.interactable = false;
                }
                searchButton.onClick.SetListener(() =>
                {
                    if (NetworkTime.time >= player.nextRiskyActionTime)
                    {
                        //prepare and send search request, get response
                        sending                   = true;
                        search.interactable       = false;
                        searchButton.interactable = false;
                        player.CmdMail_Search(search.text);
                        dialogMessage.text = "Searching...";
                        dialog.SetActive(true);
                    }
                });
            }
            else
            {
                searchPanel.gameObject.SetActive(false);
                messagePanel.gameObject.SetActive(true);
                recipientText.text = recipient;

                acceptButton.interactable = !string.IsNullOrEmpty(subject.text) && player.mailSettings.costPerMail.checkCost(player);
                acceptButton.onClick.SetListener(() =>
                {
                    if (NetworkTime.time >= player.nextRiskyActionTime)
                    {
                        sending            = true;
                        dialogMessage.text = "Sending Mail...";
                        dialog.SetActive(true);
                        player.CmdMail_Send(recipient, subject.text, body.text, itemIndex);
                        itemIndex = -1;
                    }
                });

                dialogButton.onClick.SetListener(() =>
                {
                    cancelButton.onClick.Invoke();
                });
            }

            //show the dialog button if we are not sending
            dialogButton.gameObject.SetActive(!sending);

            // cancel
            cancelButton.interactable = !sending;
            cancelButton.onClick.SetListener(() =>
            {
                recipient    = "";
                search.text  = "";
                subject.text = "";
                body.text    = "";
                sending      = false;
                itemIndex    = -1;
                UIUtils.BalancePrefabs(searchSlot.gameObject, 0, searchContent);
                dialog.SetActive(false);
                panel.SetActive(false);
            });
        }
    }