/// <summary>
 /// 메시지 출력
 /// ctl 가 null 이 아니면 RegisterStartupScript 로 스크립트 추가되어지므로 호출후 Response.End()등으로 실행중지시 출력되어지지 않습니다.
 /// </summary>
 /// <param name="messageBoxDisplayKind">출력타입</param>
 /// <param name="title">메시지 캡션</param>
 /// <param name="text">메시지</param>
 /// <param name="messageType">메시지타입</param>
 /// <param name="messageButton">버튼타입</param>
 /// <param name="ctl">렌더링되는 페이지</param>
 /// <param name="returnUrl">메시지출력후 이동할 url</param>
 /// <param name="endResponse">프로세스 종료여부</param>
 public static void MessageBox(MessageBoxDisplayKind messageBoxDisplayKind,
                               string title,
                               string text,
                               MessageType messageType,
                               MessageButtons messageButton,
                               System.Web.UI.Control ctl,
                               string returnUrl = "",
                               bool endResponse = false)
 {
     MessageBox(messageBoxDisplayKind, title, text, messageType, messageButton, (ctl != null) ? ctl.Page : null, returnUrl, endResponse);
 }
 /// <summary>
 /// 메시지 출력
 /// ctl 가 null 이 아니면 RegisterStartupScript 로 스크립트 추가되어지므로 호출후 Response.End()등으로 실행중지시 출력되어지지 않습니다.
 /// </summary>
 /// <param name="messageBoxDisplayKind">출력타입</param>
 /// <param name="title">메시지 캡션</param>
 /// <param name="text">메시지</param>
 /// <param name="messageType">메시지타입</param>
 /// <param name="messageButton">버튼타입</param>
 /// <param name="ctl">렌더링되는 페이지</param>
 /// <param name="returnUrl">메시지출력후 이동할 url</param>
 /// <param name="endResponse">프로세스 종료여부</param>
 public static void MessageBox(MessageBoxDisplayKind messageBoxDisplayKind,
                               string title,
                               string text,
                               MessageType messageType,
                               MessageButtons messageButton,
                               System.Web.UI.Control ctl,
                               string returnUrl = "",
                               bool endResponse = false)
 {
     MessageBox(messageBoxDisplayKind, title, text, messageType, messageButton, (ctl != null) ? ctl.Page : null, returnUrl, endResponse);
 }
        /// <summary>
        /// 메시지 출력
        /// page 가 null 이 아니면 RegisterStartupScript 로 스크립트 추가되어지므로 호출후 Response.End()등으로 실행중지시 출력되어지지 않습니다.
        /// </summary>
        /// <param name="messageBoxDisplayKind">출력타입</param>
        /// <param name="title">메시지 캡션</param>
        /// <param name="text">메시지</param>
        /// <param name="messageType">메시지타입</param>
        /// <param name="messageButton">버튼타입</param>
        /// <param name="page">렌더링되는 페이지</param>
        /// <param name="returnUrl">메시지출력후 이동할 url</param>
        /// <param name="endResponse">프로세스 종료여부</param>
        public static void MessageBox(MessageBoxDisplayKind messageBoxDisplayKind,
                                      string title,
                                      string text,
                                      MessageType messageType      = MessageType.Normal,
                                      MessageButtons messageButton = MessageButtons.Ok,
                                      System.Web.UI.Page page      = null,
                                      string returnUrl             = "",
                                      bool endResponse             = true)
        {
            switch (messageBoxDisplayKind)
            {
            case MessageBoxDisplayKind.Page:

                var httpResponse = HttpContext.Current.Response;
                var param        = string.Format("Title={0}&Content={1}&MessageType={2}&MessageButton={3}&ReturnUrl={4}",
                                                 title.UrlEncode(), text.UrlEncode(), (int)messageType, (int)messageButton, returnUrl.UrlEncode());
                var url = UrlParamConcat(AppSettings.MessageBoxUrl, param);
                httpResponse.Redirect(url, endResponse);
                return;

            default:

                #region

                StringBuilder buffer = new StringBuilder();
                try
                {
                    buffer.Append(@"alert(");
                    buffer.Append(AntiXssTool.JavaScriptEncode((title.IsNotWhiteSpace() ? "[" + title + "]\n\n" : string.Empty) + text));
                    buffer.Append(@");");

                    // Alert이고 닫기 타입이 Close 이면 창을 닫는다.
                    if (messageButton == MessageButtons.Close)
                    {
                        buffer.Append(SR.CloseWindowJavascript);
                    }
                    else if (returnUrl.IsNotWhiteSpace())
                    {
                        buffer.AppendFormat("window.location.href={0};", AntiXssTool.JavaScriptEncode(returnUrl));
                    }

                    if (page != null)
                    {
                        //이미 추가되었다면
                        if (page.ClientScript.IsStartupScriptRegistered(page.GetType(), page + "_MessageBox"))
                        {
                            ScriptManager.RegisterStartupScript(page, page.GetType(), page + "_MessageBox", buffer.ToString(), true);
                        }
                        else
                        {
                            ScriptManager.RegisterStartupScript(page, page.GetType(), page + "_MessageBox", buffer.ToString(), true);
                        }
                    }
                    else
                    {
                        HttpContext.Current.Response.Output.Write(WrapScriptTag(buffer.ToString()));
                    }
                }
                finally
                {
                    buffer = null;
                }

                #endregion

                break;
            }
        }
        /// <summary>
        /// 메시지 출력
        /// page 가 null 이 아니면 RegisterStartupScript 로 스크립트 추가되어지므로 호출후 Response.End()등으로 실행중지시 출력되어지지 않습니다.
        /// </summary>
        /// <param name="messageBoxDisplayKind">출력타입</param>
        /// <param name="title">메시지 캡션</param>
        /// <param name="text">메시지</param>
        /// <param name="messageType">메시지타입</param>
        /// <param name="messageButton">버튼타입</param>
        /// <param name="page">렌더링되는 페이지</param>
        /// <param name="returnUrl">메시지출력후 이동할 url</param>
        /// <param name="endResponse">프로세스 종료여부</param>
        public static void MessageBox(MessageBoxDisplayKind messageBoxDisplayKind,
                                      string title,
                                      string text,
                                      MessageType messageType = MessageType.Normal,
                                      MessageButtons messageButton = MessageButtons.Ok,
                                      System.Web.UI.Page page = null,
                                      string returnUrl = "",
                                      bool endResponse = true)
        {
            switch(messageBoxDisplayKind)
            {
                case MessageBoxDisplayKind.Page:

                    var httpResponse = HttpContext.Current.Response;
                    var param = string.Format("Title={0}&Content={1}&MessageType={2}&MessageButton={3}&ReturnUrl={4}",
                                              title.UrlEncode(), text.UrlEncode(), (int)messageType, (int)messageButton, returnUrl.UrlEncode());
                    var url = UrlParamConcat(AppSettings.MessageBoxUrl, param);
                    httpResponse.Redirect(url, endResponse);
                    return;

                default:

                    #region

                    StringBuilder buffer = new StringBuilder();
                    try
                    {
                        buffer.Append(@"alert(");
                        buffer.Append(AntiXssTool.JavaScriptEncode((title.IsNotWhiteSpace() ? "[" + title + "]\n\n" : string.Empty) + text));
                        buffer.Append(@");");

                        // Alert이고 닫기 타입이 Close 이면 창을 닫는다.
                        if(messageButton == MessageButtons.Close)
                        {
                            buffer.Append(SR.CloseWindowJavascript);
                        }
                        else if(returnUrl.IsNotWhiteSpace())
                        {
                            buffer.AppendFormat("window.location.href={0};", AntiXssTool.JavaScriptEncode(returnUrl));
                        }

                        if(page != null)
                        {
                            //이미 추가되었다면
                            if(page.ClientScript.IsStartupScriptRegistered(page.GetType(), page + "_MessageBox"))
                                ScriptManager.RegisterStartupScript(page, page.GetType(), page + "_MessageBox", buffer.ToString(), true);
                            else
                                ScriptManager.RegisterStartupScript(page, page.GetType(), page + "_MessageBox", buffer.ToString(), true);
                        }
                        else
                        {
                            HttpContext.Current.Response.Output.Write(WrapScriptTag(buffer.ToString()));
                        }
                    }
                    finally
                    {
                        buffer = null;
                    }

                    #endregion

                    break;
            }
        }