﻿/***
 * -CLASS-
 * @name CuiAlert
 * @package cui.core
 * @description 提示框类
 * @pageTag
 * @example
 * @author ypu
 * @version 2011-08-03
 * @since 0.1
 */
(function(a) {
    a.alerts = {
        verticalOffset: -75,
        horizontalOffset: 0,
        repositionOnResize: true,
        overlayOpacity: 0.50,
        overlayColor: "#FFF",
        draggable: true,
        okButton: CuiRes.OK,
        cancelButton: CuiRes.CANCEL,
        dialogClass: null,
        overWarn: function(c, b) {
            a.alerts._overShow(c, b,'warn')
        },
        alert: function(b, c, d) {
            if (c == null) {
                c = "OK"
            }
            a.alerts._show(c, b, null, "alert",
			function(e) {
			    if (d) {
			        d(e)
			    }
			},
			null, null, null, null)
        },
        confirm: function(b, c, d) {
            if (c == null) {
                c = "Are you sure"
            }
            a.alerts._show(c, b, null, "confirm",
			function(e) {
			    if (d) {
			        d(e)
			    }
			},
			null, null, null, null)
        },
        prompt: function(b, c, d, e) {
            if (d == null) {
                d = "Please enter something"
            }
            a.alerts._show(d, b, c, "prompt",
			function(f) {
			    if (e) {
			        e(f)
			    }
			},
			null, null, null, null)
        },
        openBox: function(f, g, b, c, e, d, i) {
            if (g == null) {
                g = "Information"
            }
            a.alerts._show(g, f, null, "openBox",
			function(h) {
			    if (i) {
			        i(h)
			    }
			},
			b, c, e, d)
        },
        overAlert: function(c, b) {
            a.alerts._overShow(c, b,'alert')
        },
        _overShow: function(d, c,x) {
            if (c == null) {
                c = 3000
            }
            var b = c + 600;
            if(a.alerts.timeOutFn){
                clearTimeout(a.alerts.timeOutFn);
                a("#over_container").remove();
            }
            a("body").append($('<div id="over_container" style="display:none"></div>').addClass(x+'_container').append('<div id="over_message"></div>'));
            a("#over_message").text(d).html(a("#over_message").text().replace(/\n/g, "<br />"));
            if (a.alerts.dialogClass) {
                a("#over_container").addClass(a.alerts.dialogClass)
            }
            var e = (a.browser.msie && parseInt(a.browser.version) <= 6) ? "absolute" : "fixed";
            a("#over_container").css({
                position: e,
                zIndex: 99999,
                width: 350,
                padding: 0,
                margin: 0
            }).show("fast");
            a("#over_container").css({
                minWidth: a("#over_container").outerWidth(),
                maxWidth: a("#over_container").outerWidth()
            });
            a.alerts._overReposition();
            a.alerts.timeOutFn = setTimeout(function() {
                a("#over_container").hide("fast")
            },
			c);
//            setTimeout(function() {       fix when call function quickly,the last alert will disappear soon.
//                a("#over_container").remove()
//            },
//			b)
        },
        _overReposition: function() {
            var c = 4;
            var b = ((a(window).width() / 2) - (a("#over_container").outerWidth() / 2)) + a.alerts.horizontalOffset;
            if (c < 0) {
                c = 0
            }
            if (b < 0) {
                b = 0
            }
            if (a.browser.msie && parseInt(a.browser.version) <= 6) {
                c = c + a(window).scrollTop()
            }
            if (a.browser.msie && parseInt(a.browser.version) <= 6) {
                b = b - 175
            }
            a("#over_container").css({
                top: c + "px",
                left: b + "px"
            });
            a("#popup_overlay").height(a(document).height())
        },
        _show: function(j, b, k, g, m, l, c, f, n) {
            a.alerts._hide();
            a.alerts._overlay("show");
            a("body").append('<div id="popup_container" style="display:none"><h1 id="popup_title"></h1><span id="popup_close"></span><div id="popup_content"><div id="popup_message"></div></div></div>');
            if (a.alerts.dialogClass) {
                a("#popup_container").addClass(a.alerts.dialogClass)
            }
            var i = (a.browser.msie && parseInt(a.browser.version) <= 6) ? "absolute" : "fixed";
            a("#popup_container").css({
                position: i,
                zIndex: 99999,
                padding: 0,
                margin: 0
            }).show();
            a("#popup_title").text(j);
            a("#popup_content").addClass(g);
            if (g != "openBox") {
                a("#popup_message").text(b).html(a("#popup_message").text().replace(/\n/g, "<br />"))
            }
            a("#popup_container").css({});
            a.alerts._reposition();
            a.alerts._maintainPosition(true);
            switch (g) {
                case "alert":
                    a("#popup_message").after('<div id="popup_panel"><input type="button" value="' + a.alerts.okButton + '" id="popup_ok" /></div>');
                    a("#popup_ok").click(function() {
                        a.alerts._hide();
                        m(true)
                    });
                    a("#popup_ok").focus().keypress(function(h) {
                        if (h.keyCode == 13 || h.keyCode == 27) {
                            a("#popup_ok").trigger("click")
                        }
                    });
                    break;
                case "confirm":
                    a("#popup_message").after('<div id="popup_panel"><input type="button" value="' + a.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + a.alerts.cancelButton + '" id="popup_cancel" /></div>');
                    a("#popup_ok").click(function() {
                        a.alerts._hide();
                        if (m) {
                            m(true)
                        }
                    });
                    a("#popup_cancel").click(function() {
                        a.alerts._hide();
                        if (m) {
                            m(false)
                        }
                    });
                    a("#popup_ok").focus();
                    a("#popup_ok, #popup_cancel").keypress(function(h) {
                        if (h.keyCode == 13) {
                            a("#popup_ok").trigger("click")
                        }
                        if (h.keyCode == 27) {
                            a("#popup_cancel").trigger("click")
                        }
                    });
                    break;
                case "prompt":
                    a("#popup_message").append('<br /><input type="text" size="30" id="popup_prompt" />').after('<div id="popup_panel"><input type="button" value="' + a.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + a.alerts.cancelButton + '" id="popup_cancel" /></div>');
                    a("#popup_prompt").width(a("#popup_message").width() - 10);
                    a("#popup_ok").click(function() {
                        var e = a("#popup_prompt").val();
                        a.alerts._hide();
                        if (m) {
                            m(e)
                        }
                    });
                    a("#popup_cancel").click(function() {
                        a.alerts._hide();
                        if (m) {
                            m(null)
                        }
                    });
                    a("#popup_prompt, #popup_ok, #popup_cancel").keypress(function(h) {
                        if (h.keyCode == 13) {
                            a("#popup_ok").trigger("click")
                        }
                        if (h.keyCode == 27) {
                            a("#popup_cancel").trigger("click")
                        }
                    });
                    if (k) {
                        a("#popup_prompt").val(k)
                    }
                    a("#popup_prompt").focus().select();
                    break;
                case "openBox":
                    a("#popup_message").append(a(b).html());
                    if (l) {
                        a("#popup_container").css({
                            width:
						l + "px"
                        })
                    }
                    if (c) {
                        a("#popup_container").css({
                            height: c + "px"
                        });
                        a("#popup_message").css({
                            height: (c - 48) + "px"
                        })
                    }
                    a.alerts._reposition();
                    if (f) {
                        a(f).click(function() {
                            a.alerts._hide();
                            if (m) {
                                m(true)
                            }
                        })
                    }
                    if (n) {
                        a(n).click(function() {
                            a.alerts._hide();
                            return false;
                            if (m) {
                                m(false)
                            }
                        })
                    }
                    break
            }
            a("#popup_close").click(function() {
                a.alerts._hide();
                if (m) {
                    m()
                }
            });
            if (a.alerts.draggable) {
                try {
                    a("#popup_container").draggable({
                        handle: a("#popup_title")
                    });
                    a("#popup_title").css({
                        cursor: "move"
                    })
                } catch (d) { }
            }
        },
        _hide: function() {
            a("#popup_container").remove();
            a.alerts._overlay("hide");
            a.alerts._maintainPosition(false)
        },
        _overlay: function(b) {
            switch (b) {
                case "show":
                    a.alerts._overlay("hide");
                    a("BODY").append('<div id="popup_overlay"></div>');
                    a("#popup_overlay").css({
                        position:
					"absolute",
                        zIndex: 99998,
                        top: "0px",
                        left: "0px",
                        width: "100%",
                        height: a(document).height(),
                        background: a.alerts.overlayColor,
                        opacity: a.alerts.overlayOpacity
                    });
                    break;
                case "hide":
                    a("#popup_overlay").remove();
                    break
            }
        },
        _reposition: function() {
            var c = ((a(window).height() / 2) - (a("#popup_container").height() / 2)) + a.alerts.verticalOffset;
            var b = ((a(window).width() / 2) - (a("#popup_container").width() / 2)) + a.alerts.horizontalOffset;
            if (c < 0) {
                c = 0
            }
            if (b < 0) {
                b = 0
            }
            if (a.browser.msie && parseInt(a.browser.version) <= 6) {
                c = c + a(window).scrollTop()
            }
            a("#popup_container").css({
                top: c + "px",
                left: b + "px"
            });
            a("#popup_overlay").height(a(document).height())
        },
        _maintainPosition: function(b) {
            if (a.alerts.repositionOnResize) {
                switch (b) {
                    case true:
                        a(window).bind("resize", a.alerts._reposition);
                        break;
                    case false:
                        a(window).unbind("resize", a.alerts._reposition);
                        break
                }
            }
        }
    };
        /**
     * -METHOD-
     * @summary alert提示框
     * @description  cui组件的alert提示框
     * @method CuiAlert
     * @param content string <提示框的内容>
     * @param title string <提示框的title>
     * @param func function <提示框的回调函数>
     * @return none
     * @since 0.1
     */
    CuiAlert = function(content, title, func) {
        a.alerts.alert(content, title, func)
    };
        /**
     * -METHOD-
     * @summary confirm提示框
     * @description  cui组件的confirm提示框
     * @method CuiConfirm
     * @param content string <提示框的内容>
     * @param title string <提示框的title>
     * @param func function <提示框的回调函数,参数boolean（确定或取消）>
     * @return none
     * @since 0.1
     */
    CuiConfirm = function(content, title, func) {
        a.alerts.confirm(content, title, func)
    };
        /**
     * -METHOD-
     * @summary prompt输入框
     * @description  cui组件的prompt输入框
     * @method CuiPrompt
     * @param content string <输入框的名称>
     * @param value string <输入框默认的值>
     * @param title string <输入框的title>
     * @param func function <提示框的回调函数,参数string（输入框的内容）>
     * @return none
     * @since 0.1
     */
    CuiPrompt = function(content, value, title, func) {
        a.alerts.prompt(content, value, title, func)
    };
        /**
     * -METHOD-
     * @summary box提示框
     * @description  cui组件的box提示框，显示隐藏的内容
     * @method CuiBox
     * @param id string <提示框需要显示内容的id，需要前置‘#’>
     * @param title string <提示框的title>
     * @param width int <提示框的width>
     * @param height int <提示框的height>
     * @param buttonY string <确认按钮的class，需要前置‘.’>
     * @param buttonN string <取消按钮的class，需要前置‘.’>
     * @param func function <关闭提示框后回调函数，参数boolean，true点击buttonY，false点击buttonN>
     * @return none
     * @since 0.1
     */
    CuiBox = function(id, title, width, height, buttonY, buttonN, func) {
        a.alerts.openBox(id, title, width, height, buttonY, buttonN, func)
    };
        /**
     * -METHOD-
     * @summary 操作信息提示框
     * @description  cui组件的操作信息提示框，在页面头部显示，然后慢慢消失
     * @method CuiOverAlert
     * @param content string <提示框的内容>
     * @param time int <提示框持续的时间，单位：毫秒，可选，默认3000>
     * @return none
     * @since 0.1
     */
    CuiOverAlert = function(content, time) {
        a.alerts.overAlert(content, time)
    };
        /**
     * -METHOD-
     * @summary 警告信息提示框
     * @description  cui组件的警告信息提示框，在页面头部显示，然后慢慢消失
     * @method CuiOverWarn
     * @param content string <提示框的内容>
     * @param time int <提示框持续的时间，单位：毫秒，可选，默认3000>
     * @return none
     * @since 0.1
     */
    CuiOverWarn = function(content, time) {
        a.alerts.overWarn(content, time)
    }
})(jQuery);
///EndClass

