/*
 * SimpleModal 1.3 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * Copyright (c) 2009 Eric Martin
 * Dual licensed under the MIT and GPL licenses
 * Revision: $Id: jquery.simplemodal.js 205 2009-06-12 13:29:21Z emartin24 $
 */
;(function($){
    var ie6=$.browser.msie&&parseInt($.browser.version)==6&&typeof window['XMLHttpRequest']!="object",ieQuirks=null,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={
        appendTo:'body',
        focus:true,
        opacity:50, /*50*/
        overlayId:'simplemodal-overlay',
        overlayCss:{},
        containerId:'simplemodal-container',
        containerCss:{},
        dataId:'simplemodal-data',
        dataCss:{},
        minHeight:200,
        minWidth:300,
        maxHeight:null,
        maxWidth:null,
        autoResize:false,
        zIndex:1000,
        close:true,
        closeHTML:'<a class="modalCloseImg" title="Close"></a>',
        closeClass:'simplemodal-close',
        escClose:true,
        overlayClose:false,
        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;
            }ieQuirks=$.browser.msie&&!$.boxModel;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.create(data);data=null;this.open();if($.isFunction(this.opts.onShow)){
                this.opts.onShow.apply(this,[this.dialog]);
            }return this;
        },
        create:function(data){
            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(this.opts.appendTo);
            }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(this.opts.appendTo);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?$(this.opts.closeHTML).addClass(this.opts.closeClass):'').appendTo(this.opts.appendTo);this.dialog.wrap=$('<div/>').attr('tabIndex',-1).addClass('simplemodal-wrap').css({
                height:'100%',
                outline:0,
                width:'100%'
            }).appendTo(this.dialog.container);this.dialog.data=data.attr('id',data.attr('id')||this.opts.dataId).addClass('simplemodal-data').css($.extend(this.opts.dataCss,{
                display:'none'
            }));data=null;this.setContainerDimensions();this.dialog.data.appendTo(this.dialog.wrap);if(ie6||ieQuirks){
                this.fixIE();
            }
            },
        bindEvents:function(){
            var self=this;$('.'+self.opts.closeClass).bind('click.simplemodal',function(e){
                e.preventDefault();self.close();
            });if(self.opts.close&&self.opts.overlayClose){
                self.dialog.overlay.bind('click.simplemodal',function(e){
                    e.preventDefault();
                    self.close();
                });
            }$(document).bind('keydown.simplemodal',function(e){
                if(self.opts.focus&&e.keyCode==9){
                    self.watchTab(e);
                }else if((self.opts.close&&self.opts.escClose)&&e.keyCode==27){
                    e.preventDefault();self.close();
                }
                });$(window).bind('resize.simplemodal',function(){
                w=self.getDimensions();self.opts.autoResize?self.setContainerDimensions():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');$(document).unbind('keydown.simplemodal');$(window).unbind('resize.simplemodal');this.dialog.overlay.unbind('click.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){
                            var top=p[0]?typeof p[0]=='number'?p[0].toString():p[0].replace(/px/,''):el.css('top').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);
                    }
                    }
                });
        },
        focus:function(pos){
            var self=this,p=pos||'first';var input=$(':input:enabled:visible:'+p,self.dialog.wrap);input.length>0?input.focus():self.dialog.wrap.focus();
        },
        getDimensions:function(){
            var el=$(window);var h=$.browser.opera&&$.browser.version>'9.5'&&$.fn.jquery<='1.2.6'?document.documentElement['clientHeight']:$.browser.opera&&$.browser.version<'9.5'&&$.fn.jquery>'1.2.6'?window.innerHeight:el.height();return[h,el.width()];
        },
        getVal:function(v){
            return v=='auto'?0:parseInt(v.replace(/px/,''));
        },
        setContainerDimensions:function(){
            var ch=this.getVal(this.dialog.container.css('height')),cw=this.dialog.container.width(),dh=this.dialog.data.height(),dw=this.dialog.data.width();var mh=this.opts.maxHeight&&this.opts.maxHeight<w[0]?this.opts.maxHeight:w[0],mw=this.opts.maxWidth&&this.opts.maxWidth<w[1]?this.opts.maxWidth:w[1];if(!ch){
                if(!dh){
                    ch=this.opts.minHeight;
                }else{
                    if(dh>mh){
                        ch=mh;
                    }else if(dh<this.opts.minHeight){
                        ch=this.opts.minHeight;
                    }else{
                        ch=dh;
                    }
                    }
                }else{
                ch=ch>mh?mh:ch;
            }if(!cw){
                if(!dw){
                    cw=this.opts.minWidth;
                }else{
                    if(dw>mw){
                        cw=mw;
                    }else if(dw<this.opts.minWidth){
                        cw=this.opts.minWidth;
                    }else{
                        cw=dw;
                    }
                    }
                }else{
                cw=cw>mw?mw:cw;
            }this.dialog.container.css({
                height:ch,
                width:cw
            });if(dh>ch||dw>cw){
                this.dialog.wrap.css({
                    overflow:'auto'
                });
            }this.setPosition();
        },
        setPosition:function(){
            var top,left,hc=(w[0]/2)-((this.dialog.container.height()||this.dialog.data.height())/2),vc=(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]||hc;left=this.opts.position[1]||vc;
            }else{
                top=hc;left=vc;
            }this.dialog.container.css({
                left:left,
                top:top
            });
        },
        watchTab:function(e){
            var self=this;if($(e.target).parents('.simplemodal-container').length>0){
                self.inputs=$(':input:enabled:visible:first, :input:enabled:visible:last',self.dialog.data);if(!e.shiftKey&&e.target==self.inputs[self.inputs.length-1]||e.shiftKey&&e.target==self.inputs[0]||self.inputs.length==0){
                    e.preventDefault();var pos=e.shiftKey?'last':'first';setTimeout(function(){
                        self.focus(pos);
                    },10);
                }
                }else{
                e.preventDefault();setTimeout(function(){
                    self.focus();
                },10);
            }
            },
        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.focus();this.bindEvents();
        },
        close:function(){
            if(!this.dialog.data){
                return false;
            }this.unbindEvents();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.hide().remove();this.dialog.orig.appendTo(this.dialog.parentNode);
                    }
                    }else{
                    this.dialog.data.hide().remove();
                }this.dialog.container.hide().remove();this.dialog.overlay.hide().remove();this.dialog.iframe&&this.dialog.iframe.hide().remove();this.dialog={};
            }
            }
        };
})(jQuery);
