/* jquery.overlay.min.js
 * jQuery overlay plugin
 * Author: Jason Moon
 * Requires: jQuery 1.2.3 or later
 * Uncompressed: jquery.overlay.js
 */
(function($){
    var x=$.browser.msie&&($.browser.version<7);
    var y=0;
    var z=function(a,b){
        var c=a.toLowerCase();
        var d=null;
        var e=this;
        var f=function(){
            if(d){
                $.fn[c].call($(d))
                }
                $.fn[c].call($(this));
            return false
            };

        if($.fn.data){
            var g=$(this).data('overlay')||{};

            e=g.contextNode;
            d=g.modalOverlay;
            if(g['on'+a]){
                f=g['on'+a]
                }
            }else{
        var h=$(this).attr('modal');
        if(h){
            d=$('#'+h).get(0)
            }
        }
    if(d){
    if($.browser.msie&&d.filters&&d.filters.alpha&&d.filters.alpha.opacity){
        $(d).css('opacity',parseInt(d.filters.alpha.opacity)/100)
        }
        e=d
    }
    if($.isFunction(b)){
    return b.call(this,e,f)
    }else{
    return f.call(this,e,b)
    }
};

$.fn.overlay=function(q){
    var r=(q.modal)?true:false;
    var s=(typeof(q.centered)=='boolean')?q.centered:r;
    var t=$.extend({
        centerX:s,
        centerY:s,
        fixed:r,
        drag:false
    },q||{});
    var u=(t.fixed&&!x)?'fixed':'absolute';
    var v=function(a){
        return parseInt($.curCSS(this,'border'+a+'Width',true))||0
        };

    var w=function(a){
        if($.fn.outerWidth){
            return $.fn['outer'+a].call($(this))
            }else{
            var b=parseInt($.curCSS(this,a.toLowerCase(),true));
            var c=(a=='Width')?['Left','Right']:['Top','Bottom'];
            for(var i=0;i<2;i++){
                b+=parseInt($.curCSS(this,'padding'+c[i],true))+v.call(this,c[i])
                }
                return b
            }
        };

return this.each(function(){
    var d=w.call(this,'Width');
    var e=w.call(this,'Height');
    if(t.modal||x){
        var f=$('<div style="z-index:10000"></div>');
        if(t.modal){
            f.css($.extend(t.modal.css||{},{
                position:(x)?'absolute':'fixed',
                display:$(this).css('display'),
                height:'100%',
                width:'100%',
                top:0,
                left:0
            }));
            if(t.modal.className){
                f.addClass(t.modal.className)
                }else if(t.modal.id){
                f.attr('id',t.modal.id)
                }else{
                f.css($.extend({
                    backgroundColor:'#000000',
                    opacity:0.65
                },t.modal.css||{}))
                }
                f.appendTo('body')
            }else{
            $(this).wrapInner('<div style="position:relative;z-index:10002;"></div>').prepend(f.css({
                position:'absolute',
                top:'-'+v.call(this,'Top')+'px',
                left:'-'+v.call(this,'Left')+'px',
                width:d+'px',
                height:e+'px'
                }))
            }
        }
    if($.fn.data){
    $(this).data('overlay',{
        modalOverlay:(t.modal)?f.get(0):null,
        onShow:t.onShow||null,
        onHide:t.onHide||null,
        contextNode:(!t.modal&&x)?$('div:last-child',this).get(0):this
        })
    }else{
    if(window.console&&(t.onShow||t.onHide)){
        console.warn('The jQuery overlay plugin onShow/onHide callbacks are not supported in jQuery versions prior to 1.2.3!')
        }
        if(t.modal){
        var g=t.modal.id||'modal_overlay_'+(++y);
        f.attr('id',g);
        $(this).attr('modal',g)
        }
    }
if(t.modal||t.centerX||t.centerY||t.fixed){
    var h={
        position:u,
        zIndex:10001
    };

    if(t.centerX){
        h.left='50%';
        h.marginLeft=Math.floor(d/-2)+'px'
        }
        if(t.centerY){
        h.top='10%';
        //h.marginTop=Math.floor(e/-2)+'px'
        }
        $(this).css(h).appendTo('body')
    }else{
    $(this).css('position','absolute')
    }
    if(x){
        
    var j=function(a){
        return'document.documentElement&&document.documentElement.'+a+'||document.body.'+a
        };

    if(t.modal){
        f.get(0).style.setExpression('height','Math.max('+j('scrollHeight')+','+j('clientHeight')+')+"px"');
        f.get(0).style.setExpression('width','Math.max('+j('scrollWidth')+','+j('clientWidth')+')+"px"')

        }
        if(t.fixed){
        if($('body').css('background-image')=='none'){
            $('body').css('background-image','url(none)')
            }
            $('body').css('background-attachment','fixed');
        var k=!($(this).css('display')!='none');
        if(k){
            $(this).show()
            }
            var l=$(this).offset();
        if(k){
            $(this).hide()
            }
            var m=(t.centerY)?'Math.floor(('+j('clientHeight')+')/2)':'parseInt('+l.top+')';
        var n=(t.centerX)?'Math.floor(('+j('clientWidth')+')/2)':'parseInt('+l.left+')';
        this.style.setExpression('top','('+m+'+('+j('scrollTop')+'))+"px"');
        this.style.setExpression('left','('+n+'+('+j('scrollLeft')+'))+"px"')
        }
        var o=$('<iframe src="javascript:false;"></iframe>').css({
        position:'absolute',
        height:(t.modal)?'100%':e+'px',
        width:(t.modal)?'100%':d+'px',
        opacity:0,
        zIndex:9999
    }).appendTo(f).get(0);
    if(t.modal){
        o.style.setExpression('height','Math.max('+j('scrollHeight')+','+j('clientHeight')+')+"px"');
        o.style.setExpression('width','Math.max('+j('scrollWidth')+','+j('clientWidth')+')+"px"')
        }
    }
if(t.drag&&$.fn.draggable&&!(t.fixed&&x)){
    $(this).draggable(t.drag)
    }
    var p=this;
$.each(['Show','Hide'],function(i,a){
    var b=a.toLowerCase();
    if(t[b+'Selector']){
        var c=(a=='Hide')?p:document;
        $(t[b+'Selector'],c).click(function(){
            return z.call(p,a,this)
            })
        }
    })
})
};

$.each(['Show','Hide'],function(i,b){
    $.fn[b.toLowerCase()+'Overlay']=function(a){
        return this.each(function(){
            z.call(this,b,a)
            })
        }
    })
})(jQuery);
