/**
 *	Sous navigation par layer
 */
var effectSubMenuDuration 		= 0.5;
var timeOutSubMenuShow 			= 500;
var timeDelaySubMenuShow		= 1;
var taskHideMenu 				= null;
var taskDelayShowMenu			= null;
var currentActiveSubMenuItem 	= null;
var taskMenuShowProcessing		= false;
var taskMenuHideProcessing		= false;
var isMouseOver					= false;

/**
	initialisation de la sous nav
*/
function initSubMenuItems(){
	
	/* On cache les éléments par défaut */
	initStateAllSubMenu();
	
	/**
		Ajout des événement pour cacher/afficher les menus sur les boutons 
	*/
	var submenuBtn = Ext.select('.btn_submenu_items');
	
	submenuBtn.on('mouseenter', function(e, t) {
		
		isMouseOver = true;
		
		var subMenu = Ext.get(this.id.substring(4));
		clearTimerSubMenu();
		if( ( 	currentActiveSubMenuItem != 'submenu_contact' || ( currentActiveSubMenuItem == 'submenu_contact' && taskMenuHideProcessing) ) 
				&& ( subMenu.id != currentActiveSubMenuItem || currentActiveSubMenuItem ) ){
			showSubMenu( subMenu , true);
		}else if(subMenu.id == currentActiveSubMenuItem){
			clearTimerSubMenu();
		}		
	});
	
	submenuBtn.on('mouseleave', function(e, t) {
		
		isMouseOver = false;
		
		var subMenu = Ext.get(this.id.substring(4));
		
		if(currentActiveSubMenuItem != 'submenu_contact'){			
			
			taskHideMenu = new Ext.util.DelayedTask(function(){
				hideSubMenu(subMenu);
			});		
			taskHideMenu.delay(timeOutSubMenuShow);
		}
		
	});
	
	/**
		Ajout des événement sur les layers pour cacher / annuler le timer
	*/
	var submenuContainer = Ext.select('.layer_sub_menu_container');
	submenuContainer.on('mouseenter', function(e, t) {	
		clearTimerSubMenu();		
	});
	
	submenuContainer.on('mouseleave', function(e, t) {
		if(currentActiveSubMenuItem != 'submenu_contact'){
			var subMenu = Ext.get( this.id.substring( 0, this.id.indexOf('_container') ) );		
			taskHideMenu = new Ext.util.DelayedTask(function(){	
				/* lancement de l'animation */
				hideSubMenu(subMenu);
			});		
			taskHideMenu.delay(timeOutSubMenuShow);	
		}
	});
	
	/**
		Bouton close du formulaire de contact 
	*/
	Ext.fly('btn_close_form_contact').on('click',function(){
		var subMenu = Ext.get('submenu_contact');		
		hideSubMenu(subMenu);
		Ext.fly('container_form_contact_error').setStyle('display', 'none');
	});
	
}

/**
 * Cache la tabulation en parramètre
 */
function hideSubMenu(subMenu){
	
	if(!taskMenuHideProcessing){
		if(subMenu.getHeight()>0){				
			taskMenuHideProcessing = true;
			stopAllSubMenuFx();
			subMenu.animate({
					height: {to: 0},
					opacity: {to: 0}
				}, 
				effectSubMenuDuration,
				function(){
					taskMenuHideProcessing = false;
					currentActiveSubMenuItem = null;
				}
			);
		}else{
			currentActiveSubMenuItem = null;
			taskMenuHideProcessing = false;
		}
	}
}

/**
 * Fonction qui  affiche un sous menu
 */
function showSubMenu(subMenuItem, callFromButton){
	
	if(isMouseOver || !callFromButton){
	
		if(!taskMenuShowProcessing){
			
			/* Flag permettant une unique animation */
			taskMenuShowProcessing = true;
			
			if(currentActiveSubMenuItem){
				
				var subMenuToHide = Ext.get(currentActiveSubMenuItem);			
				
				/* lancement de l'animation */
				stopAllSubMenuFx();
				subMenuToHide.animate(
					{
						height: {to: 0},
						opacity: {to: 0}
					}, 
					effectSubMenuDuration, 
					function(){
						var layerContent = Ext.get(subMenuItem.id + '_container');
	
						subMenuItem.stopFx().animate(
							{
								height: {to: layerContent.getHeight()},
								opacity: {to: 1}
							}, 
							effectSubMenuDuration,
							function(){
								currentActiveSubMenuItem 	= subMenuItem.id;
								taskMenuShowProcessing 			= false;
							}
						);
						
					}
				);
				
			}else{
				var layerContent = Ext.get(subMenuItem.id + '_container');
				stopAllSubMenuFx();
				subMenuItem.animate(
					{
						height: {to: layerContent.getHeight()},
						opacity: {to: 1}
					}, 
					effectSubMenuDuration,
					function(){
						currentActiveSubMenuItem 	= subMenuItem.id;
						taskMenuShowProcessing 		= false;
					}
				);
			
			}
		
		}else{
			
			if(currentActiveSubMenuItem){
			
				if(taskDelayShowMenu){
					taskDelayShowMenu.cancel();
				}
				taskDelayShowMenu = new Ext.util.DelayedTask(function(){
					showSubMenu(subMenuItem, true);
				});
				taskDelayShowMenu.delay(timeDelaySubMenuShow);
			}
		}
	}
};

/**
	Annule le timer de fermeture du sous menu affiché
*/
function clearTimerSubMenu(){
	if(taskHideMenu){		
		taskHideMenu.cancel();
	}
}

function stopCurrentSubMenuFx(){
	if(Ext.get(currentActiveSubMenuItem)){
		Ext.get(currentActiveSubMenuItem).stopFx();
	}
}

function stopAllSubMenuFx(){
	
	var submenuContainer = Ext.select('.layer_sub_menu_container');
	for(var i=0;i<submenuContainer.elements.length;i++){
		Ext.fly(submenuContainer.elements[i].id).stopFx();
	}
}


/**
	Initialise tout les sous menus
*/
function initStateAllSubMenu (subMenu) {
	var submenuLayers = Ext.select('.layer_sub_menu_item');
	submenuLayers.setStyle('height', '0');
	submenuLayers.setStyle('opacity', '0');
}

