
// Control subnavigation dropdown
var navAnimation = {


	// Setup 
	init: function() {
	
		// Attach mouse events
		$$('#main_nav > li').each(function(i) {
			var sn = i.select('div.sub_nav_container');
			if (sn.length == 1) {
			
				// Get sub nav container
				sn = sn[0];
			
				// Main nav item events
				Event.observe(i, 'mouseover', navAnimation.handleMouseover);
				Event.observe(i, 'mouseout', navAnimation.handleMouseout);
				
				// Sub navigation events
				Event.observe(sn, 'mouseover', navAnimation.handleMouseover);
				Event.observe(sn, 'mouseout', navAnimation.handleMouseout);
				
				sn.descendants().each(function(a) {
					
					Event.observe(a, 'mouseover', navAnimation.handleMouseover);
					Event.observe(a, 'mouseout', navAnimation.handleMouseout);
				
				});
				
			}		
		});
	
	},
	
	handleMouseout: function(event) {
	
		// Get sub nav
		var sn = event.findElement('li').select('div.sub_nav_container')[0];
		if (!sn) sn = Event.element(event).up('div.sub_nav_container');
		if (!sn) { /* console.log(Event.element(event));  */ return; }
		
		// Set mouse value
		sn._mouseOver = false;
		
		// Timeout
		clearTimeout(sn._hideTimeout);
		sn._hideTimeout = setTimeout(function() { navAnimation.hideSubMenu(sn); }, 150);
	
	},
	
	handleMouseover: function(event) {
	
		// Get sub nav
		var sn = event.findElement('li').select('div.sub_nav_container')[0];
		if (!sn) sn = Event.element(event).up('div.sub_nav_container');
		if (!sn) { /* console.log(Event.element(event));  */ return; }

		// Set mouse value		
		sn._mouseOver = true;
		
		// Show
		navAnimation.showSubMenu(sn);
		
	},
	
	// Show
	showSubMenu: function(sn) {
		
		// Set subnav size
		setSubnavSize();
	
		// Cancel any hiding timouts
		clearTimeout(sn._hideTimeout);

		// Show
		if (sn && !sn._isVisible && !sn.isAnimating) {
			sn.isAnimating = true;
			new Effect.Parallel([
	  			new Effect.SlideDown(sn, {
					afterFinish: function() { 
						sn._isVisible = true; 
						sn.isAnimating = false;
						if (sn._mouseOver == false) {
							setTimeout(function() { navAnimation.hideSubMenu(sn); }, 150)
						}
					}, sync: true
				}),
	  			new Effect.Opacity(sn, {from: 0, to: 1, sync: true}) 
	  		], {duration: 0.3, delay: 0});
		}
		
	},
	
	// Hide
	hideSubMenu: function(sn) {
		
		// Hide
		if (sn && sn._isVisible == true && !sn.isAnimating) {
			sn.isAnimating = true;
			new Effect.Parallel([
	  			new Effect.SlideUp(sn, {
					afterFinish: function() {
						sn._isVisible = false; 
						sn.isAnimating = false;
						if (sn._mouseOver == true) {
							setTimeout(function() { navAnimation.showSubMenu(sn); }, 150)
						}
					}, sync: true
				}),
	  			new Effect.Opacity(sn, {from: 1, to: 0, sync: true}) 
	  		], {duration: 0.3});
			
		}
		
	}

};

// Initialise
d3i.utility.onDOMLoad(navAnimation.init);

