﻿/**
* @author maxcoold
* PopupDiv v1.0 通用弹出层插件
*/
var nowy;
$.fn.PopupDiv = function(mods, options) {
    //初始默认参数
    var PopupDivSettings = {
        modal: false, //是否需要遮罩层
        top: null, //弹出的绝对位置，默认居中
        left: null, //弹出的绝对位置，默认居中
        title: "提示信息", //标题信息
        closeTitle: false, //是否不需要标题，默认显示
        myclass: "myWrap", //自定义弹出层样式
        maxHeight: null, //自定义最大高，默认适应弹出内容（ie6不支持）
        maxWidth: null, //自定义最大宽，默认适应弹出内容（ie6不支持）
        minHeight: 100, //自定义最小高，默认适应弹出内容
        minWidth: 150, //自定义最小宽，默认适应弹出内容
        center: true, //内容是否居中
        close_btn: true, //是否启用右上的关闭按钮关闭,默认启用
        autoOpen: true, //自动弹出窗口
        PopupDivId: "myWrap",
        ajaxUrl: null,
        close_fn_before: function() {
        },
        close_fn_later: function() {
        },
        start_fn_before: function() {
        },
        start_fn_later: function() {
        },
        open_fn_before: function() {
        },
        open_fn_later: function() {
        },
        remove_fn_before: function() {
        },
        remove_fn_later: function() {
        }
    };
    if (options == null) {
        options = mods;
    }
    var container = this;
    bool = container.data("bool");
    if (bool == null) {
        bool = true;
    }
    if (options) {
        jQuery.extend(PopupDivSettings, options);
    }
    //接受参数
    return this.each(function() {
        switch (mods) {
            case 'open':
                open();
                break;
            case 'close':
                close();
                break;
            case "remove":
                remove();
                break;
            default:
                ckStart();
        }
    })

    function open() {
        container.data("val").open_fn_before();
        container.show()
        if (container.data("val").modal) {
            addOutDiv();
        }
        $("#" + container.data("val").PopupDivId).fadeIn(function() {
            $("#" + container.data("val").PopupDivId + " .myTi_l").width($("#" + container.data("val").PopupDivId + " .myTi").width() - $("#" + container.data("val").PopupDivId + " .myTi_r").width() - 20);
            container.data("val").open_fn_later();
        });

    }
    function close() {
        container.data("val").close_fn_before();
        reOutDiv();
        $("#" + container.data("val").PopupDivId).hide();
        container.hide();
        container.data("bool", false);
        container.data("val").close_fn_later();
        // document.location.reload(true); //清除缓存
    }
    function remove() {
        container.data("val").remove_fn_before();
        reOutDiv();
        $("#" + container.data("val").PopupDivId).hide();
        reWrap();
        container.hide();
        container.data("val").remove_fn_later();
        container.removeData("bool").removeData("val");
    }

    function ckStart() {
        if (bool) {
            container.data("bool", false);
            container.data("val", PopupDivSettings);
            if (container.data("val").ajaxUrl != null) {
                //                               $.ajax({
                //                                   type: "GET",
                //                                   url: container.data("val").ajaxUrl,
                //                                   success: function(mydata) {
                //                                       container.html(mydata);
                //                                      start();
                //                                  }
                //                              })
                container.html("<iframe src='" + container.data("val").ajaxUrl + "' frameborder='0' scrolling='0' id='iframeid' style='Z-INDEX: 2; VISIBILITY: inherit;width:100%;height:100%'></iframe>");
                start();
            }
            else {
                start();
            }
        }
        else {
            open();
        }
    }
    function start() {
        container.data("val").start_fn_before();
        addWrap();
        if (container.data("val").center) {
            container.css("margin", "0px auto");
        };

        $("#" + container.data("val").PopupDivId).css("width", container.width());
        $("#" + container.data("val").PopupDivId).css("height", container.height());
        $("#" + container.data("val").PopupDivId).css("maxHeight", container.data("val").maxHeight);
        $("#" + container.data("val").PopupDivId).css("maxWidth", container.data("val").maxWidth);
        $("#" + container.data("val").PopupDivId).css("minHeight", container.data("val").minHeight);
        $("#" + container.data("val").PopupDivId).css("minWidth", container.data("val").minWidth);

        if (container.data("val").minWidth > container.width()) {
            $("#" + container.data("val").PopupDivId).width(container.data("val").minWidth);
        }
        if (container.data("val").minHeight > (container.height() + $("#" + container.data("val").PopupDivId + " .myTi").height())) {

            $("#" + container.data("val").PopupDivId).height(container.data("val").minHeight + $("#" + container.data("val").PopupDivId + " .myTi").height());

        }
        if (container.width() < $("#" + container.data("val").PopupDivId).width()) {

            container.data("val").left == null ? $("#" + container.data("val").PopupDivId).css("left", document.documentElement.scrollLeft + document.documentElement.offsetWidth / 2 - $("#" + container.data("val").PopupDivId).width() / 2) : $("#" + container.data("val").PopupDivId).css("left", container.data("val").left);
        }
        else {
            container.data("val").left == null ? $("#" + container.data("val").PopupDivId).css("left", document.documentElement.scrollLeft + document.documentElement.offsetWidth / 2 - container.width() / 2) : $("#" + container.data("val").PopupDivId).css("left", container.data("val").left);
        }
        if (container.height() < $("#" + container.data("val").PopupDivId).height() - $("#" + container.data("val").PopupDivId + " .myTi").height()) {

            container.data("val").top == null ? $("#" + container.data("val").PopupDivId).css("top", document.documentElement.scrollTop + document.documentElement.offsetHeight / 2 - $("#" + container.data("val").PopupDivId).height() / 2) : $("#" + container.data("val").PopupDivId).css("top", container.data("val").top);
        }
        else {
            container.data("val").top == null ? $("#" + container.data("val").PopupDivId).css("top", document.documentElement.scrollTop + document.documentElement.offsetHeight / 2 - container.height() / 2) : $("#" + container.data("val").PopupDivId).css("top", container.data("val").top);
        }

        $("#" + container.data("val").PopupDivId).addClass(container.data("val").myclass);

        container.data("val").start_fn_later();
        if (container.data("val").autoOpen) {
            open();
        }
    }

    function addWrap() {
        var myWrap = document.createElement("div");
        myWrap.style.position = "absolute";
        myWrap.id = container.data("val").PopupDivId;
        myWrap.style.zIndex = 1500000;
        var myTi = document.createElement("div");
        myTi.className = "myTi";
        var myTi_l = document.createElement("div");
        myTi_l.className = "myTi_l";
        var myTi_r = document.createElement("div");
        myTi_r.className = "myTi_r";
        container.wrap(myWrap);
        if (!container.data("val").closeTitle) {
            $("#" + container.data("val").PopupDivId).prepend(myTi);
            myTi.appendChild(myTi_l);
            $("#" + container.data("val").PopupDivId + " .myTi_l").text(container.data("val").title);
            if (container.data("val").close_btn) {
                myTi.appendChild(myTi_r);
                $("#" + container.data("val").PopupDivId + " .myTi_r").attr("class", "myTi_r close_out");
                $("#" + container.data("val").PopupDivId + " .myTi_r").click(function() {
                    close();
                });
                $("#" + container.data("val").PopupDivId + " .myTi_r").hover(function() {
                    $("#" + container.data("val").PopupDivId + " .myTi_r").attr("class", "myTi_r close_on");
                }, function() {
                    $("#" + container.data("val").PopupDivId + " .myTi_r").attr("class", "myTi_r close_out");
                })
                //             document.getElementById("myTi_l").onmousedown = function(e){
            }
            $("#" + container.data("val").PopupDivId + " .myTi_l").get(0).onmousedown = function(e) {
                e = arguments[0] || window.event;
                var x = e.layerX || e.offsetX;
                var y = e.layerY || e.offsetY;
                var thisti = document.getElementById(container.data("val").PopupDivId);
                document.onmousemove = function(e) {
                    e = arguments[0] || window.event;
                    var nowx = document.documentElement.scrollLeft + (e.clientX - x);
                    nowy = document.documentElement.scrollTop + (e.clientY - y);

                    if (nowx < 0 && nowy < 0) {
                        document.onmousemove = null;
                        document.onmousedown = null;

                    }
                    thisti.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=90)";
                    thisti.style.opacity = 0.8;
                    thisti.style.left = nowx + "px";
                    thisti.style.top = nowy + "px";
                };
                document.onmouseup = function() {
                    document.onmousemove = null;
                    document.onmousedown = null;
                    thisti.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=100)";
                    thisti.style.opacity = 1;
                };
            };
        }
    }
    function reWrap() {
        $("#" + container.data("val").PopupDivId).replaceWith(container);
    }
    //添加遮罩层
    function addOutDiv() {
        var myIframe = document.createElement("iframe");
        var myDiv = document.createElement("div");
        myIframe.id = "myIframe";
        myIframe.style.position = "absolute";
        myIframe.style.zIndex = 10000;
        myIframe.style.top = "0px";
        myIframe.style.left = "0px";
        myIframe.style.height = getHeight() + "px";
        myIframe.style.width = getWidth() + "px";
        //myIframe.style.backgroundColor = "#000";
        myIframe.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=0)"; //IE的不透明设置
        myIframe.style.opacity = 0;

        myDiv.id = "myDiv";
        myDiv.style.position = "absolute";
        myDiv.style.zIndex = 10001;
        myDiv.style.top = "0px";
        myDiv.style.left = "0px";
        myDiv.style.height = getHeight() + "px";
        myDiv.style.width = getWidth() + "px";
        document.body.appendChild(myIframe);
        document.body.appendChild(myDiv);
        myDiv.style.backgroundColor = "Gray";
        myDiv.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=20)"; //IE的不透明设置
        myDiv.style.opacity = 0.2; //  
        window.onresize = re_show;
    }

    //计算遮罩层的高
    function getHeight() {
        var winWidth
        if (document.body.scrollHeight > document.body.clientHeight) {
            winHeight = document.body.scrollHeight;
        }
        else {
            winHeight = document.body.clientHeight;
        }
        if (navigator.appName !== "Microsoft Internet Explorer") {
            winHeight = winHeight;
        }
        else {
            winHeight = winHeight + 30;
        }
        return winHeight;
    }
    //计算遮罩层的宽
    function getWidth() {
        var winWidth;
        if (document.documentElement.scrollWidth > document.documentElement.clientWidth) {
            winWidth = document.documentElement.scrollWidth;
        }
        else {
            winWidth = document.documentElement.clientWidth;
        }
        if (navigator.appName !== "Microsoft Internet Explorer") {
            winWidth = winWidth - 4;
        }
        else {
            winWidth = winWidth;
        }
        return winWidth;
    }

    //窗口改变时变更遮罩层的大小
    function re_show() {
        $("#myIframe").height(getHeight());
        $("#myIframe").width(getWidth());
        $("#myDiv").height(getHeight());
        $("#myDiv").width(getWidth());
    }

    //去掉遮罩层的方法
    function reOutDiv() {
        $("#myIframe").remove();
        $("#myDiv").remove();
    }

}
