/**
 +-------------------------------------------------------------------
 * jQuery thinkbox - 弹出层插件 - http://zjzit.cn/thinkbox
 +-------------------------------------------------------------------
 * @version    1.0.0 beta2
 * @since      2013.05.10
 * @author     麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
 * @github     https://github.com/Aoiujz/thinkbox.git
 +-------------------------------------------------------------------
 */
(function($){
var
    /* 当前脚本文件名 */
    __FILE__ = $("script").last().attr("src"),

    /* 弹出层对象 */
    ThinkBox,

    /* 弹出层默认选项 */
    defaults = {
        "style"       : "default", //弹出层样式
        "title"       : null,      // 弹出层标题
        "fixed"       : true,      // 是否使用固定定位(fixed)而不是绝对定位(absolute),IE6不支持。
        "center"      : true,      // 弹出层是否屏幕中心显示
        "display"     : true,      // 创建后是否立即显示
        "x"           : 0,         // 弹出层 x 坐标。 当 center 属性为 true 时此属性无效
        "y"           : 0,         // 弹出层 y 坐标。 当 center 属性为 true 时此属性无效
        "modal"       : true,      // 弹出层是否设置为模态。设置为 true 将显示遮罩背景
        "modalClose"  : true,      // 点击模态背景是否关闭弹出层
        "resize"      : true,      // 是否在窗口大小改变时重新定位弹出层位置
        "unload"      : false,     // 关闭后是否卸载
        "escHide"     : true,      // 按ESC是否关闭弹出层
        "delayClose"  : 0,         // 延时自动关闭弹出层 0表示不自动关闭
        "drag"        : false,     // 点击标题框是否允许拖动
        "width"       : "",        // 弹出层内容区域宽度 空表示自适应
        "height"      : "",        // 弹出层内容区域高度 空表示自适应
        "dataEle"     : "",        // 弹出层绑定到的元素,设置此属性的弹出层只允许同时存在一个
        "locate"      : ["left", "top"],       //弹出层位置属性
        "show"        : ["fadeIn", "normal"],  //显示效果
        "hide"        : ["fadeOut", "normal"], //关闭效果
        "actions"     : ["minimize", "maximize", "close"], //窗口操作按钮
        "tools"       : false,  //是否创建工具栏
        "buttons"     : {},     //工具栏默认按钮 仅tools为true时有效
        "beforeShow"  : $.noop, //显示前的回调方法
        "afterShow"   : $.noop, //显示后的回调方法
        "afterHide"   : $.noop, //隐藏后的回调方法
        "beforeUnload": $.noop, //卸载前的回调方法
        "afterDrag"   : $.noop  //拖动停止后的回调方法
    },

    /* 弹出层层叠高度 */
    zIndex = 2013,

    /* 弹出层语言包 */
    lang = {},

    /* 弹出层列表 */
    lists = {},

    /* 弹出层容器 */
    wrapper = [
        "<div class=\"thinkbox\" style=\"position:fixed\">",
            //使用表格,可以做到良好的宽高自适应,而且方便低版本浏览器做圆角样式
            "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">",
                "<tr>",
                    "<td class=\"thinkbox-top-left\"></td>",  //左上角
                    "<td class=\"thinkbox-top\"></td>",       //上边
                    "<td class=\"thinkbox-top-right\"></td>", //右上角
                "</tr>",
                "<tr>",
                    "<td class=\"thinkbox-left\"></td>",       //左边
                    "<td class=\"thinkbox-inner\">", //弹出层inner
                        "<div class=\"thinkbox-title\"></div>", //弹出层标题栏
						"<div class=\"thinkbox-body\"></div>", //弹出层body
                        "<div class=\"thinkbox-tools\"></div>", //弹出层工具栏
                    "</td>",
                    "<td class=\"thinkbox-right\"></td>",      //右边
                "</tr>",
                "<tr>",
                    "<td class=\"thinkbox-bottom-left\"></td>",  //左下角
                    "<td class=\"thinkbox-bottom\"></td>",       //下边
                    "<td class=\"thinkbox-bottom-right\"></td>", //右下角
                "</tr>",
            "</table>",
        "</div>"].join(""),

    /* document和window对象分别对应的jQuery对象 */
    _doc = $(document), _win = $(window);

/* 加载指定的CSS文件 */
function includeCss(css, onload){
    var path = __FILE__.slice(0, __FILE__.lastIndexOf("/"));
    if($("link[href='" + path + css + "']").length){
        fire(onload);
        return;
    };

    //加载CSS文件
    $("<link/>")
        .load(function(){fire(onload)})
        .attr({
            "href" : path + css + "?" + Math.random(),
            "type" : "text/css",
            "rel"  : "stylesheet"
        }).appendTo("head");
}

/* 获取屏幕可视区域的大小和位置 */
function viewport(){
    return {
        "width"  : _win.width(),
        "height" : _win.height(),
        "left"   : _win.scrollLeft(),
        "top"    : _win.scrollTop()
    };
}

/* 调用回调函数 */
function fire(event, data){
    if($.isFunction(event))
        return event.call(this, data);
}

/* 删除options中不必要的参数 */
function del(keys, options){
    if($.isArray(keys)){ //删除多个
        for(i in keys){
            _(keys[i]);
        }
    } else { //删除一个
        _(keys);
    }

    //从options中删除一个指定的元素
    function _(key){
        if(key in options) delete options[key];
    }
}

/* 禁止选中文字 */
function unselect(){
    var element = $("body")[0];
    element.onselectstart = function() {return false}; //ie
    element.unselectable = "on"; // ie
    element.style.MozUserSelect = "none"; // firefox
    element.style.WebkitUserSelect = "none"; // chrome
}

/* 允许选中文字 */
function onselect(){
    var element = $("body")[0];
    element.onselectstart = function() {return true}; //ie
    element.unselectable = "off"; // ie
    element.style.MozUserSelect = ""; // firefox
    element.style.WebkitUserSelect = ""; // chrome
}

/* 设置为当前选中的弹出层对象 */
function setCurrent(){
    var options = lists[this.key][0], box = lists[this.key][1];
    if(lists.current != this.key){
        lists.current = this.key;
        options.modal && box.data("ThinkBoxModal").css({"zIndex": zIndex-1})
        box.css({"zIndex": zIndex++});
    }
}

/* 卸载弹出层容器 */
function unload(){
    var options = lists[this.key][0], box = lists[this.key][1];
    fire.call(this, options.beforeUnload); //卸载前的回调方法
    options.modal && box.data("ThinkBoxModal").remove();
    box.remove();
    _win.off("resize." + this.key);
    delete lists[this.key];
    options.dataEle && $(options.dataEle).removeData("ThinkBox");
}

/* 安装模态背景 */
function setupModal(){
    var self    = this,
        options = lists[this.key][0],
        box     = lists[this.key][1],
        modal   = box.data("ThinkBoxModal");

    //存在隐藏的遮罩层则直接显示
    if(modal){
        modal.show();
        return;
    }

    modal = $("<div class=\"thinkbox-modal-blackout-" + options.style + "\"></div>")
        .css({
            "zIndex"   : zIndex++,
            "position" : "fixed",
            "left"     : 0,
            "top"      : 0,
            "right"    : 0,
            "bottom"   : 0
        })
        .click(function(event){
            options.modalClose && lists.current == self.key && self.hide();
            event.stopPropagation();
        })
        .mousedown(function(event){event.stopPropagation()})
        .appendTo($("body"));
    box.data("ThinkBoxModal", modal);
}

/* 安装标题栏 */
function setupTitleBar() {
    var title = $(".thinkbox-title", lists[this.key][1]), options = lists[this.key][0];
    if(options.title){
        //拖动弹出层
        if (options.drag) {
            title.addClass("thinkbox-draging");
            drag.call(this, title);
        }
        this.setTitle(options.title);
        //安装窗口操作按钮
        setupWindowActions.call(this, title);
    } else {
        title.remove();
    }
}

/* 安装弹出层操作按钮 */
function setupWindowActions(title){
    var actions, button, action, options = lists[this.key][0], self = this;
    if(options.actions && $.isArray(options.actions)){
        actions = $("<div/>").addClass("thinkbox-window-actions").appendTo(title)
            .on("click", "button", function(){
                if(!$(this).hasClass("disabled")){
                    switch(this.name){
                        case "minimize": //最小化
                            self.minimize(this);
                            break;
                        case "maximize": //最大化
                            self.maximize(this);
                            break;
                        case "close": //关闭
                            self.hide();
                            break;
                    }
                }
            })
            .on("mousedown mouseup", function(event){event.stopPropagation()});
        for(i in options.actions){
            button = options.actions[i];
            action = $("<button/>").appendTo(actions).addClass("thinkbox-actions-" + button)
                .attr("name", button) //设置名称
                .attr("title", button) //设置title
                .text(lang[button] || button); //设置显示文本
        }
    }
}

/* 拖动弹出层 */
function drag(title){
    var draging = null, self = this, options = lists[this.key][0], box = lists[this.key][1];
    _doc.mousemove(function(event){
        draging &&
        box.css({left: event.pageX - draging[0], top: event.pageY - draging[1]});
    });
    title.mousedown(function(event) {
        var offset = box.offset();
        if(options.fixed){
            offset.left -= _win.scrollLeft();
            offset.top -= _win.scrollTop();
        }
        unselect(); //禁止选中文字
        draging = [event.pageX - offset.left, event.pageY - offset.top];
    }).mouseup(function() {
        draging = null;
        onselect(); //允许选中文字
        fire.call(self, options.afterDrag); //拖动后的回调函数
    });
}

/* 安装工具栏 */
function setupToolsBar() {
    var tools = $(".thinkbox-tools", lists[this.key][1]),
        options = lists[this.key][0], button, self = this;
    if(options.tools){
        if(options.buttons && $.isPlainObject(options.buttons)){
            for(name in options.buttons){
                this.addToolsButton(name, options.buttons[name]);
            }

            /* 绑定按钮点击事件 */
            tools.on("click", "button", function(){
                if(!$(this).hasClass("disabled")){
                    if(false === options.buttons[this.name][2].call(self)){
                        return;
                    }

                    /* 执行默认事件 */
                    switch(this.name){
                        case "close":
                        case "cancel":
                            self.hide(false);
                            break;
                        case "submit":
                            self.find("form").submit();
                            break;
                    }
                }
            });
        }
    } else {
        tools.remove();
    }
}

/**
 * 构造方法,用于实例化一个新的弹出层对象
 +----------------------------------------------------------
 * element 弹出层内容元素
 * options 弹出层选项
 +----------------------------------------------------------
 */
ThinkBox = function(element, options){
    var self = this, options, box, boxLeft; //初始化变量
    options  = $.extend({}, defaults, options || {}); //合并配置选项

    /* 创建弹出层容器 */
    box = $(wrapper).addClass("thinkbox-" + options.style).data("thinkbox", self);

    /* 保存弹出层基本信息到全局变量 */
    this.key = "thinkbox_" + new Date().getTime() + (Math.random() + "").substr(2,12);
    lists[this.key] = [options, box];

    /* 缓存弹出层,防止弹出多个 */
    options.dataEle && $(options.dataEle).data("thinkbox", self);

    /**
     * 给box绑定事件
     * 鼠标按下记录当前弹出层对象
     * 鼠标点击阻止事件冒泡
     */
    box.on("click mousedown", function(event){
        setCurrent.call(self);
        event.stopPropagation();
    });

    /* 设置弹出层位置属性 */
    options.fixed || box.css("position", "absolute");

    /* 安装弹出层相关组件 */
    setupTitleBar.call(self); // 安装标题栏
    setupToolsBar.call(self);// 安装工具栏

    /* 自动加载css文件并显示弹出层 */
    includeCss("/skin/" + options.style + "/style.css", function(){
        box.hide().appendTo("body"); //放入body

        /* 解决拖动出浏览器时左边不显示的BUG */
        boxLeft = $(".thinkbox-left", box).width();
        boxLeft && $(".thinkbox-left", box).append($("<div/>").css("width", boxLeft));

        self.setSize(options.width, options.height);
        self.setContent(element || "<div></div>"); //设置内容
        options.display && self.show();
    });

}; //END ThinkBox

/**
 * 注册ThinkBox开放API接口
 */
ThinkBox.prototype = {
    /* 显示弹出层 */
    "show" : function(){
        var self = this, options = lists[this.key][0], box = lists[this.key][1];
        if(box.is(":visible")) return this;
        options.modal && setupModal.call(this); // 安装模态背景
        fire.call(this, options.beforeShow); //调用显示之前回调函数
        //显示效果
        switch(options.show[0]){
            case "slideDown":
                box.stop(true, true).slideDown(options.show[1], _);
                break;
            case "fadeIn":
                box.stop(true, true).fadeIn(options.show[1], _);
                break;
            default:
                box.show(options.show[1], _);
        }

        //窗口大小改变后重设位置和大小
        options.resize && _win.on("resize." + self.key, function(){
            self.setSize(options.width, options.height);
            self.resetLocate();
        });
        setCurrent.call(this);
        return this;

        function _(){
            options.delayClose &&
            $.isNumeric(options.delayClose) &&
            setTimeout(function(){
                self.hide();
            }, options.delayClose);
            //调用显示后的回调方法
            fire.call(self, options.afterShow);
        }
    },

    /* 关闭弹出层 data 为传递给关闭后回调函数的额外数据 */
    "hide" : function(data){
        var self = this, options = lists[this.key][0], box = lists[this.key][1], modal;
        if(!box.is(":visible")) return this;

        //隐藏遮罩层
        modal = box.data("ThinkBoxModal");
        modal && modal.fadeOut();

        //影藏效果
        switch(options.hide[0]){
            case "slideUp":
                box.stop(true, true).slideUp(options.hide[1], _);
                break;
            case "fadeOut":
                box.stop(true, true).fadeOut(options.hide[1], _);
                break;
            default:
                box.hide(options.hide[1], _);
        }
        return this;

        function _() {
            fire.call(self, options.afterHide, data); //隐藏后的回调方法
            options.unload && unload.call(self);
        }
    },

    /* 显示或隐藏弹出层 */
    "toggle" : function(){
        return lists[this.key][1].is(":visible") ? self.hide() : self.show();
    },

    /* 在弹出层内容中查找 */
    "find" : function(selector){
        var content = $(".thinkbox-body", lists[this.key][1]);
        return selector ? $(selector, content) : content.children();
    },

    /* 获取弹出层内容 */
    "getContent" : function(){
        return $(".thinkbox-body", lists[this.key][1]).html()
    },

    /* 设置弹出层内容 */
    "setContent" : function(content){ //设置弹出层内容
        var options = lists[this.key][0];
        $(".thinkbox-body", lists[this.key][1]).empty().append($(content).show()); // 添加新内容
        this.resetLocate(); //设置弹出层显示位置
        return this;
    },

    /* 设置弹出层内容区域大小 */
    "setSize" : function(width, height){
        var width  = $.isFunction(width)  ? width.call(this)  : width,
            height = $.isFunction(height) ? height.call(this) : height;
        $(".thinkbox-body", lists[this.key][1]).css({"width" : width, "height" : height});
        return this;
    },

    /* 移动弹出层到屏幕中间 */
    "moveToCenter" : function() {
        var size     = this.getSize(),
            view     = viewport(),
            overflow = lists[this.key][1].css("position") == "fixed" ? [0, 0] : [view.left, view.top],
            x        = overflow[0] + view.width / 2,
            y        = overflow[1] + view.height / 2;
        this.moveTo(x - size[0] / 2, y - size[1] / 2);
        return this;
    },

    /* 移动弹出层到指定坐标 */
    "moveTo" : function (x, y) {
        var box = lists[this.key][1], options = lists[this.key][0];
        $.isNumeric(x) &&
            (options.locate[0] == "left" ? box.css({"left" : x}) : box.css({"right" : x}));
        $.isNumeric(y) &&
            (options.locate[1] == "top" ? box.css({"top" : y}) : box.css({"bottom" : y}));
        return this;
    },

    /* 获取弹出层尺寸 */
    "getSize" : function (){
        var size = [0, 0], box = lists[this.key][1];
        if(box.is(":visible")) //获取显示的弹出层尺寸
            size = [box.width(), box.height()];
        else { //获取隐藏的弹出层尺寸
            box.css({"visibility" : "hidden", "display" : "block"});
            size = [box.width(), box.height()];
            box.css({"visibility" : "visible", "display" : "none"});
        }
        return size;
    },

    /* 设置弹出层标题 */
    "setTitle" : function(title){
        $(".thinkbox-title", lists[this.key][1]).empty().append("<span>" + title + "</span>");
        return this;
    },

    /* 重置弹出层位置 */
    "resetLocate" : function(){
        var options = lists[this.key][0];
        options.center ?
        this.moveToCenter() :
        this.moveTo(
            $.isNumeric(options.x) ?
                options.x :
                ($.isFunction(options.x) ? options.x.call($(options.dataEle)) : 0),
            $.isNumeric(options.y) ?
                options.y :
                ($.isFunction(options.y) ? options.y.call($(options.dataEle)) : 0)
        );
        return this;
    },

    /* 设置状态栏信息 */
    "setStatus" : function(content, name){
        var options = lists[this.key][0],
            box     = lists[this.key][1],
            name    = name ? "thinkbox-status-" + name : "", status;
        /* 存在工具栏则显示状态信息 */
        if(options.tools){
            $(".thinkbox-status", box).remove();
            status = $("<div class=\"thinkbox-status\">").addClass(name).html(content);
            $(".thinkbox-tools", box).prepend(status);
        }
        return this;
    },

    /* 添加一个按钮 */
    "addToolsButton" : function(name, config){
        var options = lists[this.key][0],
            box     = lists[this.key][1], button;
        /* 存在工具栏则创建button */
        if(options.tools){
            button = $("<button/>").attr("name", name).text(config[0]);
            config[1] && button.addClass("thinkbox-button-" + config[1]);
            if(!$.isFunction(config[2])){config[2] = $.noop};
            $(".thinkbox-tools", box).append(button);
        }
        return this;
    },

    /* 重置一个按钮 */
    "setToolsButton" : function(oldName, newName, config){
        var options = lists[this.key][0],
            box     = lists[this.key][1], button;
        button = $(".thinkbox-tools", box).find("button[name=" + oldName + "]", box)
            .attr("name", newName).text(config[0]);
        options.buttons[newName] = config;
        config[1] && button.removeClass().addClass("thinkbox-button-" + config[1]);
        if(!$.isFunction(config[2])){config[2] = $.noop};
        return this;
    },

    /* 卸载一个按钮 */
    "removeToolsButton" : function(name){
        $(".thinkbox-tools", lists[this.key][1]).find("button[name='" + name + "']").remove();
        return this;
    },

    /* 禁用一个按钮 */
    "disableToolsButton" : function(name){
        $(".thinkbox-tools", lists[this.key][1]).find("button[name='" + name + "']")
            .addClass("disabled").attr("disabled", "disabled");
        return this;
    },

    /* 启用一个按钮 */
    "enableToolsButton" : function(name){
        $(".thinkbox-tools", lists[this.key][1]).find("button[name='" + name + "']")
            .removeClass("disabled").removeAttr("disabled", "disabled");
        return this;
    },

    /* 最小化弹出层 */
    "minimize" : function(){
        return this;
    },

    /* 最大化弹出层 */
    "maximize" : function(){
        return this;
    }
}

/* 按ESC关闭弹出层 */
_doc.mousedown(function(){lists.current = null})
    .keydown(function(event){
        lists.current
        && lists[lists.current][0].escHide
        && event.keyCode == 27
        && lists[lists.current][1].data("thinkbox").hide();
    });

/**
 * 创建一个新的弹出层对象
 +----------------------------------------------------------
 * element 弹出层内容元素
 * options 弹出层选项
 +----------------------------------------------------------
 */
$.thinkbox = function(element, options){
    if($.isPlainObject(options) && options.dataEle){
        var data = $(options.dataEle).data("thinkbox");
        if(data) return options.display === false ? data : data.show();
    }
    return new ThinkBox(element, options);
}

/**
 +----------------------------------------------------------
 * 弹出层内置扩展
 +----------------------------------------------------------
 */
$.extend($.thinkbox, {
    /**
     * 设置弹出层默认参数
     * @param  {string} name  配置名称
     * @param  {string} value 配置的值
     */
    "defaults" : function(name, value){
        if($.isPlainObject(name)){
            $.extend(defaults, name);
        } else {
            defaults[name] = value;
        }
    },

    // 以一个URL加载内容并以ThinBox弹出层的形式展现
    "load" : function(url, opt){
        var options = {
            "clone"     : false,
            "loading"   : "加载中...",
            "type"      : "GET",
            "dataType"  : "text",
            "cache"     : false,
            "onload"    : undefined
        }, self, ajax, onload, loading, url = url.split(/\s+/);
        $.extend(options, opt || {}); //合并配置项

        //保存一些参数
        onload    = options.onload;
        loading   = options.loading;

        //组装AJAX请求参数
        ajax = {
            "data"     : options.data,
            "type"     : options.type,
            "dataType" : options.dataType,
            "cache"    : options.cache,
            "success"  : function(data) {
                url[1] && (data = $(data).find(url[1]));
                if($.isFunction(onload))
                    data = fire.call(self, onload, data); //调用onload回调函数
                self.setContent(data); //设置内容并显示弹出层
                loading || self.show(); //没有loading状态则直接显示弹出层
            }
        };

        //删除ThinkBox不需要的参数
        del(["data", "type", "cache", "dataType", "onload", "loading"], options);

        self = loading ?
            //显示loading信息
            $.thinkbox("<div class=\"thinkbox-load-loading\">" + loading + "</div>", options) :
            //不显示loading信息则创建后不显示弹出层
            $.thinkbox("<div/>", $.extend({}, options, {"display" : false}));

        $.ajax(url[0], ajax);
        return self;
    },

    // 弹出一个iframe
    "iframe" : function(url, opt){
        var options = {
            "width"     : 500,
            "height"    : 400,
            "scrolling" : "no",
            "onload"    : undefined
        }, self, iframe, onload;
        $.extend(options, opt || {}); //合并配置项
        onload = options.onload; //设置加载完成后的回调方法
        //创建iframe
        iframe = $("<iframe/>").attr({
            "width"       : options.width,
            "height"      : options.height,
            "frameborder" : 0,
            "scrolling"   : options.scrolling,
            "src"         : url})
            .load(function(){fire.call(self, onload)});
        del(["width", "height", "scrolling", "onload"], options);//删除不必要的信息
        self = $.thinkbox(iframe, options);
        return self;
    },

    // 提示框 可以配合ThinkPHP的ajaxReturn
    "tips" : function(msg, type, opt){
        var options = {
            "modalClose" : false,
            "escHide"    : false,
            "unload"     : true,
            "close"      : false,
            "delayClose" : 1000
        }, html;

        //数字type转换为字符串type
        switch(type){
            case 0: type = "error"; break;
            case 1: type = "success"; break;
        }
        html = "<div class=\"thinkbox-tips thinkbox-tips-" + type + "\">" + msg + "</div>";
        $.extend(options, opt || {});
        return $.thinkbox(html, options);
    },

    // 成功提示框
    "success" : function(msg, opt){
        return this.tips(msg, "success", opt);
    },

    // 错误提示框
    "error" : function(msg, opt){
        return this.tips(msg, "error", opt);
    },

    // 数据加载
    "loading" : function(msg, opt){
        var options = opt || {};
        options.delayClose = 0;
        return this.tips(msg, "loading", options);
    },

    //消息框
    "msg" : function(msg, opt){
        var options = {
            "drag"       : false,
            "escHide"    : false,
            "delayClose" : 0,
            "center"     : false,
            "title"      : "消息",
            "x"          : 0,
            "y"          : 0,
            "locate"     : ["right", "bottom"],
            "show"       : ["slideDown", "slow"],
            "hide"       : ["slideUp", "slow"]
        }, html;
        $.extend(options, opt || {});
        html = $("<div/>").addClass("thinkbox-msg").html(msg);
        return $.thinkbox(html, options);
    },

    //提示框
    "alert" : function(msg, opt){
        var options = {
                "title"      : lang.alert || "Alert",
                "modal"      : true,
                "modalClose" : false,
                "unload"     : false,
                "tools"      : true,
                "actions"    : ["close"],
                "buttons"    : {"ok" : [lang.ok || "Ok", "blue", function(){this.hide()}]}
            };

        $.extend(options, opt || {});

        //删除ThinkBox不需要的参数
        del("ok", options);

        var html = $("<div/>").addClass("thinkbox-alert").html(msg);
        return $.thinkbox(html, options);
    },

    //确认框
    "confirm" : function(msg, opt){
        var options = {"title" : "确认", "modal" : false, "modalClose" : false},
            button  = {"ok" : "确定", "cancel" : "取消"};
        $.extend(options, opt || {});
        options.ok && (button.ok = options.ok);
        options.cancel && (button.cancel = options.cancel);

        //删除ThinkBox不需要的参数
        del(["ok", "cancel"], options);

        options.buttons = button;
        var html = $("<div/>").addClass("thinkbox-confirm").html(msg);
        return $.thinkbox(html, options);
    },

    //弹出层内部获取弹出层对象
    "get" : function(selector){
        //TODO:通过弹窗内部元素找
        return $(selector).closest(".thinkbox").data("thinkbox");
    }
});

$.fn.thinkbox = function(opt){
    if(opt == "get") return $(this).data("thinkbox");
    return this.each(function(){
        var self = $(this), box = self.data("thinkbox"), options, event;
        switch(opt){
            case "show":
                box && box.show();
                break;
            case "hide":
                box && box.hide();
                break;
            case "toggle":
                box && box.toggle();
                break;
            default:
                options = {
                    "title"   : self.attr("title"),
                    "dataEle" : this,
                    "fixed"   : false,
                    "center"  : false,
                    "modal"   : false,
                    "drag"    : false
                };
                opt = $.isPlainObject(opt) ? opt : {};
                $.extend(options, {
                    "x" : function(){return $(this).offset().left},
                    "y" : function(){return $(this).offset().top + $(this).outerHeight()}
                }, opt);
                if(options.event){
                    self.on(event, function(){
                        _.call(self, options);
                        return false;
                    });
                } else {
                    _.call(self, options);
                }
        }
    });

    function _(options){
        var href = this.data("href") || this.attr("href");
        if(href.substr(0, 1) == "#"){
            $.thinkbox(href, options);
        } else if(href.substr(0, 7) == "http://" || href.substr(0, 8) == "https://"){
            $.thinkbox.iframe(href, options);
        } else {
            $.thinkbox.load(href, options);
        }
    }
}

})(jQuery);