﻿(function($){
    $.fn.Modal=function(options){
        var opts=$.extend({},$.fn.Modal.defaults,options);
        var objDiv;
        if(opts.ModalObject){
            if($('#div_fn_modal').length==0 && opts.Close == false){
                objDiv=document.createElement('div');
                objDiv.id='div_fn_modal';
                if(opts.CssName.length > 0){
                    objDiv.className = opts.CssName;
                    $('#div_fn_modal').css({zIndex:opts.zIndex});
                }else{
                    $('#div_fn_modal').css({backgroundColor:opts.Color,opacity:opts.Opacity,zIndex:opts.zIndex});
                }
                
                if(opts.CloseObject != null){
                    $('#'+opts.CloseObject.id).click(function(){
                        $('#div_fn_modal').remove();
                        $('#'+opts.ModalObject.id).hide().css({zIndex:'-1'});
                        window.onresize = null;
                        window.onscroll = null; 
                        if(typeof opts.OnClose == 'function'){
                            opts.OnClose();
                        }
                    });
                }
                
                document.body.appendChild(objDiv);
                AlignObject(opts.ModalObject,objDiv,opts.zIndex);
                
                if(typeof opts.OnOpen == 'function'){
                    opts.OnOpen();
                }
                
        }else{
                $('#div_fn_modal').remove();
                $('#'+opts.ModalObject.id).hide().css({zIndex:'-1'});
                window.onresize = null;
                window.onscroll = null;
                if(typeof opts.OnClose == 'function'){
                    opts.OnClose();
                }
            }
        }
    };
    
    $.fn.Modal.defaults={
        ModalObject:null,
        Color:'gray',
        Opacity:.5,
        zIndex:1,
        CssName:'',
        Close:false,
        CloseObject:null,
        OnClose:null,
        OnOpen:null
    };
    
    function AlignObject(obj,objDiv,intZIndex){
        var intX,intY,intZIndex;
        
        if($.browser.msie && $.browser.version.substring(0,1)=='6'){
            $('#'+obj.id).show();
            $('#'+objDiv.id).css({position:'absolute',height:document.documentElement.clientHeight+"px",width:document.documentElement.clientWidth+"px",top:document.documentElement.scrollTop+"px",left:document.documentElement.scrollLeft+"px"});
            
            intX=(objDiv.offsetWidth/2)-(obj.offsetWidth/2);
            intY=(objDiv.offsetHeight/2)-(obj.offsetHeight/2);
           
            $('#'+obj.id).css({
                position:'absolute',
                top:(intY + getScrollHeight())+ 'px',
                left:(intX + getScrollWidth()) + 'px',
                zIndex:(intZIndex+1)
            });
            
            window.onscroll=function(){
                AlignObject(obj, objDiv);
            }
        }else{
            $('#'+obj.id).show().css({visibility:'hidden'});
            $('#'+objDiv.id).css({width:'100%',height:'100%',position:'fixed',display:'inline',left:'0px',top:'0px'});
        
            intX=(objDiv.offsetWidth/2)-(obj.offsetWidth/2);
            intY=(objDiv.offsetHeight/2)-(obj.offsetHeight/2);
            
            $('#'+obj.id).css({position:'fixed',left:intX+'px',top:intY+'px',zIndex:(intZIndex+1),visibility:'visible'}).show('slow');
        }
    
        function getScrollWidth(){
            var width = window.pageXOffset ||
            document.body.scrollLeft || 
            document.documentElement.scrollLeft;
        
            return width;
        }
    
        function getScrollHeight(){
            var height = window.pageYOffset ||
            document.body.scrollTop ||
            document.documentElement.scrollTop;
        
            return height;
        } 
        
        window.onresize=function(){
            AlignObject(obj,objDiv);
        }
    };
})(jQuery);