XylotrechusZ
/**
* -------------------------------------------------------------------------------------------
* Avia Menu and Mega Menu
* -------------------------------------------------------------------------------------------
*
* this file is only called if a main menu with submenu items is available
*/
(function($)
{
"use strict";
$( function()
{
//activates the mega menu javascript.
if( $.fn.aviaMegamenu )
{
$( ".main_menu .menu" ).aviaMegamenu( { modify_position: true } );
}
});
$.fn.aviaMegamenu = function( variables )
{
var defaults =
{
modify_position: true,
delay: 300
};
var options = $.extend( defaults, variables );
return this.each( function()
{
var the_html = $('html').first(),
main = $('#main .container').first(),
left_menu = the_html.filter('.html_menu_left, .html_logo_center').length,
isMobile = $.avia_utilities.isMobile,
menu = $(this),
menuItems = menu.find(">li:not(.ignore_menu)"),
megaItems = menuItems.find(">div").parent().css({overflow:'hidden'}),
menuActive = menu.find('>.current-menu-item>a, >.current_page_item>a'),
dropdownItems = menuItems.find(">ul").parent(),
parentContainer = menu.parent(),
mainMenuParent = menu.parents('.main_menu').eq(0),
parentContainerWidth = parentContainer.width(),
delayCheck = {},
mega_open = [];
if( ! menuActive.length )
{
menu.find('.current-menu-ancestor, .current_page_ancestor').eq( 0 ).find( 'a').eq( 0 ).parent().addClass('active-parent-item');
}
if( ! the_html.is('.html_header_top') )
{
options.modify_position = false;
}
menuItems.on( 'click' ,'a', function(e)
{
if( this.href == window.location.href + "#" || this.href == window.location.href + "/#" )
{
e.preventDefault();
}
});
menuItems.each( function()
{
var item = $(this),
pos = item.position(),
megaDiv = item.find("div").first().css({opacity:0, display:"none"}),
normalDropdown = "";
//check if we got a mega menu
if( ! megaDiv.length )
{
normalDropdown = item.find(">ul").css({display:"none"});
}
//if we got a mega menu or dropdown menu add the arrow beside the menu item
if( megaDiv.length || normalDropdown.length )
{
var link = item.addClass('dropdown_ul_available').find('>a');
link.append('<span class="dropdown_available"></span>');
//is a mega menu main item doesnt have a link to click use the default cursor
if( typeof link.attr('href') != 'string' || link.attr('href') == "#")
{
link.css('cursor', 'default').on( 'click', function(e)
{
e.preventDefault();
});
}
}
//correct position of mega menus
if( options.modify_position && megaDiv.length )
{
item.on('mouseenter focusin', function()
{
calc_offset( item, pos, megaDiv, parentContainerWidth );
});
}
});
function calc_offset( item, pos, megaDiv, parentContainerWidth )
{
pos = item.position();
if( ! left_menu )
{
if( pos.left + megaDiv.width() < parentContainerWidth )
{
megaDiv.css({right: -megaDiv.outerWidth() + item.outerWidth() });
//item.css({position:'static'});
}
else if( pos.left + megaDiv.width() > parentContainerWidth )
{
megaDiv.css({right: -mainMenuParent.outerWidth() + (pos.left + item.outerWidth() ) });
}
}
else
{
if(megaDiv.width() > pos.left + item.outerWidth())
{
megaDiv.css({left: (pos.left* -1)});
}
else if(pos.left + megaDiv.width() > parentContainerWidth)
{
megaDiv.css({left: (megaDiv.width() - pos.left) * -1 });
}
}
}
function megaDivShow(i)
{
if(delayCheck[i] == true)
{
var item = megaItems.eq( i ).css({overflow:'visible'}).find("div").first(),
link = megaItems.eq( i ).find("a").first();
mega_open["check"+i] = true;
item.stop().css('display','block').animate({opacity:1},300);
if( item.length )
{
link.addClass('open-mega-a');
}
}
}
function megaDivHide(i)
{
if(delayCheck[i] == false)
{
megaItems.eq( i ).find(">a").removeClass('open-mega-a');
var listItem = megaItems.eq( i ),
item = listItem.find("div").first();
item.stop().css('display','block').animate({opacity:0},300, function()
{
$(this).css('display','none');
listItem.css({overflow:'hidden'});
mega_open["check"+i] = false;
});
}
}
if( isMobile )
{
megaItems.each( function(i)
{
$(this).on('click', function()
{
if( mega_open["check"+i] != true )
{
return false;
}
});
});
}
//bind event for mega menu
megaItems.each( function(i)
{
$(this).on( 'mouseenter', function()
{
delayCheck[i] = true;
setTimeout( function(){megaDivShow(i); }, options.delay );
}).on( 'mouseleave', function()
{
delayCheck[i] = false;
setTimeout( function(){megaDivHide(i); }, options.delay );
});
$(this).find("a").on( 'focus', function()
{
delayCheck[i] = true;
setTimeout( function(){ megaDivShow(i); }, 50 );
}).on( 'blur', function()
{
delayCheck[i] = false;
setTimeout( function(){ megaDivHide(i); }, 50 );
});
});
// bind events for dropdown menu
dropdownItems.find('li').addBack().each( function()
{
var currentItem = $(this),
sublist = currentItem.find('ul').first(),
showList = false;
if( sublist.length )
{
sublist.css({display:'block', opacity:0, visibility:'hidden'});
var currentLink = currentItem.find('>a');
currentLink.on( 'mouseenter', function()
{
sublist.stop().css({visibility:'visible'}).animate({opacity:1});
});
currentLink.on( 'focus', function()
{
sublist.stop().css({ visibility: 'visible' }).animate({ opacity: 1 });
sublist.find('li').on( 'focusin', function()
{
sublist.stop().css({ visibility: 'visible' }).animate({ opacity: 1 });
}).on( 'focusout', function()
{
sublist.stop().animate({ opacity: 0 }, function()
{
sublist.css({ visibility: 'hidden' });
});
});
}).on( 'focusout', function()
{
$( this ).trigger( 'mouseleave' );
});
currentItem.on( 'mouseleave', function()
{
sublist.stop().animate({opacity:0}, function()
{
sublist.css({visibility:'hidden'});
});
});
}
});
});
};
})(jQuery);