/// <summary> Refresh the web skin collection by pulling the data back from the database </summary>
        /// <returns> TRUE if successful, otherwise FALSE </returns>
        public static bool RefreshWebSkins()
        {
            try
            {
                lock (webSkinsLock)
                {
                    if (webSkins == null)
                    {
                        webSkins = new Web_Skin_Collection();
                    }

                    Web_Skin_Utilities.Populate_Default_Skins(webSkins, null);
                }

                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary> Populates/builds the main default HTML skin during application startup </summary>
        /// <param name="SkinList"> List of skin to populate with the default, commonly used skin</param>
        /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering  </param>
        /// <returns> TRUE if successful, otherwise FALSE </returns>
        /// <remarks> Most HTML skins are built as they are needed and then cached for a period of time.  The main default skins are
        /// permanently stored in this global <see cref="Web_Skin_Collection"/> object.</remarks>
        public static bool Populate_Default_Skins(Web_Skin_Collection SkinList, Custom_Tracer Tracer)
        {
            if (Tracer != null)
            {
                Tracer.Add_Trace("SobekCM_Skin_Collection_Builder.Populate_Default_Skins", "Build the standard interfaces");
            }

            // Get the data from the database
            DataTable skinData = Engine_Database.Get_All_Web_Skins(Tracer);

            // Just return if the data appears bad..
            if ((skinData == null) || (skinData.Rows.Count == 0))
                return false;

            // Clear existing interfaces
            SkinList.Initialize(skinData);

            return true;
        }
 /// <summary> Gets the HTML skin indicated in the current navigation mode </summary>
 /// <param name="Current_Mode"> Mode / navigation information for the current request</param>
 /// <param name="Skin_Collection"> Collection of the most common skins and source information for all the skins made on the fly </param>
 /// <param name="Cache_On_Build"> Flag indicates if this should be added to the ASP.net (or caching server) cache </param>
 /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param>
 /// <returns> Fully-built object used to "skin" this digital library </returns>
 public Web_Skin_Object Get_HTML_Skin(Navigation_Object Current_Mode, Web_Skin_Collection Skin_Collection, bool Cache_On_Build, Custom_Tracer Tracer)
 {
     return Get_HTML_Skin(Current_Mode.Skin, Current_Mode, Skin_Collection, Cache_On_Build, Tracer);
 }
        /// <summary> Gets the HTML skin indicated in the current navigation mode </summary>
        /// <param name="Web_Skin_Code"> Web skin code </param>
        /// <param name="Current_Mode"> Mode / navigation information for the current request</param>
        /// <param name="Skin_Collection"> Collection of the most common skins and source information for all the skins made on the fly </param>
        /// <param name="Cache_On_Build"> Flag indicates if this should be added to the ASP.net (or caching server) cache </param>
        /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param>
        /// <returns> Fully-built object used to "skin" this digital library </returns>
        public Web_Skin_Object Get_HTML_Skin(string Web_Skin_Code, Navigation_Object Current_Mode, Web_Skin_Collection Skin_Collection, bool Cache_On_Build, Custom_Tracer Tracer)
        {
            // Get the interface object
            Web_Skin_Object htmlSkin = SobekEngineClient.WebSkins.Get_LanguageSpecific_Web_Skin(Web_Skin_Code, Current_Mode.Language, UI_ApplicationCache_Gateway.Settings.System.Default_UI_Language, Cache_On_Build, Tracer);

            // If there is still no interface, this is an ERROR
            if (htmlSkin != null)
            {
                if ((!String.IsNullOrEmpty(htmlSkin.Base_Skin_Code)) && (htmlSkin.Base_Skin_Code != htmlSkin.Skin_Code))
                    Current_Mode.Base_Skin = htmlSkin.Base_Skin_Code;
            }
            else
            {
                Tracer.Add_Trace("SobekCM_Assistant.Get_HTML_Skin", "SobekEngineClient returned NULL for the requested web skin");
            }

            // Return the value
            return htmlSkin;
        }
        /// <summary> Populates/builds the main default HTML skin during application startup </summary>
        /// <param name="SkinList"> List of skin to populate with the default, commonly used skin</param>
        /// <param name="SourceTable"> Source table with the skin data </param>
        /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering  </param>
        /// <returns> TRUE if successful, otherwise FALSE </returns>
        /// <remarks> Most HTML skins are built as they are needed and then cached for a period of time.  The main default skins are
        /// permanently stored in this global <see cref="Web_Skin_Collection"/> object.</remarks>
        public static bool Populate_Default_Skins(Web_Skin_Collection SkinList, DataTable SourceTable, Custom_Tracer Tracer)
        {
            if (Tracer != null)
            {
                Tracer.Add_Trace("SobekCM_Skin_Collection_Builder.Populate_Default_Skins", "Build the standard interfaces");
            }

            // Just return if the data appears bad..
            if ((SourceTable == null) || (SourceTable.Rows.Count == 0))
                return false;

            // Clear existing interfaces
            SkinList.Initialize(SourceTable);

            return true;
        }