﻿var dialogzIndex = 100;      
var dialogs = new Array();
var JqueryDialog = {
    //模态窗口背景色
    "cBackgroundColor": "#ffffff",
    //边框尺寸(像素)
    "cBorderSize": 1,
    //边框颜色
    "cBorderColor": "#999999",
    //Header背景色
    "cHeaderBackgroundColor": "#f0f0f0",
    //提交按钮文本
    "cSubmitText": "确 定",
    //取消按钮文本
    "cCancelText": "取 消",
    //拖拽效果
    "cDragTime": "100",
    dialogName: "dialog_1",
    zindex: dialogzIndex,

    /// <summary>创建对话框</summary>
    OpenDialog: function(dialogName, dialogTitle, iframeSrc, isScrolling, srcParams, iframeWidth, iframeHeight, isOk, isExit, isDrag) {
        JqueryDialog.init(dialogName, dialogTitle, iframeSrc, isScrolling, srcParams, iframeWidth, iframeHeight, isOk, isExit, isDrag);
    },
    init: function(dialogName, dialogTitle, iframeSrc, isScrolling, srcParams, iframeWidth, iframeHeight, isSubmitButton, isCancelButton, isDrag) {
        //设置初始值
        JqueryDialog.dialogName = dialogName;
        JqueryDialog.zindex = dialogzIndex + 5;
        dialogzIndex = dialogzIndex + 5;
        dialogs[dialogs.length] = JqueryDialog.dialogName;
        //获取客户端页面宽高
        var _client_width = document.body.clientWidth;
        var _client_height = document.documentElement.scrollHeight;

        //create shadow
        if (typeof ($("#" + JqueryDialog.dialogName + "_shadow")[0]) == "undefined") {
            //前置
            $("body").prepend("<div id='" + JqueryDialog.dialogName + "_shadow' class='shadow' style='z-index:" + JqueryDialog.zindex + "'>&nbsp;</div>");
            var _jd_shadow = $("#" + JqueryDialog.dialogName + "_shadow");
            _jd_shadow.css("width", _client_width + "px");
            _jd_shadow.css("height", _client_height + "px");
        }

        //create dialog
        if (typeof ($("#" + JqueryDialog.dialogName + "_dialog")[0]) != "undefined") {
            $("#" + JqueryDialog.dialogName + "_dialog").remove();
        }
        $("body").prepend("<div id='" + JqueryDialog.dialogName + "_dialog' style='position:absolute;z-index:" + (parseInt(JqueryDialog.zindex) + 1).toString() + ";'></div>");

        //dialog location
        // left 边框*2 阴影5 top 边框*2 阴影5 header30 bottom50
        var _jd_dialog = $("#" + dialogName + "_dialog");
        var _left = (_client_width - (iframeWidth + JqueryDialog.cBorderSize * 2 + 5)) / 2;
        _jd_dialog.css("left", (_left < 0 ? 0 : _left) + document.documentElement.scrollLeft + "px");

        var _top = (document.documentElement.clientHeight - (iframeHeight + JqueryDialog.cBorderSize * 2 + 30 + 50 + 5)) / 2;
        _jd_dialog.css("top", (_top < 0 ? 0 : _top) + document.documentElement.scrollTop + "px");

        //创建阴影
        _jd_dialog.append("<div id='" + JqueryDialog.dialogName + "_dialog_s' class='jd_dialog_s'>&nbsp;</div>");
        var _jd_dialog_s = $("#" + JqueryDialog.dialogName + "_dialog_s");
        _jd_dialog_s.css("width", iframeWidth + JqueryDialog.cBorderSize * 2 + "px");
        if (isSubmitButton && isCancelButton)
            _jd_dialog_s.css("height", iframeHeight + JqueryDialog.cBorderSize * 2 + 30 + 50 + "px");
        else
            _jd_dialog_s.css("height", iframeHeight + JqueryDialog.cBorderSize * 2 + 30 + "px");

        //create dialog main
        _jd_dialog.append("<div id='" + JqueryDialog.dialogName + "_dialog_m' class='set' ></div>");
        var _jd_dialog_m = $("#" + JqueryDialog.dialogName + "_dialog_m");
        _jd_dialog_m.css("width", iframeWidth + "px");

        //header
        _jd_dialog_m.append("<div id='" + JqueryDialog.dialogName + "_dialog_m_h' class='settop'></div>");
        var _jd_dialog_m_h = $("#" + JqueryDialog.dialogName + "_dialog_m_h");

        //header left
        _jd_dialog_m_h.append("<span id='jd_dialog_m_h_l' class='settext'>" + dialogTitle + "</span>");
        _jd_dialog_m_h.append("<span id='jd_dialog_m_h_r' class='setimg'><a title='关闭' onclick='JqueryDialog.Close();'></a></span>");

        //body
        _jd_dialog_m.append("<div id='" + JqueryDialog.dialogName + "_dialog_m_b' style='float:left;'></div>");
        var _jd_dialog_m_b = $("#" + JqueryDialog.dialogName + "_dialog_m_b");
        _jd_dialog_m_b.css("width", iframeWidth + "px");
        _jd_dialog_m_b.css("height", iframeHeight + "px");

        //iframe 遮罩层
        _jd_dialog_m_b.append("<div id='" + JqueryDialog.dialogName + "_dialog_m_b_1' class='jd_dialog_m_b_1' style='z-index:" + (parseInt(JqueryDialog.zindex) - 99).toString() + ";'>&nbsp;</div>");
        var _jd_dialog_m_b_1 = $("#" + JqueryDialog.dialogName + "_dialog_m_b_1");
        _jd_dialog_m_b_1.css("top", "30px");
        _jd_dialog_m_b_1.css("width", iframeWidth + "px");
        _jd_dialog_m_b_1.css("height", iframeHeight + "px");
        _jd_dialog_m_b_1.css("display", "none");

        //iframe 容器
        _jd_dialog_m_b.append("<div id='" + JqueryDialog.dialogName + "_dialog_m_b_2' style='position:absolute;z-index:" + (parseInt(JqueryDialog.zindex) - 100).toString() + ";'></div>");
        var scrolling = isScrolling ? "yes" : "no";
        var urlParams = srcParams ? "?" + srcParams : "";
        var str = "<iframe id='" + JqueryDialog.dialogName + "_iframe' src='" + iframeSrc + urlParams + "' scrolling='" + scrolling + "'   frameborder='0' width='" + iframeWidth + "' height='" + iframeHeight + "' style='overflow-x:hidden;overflow-y:auto;' />";
        var src = $("#" + JqueryDialog.dialogName + "_iframe").attr("src");
        $("#" + JqueryDialog.dialogName + "_iframe").attr("src", src);
        $("#" + JqueryDialog.dialogName + "_dialog_m_b_2").append(str);

        //bottom
        if (isSubmitButton && isCancelButton) {
            _jd_dialog_m.append("<div id='jd_dialog_m_t' class='setdown'></div>");
            var _jd_dialog_m_t = $("#jd_dialog_m_t");
            _jd_dialog_m_t.append("<span><input id='jd_submit' class='bluebtn2' value='" + JqueryDialog.cSubmitText + "' type='button' onclick='JqueryDialog.Ok();' /></span>");
            _jd_dialog_m_t.append("<span class='jd_dialog_m_t_s'><input id='jd_cancel' class='bluebtn2' value='" + JqueryDialog.cCancelText + "' type='button' onclick='JqueryDialog.Close();' /></span>");
        }

        //register drag
        if (isDrag) {
            DragAndDrop.Register(_jd_dialog[0], _jd_dialog_m_h[0]);
        }
    },

    /// <summary>关闭模态窗口</summary>
    Close: function() {
        $("#" + JqueryDialog.dialogName + "_shadow").remove();
        $("#" + JqueryDialog.dialogName + "_dialog").remove();
        dialogs.splice(dialogs.length - 1, 1);
        JqueryDialog.dialogName = dialogs[dialogs.length - 1];

        DragAndDrop.Register($("#" + JqueryDialog.dialogName + "_dialog"), $("#" + JqueryDialog.dialogName + "_dialog_m_h"));
    },
    CloseAll: function() {
        for (i = dialogs.length - 1; i >= 0; i--) {
            $("#" + JqueryDialog.dialogName + "_shadow").remove();
            $("#" + JqueryDialog.dialogName + "_dialog").remove();
            dialogs.splice(dialogs.length - 1, 1);
            JqueryDialog.dialogName = dialogs[dialogs.length - 1];
        }
    },
    Ok: function() {
        var frm = $("#" + JqueryDialog.dialogName + "_iframe");
        if (frm[0].contentWindow.Ok()) {
            JqueryDialog.Close();
        }
        else {
            frm[0].focus();
        }
    },

    /// <summary>提交完成</summary>
    /// <param name="alertMsg">弹出提示内容，值为空不弹出</param>
    /// <param name="isCloseDialog">是否关闭对话框</param>
    /// <param name="isRefreshPage">是否刷新页面(关闭对话框为true时有效)</param>
    SubmitCompleted: function(alertMsg, isCloseDialog, isRefreshPage) {
        if ($.trim(alertMsg).length > 0) {
            alert(alertMsg);
        }
        if (isCloseDialog) {
            JqueryDialog.Close();
            if (isRefreshPage) {
                window.location.href = window.location.href;
            }
        }
    }
};

var DragAndDrop = function() {
    //客户端当前屏幕尺寸(忽略滚动条)
    var _clientWidth;
    var _clientHeight;
    //拖拽控制区
    var _controlObj;
    //拖拽对象
    var _dragObj;
    //拖动状态
    var _flag = false;
    //拖拽对象的当前位置
    var _dragObjCurrentLocation;
    //鼠标最后位置
    var _mouseLastLocation;

    //使用异步的Javascript使拖拽效果更为流畅
    //var _timer; 
    //定时移动，由_timer定时调用
    //var intervalMove = function(){
    //	$(_dragObj).css("left", _dragObjCurrentLocation.x + "px");
    //	$(_dragObj).css("top", _dragObjCurrentLocation.y + "px");
    //};

    var getElementDocument = function(element) {
        return element.ownerDocument || element.document;
    };

    //鼠标按下
    var dragMouseDownHandler = function(evt) {

        if (_dragObj) {

            evt = evt || window.event;

            //获取客户端屏幕尺寸
            _clientWidth = document.body.clientWidth;
            _clientHeight = document.documentElement.scrollHeight;

            //iframe遮罩
            $("#" + JqueryDialog.dialogName + "_dialog_m_b_1").css("display", "");

            //标记
            _flag = true;

            //拖拽对象位置初始化
            _dragObjCurrentLocation = {
                x: $(_dragObj).offset().left,
                y: $(_dragObj)[0].offsetTop
            };

            //鼠标最后位置初始化
            _mouseLastLocation = {
                x: evt.screenX,
                y: evt.screenY
            };

            //注：mousemove与mouseup下件均针对document注册，以解决鼠标离开_controlObj时事件丢失问题
            //注册事件(鼠标移动)			
            $(document).bind("mousemove", dragMouseMoveHandler);
            //注册事件(鼠标松开)
            $(document).bind("mouseup", dragMouseUpHandler);

            //取消事件的默认动作
            if (evt.preventDefault)
                evt.preventDefault();
            else
                evt.returnValue = false;

            //开启异步移动
            //_timer = setInterval(intervalMove, 10);
        }
    };

    //鼠标移动
    var dragMouseMoveHandler = function(evt) {
        if (_flag) {

            evt = evt || window.event;

            //当前鼠标的x,y座标
            var _mouseCurrentLocation = {
                x: evt.screenX,
                y: evt.screenY
            };

            //拖拽对象座标更新(变量)
            _dragObjCurrentLocation.x = _dragObjCurrentLocation.x + (_mouseCurrentLocation.x - _mouseLastLocation.x);
            _dragObjCurrentLocation.y = _dragObjCurrentLocation.y + (_mouseCurrentLocation.y - _mouseLastLocation.y);

            //将鼠标最后位置赋值为当前位置
            _mouseLastLocation = _mouseCurrentLocation;

            //拖拽对象座标更新(位置)
            $(_dragObj).css("left", _dragObjCurrentLocation.x + "px");
            $(_dragObj).css("top", _dragObjCurrentLocation.y + "px");

            //取消事件的默认动作
            if (evt.preventDefault)
                evt.preventDefault();
            else
                evt.returnValue = false;
        }
    };

    //鼠标松开
    var dragMouseUpHandler = function(evt) {
        if (_flag) {
            evt = evt || window.event;

            //取消iframe遮罩
            $("#"+JqueryDialog.dialogName+"_dialog_m_b_1").css("display", "none");

            //注销鼠标事件(mousemove mouseup)
            cleanMouseHandlers();

            //标记
            _flag = false;

            //清除异步移动
            //if(_timer){
            //	clearInterval(_timer);
            //	_timer = null;
            //}
        }
    };

    //注销鼠标事件(mousemove mouseup)
    var cleanMouseHandlers = function() {
        if (_controlObj) {
            $(_controlObj.document).unbind("mousemove");
            $(_controlObj.document).unbind("mouseup");
        }
    };

    return {
        //注册拖拽(参数为dom对象)
        Register: function(dragObj, controlObj) {
            //赋值
            _dragObj = dragObj;
            _controlObj = controlObj;
            //注册事件(鼠标按下)
            $(_controlObj).bind("mousedown", dragMouseDownHandler);
        }
    }

} ();

