$.fn.curtainMenu = function(options) {
  var $self = this;

  $self.options = {
    transition:    "easeOutQuint",
    effectDuration: 3000,
	hideOnClick: true
  }

  // make sure to check if options are given!
  if(options) {
    $.extend($self.options, options);
  }

  return this.each(function() {
    var $menu = $(this);
	$menu.active = null;
    var $menuItems = $menu.find('li > a');

	//Bind click event to each menu item having "rel" attribute, sub-menu.
	$menuItems.each(function() {
		var $lnk = $(this);
		var submenuId = $lnk.attr("rel");
		if (/\w+/.test(submenuId)) {
			var $submenu = $("#" + submenuId);
			if ($submenu.length) {
				$lnk.data("menu", $submenu);
				$submenu
					.data("position", $.extend($submenu.position(), {"width": $submenu.width(), "height": $submenu.height()}))
					.data("link", $lnk);					
				$submenu.find("div.close a").click(function() { $menu.hideSubmenu($submenu); return false; });
				
				$lnk.click(function() {			
					$menu.showSubmenu($submenu);
					return false;
				});
			}		
		}
	});
	
	//Check if user clicks outside the menu, menu will be hidden
	if ($self.options.hideOnClick) {
		$(document).click(function(e) {
			if ($menu.active == null) return;
			var clickInside = false;
			$menu.active.find(":not(a)").each(function() {
				if (this == e.target) {
					clickInside = true;
					return;
				};
			});		
			if (clickInside) return;
			
			$menu.hideSubmenu($menu.active);
		});
	}
	
	$menu.showSubmenu = function($submenu) {
		//If click the alredy active link, just exit
		if ($menu.active == $submenu) return;
		
		//Hide menu before showing other
		if ($menu.active != null) {
			$menu.hideSubmenu($menu.active);
		}
		
		//Remember which active link
		$menu.active = $submenu;
		
		//Make link active
		$submenu.data("link").addClass("active");
		
		//Slide menu down
		var pos = $submenu.data("position");		
		$submenu.css({"opacity": 1, "display": "block", "visibility": "visible", "top": pos.height * -1})
			.stop()
			.animate({"top": 0}, $self.options.effectDuration, $self.options.transition);
	};
	
	$menu.hideSubmenu = function($submenu) {
		//Remove active link
		$menu.active = null;
		
		//Make link inactive
		$menuItems.removeClass("active");
		
		//Slide menu up
		var pos = $submenu.data("position");
		$submenu.stop()
			.animate({"top": pos.height * -1, "opacity": 0}, $self.options.effectDuration, $self.options.transition);
	};
  });
};
