/// <summary>
        /// Function to retrieve referral page from session
        /// </summary>
        /// <param name="page"></param>
        /// <returns></returns>
        static public void ReturnRedirect(this BaseSublayout page)
        {
            string url = null;

            if (page.Page.Session[Constants.SessionPreviousUrl] != null)
            {
                url = page.Page.Session[Constants.SessionPreviousUrl].ToString();
                if (!String.IsNullOrEmpty(url) && url != page.Page.Request.RawUrl)
                {
                    //url = contextPage.Page.Session[redirectSessionKey].ToString();

                    //Reset the session reference
                    page.Page.Session[Constants.SessionPreviousUrl] = null;
                    redirect(page, url);
                }
            }
        }
 /// <summary>
 /// Internal method for redirecting, no need to keep writing this out all the time
 /// </summary>
 /// <param name="page"></param>
 /// <param name="Url"></param>
 static private void redirect(BaseSublayout page, string Url)
 {
     page.Page.Response.Redirect(Url, true);
 }
        /// <summary>
        /// Function to save the current page reference in session and redirect to signup/signin page
        /// </summary>
        /// <param name="currentPage"></param>
        /// <param name="permission">Defines user permission for current action to be performed</param>
        /// <param name="UrlToGoto">Alternative URL to be redirected (Note: Session reference to previous page will be cleared).</param>
        static public void ProfileRedirect(this BaseSublayout page, UnderstoodDotOrg.Common.Constants.UserPermission permission, string UrlToGoto = null, bool preserveURL = false)
        {
            // only set redirect if we don't already have a place to go back to - this will allow us to "chain" permission checks without losing original return URL
            if (page.Session[Constants.SessionPreviousUrl] == null && !preserveURL)
            {
                page.Session[Constants.SessionPreviousUrl] = page.Page.Request.RawUrl;
            }

            switch (permission)
            {
            case Constants.UserPermission.CommunityUser:
                //is user logged in?
                if (page.CurrentMember == null)
                {
                    //not logged in, please log in
                    page.Page.Response.Redirect(SignInPageItem.GetSignInPage().GetUrl());
                }
                else
                {
                    //is user registered for community?
                    if (String.IsNullOrEmpty(page.CurrentMember.ScreenName))
                    {
                        //redirect to community sign-up
                        redirect(page, RegisterCommunityProfileItem.GetRegisterCommunityProfilePage().GetUrl());
                    }
                }
                break;

            case Constants.UserPermission.RegisteredUser:
                //is user logged in?
                if (page.CurrentMember == null)
                {
                    //not logged in, please log in
                    redirect(page, SignInPageItem.GetSignInPage().GetUrl());
                }
                break;

            case Constants.UserPermission.AnonymousUser:
                break;

            case Constants.UserPermission.AdminUser:
                break;

            case Constants.UserPermission.Moderator:
                break;

            case Constants.UserPermission.Blogger:
                break;

            case Constants.UserPermission.Expert:
                break;

            case Constants.UserPermission.InternationalUser:
                //redirect to international user page
                if (page.isInternationalUser == Constants.GeoIPLookup.InternationalStatus.UnknownInternationalUser)
                {
                    redirect(page, InternationalUserPageItem.GetInternationalUserPage().GetUrl());
                }
                break;

            case Constants.UserPermission.AgreedToTerms:
                //redirect to T&C if they have not agreed yet
                var termsUrl = TermsandConditionsItem.GetTermsAndConditionsPage().GetUrl();

                if (page.CurrentMember != null && !page.CurrentMember.AgreedToSignUpTerms && !page.Request.RawUrl.Contains(termsUrl))
                {
                    redirect(page, termsUrl);
                }
                break;

            case Constants.UserPermission.CanPersonalize:
                if (page.CurrentMember == null)
                {
                    redirect(page, SignInPageItem.GetSignInPage().GetUrl());
                }
                else
                {
                    if (page.CurrentMember.Children == null || page.CurrentMember.Children.Count == 0)
                    {
                        redirect(page, RegisterChildInformationItem.GetRegisterChildInfoPage().GetUrl());
                    }
                }

                break;

            default:
                break;
            }

            if (!preserveURL)
            {
                //everything's fine, redirect to page if it was passed
                page.Page.Session[Constants.SessionPreviousUrl] = null;
            }

            if (!String.IsNullOrEmpty(UrlToGoto))
            {
                redirect(page, UrlToGoto);
            }
        }
 /// <summary>
 /// Internal method for redirecting, no need to keep writing this out all the time
 /// </summary>
 /// <param name="page"></param>
 /// <param name="Url"></param>
 static private void redirect(BaseSublayout page, string Url)
 {
     page.Page.Response.Redirect(Url, true);
 }