/// <summary>
        /// Examines/combines all the variables involved and sets
        /// CurrentUICulture and CurrentCulture.
        /// Can be overridden.
        /// </summary>
        /// <param name="e"></param>
        protected virtual void OnChangeLanguage(LanguageSwitcherEventArgs e)
        {
            // Updates current cultures
            SetCurrentLanguage(e.CultureItem, SWITCHER_COOKIE_NAME, this);

            if (ChangeLanguage != null)
            {
                ChangeLanguage(this, e); //Invokes the delegates
            }
        }
        /// <summary>
        /// Examines/combines all the variables involved and sets
        /// CurrentUICulture and CurrentCulture.  instance containing the event data.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnChangeLanguage(LanguageSwitcherEventArgs e)
        {
            if (Context != null)
            {
                int mID = 0;
                if (Context.Request.Params["Mid"] != null)
                {
                    mID = Int32.Parse(Context.Request.Params["Mid"]);
                }

                int tID = 0;
                if (Context.Request.Params["PageID"] != null)
                {
                    tID = Int32.Parse(Context.Request.Params["PageID"]);
                }
                else if (Context.Request.Params["TabID"] != null)
                {
                    tID = Int32.Parse(Context.Request.Params["TabID"]);
                }

                string auxUrl         = Context.Request.Url.AbsolutePath;
                string auxApplication = Context.Request.ApplicationPath;
                int    index          = auxUrl.ToLower().IndexOf(auxApplication.ToLower());
                if (index != -1)
                {
                    auxUrl = auxUrl.Substring(index + auxApplication.Length);
                }
                if (auxUrl.StartsWith("/"))
                {
                    auxUrl = "~" + auxUrl;
                }
                else
                {
                    auxUrl = "~/" + auxUrl;
                }

                string customParams = string.Empty;

                foreach (string key in Context.Request.QueryString.Keys)
                {
                    if (!key.ToLower().Equals("mid") && !key.ToLower().Equals("tabid") && !key.ToLower().Equals("lang"))
                    {
                        customParams += "&" + key + "=" + Context.Request.Params[key];
                    }
                }

                string returnUrl =
                    HttpUrlBuilder.BuildUrl(auxUrl, tID, mID, e.CultureItem.Culture, customParams, string.Empty,
                                            string.Empty);
                if (returnUrl.ToLower().IndexOf("lang") == -1)
                {
                    customParams += "&Lang=" + e.CultureItem.Culture.Name;
                    returnUrl     =
                        HttpUrlBuilder.BuildUrl(auxUrl, tID, mID, e.CultureItem.Culture, customParams, string.Empty,
                                                string.Empty);
                }
                //System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(e.CultureItem
                //LanguageCultureItem lci = new LanguageCultureItem(e.CultureItem.Culture.Name, e.CultureItem.Culture.Name)
                SetCurrentLanguage(e.CultureItem);
                Context.Response.Redirect(returnUrl);
            }
        }