/// <summary>
        /// Create or update this item (kit or template) on Altspace's website
        /// </summary>
        /// <returns></returns>
        public bool updateAltVRItem()
        {
            if (!WebClient.IsAuthenticated)
            {
                return(false);
            }

            string new_id = LoginManager.ManageAltVRItem(this);

            if (id == null)
            {
                id = new_id;
            }

            return(true);
        }
        public static void ManageItem(AltspaceListItem item, Action showSelection_fn, Action <string> updateItem_fn, string missingString)
        {
            void BuildItem(AltspaceListItem subItem)
            {
                string       state  = subItem.buildAssetBundle(SettingsManager.SelectedBuildTargets) ? "finished" : "canceled";
                LoginManager window = EditorWindow.GetWindow <LoginManager>();

                window.ShowNotification(new GUIContent(subItem.friendlyName.Capitalize() + " build " + state), 5.0f);
            }

            void BuildAndUploadItem(AltspaceListItem subItem, Action <string> updategui_fn)
            {
                LoginManager.BuildAndUploadAltVRItem(SettingsManager.SelectedBuildTargets, subItem);

                updategui_fn(subItem.id);

                LoginManager window = EditorWindow.GetWindow <LoginManager>();

                window.ShowNotification(new GUIContent(subItem.friendlyName.Capitalize() + " upload finished"), 5.0f);
            }

            void UploadFlatItem(AltspaceListItem subItem, Action <string> updategui_fn)
            {
                LoginManager.ManageAltVRItem(subItem);

                updategui_fn(subItem.id);

                LoginManager window = EditorWindow.GetWindow <LoginManager>();

                window.ShowNotification(new GUIContent(subItem.friendlyName.Capitalize() + " upload finished"), 5.0f);
            }

            if (WebClient.IsAuthenticated)
            {
                if (GUILayout.Button("Select " + item.friendlyName.Capitalize()))
                {
                    showSelection_fn();
                }
            }
            else
            {
                EditorGUILayout.LabelField("Offline mode", new GUIStyle()
                {
                    fontStyle = FontStyle.Bold,
                    alignment = TextAnchor.MiddleCenter
                });
            }

            EditorGUILayout.Space(10);

            item.showSelf();

            EditorGUILayout.BeginHorizontal();

            if (!item.isSet)
            {
                GUILayout.Label(missingString, new GUIStyle()
                {
                    fontStyle = FontStyle.Bold,
                    alignment = TextAnchor.MiddleCenter
                });
            }
            else if (item.exists)
            {
                if (item.isAssetBundleItem)
                {
                    if (GUILayout.Button("Build"))
                    {
                        EditorApplication.delayCall += () => BuildItem(item);
                    }

                    if (item.isSelected)
                    {
                        if (GUILayout.Button("Build & Upload"))
                        {
                            EditorApplication.delayCall += () => BuildAndUploadItem(item, updateItem_fn);
                        }
                    }
                }
                else
                {
                    if (GUILayout.Button("Upload"))
                    {
                        EditorApplication.delayCall += () => UploadFlatItem(item, updateItem_fn);
                    }
                }
            }

            EditorGUILayout.EndHorizontal();
        }