/**
 * Menu.
 * @author Namics, NOSE
 * @requires jquery.hoverIntent.js
 * @version 1.0.0	initial version
 */
jQuery.fn.megaFlyout = function(op) {
	// defaults
	var defaults =  {
			selectorNavitems:".level2 ul:first > li",
			selectorSubnavigation:".level3",
			classOpen:"open",
			delayMouseOver:150,
			delayMouseOut:350,
			slideDownSpeed:120,
			slideUpSpeed:20
	};
	
	jQuery.extend(defaults, op);
	
	// animation
	var animation = {
		animated:false,
		shadow:''
	}
	
	// references
	var elNav = jQuery(this);
	
	// init
	jQuery(defaults.selectorSubnavigation, this).hide();
	
	// hover intent config
	var config = {    
     	sensitivity: 5, // number = sensitivity threshold (must be 1 or higher)    
     	interval: defaults.delayMouseOver, // number = milliseconds for onMouseOver polling interval    
     	over: openNav, // function = onMouseOver callback (REQUIRED)    
     	timeout: defaults.delayMouseOut, // number = milliseconds delay before onMouseOut    
     	out: closeNav // function = onMouseOut callback (REQUIRED)    
	};
	
	jQuery(defaults.selectorNavitems,this).each(function(ind,el){
		jQuery(el).hoverIntent(config);
	});

	
	/*
	* Opens the navigation.
	*/
	function openNav(){
		var $snav = jQuery(this);
		var $sub = getSub($snav);
	
		if($sub.css('display') !== 'block'){
			// animation
			stopAnimation();
			// reset class
			jQuery("li",elNav).removeClass(defaults.classOpen); 
			jQuery($snav).addClass(defaults.classOpen); 
			
			// animate
			animation.animated = $sub; 
			$sub.slideDown(defaults.slideDownSpeed, function() {
				animation.animated = false;
				jQuery($sub).removeAttr("filter");
			});
		}
	}
		
	/*
	* Closes the navigation.
	*/
	function closeNav(){
		var $snav = jQuery(this);
		var $sub = getSub($snav);
		
		animation.shadow = jQuery("canvas:first", $snav);
		animation.animated = $sub;
		
		// animation
		stopAnimation();
		
		$sub.slideUp(defaults.slideUpSpeed, function(){
			animation.animated = false;
			jQuery($snav).removeClass(defaults.classOpen); 
		});
    }
		
	/*
	* Stops the animation.
	*/
	function stopAnimation(){
		if(typeof(animation.animated)  === 'object'){
			animation.animated.stop(true,true).hide();
		}
     }
	 
	/*
	* Gets the sub nav.
	*/
	function getSub(el){
      return el.find(defaults.selectorSubnavigation);
    }
  
    // return
    return this;
};

