/********
jquery.facebox plugin 
solucky 2009-8-20修改班基于JQUERY.FACEBOX 1.2
示例:
$(document).ready(function() {
$('a[rel*=facebox.cssclassname]').facebox();
$.facebox("html",classname)
});
****/
(function($) {
    $.facebox = function(data, klass) {
        $.facebox.loading();

        if (data.ajax) fillFaceboxFromAjax(data.ajax);
        else if (data.image) fillFaceboxFromImage(data.image);
        else if (data.div) fillFaceboxFromHref(data.div);
        else if ($.isFunction(data)) data.call($);
        else $.facebox.reveal(data, klass);
    }
    /*
    * Public, $.facebox methods
    */
    $.extend($.facebox, {
        settings: {
            opacity: 0.1,
            overlay: true,
            loadingImage: '', //'/facebox/loading.gif',
            closeImage: '', //'/facebox/closelabel.gif',
            imageTypes: ['png', 'jpg', 'jpeg', 'gif'],
            faceboxHtml: '\
                <div id="facebox" style="display:none;"> \
                  <div class="popup_facebox"> \
                    <table> \
                      <tbody> \
                        <tr> \
                          <td class="tl"/><td class="b"/><td class="tr"/> \
                        </tr> \
                        <tr> \
                          <td class="b"/> \
                          <td class="body_fb"> \
                            <div class="footer_fb"> \
                              <a href="#" class="close_fb"> \
                              </a> \
                            </div> \
                            <div class="content"> \
                            </div> \
                          </td> \
                          <td class="b"/> \
                        </tr> \
                        <tr> \
                          <td class="bl"/><td class="b"/><td class="br"/> \
                        </tr> \
                      </tbody> \
                    </table> \
                  </div> \
                </div>'
        },

        loading: function() {
            init();
            if ($('#facebox .loading_fb').length == 1) return true;
            showOverlay();
            $('#facebox .content').empty();
            $('#facebox .body_fb').children().hide().end().append('<div class="loading_fb"></div>');

            $('#facebox').css({
                top: getPageScroll()[1] + (getPageHeight() / 10),
                left: 385.5
            }).show();
            //滚动条事件
            $(window).scroll(function() {
                $("#facebox").stop();
               
                var _top = $("#facebox").css("top").replace("px", "");
                $("#facebox").css("top", "0px");
                var __top = "+=" + (getPageScroll()[1] + (getPageHeight() / 10));
                $("#facebox").animate({ top: __top });
            });
            $(document).trigger('loading.facebox');
        },

        reveal: function(data, klass) {
            $(document).trigger('beforeReveal.facebox');
            if (klass) $('#facebox .content').addClass(klass);
           // alert(1);try{alert(data.html())}catch(exc){};
            $('#facebox .content').append(data);// alert(2);
            $('#facebox .loading_fb').remove();
            $('#facebox .body_fb').children().show();
            $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup_facebox').width() / 2));
            $(document).trigger('reveal.facebox').trigger('afterReveal.facebox');
        },

        close: function() {
            $(document).trigger('close.facebox');
            return false;
        }
    })

    /*
    * Public, $.fn methods
    */
    $.fn.facebox = function(settings) {
        init(settings);

        function clickHandler() {
            $.facebox.loading(true);
            // support for rel="facebox.inline_popup" syntax, to add a class
            // also supports deprecated "facebox[.inline_popup]" syntax
            var klass = this.rel.match(/facebox\[?\.(\w+)\]?/);
            if (klass) klass = klass[1];
            fillFaceboxFromHref(this.href, klass);
            return false;
        }

        return this.click(clickHandler);
    }

    /*
    * Private methods
    */
    // called one time to setup facebox on this page
    function init(settings) {
        if ($.facebox.settings.inited) return true;
        else $.facebox.settings.inited = true;

        $(document).trigger('init.facebox');

        var imageTypes = $.facebox.settings.imageTypes.join('|');
        $.facebox.settings.imageTypesRegexp = new RegExp('\.' + imageTypes + '$', 'i');

        if (settings) $.extend($.facebox.settings, settings);
        $('body').append($.facebox.settings.faceboxHtml);

        var preload = [new Image(), new Image()];
        //preload[0].src = $.facebox.settings.closeImage;
        //preload[1].src = $.facebox.settings.loadingImage;

        $('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
            preload.push(new Image());
            preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1');
        })

        $('#facebox .close_fb').click($.facebox.close);
    }

    // getPageScroll() by quirksmode.com
    function getPageScroll() {
        var xScroll, yScroll;
        if (self.pageYOffset) {
            yScroll = self.pageYOffset;
            xScroll = self.pageXOffset;
        } else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
            yScroll = document.documentElement.scrollTop;
            xScroll = document.documentElement.scrollLeft;
        } else if (document.body) {// all other Explorers
            yScroll = document.body.scrollTop;
            xScroll = document.body.scrollLeft;
        }
        return new Array(xScroll, yScroll);
    }

    // Adapted from getPageSize() by quirksmode.com
    function getPageHeight() {
        var windowHeight;
        if (self.innerHeight) {	// all except Explorer
            windowHeight = self.innerHeight;
        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
            windowHeight = document.documentElement.clientHeight;
        } else if (document.body) { // other Explorers
            windowHeight = document.body.clientHeight;
        }
        return windowHeight;
    }

    // Figures out what you want to display and displays it
    // formats are:
    //     div: #id
    //   image: blah.extension
    //    ajax: anything else
    function fillFaceboxFromHref(href, klass) {
        // div
        if (href.match(/#/)) {
            var url = window.location.href.split('#')[0];
            var target = href.replace(url, '');
            $.facebox.reveal($(target).clone(true).show(), klass);

            // image
        } else if (href.match($.facebox.settings.imageTypesRegexp)) {
            fillFaceboxFromImage(href, klass);
            // ajax
        } else {
            fillFaceboxFromAjax(href, klass);
        }
    }

    function fillFaceboxFromImage(href, klass) {
        var image = new Image();
        image.onload = function() {
            $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass);
        }
        image.src = href;
        $(document).one("click", function() { $(document).trigger('close.facebox'); });
    }

    function fillFaceboxFromAjax(href, klass) {
        $.get(href, function(data) { $.facebox.reveal(data, klass) });
    }

    function skipOverlay() {
        return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null;
    }

    function showOverlay() {
        if (skipOverlay()) return;

        if ($('facebox_overlay').length == 0)
            $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>');

        $('#facebox_overlay').hide().addClass("facebox_overlayBG").css('opacity', $.facebox.settings.opacity).show();
        //.click(function() { $(document).trigger('close.facebox') })
        //.fadeIn(200)
        $("select").hide();
        return false;
    }

    function hideOverlay() {
        $("select").show();
        if (skipOverlay()) return;

        $("#facebox_overlay").removeClass("facebox_overlayBG");
        $("#facebox_overlay").addClass("facebox_hide");
        $("#facebox_overlay").remove();
        $('#facebox_overlay').hide();

        return false;
    }

    /*
    * Bindings
    */
    $(document).bind('close.facebox', function() {
        //$(document).unbind('keydown.facebox')
        $('#facebox').hide();
        $('#facebox .content').removeClass().addClass('content');
        hideOverlay();
        $('#facebox .loading_fb').remove();

    })
})(jQuery);

/*使用facebox样式进行AJAX处理*/
jQuery.extend({
    faceboxajax: function(options) {
        var setting = {
            url: "",
            data: null,
            dataType: "text",
            beforeSendMsg: "正在处理,请不要关闭本页面...",
            successMsg: "处理成功.",
            errorMsg: "处理失败",
            beforesend: function() { return true; },
            success: function(_data) { if (parseInt(_data) >= 1) return true; else return false; },
            complete: function() { return true; },
            error: function() { return true; }
        };
        $.extend(true, setting, options);

        $.ajax({
            type: "POST",
            url: setting.url,
            dataType: setting.dataType,
            data: setting.data,
            beforeSend: function() {
                $.facebox(setting.beforeSendMsg, "faceboxProgress");
                $('#facebox .footer_fb').hide();
                setting.beforesend();
            },
            success: function(data) {
                if (setting.success(data)) {
                    $.facebox(setting.successMsg, "success_fb");
                    setTimeout(function() { $(document).trigger('close.facebox') }, 2000);
                } else {
                    $.facebox(setting.errorMsg, "failure_fb");
                }
                $('#facebox .footer_fb').show();
            },
            error: function() {
                if (setting.error()) {
                    $.facebox(setting.errorMsg, "failure_fb");
                    $('#facebox .footer_fb').show();
                }

            },
            complete: function() {
                setting.complete();
            }
        });
    }
});

/*facebox样式的确认提示框,提示内容可自定义。可以是文本也可以jquery对象*/
(function($) {
    $.faceboxconfirm = function(settings) {
        init(settings);
        $.faceboxconfirm.show();
    }

    $.faceboxconfirm.disabledsure = function(disabled) {
        if (disabled == undefined) disabled = false;
        var $btn = $("#facebox .content").find(".fbc_btnsure");
        if (disabled)
            $btn.attr("disabled", "disabled");
        else
            $btn.removeAttr("disabled");
    }

    $.extend($.faceboxconfirm, {
        settings: {
            title: "提示",
            confirmcontent: "真的要处理吗.",
            onsure: function() { return true; },
            oncancel: function() { return true; },
            faceboxconfirmHtml: '\
                <div id="faceboxconfirm" class="faceboxconfirm dialogform" style=" display:none;">\
                        <div class="title" style="margin-bottom:3px; border-bottom:solid 1px #ddd;  font-weight:bold;">title</div>\
                        <div class="content"></div>\
                        <div style="text-align:center; margin-top:5px;">\
                            <input class="fbc_btnsure commonbtn" type="button" value="确定" />　\
                            <input class="fbc_btncancel commonbtn" type="button" value="取消" />\
                        </div>\
                </div>\
            '
        },
        show: function() {
            $.facebox("");
            var $faceboxcontent = $("#facebox .content");
            $faceboxcontent.empty().append($("#faceboxconfirm").clone(true).show());
            $('#facebox .footer_fb').hide();

            $faceboxcontent.find("#faceboxconfirm .title").html($.faceboxconfirm.settings.title);
            $faceboxcontent.find("#faceboxconfirm .content").append($.faceboxconfirm.settings.confirmcontent);

            $faceboxcontent.find(".fbc_btnsure").click(function() {
                if ($.faceboxconfirm.settings.onsure())
                    $(document).trigger('close.facebox');

            }).end().find(".fbc_btncancel").click(function() {
                $(document).trigger('close.facebox');
                $.faceboxconfirm.settings.oncancel();
            });
        }
    })

    function init(settings) {
        if (settings)
            $.extend($.faceboxconfirm.settings, settings);
        if ($.faceboxconfirm.settings.inited)
            return true;
        else
            $.faceboxconfirm.settings.inited = true;

        $('body').append($.faceboxconfirm.settings.faceboxconfirmHtml);
    }

})(jQuery);

/*
ajax输入框值是否存在验证处理提示.提供有限的处理,
具体请查看相应代码
*/
(function($) {
    $.inputValidator = function(options) {
        var setting = {
            ajaxposturl: "",
            ajaxdata: null,
            jqobj: null,
            requestmsg: "必填",
            exitstmsg: "已存在,请重新输入",
            onendinterval: function() { },
            onstartinterval: function() { },
            errorcss: "requestedinput",
            useajaxval: true
        }
        $.extend(true, setting, options);
        var c_rolename;
        clearInterval(c_rolename);

        var showerror = false;
        var errormsg = "";
        if ($.trim(setting.jqobj.val()).length <= 0) {
            showerror = true;
            errormsg = setting.requestmsg;
        }
        else {
            if (setting.useajaxval) {
                var nextstep = false;

                $.ajax({ type: "post", async: false, dataType: "text", data: setting.ajaxdata, url: setting.ajaxposturl, success: function(data) { if (data == "0") { nextstep = true; } else { nextstep = false; } } })


                if (!nextstep) {
                    showerror = true;
                    errormsg = setting.exitstmsg;
                }
            }
        }
        if (showerror) {
            function c() {
                clearInterval(c_rolename); setting.jqobj.removeClass(setting.errorcss).val("").attr({ title: "" }); setting.onendinterval();
            }
            setting.onstartinterval();
            function __s() {
                setting.jqobj.toggleClass(setting.errorcss).val(errormsg).attr({ title: errormsg });
            }
            __s()
            c_rolename = setInterval(__s, 600);
            setTimeout(c, 60000)
            setting.jqobj.one("focus", function() { c(); });
            return false;
        }
        return true;
    }
})(jQuery);

