﻿(function ($) {
    $.fn.menu = function (options) {
		var defaults = {
			direction: "ltr",
			            type: "vr",
			            effect: "slide",
			            speed: 500
		}
		;
		var options = $.extend(defaults, options);
		return this.each(function () {
			var events = new Object();
			var parent = this;
			$(this).find("li").filter(":has(ul)").addClass("arrow");
			$(this).find("li:first-child").addClass("first");
			$(this).find("li:last-child").addClass("last");
			$(this).addClass("menu-" + options.type.substring(0,1));
			$(this).addClass("menu-" + options.direction);
			$(this).find("li").hoverIntent( {
				sensitivity: 1, 
				                interval: 100,  
				                over: function() {
					
					var _this = $(this);
					if (options.type == "vr") {
						var offset = $(_this).parent().offset();
						offset.width = _this[0].offsetWidth;
						offset.height = _this[0].offsetHeight;
						var submenu = $(_this).children("ul");
						switch (options.effect) {
							case "slide":
							                            $(submenu).animate( {
								width: "show",
								                                height: "show"
							}
							, options.speed, function () {
								submenu.addClass("active");
							}
							);
							break;
							case "fade":
							                            $(submenu).fadeIn(options.speed);
						}
						if ($(parent).hasClass("menu-rtl")) {
							submenu.css("margin-right", offset.width);
						} else {
							submenu.css("margin-left", offset.width);
						}
					} else {
						$(_this).find("ul").css("display","none");
						var offset = $(_this).parent().offset();
						offset.width = $(_this)[0].offsetWidth;
						offset.height = $(_this)[0].offsetHeight;
						var submenu = $(_this).children("ul");
						switch (options.effect) {
							case "slide":
							                            $(submenu).delay(150).animate( {
								width: "show",
								                                height: "show"
							}
							, options.speed, function () {
								submenu.addClass("active");
							}
							);
							break;
							case "fade":
							                            $(submenu).delay(100).fadeIn(options.speed);
						}
						if (!$(_this).parent().hasClass("menu-h")) {
							// For First Drop Down Menu Dont Have Margin 
							if (options.direction == "rtl") {
								submenu.css("right", offset.width);
							} else {
								submenu.css("left", offset.width);
							}
						}
					}
				}
				,    
				                timeout: 500,  
				                out: function() {

					var _this = $(this);
					var submenu = $(_this).find("ul");
					var hide = function (index) {
						if (index >= 0) {
							switch (options.effect) {
								case "slide":
								                                    $(submenu).eq(index).animate( {
									width: "hide",
									                                        height: "hide"
								}
								, options.speed, function () {
									hide(index - 1);
								}
								);
								break;
								case "fade":
								                                    $(submenu).eq(index).fadeOut(options.speed, function () {
									hide(index - 1);
								}
								);
								break;
							}
							$(submenu).eq(index).removeClass("active");
						}
					}
					;
					hide(submenu.length - 1);
				}
			}
			);
		}
		);
	}
	;
}
)(jQuery);
