(function( $ ){

  var methods = {
    init : function( options ) {
      var settings={
        openClass: 'popup-open', 
        buttonSelector: '.headline', 
        menuItemsSelector: 'ul', 
        zIndex: 100, 
        buttonHoverClass: 'hover',
        topCorrection: 0,
        leftCorrection: 0};
      
      $.extend(settings,options);
      var parent=this;
      var button=$(settings.buttonSelector,this);
      var menu=$(settings.menuItemsSelector,this);
      var offset=$(this).offset();
      var outside=true;
      offset.left+=settings.leftCorrection;
      offset.top+=settings.topCorrection;

      menu.hide();
      
      function hide()
      {
	    $(parent).removeClass(settings.openClass);
        $(parent).css('position','static');
        menu.hide();
      }
      
      button.click(function(){
        if($(parent).hasClass(settings.openClass))
        {
          hide();
        }
        else
        {
          menu.show();

          if($.browser.msie==true && $.browser.version==7)
          {
            offset=$(this).offset();
            offset.left+=settings.leftCorrection;
            offset.top+=settings.topCorrection;
          }

          $(parent).addClass(settings.openClass);
          $(parent).css('position','absolute');
          $(parent).css('left',offset.left);
          $(parent).css('top',offset.top);
          $(parent).css('z-index',settings.zIndex);
        }
      });
      
      $(parent).mouseenter(function(){
    	outside=false;
      });
      
      $(parent).mouseleave(function(){
      	outside=true;
      });
      
      $('html').click(function(){
    	if($(parent).hasClass(settings.openClass)&&outside==true)
    	{
    	  hide();
    	}
      });
      
      button.hover(function(){
        $(this).addClass(settings.buttonHoverClass);
      },
      function(){
        $(this).removeClass(settings.buttonHoverClass);
      });
    }
  };

  $.fn.popupMenu = 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.popupMenu' );
    }    
  
  };

})( jQuery );

