/// <summary>
    /// Calls base class OnPreRender and registers javascript into page.
    /// </summary>
    /// <param name="e">Event arguments</param>
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        // Set selector and link name to work with current staging task group
        var currentTaskGroup = TaskGroupInfoProvider.GetUserTaskGroupInfo(CMSActionContext.CurrentUser.UserID);

        if (currentTaskGroup != null)
        {
            stagingTaskGroupSelector.Value   = currentTaskGroup.TaskGroupID;
            lnkEditTaskGroup.Text            = goToCurrentTaskGroupText + " " + currentTaskGroup.TaskGroupCodeName;
            lblStagingTaskGroupMenuText.Text = currentTaskGroup.TaskGroupCodeName;
        }
        else
        {
            lnkEditTaskGroup.Text            = goToStagingAppText;
            lblStagingTaskGroupMenuText.Text = selectStagingTaskGroupText;
        }

        JavascriptRegistration();
    }
    /// <summary>
    /// Callback from client. Callback result data are prepared to be sent back to the client.
    /// </summary>
    /// <param name="eventArgument">Event arguments in JSON, like which control raised callback, and another data</param>
    public void RaiseCallbackEvent(string eventArgument)
    {
        try
        {
            Dictionary <string, string> callbackData = GetCallbackData(eventArgument);

            // User has changed the task group
            if (GetRaisedCallbackControlID(callbackData).Equals(UniSelectorClientID, StringComparison.InvariantCultureIgnoreCase))
            {
                // If given task group does not exists on the server anymore null is set, and return that selector is inconsistent
                CurrentStagingTaskGroup = TaskGroupInfoProvider.GetTaskGroupInfo(GetRaisedCallbackTaskGroupID(callbackData));

                if ((CurrentStagingTaskGroup == null) && (GetRaisedCallbackTaskGroupID(callbackData) != 0))
                {
                    // Task group is selected that no longer exists on server
                    ShowMessageInCallback(GetString("stagingTaskGroup.SelectorInconsistent"));
                }
            }
            // User clicked the edit link, we have to check if task group still exists
            else if (GetRaisedCallbackControlID(callbackData).Equals(lnkEditTaskGroup.ClientID, StringComparison.InvariantCultureIgnoreCase))
            {
                PrepareLinkForRedirect(callbackData);
                return;
            }
            else
            {
                // User created new task group
                CurrentStagingTaskGroup = CreateNewTaskGroup(callbackData["Name"]);
            }

            // Return ID of staging task group to client, to change selector and menu text
            callbackResult.Add("stagingTaskGroupID", CurrentStagingTaskGroup == null ? UniSelector.US_NONE_RECORD : CurrentStagingTaskGroup.TaskGroupID);
            TaskGroupInfoProvider.SetTaskGroupForUser(CurrentStagingTaskGroup == null ? UniSelector.US_NONE_RECORD : CurrentStagingTaskGroup.TaskGroupID, CMSActionContext.CurrentUser.UserID);
        }
        catch (Exception ex)
        {
            ShowMessageInCallback(GetString("stagingTaskGroupMenu.ExceptionMesasge") + " " + ex.Message);
            EventLogProvider.LogException("StagingTaskGroupMenu", "TASKGROUP", ex);
        }
    }