protected void fieldEditor_AfterItemDeleted(object sender, FieldEditorEventArgs e)
    {
        // Update parameters of inherited form user controls if a field or a category was deleted
        if ((e != null))
        {
            // Details of item which was deleted
            string itemName = e.ItemName;
            FieldEditorSelectedItemEnum itemType = e.ItemType;
            int itemOrder = e.ItemOrder;

            // Get form controls inherited from edited one
            var inheritedControls = FormUserControlInfoProvider.GetFormUserControls().WhereEquals("UserControlParentID", FormControlID);
            foreach (FormUserControlInfo control in inheritedControls)
            {
                // Remove deleted item (field/category) from inherited form control parameters
                switch (itemType)
                {
                case FieldEditorSelectedItemEnum.Field:
                    control.UserControlParameters = FormHelper.RemoveFieldFromAlternativeDefinition(control.UserControlParameters, itemName, itemOrder);
                    break;

                case FieldEditorSelectedItemEnum.Category:
                    control.UserControlParameters = FormHelper.RemoveCategoryFromAlternativeDefinition(control.UserControlParameters, itemName, itemOrder);
                    break;
                }

                // Update inherited form control
                FormUserControlInfoProvider.SetFormUserControlInfo(control);
            }
        }
    }
    /// <summary>
    /// Fill attribute list.
    /// </summary>
    /// <param name="selectedValue">Selected value in attribute list, null if first item is selected</param>
    private void LoadAttributesList(string selectedValue)
    {
        ListItem li = null;

        // Reload list only if new item is not edited
        if (!IsNewItemEdited)
        {
            // Clear item list
            lstAttributes.Items.Clear();

            // Get all list items (fields and categories)
            var itemList = FormInfo.GetFormElements(true, true);

            if (itemList != null)
            {
                MacroResolver resolver = MacroResolverStorage.GetRegisteredResolver(ResolverName);
                foreach (IField item in itemList)
                {
                    string itemDisplayName;
                    string itemCodeName;
                    if (item is FormFieldInfo)
                    {
                        FormFieldInfo formField = ((FormFieldInfo)(item));

                        itemDisplayName = formField.Name;
                        if (!formField.AllowEmpty)
                        {
                            itemDisplayName += ResHelper.RequiredMark;
                        }

                        itemCodeName = fieldPreffix + formField.Name;

                        li = new ListItem(itemDisplayName, itemCodeName);
                    }
                    else if (item is FormCategoryInfo)
                    {
                        FormCategoryInfo formCategory = ((FormCategoryInfo)(item));

                        itemDisplayName = ResHelper.LocalizeString(formCategory.GetPropertyValue(FormCategoryPropertyEnum.Caption, resolver));
                        itemCodeName = categPreffix + formCategory.CategoryName;

                        li = new ListItem(itemDisplayName, itemCodeName);
                    }

                    // Load list box
                    if (li != null)
                    {
                        lstAttributes.Items.Add(li);
                    }
                }
            }

            // Set selected item
            if (lstAttributes.Items.Count > 0)
            {
                if (!string.IsNullOrEmpty(selectedValue) && lstAttributes.Items.FindByValue(selectedValue) != null)
                {
                    lstAttributes.SelectedValue = selectedValue;
                }
                else
                {
                    // Select first item of the list
                    lstAttributes.SelectedIndex = 0;
                }
            }

            // Default values - list is empty
            SelectedItemName = null;
            SelectedItemType = 0;

            // Save selected item info
            if (lstAttributes.SelectedValue != null)
            {
                if (lstAttributes.SelectedValue.StartsWithCSafe(fieldPreffix))
                {
                    SelectedItemName = lstAttributes.SelectedValue.Substring(preffixLength);
                    SelectedItemType = FieldEditorSelectedItemEnum.Field;
                }
                else if (lstAttributes.SelectedValue.StartsWithCSafe(categPreffix))
                {
                    SelectedItemName = lstAttributes.SelectedValue.Substring(preffixLength);
                    SelectedItemType = FieldEditorSelectedItemEnum.Category;
                }
            }
        }
    }
    /// <summary>
    /// Creates new attribute.
    /// </summary>
    private void NewAttribute()
    {
        if (Mode == FieldEditorModeEnum.BizFormDefinition)
        {
            // Check 'EditForm' permission
            if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("cms.form", "EditForm"))
            {
                RedirectToAccessDenied("cms.form", "EditForm");
            }
        }

        if (IsNewItemEdited)
        {
            // Only one new item can be edited
            ShowMessage(GetString("TemplateDesigner.ErrorCannotCreateAnotherNewItem"));
            return;
        }

        IsNewItemEdited = true;

        HandleInherited(false);

        FieldDetailsVisible = true;

        // Set field type
        fieldTypeSelector.Reload();
        SetFieldType();

        // Clear settings
        controlSettings.Settings = new Hashtable();
        controlSettings.BasicForm.Mode = FormModeEnum.Insert;

        // Create #new# attribute in attribute list
        ListItem newListItem = new ListItem(GetString("TemplateDesigner.NewAttribute"), newFieldPreffix);

        if ((lstAttributes.Items.Count > 0) && (lstAttributes.SelectedIndex >= 0))
        {
            // Add behind the selected item
            lstAttributes.Items.Insert(lstAttributes.SelectedIndex + 1, newListItem);
        }
        else
        {
            // Add at the end of the item collection
            lstAttributes.Items.Add(newListItem);
        }

        // Select new item
        lstAttributes.SelectedIndex = lstAttributes.Items.IndexOf(newListItem);

        // Get type of previously selected item
        FieldEditorSelectedItemEnum oldItemType = SelectedItemType;

        // Initialize currently selected item type and name
        SelectedItemType = FieldEditorSelectedItemEnum.Field;
        SelectedItemName = newFieldPreffix;

        databaseConfiguration.AttributeName = string.Empty;

        bool newItemBlank = ValidationHelper.GetBoolean(SettingsHelper.AppSettings["CMSClearFieldEditor"], true);
        if (newItemBlank || (oldItemType != FieldEditorSelectedItemEnum.Field))
        {
            LoadDefaultAttributeEditForm(false);
        }

        LoadControlSettings();

        DisplaySelectedTabContent();

        PrepareResetButton();
    }
    /// <summary>
    /// New category button clicked.
    /// </summary>
    protected void btnNewCategory_Click(Object sender, EventArgs e)
    {
        if (Mode == FieldEditorModeEnum.BizFormDefinition)
        {
            // Check 'EditForm' permission
            if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("cms.form", "EditForm"))
            {
                RedirectToAccessDenied("cms.form", "EditForm");
            }
        }

        IsDummyField = IsAlternativeForm;
        IsExtraField = IsInheritedForm;

        if (IsNewItemEdited)
        {
            // Display error - Only one new item can be edited
            ShowMessage(GetString("TemplateDesigner.ErrorCannotCreateAnotherNewItem"));
        }
        else
        {
            HandleInherited(false);

            // Create #categ##new# item in list
            ListItem newListItem = new ListItem(GetString("TemplateDesigner.NewCategory"), newCategPreffix);

            if ((lstAttributes.Items.Count > 0) && (lstAttributes.SelectedIndex >= 0))
            {
                // Add behind the selected item
                lstAttributes.Items.Insert(lstAttributes.SelectedIndex + 1, newListItem);
            }
            else
            {
                // Add at the end of the item collection
                lstAttributes.Items.Add(newListItem);
            }

            // Select new item
            lstAttributes.SelectedIndex = lstAttributes.Items.IndexOf(newListItem);

            SelectedItemType = FieldEditorSelectedItemEnum.Category;
            SelectedItemName = newCategPreffix;

            LoadDefaultCategoryEditForm();

            IsNewItemEdited = true;
        }

        PrepareResetButton();
    }