/*
 * SimpleModal 1.2.2 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * Copyright (c) 2008 Eric Martin
 * Dual licensed under the MIT and GPL licenses
 * Revision: $Id: jquery.simplemodal.js 181 2008-12-16 16:51:44Z emartin24 $
 */
(function($){
    var ie6=$.browser.msie&&parseInt($.browser.version)==6&&!window['XMLHttpRequest'],ieQuirks=$.browser.msie&&!$.boxModel,w=[];$.modal=function(data,options){
        return $.modal.impl.init(data,options);
    };$.modal.close=function(){
        $.modal.impl.close();
    };$.fn.modal=function(options){
        return $.modal.impl.init(this,options);
    };$.modal.defaults={
        opacity:50,
        overlayId:'simplemodal-overlay',
        overlayCss:{},
        containerId:'simplemodal-container',
        containerCss:{},
        dataCss:{},
        zIndex:200010,
        close:true,
        closeHTML:'<a class="modalCloseImg" title="Close"></a>',
        closeClass:'simplemodal-close',
        position:null,
        persist:false,
        onOpen:null,
        onShow:null,
        onClose:null
    };$.modal.impl={
        opts:null,
        dialog:{},
        init:function(data,options){
            if(this.dialog.data){
                return false;
            }this.opts=$.extend({},$.modal.defaults,options);this.zIndex=this.opts.zIndex;this.occb=false;if(typeof data=='object'){
                data=data instanceof jQuery?data:$(data);if(data.parent().parent().size()>0){
                    this.dialog.parentNode=data.parent();if(!this.opts.persist){
                        this.dialog.orig=data.clone(true);
                    }
                    }
                }else if(typeof data=='string'||typeof data=='number'){
                data=$('<div/>').html(data);
            }else{
                alert('SimpleModal Error: Unsupported data type: '+typeof data);return false;
            }this.dialog.data=data.addClass('simplemodal-data').css(this.opts.dataCss);data=null;this.create();this.open();if($.isFunction(this.opts.onShow)){
                this.opts.onShow.apply(this,[this.dialog]);
            }return this;
        },
        create:function(){
            w=this.getDimensions();if(ie6){
                this.dialog.iframe=$('<iframe src="javascript:false;"/>').css($.extend(this.opts.iframeCss,{
                    display:'none',
                    opacity:0,
                    position:'fixed',
                    height:w[0],
                    width:w[1],
                    zIndex:this.opts.zIndex,
                    top:0,
                    left:0
                })).appendTo('body');
            }this.dialog.overlay=$('<div/>').attr('id',this.opts.overlayId).addClass('simplemodal-overlay').css($.extend(this.opts.overlayCss,{
                display:'none',
                opacity:this.opts.opacity/100,
                height:w[0],
                width:w[1],
                position:'fixed',
                left:0,
                top:0,
                zIndex:this.opts.zIndex+1
                })).appendTo('body');this.dialog.container=$('<div/>').attr('id',this.opts.containerId).addClass('simplemodal-container').css($.extend(this.opts.containerCss,{
                display:'none',
                position:'fixed',
                zIndex:this.opts.zIndex+2
                })).append(this.opts.close?$(this.opts.closeHTML).addClass(this.opts.closeClass):'').appendTo('body');this.setPosition();if(ie6||ieQuirks){
                this.fixIE();
            }this.dialog.container.append(this.dialog.data.hide());
        },
        bindEvents:function(){
            var self=this;$('.'+this.opts.closeClass).bind('click.simplemodal',function(e){
                e.preventDefault();self.close();
            });$(window).bind('resize.simplemodal',function(){
                w=self.getDimensions();self.setPosition();if(ie6||ieQuirks){
                    self.fixIE();
                }else{
                    self.dialog.iframe&&self.dialog.iframe.css({
                        height:w[0],
                        width:w[1]
                        });self.dialog.overlay.css({
                        height:w[0],
                        width:w[1]
                        });
                }
                });
        },
        unbindEvents:function(){
            $('.'+this.opts.closeClass).unbind('click.simplemodal');$(window).unbind('resize.simplemodal');
        },
        fixIE:function(){
            var p=this.opts.position;$.each([this.dialog.iframe||null,this.dialog.overlay,this.dialog.container],function(i,el){
                if(el){
                    var bch='document.body.clientHeight',bcw='document.body.clientWidth',bsh='document.body.scrollHeight',bsl='document.body.scrollLeft',bst='document.body.scrollTop',bsw='document.body.scrollWidth',ch='document.documentElement.clientHeight',cw='document.documentElement.clientWidth',sl='document.documentElement.scrollLeft',st='document.documentElement.scrollTop',s=el[0].style;s.position='absolute';if(i<2){
                        s.removeExpression('height');s.removeExpression('width');s.setExpression('height',''+bsh+' > '+bch+' ? '+bsh+' : '+bch+' + "px"');s.setExpression('width',''+bsw+' > '+bcw+' ? '+bsw+' : '+bcw+' + "px"');
                    }else{
                        var te,le;if(p&&p.constructor==Array){
                            if(p[0]){
                                var top=typeof p[0]=='number'?p[0].toString():p[0].replace(/px/,'');te=top.indexOf('%')==-1?top+' + (t = '+st+' ? '+st+' : '+bst+') + "px"':parseInt(top.replace(/%/,''))+' * (('+ch+' || '+bch+') / 100) + (t = '+st+' ? '+st+' : '+bst+') + "px"';
                            }if(p[1]){
                                var left=typeof p[1]=='number'?p[1].toString():p[1].replace(/px/,'');le=left.indexOf('%')==-1?left+' + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"':parseInt(left.replace(/%/,''))+' * (('+cw+' || '+bcw+') / 100) + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"';
                            }
                            }else{
                            te='('+ch+' || '+bch+') / 2 - (this.offsetHeight / 2) + (t = '+st+' ? '+st+' : '+bst+') + "px"';le='('+cw+' || '+bcw+') / 2 - (this.offsetWidth / 2) + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"';
                        }s.removeExpression('top');s.removeExpression('left');s.setExpression('top',te);s.setExpression('left',le);
                    }
                    }
                });
        },
        getDimensions:function(){
            var el=$(window);var h=$.browser.opera&&$.browser.version>'9.5'&&$.fn.jquery<='1.2.6'?document.documentElement['clientHeight']:el.height();return[h,el.width()];
        },
        setPosition:function(){
            var top,left,hCenter=(w[0]/2)-((this.dialog.container.height()||this.dialog.data.height())/2),vCenter=(w[1]/2)-((this.dialog.container.width()||this.dialog.data.width())/2);if(this.opts.position&&this.opts.position.constructor==Array){
                top=this.opts.position[0]||hCenter;left=this.opts.position[1]||vCenter;
            }else{
                top=hCenter;left=vCenter;
            }this.dialog.container.css({
                left:left,
                top:top
            });
        },
        open:function(){
            this.dialog.iframe&&this.dialog.iframe.show();if($.isFunction(this.opts.onOpen)){
                this.opts.onOpen.apply(this,[this.dialog]);
            }else{
                this.dialog.overlay.show();this.dialog.container.show();this.dialog.data.show();
            }this.bindEvents();
        },
        close:function(){
            if(!this.dialog.data){
                return false;
            }if($.isFunction(this.opts.onClose)&&!this.occb){
                this.occb=true;this.opts.onClose.apply(this,[this.dialog]);
            }else{
                if(this.dialog.parentNode){
                    if(this.opts.persist){
                        this.dialog.data.hide().appendTo(this.dialog.parentNode);
                    }else{
                        this.dialog.data.remove();this.dialog.orig.appendTo(this.dialog.parentNode);
                    }
                    }else{
                    this.dialog.data.remove();
                }this.dialog.container.remove();this.dialog.overlay.remove();this.dialog.iframe&&this.dialog.iframe.remove();this.dialog={};
            }this.unbindEvents();
        }
        };
})(jQuery);
