Here is a function that can be used for menus that fly-out to the right, or down (based off @r0m4n's code):
function fixFlyout (containerElement, parentElement,flyoutElement,flyoutDirection) {
$(parentElement).on('mouseenter mouseleave', function (e) {
var element = $(flyoutElement, this);
var offset = element .offset();
switch(flyoutDirection) {
case 'down':
var top = offset.top;
var height = element.height();
var windowHeight = $(containerElement).height();
var isEntirelyVisible = (top + height <= windowHeight);
break;
case 'right':
var left = offset.left;
var width = element.width();
var windowWidth = $(containerElement).width();
var isEntirelyVisible = (top + width <= windowWidth);
break;
}
if (!isEntirelyVisible ) {
$(element).addClass('edge');
} else {
$(element).removeClass('edge');
}
});
}
//Level 1 Flyout
fixFlyout(containerElement = '.header',parentElement = '.header .navigation>.menu>.expanded',flyoutElement = '.menu:first',flyoutDirection = 'down');