(function (a) {
    a.fn.fancyZoom = function (p) {
        var p = p || {};
        var m = p && p.directory ? p.directory : "images";
        var e = false;
        if (a("#zoom").length == 0) {
            var f = a.browser.msie ? "gif" : "png";
            var k = '<div id="zoom" style="display:none;">                   <table id="zoom_table" style="border-collapse:collapse; width:100%; height:100%;">                                           <tr>                         <td class="tl" style="background:url(' + m + "/tl." + f + ') 0 0 no-repeat; width:20px; height:20px; overflow:hidden;" />                         <td class="tm" style="background:url(' + m + "/tm." + f + ') 0 0 repeat-x; height:20px; overflow:hidden;" />                         <td class="tr" style="background:url(' + m + "/tr." + f + ') 100% 0 no-repeat; width:20px; height:20px; overflow:hidden;" />                       </tr>                       <tr>                         <td class="ml" style="background:url(' + m + "/ml." + f + ') 0 0 repeat-y; width:20px; overflow:hidden;" />                         <td class="mm" style="background:#fff; vertical-align:top; padding:10px;">                           <div id="zoom_content">                           </div>                         </td>                         <td class="mr" style="background:url(' + m + "/mr." + f + ') 100% 0 repeat-y;  width:20px; overflow:hidden;" />                       </tr>                       <tr>                         <td class="bl" style="background:url(' + m + "/bl." + f + ') 0 100% no-repeat; width:20px; height:20px; overflow:hidden;" />                         <td class="bm" style="background:url(' + m + "/bm." + f + ') 0 100% repeat-x; height:20px; overflow:hidden;" />                         <td class="br" style="background:url(' + m + "/br." + f + ') 100% 100% no-repeat; width:20px; height:20px; overflow:hidden;" />                       </tr>                                        </table>                   <a href="#" title="Close" id="zoom_close" style="position:absolute; top:0; left:590;">                     <img src="' + m + "/closebox." + f + '" alt="Close" style="border:none; margin:0; padding:0;" />                   </a>                 </div>';
            a("body").append(k);
            a("html").click(function (q) {
                if (a(q.target).parents("#zoom:visible").length == 0) {
                    l();
                }
            });
            a(document).keyup(function (q) {
                if (q.keyCode == 27 && a("#zoom:visible").length > 0) {
                    l();
                }
            });
            a("#zoom_close").click(l);
        }
        var o = a("#zoom");
        var j = a("#zoom_table");
        var i = a("#zoom_close");
        var h = a("#zoom_content");
        var b = a("td.ml,td.mm,td.mr");
        this.each(function (q) {
            a(a(this).attr("href")).hide();
            a(this).click(n);
        });
        return this;

        function n(w) {
            if (e) {
                return false;
            }
            e = true;
            var q = a(a(this).attr("href"));
            var u = p.width;
            var v = p.height;
            var r = window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth);
            var E = window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight);
            var C = window.pageXOffset || (window.document.documentElement.scrollLeft || window.document.body.scrollLeft);
            var B = window.pageYOffset || (window.document.documentElement.scrollTop || window.document.body.scrollTop);
            var F = {
                width: r,
                height: E,
                x: C,
                y: B
            };
            var r = (u || q.width()) + 60;
            var E = (v || q.height()) + 60;
            var z = F;
            var A = Math.max((z.height / 2) - (E / 2) + B, 0);
            var D = (z.width / 2) - (r / 2);
            var s = w.pageY;
            var t = w.pageX;
            i.attr("curTop", s);
            i.attr("curLeft", t);
            i.attr("scaleImg", p.scaleImg ? "true" : "false");
            a("#zoom").hide().css({
                position: "absolute",
                top: s + "px",
                left: t + "px",
                width: "1px",
                height: "1px"
            });
            g();
            i.hide();
            if (p.closeOnClick) {
                a("#zoom").click(l);
            }
            if (p.scaleImg) {
                h.html(q.html());
                a("#zoom_content img").css("width", "100%");
            } else {
                h.html("");
            }
            a("#zoom").animate({
                top: A + "px",
                left: D + "px",
                opacity: "show",
                width: r,
                height: E
            },
            500, null, function () {
                if (p.scaleImg != true) {
                    h.html(q.html());
                }
                d();
                i.show();
                e = false;
            });
            return false;
        }
        function l() {
            if (e) {
                return false;
            }
            e = true;
            a("#zoom").unbind("click");
            g();
            if (i.attr("scaleImg") != "true") {
                h.html("");
            }
            i.hide();
            a("#zoom").animate({
                top: i.attr("curTop") + "px",
                left: i.attr("curLeft") + "px",
                opacity: "hide",
                width: "1px",
                height: "1px"
            },
            500, null, function () {
                if (i.attr("scaleImg") == "true") {
                    h.html("");
                }
                d();
                e = false;
            });
            return false;
        }
        function c(s) {
            a("#zoom_table td").each(function (u) {
                var t = a(this).css("background-image").replace(/\.(png|gif|none)\"\)$/, "." + s + '")');
                a(this).css("background-image", t);
            });
            var r = i.children("img");
            var q = r.attr("src").replace(/\.(png|gif|none)$/, "." + s);
            r.attr("src", q);
        }
        function g() {
            if (a.browser.msie && parseFloat(a.browser.version) >= 7) {
                c("gif");
            }
        }
        function d() {
            if (a.browser.msie && a.browser.version >= 7) {
                c("png");
            }
        }
    };
})(jQuery);
