public void ConstrainSelectedCulture()
        {
            // Replace the SelectedCulture with the nearest match in the CultureList
            var         Match       = enumCultureMatch.None;
            CultureInfo BestCulture = null;

            foreach (var cult in CultureList)
            {
                var NewMatch = enumCultureMatch.None;

                // How well does this culture match?
                if (SelectedCulture.Equals(cult))
                {
                    NewMatch = enumCultureMatch.Region;
                }
                else if (cult.TwoLetterISOLanguageName == SelectedCulture.TwoLetterISOLanguageName)
                {
                    if (cult.IsNeutralCulture)
                    {
                        NewMatch = enumCultureMatch.Neutral;
                    }
                    else
                    {
                        NewMatch = enumCultureMatch.Language;
                    }
                }

                // Is that better than the best match so far?
                if (NewMatch > Match)
                {
                    Match       = NewMatch;
                    BestCulture = cult;
                }
            }

            SelectedCulture = BestCulture;
        }
    protected void Page_Load(object sender, EventArgs e)
    {
        ScriptHelper.RegisterJQuery(Page);
        ScriptHelper.RegisterScriptFile(Page, "~/CMSAdminControls/UI/UniMenu/UniMenu.js");

        currentSiteName = (SiteID != 0) ? SiteInfoProvider.GetSiteName(SiteID) : CMSContext.CurrentSiteName;
        DataSet siteCulturesDS = CultureInfoProvider.GetSiteCultures(currentSiteName);

        if (!DataHelper.DataSourceIsEmpty(siteCulturesDS))
        {
            // Register jQuery cookie script
            ScriptHelper.RegisterJQueryCookie(Page);

            string    defaultCulture = CultureHelper.GetDefaultCulture(currentSiteName);
            DataTable siteCultures   = siteCulturesDS.Tables[0];

            culturesCount = siteCultures.Rows.Count;
            if ((culturesCount <= MaxCulturesInRow) && (culturesCount > 1))
            {
                // Disable cultures menu
                btnCultures.StopProcessing = true;

                for (int i = 0; i < culturesCount; i++)
                {
                    string cultureCode      = siteCultures.Rows[i]["CultureCode"].ToString();
                    string cultureShortName = siteCultures.Rows[i]["CultureShortName"].ToString();
                    string cultureLongName  = ResHelper.LocalizeString(siteCultures.Rows[i]["CultureName"].ToString());

                    if (CMSString.Compare(cultureCode, defaultCulture, true) == 0)
                    {
                        cultureLongName += " " + GetString("general.defaultchoice");
                    }

                    MenuItem item = new MenuItem();
                    item.Text          = HTMLHelper.HTMLEncode(cultureShortName);
                    item.Tooltip       = cultureLongName;
                    item.CssClass      = "BigButton";
                    item.OnClientClick = "ChangeLanguage('" + cultureCode + "')";
                    item.ImagePath     = GetFlagIconUrl(cultureCode, "48x48");
                    item.ImageAltText  = cultureLongName;
                    item.ImageAlign    = ImageAlign.Top;
                    item.MinimalWidth  = 48;
                    buttons.Buttons.Add(item);

                    if (SelectedCulture.ToLowerCSafe() == cultureCode.ToLowerCSafe())
                    {
                        buttons.SelectedIndex = i;
                    }
                }
            }
            else
            {
                // Do not show culture selection buttons
                buttons.StopProcessing = true;

                CultureInfo ci = CultureInfoProvider.GetCultureInfo(SelectedCulture);

                MenuItem item = new MenuItem();
                item.Text         = ci.CultureShortName;
                item.Tooltip      = GetString(ci.CultureName);
                item.ImagePath    = GetFlagIconUrl(SelectedCulture, UseSmallLanguageButton ? "16x16" : "48x48");
                item.ImageAltText = GetString(ci.CultureName);

                SetStyles(item);

                // Generate submenu only if more cultures to choose from
                if (culturesCount > 1)
                {
                    foreach (DataRow row in siteCultures.Rows)
                    {
                        string cultureCode      = row["CultureCode"].ToString();
                        string cultureShortName = row["CultureShortName"].ToString();
                        string cultureLongName  = GetString(row["CultureName"].ToString());

                        if (CMSString.Compare(cultureCode, defaultCulture, true) == 0)
                        {
                            cultureLongName += " " + GetString("general.defaultchoice");
                        }

                        string      flagUrl    = GetFlagIconUrl(cultureCode, "16x16");
                        string      flagBigUrl = GetFlagIconUrl(cultureCode, "48x48");
                        SubMenuItem menuItem   = new SubMenuItem()
                        {
                            Text          = cultureLongName,
                            Tooltip       = cultureLongName,
                            ImagePath     = flagUrl,
                            ImageAltText  = cultureShortName,
                            OnClientClick = String.Format("CMSUniMenu.ChangeButton(##BUTTON##, {0}, {1}); ChangeLanguage({2});", ScriptHelper.GetString(cultureShortName), ScriptHelper.GetString(ResolveUrl(flagBigUrl)), ScriptHelper.GetString(cultureCode))
                        };

                        item.SubItems.Add(menuItem);
                    }
                }

                btnCultures.Buttons.Add(item);
            }

            if (culturesCount > 1)
            {
                string compare = GetString("SplitMode.Compare");

                // Split mode button
                MenuItem splitItem = new MenuItem();
                splitItem.Text          = compare;
                splitItem.Tooltip       = GetString("SplitMode.CompareLangVersions");
                splitItem.OnClientClick = "ChangeSplitMode()";
                splitItem.ImagePath     = GetImageUrl("CMSModules/CMS_Content/Menu/Compare.png");
                splitItem.ImageAltText  = compare;
                splitItem.AllowToggle   = true;
                splitItem.IsToggled     = CMSContext.DisplaySplitMode;

                SetStyles(splitItem);

                splitView.Buttons.Add(splitItem);
            }
            else
            {
                splitView.StopProcessing = true;
            }
        }
    }