RedWolves
5/23/2011 - 6:51 PM

jquery.objectOverlay.js

/*
* jqModal - Minimalist Modaling with jQuery
* http://dev.iceburg.net/jquery/jqModal/
* Copyright (c) 2007 Brice Burgess <bhb@iceburg.net>, http://www.iceburg.net
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
* 
* $Version: 2007.08.17 +r11
* 
*/
(function($) {
    $.fn.jqm = function(o) {
        var _o = {
            zIndex: 3000,
            overlay: 50,
            overlayClass: 'jqmOverlay',
            closeClass: 'jqmClose',
            trigger: '.jqModal',
            ajax: false,
            target: false,
            modal: false,
            toTop: false,
            onShow: false,
            onHide: false,
            onLoad: false
        };
        return this.each(function() {
            if (this._jqm) return; s++; this._jqm = s;
            H[s] = { c: $.extend(_o, o), a: false, w: $(this).addClass('jqmID' + s), s: s };
            if (_o.trigger) $(this).jqmAddTrigger(_o.trigger);
        });
    };

    $.fn.jqmAddClose = function(e) { hs(this, e, 'jqmHide'); return this; };
    $.fn.jqmAddTrigger = function(e) { hs(this, e, 'jqmShow'); return this; };
    $.fn.jqmShow = function(t) { return this.each(function() { if (!H[this._jqm].a) $.jqm.open(this._jqm, t) }); };
    $.fn.jqmHide = function(t) { return this.each(function() { if (H[this._jqm].a) $.jqm.close(this._jqm, t) }); };

    $.jqm = {
        hash: {},
        open: function(s, t) {
            var h = H[s], c = h.c, cc = '.' + c.closeClass, z = (/^\d+$/.test(h.w.css('z-index'))) ? h.w.css('z-index') : c.zIndex, o = $('<div></div>').css({ height: '100%', width: '100%', position: 'fixed', left: 0, top: 0, 'z-index': z - 1, opacity: c.overlay / 100 }); h.t = t; h.a = true; h.w.css('z-index', z);
            if (c.modal) { if (!A[0]) F('bind'); A.push(s); o.css('cursor', 'wait'); }
            else if (c.overlay > 0) h.w.jqmAddClose(o);
            else o = false;

            h.o = (o) ? o.addClass(c.overlayClass).prependTo('body') : false;
            if (ie6) { $('html,body').css({ height: '100%', width: '100%' }); if (o) { o = o.css({ position: 'absolute' })[0]; for (var y in { Top: 1, Left: 1 }) o.style.setExpression(y.toLowerCase(), "(_=(document.documentElement.scroll" + y + " || document.body.scroll" + y + "))+'px'"); } }

            if (c.ajax) {
                var r = c.target || h.w, u = c.ajax, r = (typeof r == 'string') ? $(r, h.w) : $(r), u = (u.substr(0, 1) == '@') ? $(t).attr(u.substring(1)) : u;
                r.load(u, function() { if (c.onLoad) c.onLoad.call(this, h); if (cc) h.w.jqmAddClose($(cc, h.w)); e(h); });
            }
            else if (cc) h.w.jqmAddClose($(cc, h.w));

            if (c.toTop && h.o) h.w.before('<span id="jqmP' + h.w[0]._jqm + '"></span>').insertAfter(h.o);
            (c.onShow) ? c.onShow(h) : h.w.show(); e(h); return false;
        },
        close: function(s) {
            var h = H[s]; h.a = false;
            if (A[0]) { A.pop(); if (!A[0]) F('unbind'); }
            if (h.c.toTop && h.o) $('#jqmP' + h.w[0]._jqm).after(h.w).remove();
            if (h.c.onHide) h.c.onHide(h); else { h.w.hide(); if (h.o) h.o.remove(); } return false;
        } 
    };
    var s = 0, H = $.jqm.hash, A = [], ie6 = $.browser.msie && ($.browser.version == "6.0"),
i = $('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({ opacity: 0 }),
e = function(h) { if (ie6) if (h.o) h.o.html('<p style="width:100%;height:100%"/>').prepend(i); else if (!$('iframe.jqm', h.w)[0]) h.w.prepend(i); f(h); },
f = function(h) { try { $(':input:visible', h.w)[0].focus(); } catch (e) { } },
F = function(t) { $()[t]("keypress", m)[t]("keydown", m)[t]("mousedown", m); },
m = function(e) { var h = H[A[A.length - 1]], r = (!$(e.target).parents('.jqmID' + h.s)[0]); if (r) f(h); return !r; },
hs = function(w, e, y) {
    var s = []; w.each(function() { s.push(this._jqm) });
    $(e).each(function() { if (this[y]) $.extend(this[y], s); else { this[y] = s; $(this).click(function() { for (var i in { jqmShow: 1, jqmHide: 1 }) for (var s in this[i]) if (H[this[i][s]]) H[this[i][s]].w[i](this); return false; }); } });
};
})(jQuery);




(function($) {
    // used for links to objects like video. This will overlay the video on the screen. Requires jqModal.js.
    $.fn.objectOverlay = function(options) {
        var o = $.extend({}, $.fn.objectOverlay.defaults, options);
        o = $.extend({}, $.fn.objectOverlay.labels, o);

        return this.each(function() {
            var $this = $(this);
            $this.bind("click", function(e) {
                e.preventDefault();
                var vid = $this.attr("href");
                o.objHTML = o.objHTML.replace("{closeLabel}", o.closeLabel)
								 .replace("{width}", o.width)
								 .replace("{height}", o.height)
								 .replace("{fallbackLabel}", o.fallbackLabel.replace("{vid}", vid))
								 .replace(/{vid}/g, vid);
                $(o.objHTML).appendTo("body").jqm({ onHide: function(hash) {
                    hash.w.remove();
                    hash.o.remove();
                    if ($.browser.msie)
                        document.location = document.location;
                } 
                }).jqmShow();
            });
        });
    };

    $.fn.objectOverlay.defaults = {
        width: '640',
        height: '480',
        objHTML: '<div class=\"jqmWindow\">' +
			  '<a id=\"object-close\" class=\"jqmClose\" href=\"javascript:void(0);\">{closeLabel}</a>' +
			  '<object id=\"vid\" width=\"{width}\" height=\"{height}\" data=\"{vid}\">' +
			  '<param name=\"src\" value=\"{vid}\"/>' +
			  '<p>{fallbackLabel}</p>' +
			  '</object></div>',
        closeLabel: 'Close X',
        fallbackLabel: 'Video for {vid}'
    };

    $.fn.objectOverlay.labels = function() {
        try {
            return labels.objectOverlay;
        } catch (e) {
            return {};
        }
    };
})(jQuery);