(function( $ ){

    var methods = {
        open : function( options ) {

            var settings = {
                'opacity' : 70,
                'id' : 'popupBlock',
        onOpen : null,
        onClose : null
            };

            if ( options ) {
                $.extend( settings, options );
            }
      $('body').append($('#' + settings.id));
            //Fade in Background
            $('#' + settings.id).after('<div id="fade"></div>');
            $('#fade').css({
                'filter' : 'alpha(opacity=' + settings.opacity + ')'
                }).fadeIn();
            //Fade in the Popup
            $('#' + settings.id).fadeIn();

            $().interstitial('apply_position',{'id' : settings.id, onOpen : settings.onOpen, onClose : settings.onClose});
      if($.isFunction(settings.onOpen)) {
          settings.onOpen.call(this);
        }
            //On click of the fade, close the popup and fade
              $('#fade').live('click', function() {
                $().interstitial('close',{'id' : settings.id, onOpen : settings.onOpen, onClose : settings.onClose});
              });
              $(window).resize(function() {
                $().interstitial('apply_position',{'id' : settings.id, onOpen : settings.onOpen, onClose : settings.onClose});
              });
        },
        close : function( options ) {

            var settings = {
                'id' : 'popupBlock',
        onOpen : null,
        onClose : null
            };

            if ( options ) {
                $.extend( settings, options );
            }

            $('#fade , #' + settings.id).fadeOut(function() {
                $('#fade').remove();
            });
      if($.isFunction(settings.onClose)) {
          settings.onClose.call(this);
        }
        },
        apply_position : function( options ) {
          
          var settings = {
              'id' : 'popupBlock',
        onOpen : null,
        onClose : null
          };

          if ( options ) {
              $.extend( settings, options );
          }
          
          //Define margin for center alignment (vertical + horizontal)
          var popMargTop = (parseInt($(window).height())-(parseInt($('#' + settings.id).css('padding-top'))+parseInt($('#' + settings.id).css('padding-bottom'))+$('#' + settings.id).height())) / 2;
    popMargTop += $(window).scrollTop();
          var popMargLeft = (parseInt($(window).width())-(parseInt($('#' + settings.id).css('padding-left'))+parseInt($('#' + settings.id).css('padding-right'))+$('#' + settings.id).width())) / 2;
    popMargLeft += $(window).scrollLeft();

          //Apply Margin to Popup
          $('#' + settings.id).css({
              'top' : popMargTop,
              'left' : popMargLeft
          });  
        }
    };

    $.fn.interstitial = function( method ) {

        if ( methods[method] ) {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );
        } else {
            $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
        }

    };


})( jQuery );

