protected bool SavePage()
    {
        try
        {
            Util util = new Util();
            Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID];

            util.SetDefaultButton(State, DefaultButtonImage.Text);
            XmlUtil x_util = new XmlUtil();
            //save application
            State["CreatePageMessage"] = null;

            string page_name = State["SelectedAppPage"].ToString();
            State["PageHtml"] = x_util.FilterCanvasOutput(SavedCanvasHtml.Text);
            string html = State["PageHtml"].ToString();

            Hashtable duplicates = x_util.EncodeAppPageToAppXml(State, page_name, html);

            Message.Text = "Page " + page_name + " has been saved. ";
            ShowPage(page_name);

            SavedCanvasHtml.Text = "";

            if (duplicates != null)
            {
                StringBuilder errors = new StringBuilder();
                foreach (string duplicate in duplicates.Keys)
                {
                    errors.Append(duplicate + " internal name in current page also found on " + duplicates[duplicate].ToString() + " page; ");
                }
                Message.Text += errors.ToString() + " Your app will not work with duplicate identifiers. Fix and then save this page again.";
            }

            if (State["EncodeComputeWarnings"] != null)
            {
                Message.Text += " " + State["EncodeComputeWarnings"].ToString();
                State["EncodeComputeWarnings"] = null;
            }

            InitAppPages();

            PagePanel.Style.Value = PagePanelStyle;
            return true;
        }
        catch (Exception ex)
        {
            Util util = new Util();
            Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID];
            util.LogError(State, ex);
            Message.Text = "Internal Error: " + ex.Message + ": " + ex.StackTrace;
            return false;
        }
    }
    protected bool SaveAppInDatabase(string app, string page_name)
    {
        try
        {
            ClearMessages();
            Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID];
            State["CreatePageMessage"] = null;

            //save application
            Util util = new Util();
            XmlUtil x_util = new XmlUtil();

             State["PageHtml"] = x_util.FilterCanvasOutput(SavedCanvasHtml.Text);
            string html =  State["PageHtml"].ToString();

            if ( State["SelectedDeviceType"] == null /*||  State["SelectedDeviceView"] == null*/)
            {
                 State["SelectedDeviceType"] = Constants.IPHONE;
                DeviceType.Text =  State["SelectedDeviceType"].ToString();
            }

            util.CreateApp(State, page_name, State["SelectedDeviceType"].ToString(), AppDescription.Text);
            util.SetDefaultButton(State, DefaultButtonImage.Text);
            Hashtable duplicates = x_util.EncodeAppPageToAppXml(State, page_name, html);
            if (duplicates != null)
            {
                 State["SelectedApp"] = app;

                util.DeleteApplication(State);

                ResetAppStateVariables();

                UpdateAppLists();
                AppPages.Items.Clear();

                StringBuilder errors = new StringBuilder();
                foreach (string duplicate in duplicates.Keys)
                {
                    errors.Append(duplicate + " internal name in current page also found on " + duplicates[duplicate].ToString() + " page; ");
                }
                Message.Text = errors.ToString() + " This application was not saved because duplicate identifiers are not allowed.";

                return false;
            }
            x_util.SetBackgroundImage(State);

            SetViewForDevice();
            ShowPage(page_name);
            CurrentApp.Items.Add(new RadComboBoxItem(app, app));
            CurrentApp.SelectedIndex = CurrentApp.Items.Count - 1;

            AppPages.Items.Clear();
            AppPages.Items.Add(new RadComboBoxItem(page_name, page_name));
            AppPages.SelectedIndex = 0;
            SavedCanvasHtml.Text = "";
            return true;
        }
        catch (Exception ex)
        {
            Util util = new Util();
            Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID];
            util.LogError(State, ex);
            Message.Text = "Internal Error: " + ex.Message + ": " + ex.StackTrace;
            return false;
        }
    }