/*
 * SimpleModal 1.4.1 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * Copyright (c) 2010 Eric Martin (http://twitter.com/ericmmartin)
 * Dual licensed under the MIT and GPL licenses
 * Revision: $Id: jquery.simplemodal.js 261 2010-11-05 21:16:20Z emartin24 $
 */
(function (d) {
    var k = d.browser.msie && parseInt(d.browser.version) === 6 && typeof window.XMLHttpRequest !== "object", m = d.browser.msie && parseInt(d.browser.version) === 7, l = null, f = [];
    d.modal = function (a, b) { return d.modal.impl.init(a, b) };
    d.modal.close = function () { d.modal.impl.close() };
    d.modal.focus = function (a) { d.modal.impl.focus(a) };
    d.modal.setContainerDimensions = function () { d.modal.impl.setContainerDimensions() };
    d.modal.setPosition = function () { d.modal.impl.setPosition() };
    d.modal.update = function (a, b) { d.modal.impl.update(a, b) };
    d.fn.modal = function (a) { return d.modal.impl.init(this, a) };
    d.modal.defaults = {
        appendTo: "body",
        focus: true,
        opacity: 50,
        overlayId: "simplemodal-overlay",
        overlayCss: {},
        containerId: "simplemodal-container",
        containerCss: {},
        dataId: "simplemodal-data",
        dataCss: {},
        minHeight: null,
        minWidth: null,
        maxHeight: null,
        maxWidth: null,
        autoResize: false,
        autoPosition: true,
        zIndex: 1E3,
        close: true,
        closeHTML: '<a class="modalCloseImg" title="Close"></a>',
        closeClass: "simplemodal-close",
        escClose: true,
        overlayClose: false,
        position: null,
        persist: false,
        modal: true,
        onOpen: null,
        onShow: null,
        onClose: null
    };
    d.modal.impl =
        {
            d: {},
            init: function (a, b) {
                var c = this;
                if (c.d.data)
                    return false;
                l = d.browser.msie && !d.boxModel;
                c.o = d.extend({}, d.modal.defaults, b);
                c.zIndex = c.o.zIndex;
                c.occb = false;
                if (typeof a === "object") {
                    a = a instanceof jQuery ? a : d(a);
                    c.d.placeholder = false;
                    if (a.parent().parent().size() > 0) {
                        a.before(d("<span></span>").attr("id", "simplemodal-placeholder").css({ display: "none" }));
                        c.d.placeholder = true;
                        c.display = a.css("display");
                        if (!c.o.persist)
                            c.d.orig = a.clone(true)
                    }
                }
                else if (typeof a === "string" || typeof a === "number")
                    a = d("<div></div>").html(a);
                else {
                    alert("SimpleModal Error: Unsupported data type: " + typeof a);
                    return c
                }
                c.create(a);
                c.open();
                d.isFunction(c.o.onShow) && c.o.onShow.apply(c, [c.d]);
                return c
            },
            create: function (a) {
                var b = this;
                f = b.getDimensions();
                if (b.o.modal && k)
                    b.d.iframe = d('<iframe src="javascript:false;"></iframe>').css(d.extend(b.o.iframeCss, { display: "none", opacity: 0, position: "fixed", height: f[0], width: f[1], zIndex: b.o.zIndex, top: 0, left: 0 })).appendTo(b.o.appendTo);
                b.d.overlay = d("<div></div>").attr("id", b.o.overlayId).addClass("simplemodal-overlay").css(d.extend(b.o.overlayCss, { display: "none", opacity: b.o.opacity / 100, height: b.o.modal ? f[0] : 0, width: b.o.modal ? f[1] : 0, position: "fixed", left: 0, top: 0, zIndex: b.o.zIndex + 1 })).appendTo(b.o.appendTo);
                b.d.container = d("<div></div>").attr("id", b.o.containerId).addClass("simplemodal-container").css(d.extend(b.o.containerCss, { display: "none", position: "fixed", zIndex: b.o.zIndex + 2 })).append(b.o.close && b.o.closeHTML ? d(b.o.closeHTML).addClass(b.o.closeClass) : "").appendTo(b.o.appendTo);
                b.d.wrap = d("<div></div>").attr("tabIndex", -1).addClass("simplemodal-wrap").css({ height: "100%", outline: 0, width: "100%" }).appendTo(b.d.container);
                b.d.data = a.attr("id", a.attr("id") || b.o.dataId).addClass("simplemodal-data").css(d.extend(b.o.dataCss, { display: "none" })).appendTo("body"); b.setContainerDimensions();
                b.d.data.appendTo(b.d.wrap);
                if (k || l)
                    b.fixIE()
            },
            bindEvents: function () {
                var a = this;
                d("." + a.o.closeClass).bind("click.simplemodal", function (b) { b.preventDefault(); a.close() });
                a.o.modal && a.o.close && a.o.overlayClose && a.d.overlay.bind("click.simplemodal", function (b) { b.preventDefault(); a.close() });
                d(document).bind("keydown.simplemodal", function (b) {
                    if (a.o.modal && b.keyCode === 9)
                        a.watchTab(b);
                    else if (a.o.close && a.o.escClose && b.keyCode === 27) {
                        b.preventDefault();
                        a.close()
                    }
                });
                d(window).bind("resize.simplemodal", function () {
                    f = a.getDimensions(); a.o.autoResize ? a.setContainerDimensions() : a.o.autoPosition && a.setPosition(); if (k || l) a.fixIE(); else if (a.o.modal) {
                        a.d.iframe && a.d.iframe.css({ height: f[0],
                            width: f[1]
                        }); a.d.overlay.css({ height: f[0], width: f[1] })
                    }
                })
            },
            unbindEvents: function () {
                d("." + this.o.closeClass).unbind("click.simplemodal"); d(document).unbind("keydown.simplemodal"); d(window).unbind("resize.simplemodal"); this.d.overlay.unbind("click.simplemodal")
            },
            fixIE: function () {
                var a = this, b = a.o.position;
                d.each([a.d.iframe || null, !a.o.modal ? null : a.d.overlay, a.d.container], function (c, h) {
                    if (h) {
                        var g = h[0].style; g.position = "absolute"; if (c < 2) {
                            //g.removeExpression("height");
                            //g.removeExpression("width");
                            //g.setExpression("height", 'document.body.scrollHeight > document.body.clientHeight ? document.body.scrollHeight : document.body.clientHeight+ "px"');
                            //g.setExpression("height", 'document.body.scrollHeight > document.body.clientHeight ? document.body.scrollHeight : document.body.clientHeight+ "px"');
                            //g.setExpression("width" , 'document.body.scrollWidth  > document.body.clientWidth  ? document.body.scrollWidth  : document.body.clientWidth + "px"');
                        } else {
                            var e; if (b && b.constructor === Array) {
                                c = b[0] ? typeof b[0] === "number" ? b[0].toString() : b[0].replace(/px/, "") : h.css("top").replace(/px/, "");
                                c = c.indexOf("%") === -1 ? c + ' + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"' : parseInt(c.replace(/%/, "")) + ' * ((document.documentElement.clientHeight || document.body.clientHeight) / 100) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"';
                                if (b[1]) {
                                     e = typeof b[1] === "number" ? b[1].toString() : b[1].replace(/px/, "");
                                     e = e.indexOf("%") === -1 ? e + ' + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"' : parseInt(e.replace(/%/, "")) + ' * ((document.documentElement.clientWidth || document.body.clientWidth) / 100) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"';
                                     }
                            } else {
                                c = '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'; e = '(document.documentElement.clientWidth || document.body.clientWidth) / 2 - (this.offsetWidth / 2) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"'
                            }
                            g.removeExpression("top");
                            g.removeExpression("left");
                            g.setExpression("top", c);
                            g.setExpression("left", e);
                        }

                    }
                });
              
            },
            focus: function (a) {
                var b = this;
                a = a && d.inArray(a, ["first", "last"]) !== -1 ? a : "first";
                var c = d(":input:enabled:visible:" + a, b.d.wrap);
                setTimeout(function () { c.length > 0 ? c.focus() : b.d.wrap.focus() }, 10);
            },
            getDimensions: function () {
                var a = d(window);
                return [d.browser.opera && d.browser.version > "9.5" && d.fn.jquery < "1.3" || d.browser.opera && d.browser.version < "9.5" && d.fn.jquery > "1.2.6" ? a[0].innerHeight : a.height(), a.width()];
            },
            getVal: function (a, b) {
                return a ? typeof a === "number" ? a : a === "auto" ? 0 : a.indexOf("%") > 0 ? parseInt(a.replace(/%/, "")) / 100 * (b === "h" ? f[0] : f[1]) : parseInt(a.replace(/px/, "")) : null
            },
            update: function (a, b) {
                var c = this;
                if (!c.d.data)
                    return false;
                c.d.origHeight = c.getVal(a, "h");
                c.d.origWidth = c.getVal(b, "w");
                c.d.data.hide();
                a && c.d.container.css("height", a);
                b && c.d.container.css("width", b);
                c.setContainerDimensions();
                c.d.data.show();
                c.o.focus && c.focus();
                c.unbindEvents();
                c.bindEvents();
            },
            setContainerDimensions: function () {
                var a = this, b = k || m, c = a.d.origHeight ? a.d.origHeight : d.browser.opera ? a.d.container.height() : a.getVal(b ? a.d.container[0].currentStyle.height : a.d.container.css("height"), "h"); b = a.d.origWidth ? a.d.origWidth : d.browser.opera ? a.d.container.width() : a.getVal(b ? a.d.container[0].currentStyle.width : a.d.container.css("width"), "w"); var h = a.d.data.outerHeight(true), g = a.d.data.outerWidth(true); a.d.origHeight = a.d.origHeight || c; a.d.origWidth = a.d.origWidth || b; var e = a.o.maxHeight ? a.getVal(a.o.maxHeight, "h") : null, i = a.o.maxWidth ? a.getVal(a.o.maxWidth, "w") : null; e = e && e < f[0] ? e : f[0]; i = i && i < f[1] ? i : f[1];
                var j = a.o.minHeight ? a.getVal(a.o.minHeight, "h") : "auto"; c = c ? a.o.autoResize && c > e ? e : c < j ? j : c : h ? h > e ? e : a.o.minHeight && j !== "auto" && h < j ? j : h : j; e = a.o.minWidth ? a.getVal(a.o.minWidth, "w") : "auto"; b = b ? a.o.autoResize && b > i ? i : b < e ? e : b : g ? g > i ? i : a.o.minWidth && e !== "auto" && g < e ? e : g : e; a.d.container.css({ height: c, width: b }); a.d.wrap.css({ overflow: h > c || g > b ? "auto" : "visible" }); a.o.autoPosition && a.setPosition();
            },
            setPosition: function () {
                var a = this, b, c;
                b = f[0] / 2 - a.d.container.outerHeight(true) / 2;
                c = f[1] / 2 - a.d.container.outerWidth(true) / 2;
                if (a.o.position && Object.prototype.toString.call(a.o.position) === "[object Array]") {
                    b = a.o.position[0] || b; c = a.o.position[1] || c
                } else {
                    b = b; c = c
                }
                a.d.container.css({ left: c, top: b });
            },
            watchTab: function (a) {
                var b = this; if (d(a.target).parents(".simplemodal-container").length > 0) {
                    b.inputs = d(":input:enabled:visible:first, :input:enabled:visible:last", b.d.data[0]);
                    if (!a.shiftKey && a.target === b.inputs[b.inputs.length - 1] || a.shiftKey && a.target === b.inputs[0] || b.inputs.length === 0) {
                        a.preventDefault(); b.focus(a.shiftKey ? "last" : "first")
                    }
                } else {
                    a.preventDefault();
                    b.focus();
                }
            },
            open: function () { var a = this; a.d.iframe && a.d.iframe.show(); if (d.isFunction(a.o.onOpen)) a.o.onOpen.apply(a, [a.d]); else { a.d.overlay.show(); a.d.container.show(); a.d.data.show() } a.o.focus && a.focus(); a.bindEvents() }, close: function () {
                var a = this; if (!a.d.data) return false; a.unbindEvents(); if (d.isFunction(a.o.onClose) && !a.occb) { a.occb = true; a.o.onClose.apply(a, [a.d]) } else {
                    if (a.d.placeholder) {
                        var b = d("#simplemodal-placeholder");
                        if (a.o.persist)
                            b.replaceWith(a.d.data.removeClass("simplemodal-data").css("display", a.display));
                        else {
                            a.d.data.hide().remove();
                            b.replaceWith(a.d.orig);
                        }
                    } else
                        a.d.data.hide().remove();

                    a.d.container.hide().remove();
                    a.d.overlay.hide();
                    a.d.iframe && a.d.iframe.hide().remove();
                    setTimeout(function () { a.d.overlay.remove(); a.d = {} }, 10);
                }
            }
        }
})(jQuery);

