

(function(jQuery){  
    jQuery.fn.overlayPopUp = function( options ) {
        var settings = jQuery.extend({}, jQuery.fn.overlayPopUp.defaults, options); 
        this.each(function(){
            jQuery(this).click(function() {
                var loadPage = jQuery(this).attr("href");    
                if( !( jQuery.fn.overlayPopUp.isOpen() ) ) {
                    jQuery(document).keydown( handleEscape );
                    var dim = jQuery.fn.overlayPopUp.getWindowDimension();
                    jQuery(" <div />" )
                        .attr( "id", 'fmOverlayBackground' )
                        .css( {
                            "backgroundColor": settings.overlayBg,
                            "opacity": settings.opacity,
                            "position": 'fixed',
                            "zIndex": '1000',
                            "width": '100%',
                            "height": '100%',
                            "display": 'none',
                            "top": '0px',
                            "left": '0px' })
                        .appendTo("body");
                    var centerPos = jQuery.fn.overlayPopUp.getCenterTopLeft( 1, 1 );
                    jQuery(" <div />" )
                        .attr( "id", 'fmOverlayWrapper' )
                        .css({
                            "width": '1px',
                            "height": '1px',
                            "top": centerPos.top,
                            "left": centerPos.left,
                            "position": "fixed",
                            "zIndex": '1100',
                            "backgroundColor": settings.backgroundColor,
                            "display": 'none',
                            "overflow": "hidden",
                            "borderColor": settings.borderColor,
                            "border-radius": settings.borderRadio + 'px',
                            "-moz-border-radius": settings.borderRadio + 'px',
                            "-webkit-border-radius": settings.borderRadio + 'px',                            
                            "textAlign": "center"
                        })
                        .appendTo('body');

                    jQuery(" <div />" )
                        .attr( "id", 'fmOverlayCloseButton' )
                        .css({
                            "width": '55px',
                            "height": '19px',
                            "position": "absolute",
                            "zIndex": '1300',
                            "top": '13px',
                            "right": '13px',
                            "overflow": "hidden"
                        })
                        .html( '<a href="javascript:;" class="opClose"><img src="' + settings.closeImg + '" alt="Close" border="0" /></a>' )
                        .appendTo('#fmOverlayWrapper');
                    
                    

                    jQuery(" <div />" )
                        .css({
                            "position": "absolute",
                            "zIndex": '1200'
                        })                    
                        .attr( "id", 'fmOverlayContent' )
                        .appendTo('#fmOverlayWrapper');

                    
                    jQuery('#fmOverlayBackground').fadeIn('slow', function() {
                        jQuery('#fmOverlayWrapper').fadeIn('slow', function() {
                            jQuery.get( loadPage, function(data){
                                var centerPos = jQuery.fn.overlayPopUp.getCenterTopLeft( settings.width, settings.height );
                                jQuery('#fmOverlayWrapper').animate({
                                    "width": settings.width + 'px',     
                                    "height": settings.height + 'px',
                                    "top": centerPos.top,
                                    "left": centerPos.left,
                                    "padding": settings.padding + 'px'
                                }, 200, function() {
                                    jQuery('#fmOverlayContent').html(data);
                                    if( settings.callback ){
                                        settings.callback();    
                                    }
                                    jQuery(settings.closeButton).click(function(){
                                        jQuery.fn.overlayPopUp.close();    
                                    });
                                });
                            });
                        });    
                    });
                }
            return false;
            });
        });
    };
    
    jQuery.fn.overlayPopUp.close = function() { 
        var centerPos = jQuery.fn.overlayPopUp.getCenterTopLeft( 1, 1 );
        jQuery('#fmOverlayWrapper').animate({
            "width": '1px',     
            "height": '1px',
            "top": centerPos.top,
            "left": centerPos.left,
            "padding": '0px'
        }, 200, function() {
            jQuery('#fmOverlayBackground').fadeOut('fast', function(){
                jQuery('#fmOverlayBackground').remove();
                jQuery('#fmOverlayWrapper').remove();
            });
        });       
    };
    
    jQuery.fn.overlayPopUp.isOpen = function(){
        return $('#fmOverlayBackground').length;
    };
    
    jQuery.fn.overlayPopUp.getWindowDimension = function() {
        return {"width": jQuery(window).width(), "height": jQuery(window).height() }
    };
    
    jQuery.fn.overlayPopUp.getCenterTopLeft = function( popupWidth, popupHeight ){
        return {"top": (jQuery(window).height() / 2 ) - (popupHeight / 2) - 100, "left": (jQuery(window).width() / 2) - (popupWidth / 2) }
    }; 
    
    function handleEscape(e) {
        if (e.keyCode == 27) {
            jQuery.fn.overlayPopUp.close();
        }
    }
        
    jQuery.fn.overlayPopUp.defaults = {
        overlayBg: '#FFF',
        opacity: 0.5,
        width: '584',
        height: '213',
        padding: '10',
        backgroundColor: "#FFF",
        borderColor: "#FFF",
        borderRadio: '10',
        closeImg: 'images/login/close.png',
        closeButton: '.opClose',
        callback: null
    };
    
})(jQuery);