| Current Path : /var/www/html/templates/shape5_vertex/js/ |
| Current File : /var/www/html/templates/shape5_vertex/js/s5_flex_menu.js |
var Eventx = {
addEvent: function(elem, type, func) {
if (document.addEventListener) {
elem.addEventListener(type, func, false);
} else {
elem.attachEvent('on' + type, func);
}
},
onResizend: function(onResizend) {
var actionState = 'normal',
taskPtr = null,
timeOutTask = function() {
taskPtr && clearTimeout(taskPtr);
taskPtr = setTimeout(function() {
onResizend && onResizend();
actionState = 'normal';
}, 500)
};
this.addEvent(
window, 'resize', function() {
actionState = 'resizing';
timeOutTask();
});
},
onResizestart: function(onResizestart) {
var isExecuted = false;
this.onResizend(function() {
isExecuted = false;
});
this.addEvent(
window, 'resize', function() {
if (!isExecuted) {
onResizestart && onResizestart();
isExecuted = true;
}
});
}
};
/*
---
name: Array
description: Contains Array Prototypes like each, contains, and erase.
license: MIT-style license.
requires: Type
provides: Array
...
*/
Array.prototype.every = function(fn, bind) {
for (var i = 0, l = this.length >>> 0; i < l; i++) {
if ((i in this) && !fn.call(bind, this[i], i, this)) return false;
}
return true;
};
Array.prototype.filter = function(fn, bind) {
var results = [];
for (var value, i = 0, l = this.length >>> 0; i < l; i++) if (i in this) {
value = this[i];
if (fn.call(bind, value, i, this)) results.push(value);
}
return results;
};
Array.prototype.indexOf = function(item, from) {
var length = this.length >>> 0;
for (var i = (from < 0) ? Math.max(0, length + from) : from || 0; i < length; i++) {
if (this[i] === item) return i;
}
return -1;
};
Array.prototype.map = function(fn, bind) {
var length = this.length >>> 0,
results = Array(length);
for (var i = 0; i < length; i++) {
if (i in this) results[i] = fn.call(bind, this[i], i, this);
}
return results;
};
Array.prototype.some = function(fn, bind) {
for (var i = 0, l = this.length >>> 0; i < l; i++) {
if ((i in this) && fn.call(bind, this[i], i, this)) return true;
}
return false;
}; /*</!ES5>*/
Array.prototype.clean = function() {
return this.filter(function(item) {
return item != null;
});
};
Array.prototype.invoke = function(methodName) {
var args = Array.slice(arguments, 1);
return this.map(function(item) {
return item[methodName].apply(item, args);
});
};
Array.prototype.associate = function(keys) {
var obj = {},
length = Math.min(this.length, keys.length);
for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
return obj;
};
Array.prototype.link = function(object) {
var result = {};
for (var i = 0, l = this.length; i < l; i++) {
for (var key in object) {
if (object[key](this[i])) {
result[key] = this[i];
delete object[key];
break;
}
}
}
return result;
};
Array.prototype.contains = function(item, from) {
return this.indexOf(item, from) != -1;
};
Array.prototype.append = function(array) {
this.push.apply(this, array);
return this;
};
Array.prototype.getLast = function() {
return (this.length) ? this[this.length - 1] : null;
};
Array.prototype.getRandom = function() {
return (this.length) ? this[Number.random(0, this.length - 1)] : null;
};
Array.prototype.include = function(item) {
if (!this.contains(item)) this.push(item);
return this;
};
Array.prototype.combine = function(array) {
for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
return this;
};
Array.prototype.erase = function(item) {
for (var i = this.length; i--;) {
if (this[i] === item) this.splice(i, 1);
}
return this;
};
Array.prototype.empty = function() {
this.length = 0;
return this;
};
Array.prototype.flatten = function() {
var array = [];
for (var i = 0, l = this.length; i < l; i++) {
var type = typeOf(this[i]);
if (type == 'null') continue;
array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]);
}
return array;
};
Array.prototype.pick = function() {
for (var i = 0, l = this.length; i < l; i++) {
if (this[i] != null) return this[i];
}
return null;
};
Array.prototype.hexToRgb = function(array) {
if (this.length != 3) return null;
var rgb = this.map(function(value) {
if (value.length == 1) value += value;
return value.toInt(16);
});
return (array) ? rgb : 'rgb(' + rgb + ')';
};
Array.prototype.rgbToHex = function(array) {
if (this.length < 3) return null;
if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
var hex = [];
for (var i = 0; i < 3; i++) {
var bit = (this[i] - 0).toString(16);
hex.push((bit.length == 1) ? '0' + bit : bit);
}
return (array) ? hex : '#' + hex.join('');
};
if (undefined == Function.prototype.bind) {
Function.prototype.bind = function(that) {
var self = this,
args = arguments.length > 1 ? Array.slice(arguments, 1) : null,
F = function() {};
var bound = function() {
var context = that,
length = arguments.length;
if (this instanceof bound) {
F.prototype = self.prototype;
context = new F;
}
var result = (!args && !length) ? self.call(context) : self.apply(context, args && length ? args.concat(Array.slice(arguments)) : args || arguments);
return context == that ? result : context;
};
return bound;
}
}(function($) {
$.fn.getLast = function(n) {
return $(this).children().last();
};
$.fn.getPrevious = $.fn.prev;
$.fn.getFirst = function(n) {
return $(this).children().first();
};
$.fn.getNext = $.fn.next;
$.fn.fireEvents = function(n) {
$(this).each(function(i, d) {
$(d).trigger(n);
});
};
MenuMatic = window.MenuMatic = function(options) {
this.options = {
id: 's5_nav',
//the id of the main menu (ul or ol)
subMenusContainerId: 'subMenusContainer',
//id of the container div that will be generated to hold the submenus
tabletWidth: 800,
//subMenu behavior
effect: 'slide & fade',
// 'slide', 'fade', 'slide & fade', or null
duration: 600,
//duration of the effect in milliseconds
physics: 'easeOutQuad',
//how the effect behaves
hideDelay: 1000,
//in milliseconds, how long you have after moving your mouse off of the submenus before they dissapear
displayDelay: 0,
//in milliseconds, how long you have after moving your mouse on the submenus before they appear
//layout
stretchMainMenu: false,
//stretch main menu btn widths to fit within the width {set in the css} of the parent UL or OL
matchWidthMode: false,
//initial submenus match their parent button's width
orientation: 'horizontal',
//horizontal or vertical
direction: {
x: 'right',
y: 'down'
},
//for submenus ( relative to the parent button )left or right, up or down
olddirection: {
x: 'right',
y: 'down'
},
tweakInitial: {
x: 0,
y: 0
},
//if you need to tweak the placement of the initial submenus
tweakSubsequent: {
x: 0,
y: 0
},
//if you need to tweak the placement of the subsequent submenus
center: false,
// will attempt to center main nav element
//dynamic style
opacity: 95,
//of the submenus
mmbFocusedClassName: null,
//main menu button classname, used for morphing to focused state
mmbClassName: null,
//main menu button classname, used for morphing back to original state
killDivider: null,
fullWidth: null,
fixHasLayoutBug: false,
onHideAllSubMenusNow_begin: (function() {}),
onHideAllSubMenusNow_complete: (function() {}),
onInit_begin: (function() {}),
onInit_complete: (function() {})
}, this.hideAllMenusTimeout = null, this.S5DisplayMenusTimeout = null, this.allSubMenus = [], this.subMenuZindex = 1;
this.initialize(options);
this.stretch();
this.killDivider();
this.center();
this.fixHasLayoutBug();
}
MenuMatic.prototype.initialize = function(options) {
//if(Browser.Engine.webkit419){return;}
//this.setOptions(options);
// var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments));
this.options = $.extend(this.options, options);
this.options.olddirection.x = this.options.direction.x;
this.options.olddirection.y = this.options.direction.y;
/* if (this.addEvent) for (var option in options){
if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
this.bind(option, options[option]);
delete options[option];
}*/
//console.log(this.options);
//this.options.onInit_begin();
if (this.options.opacity > 99) {
this.options.opacity = 99.9;
}
this.options.opacity = this.options.opacity / 100;
//initialize directions
this.options.direction.x = this.options.direction.x.toLowerCase();
this.options.direction.y = this.options.direction.y.toLowerCase();
if (this.options.direction.x === 'right') {
this.options.direction.xInverse = 'left';
} else if (this.options.direction.x === 'left') {
this.options.direction.xInverse = 'right';
}
if (this.options.direction.y === 'up') {
this.options.direction.yInverse = 'down';
} else if (this.options.direction.y === 'down') {
this.options.direction.yInverse = 'up';
}
var links = $('#' + this.options.id + ' li, span.grouped_sub_parent_item'); // $('#'+this.options.id).getElements('a'); - silviu
//silviu create an array to keep the child LI index
var LiParent = new Array();
$(links).each((function(index, item) {
//store parent links & child menu info
$(item).data('parentLinks', $(item). /*getParent().*/ parents('li'));
if ($(item).children('ul') && $(item).children('ul').length >= 1) {
var child_Menu = $(item).children('ul');
LiParent[index] = "";
} else {
var child_Menu = null;
}
$(item).data('childMenu', child_Menu);
if (child_Menu) child_Menu.data('parentMenu', $(item)); //westcowboy
//determine submenu type
theSubMenuType = 'subsequent';
if ($($(item).parents('ul') || $(item).parents('ol')).attr('id') === this.options.id) {
theSubMenuType = 'initial';
}
$(item).data('subMenuType', theSubMenuType);
//add classes to parents
if (theSubMenuType === 'initial' && $($(item).children('ul') || $(item).children('ol'))) {
$(item).addClass('mainMenuParentBtn');
} else if ($($(item).children('ul') || $(item).children('ol'))) {
$(item).addClass('subMenuParentBtn');
}
}).bind(this));
//rip the submenus apart into separate divs inside of subMenusContainer
var subMenusContainer = $('<div></div>').attr('id', this.options.subMenusContainerId).appendTo($('body'));
var existing_index = new Array();
$('#' + this.options.id + ' ul').each(function(index, item) {
//remove the ul elements inside a moduletable div, the module content which can contain ul
if ($(item).parents('div[class*=moduletable]').length == 0) {
//new index found, add it to existing index and create the div content
if ($(item).parents('span.grouped_sub_parent_item').size() > 0) {
var parent_li_index = links.index($(item).parents('span.grouped_sub_parent_item'));
} else {
var parent_li_index = links.index($(item).parent('li'));
}
if (false == existing_index.contains(parent_li_index)) {
existing_index.include(parent_li_index);
if ($(item).parent().data('subMenuType') == 'initial') {
var subMenusContainersmOW = $('<div></div>').addClass('s5_sub_wrap').attr('id', 'ul_child_' + parent_li_index).appendTo(subMenusContainer);
} else {
var subMenusContainersmOW = $('<div></div>').addClass('s5_sub_wrap_lower').attr('id', 'ul_child_' + parent_li_index).appendTo(subMenusContainer);
}
var subMenusContainerUl = $('<ul></ul>').appendTo(subMenusContainersmOW);
var subMenusContainerLI = $('<li></li>').attr('id', 'li_child_' + parent_li_index).appendTo(subMenusContainerUl).append(item);
//var subMenusContainers = new Element('div',{'class': 'smOW', 'id': 'ul_child_'+parent_li_index}).inject(subMenusContainer).grab(item);
} else {
//found existing index, so just add extra ul to the existing content
if ($('#li_child_' + parent_li_index)) {
$('#li_child_' + parent_li_index).append(item);
}
}
}
});
//set tabindex to -1 so tabbing through links in page does not go through hidden links in submenus container, since arrow keys can be used to navigate through submenus
$('a', subMenusContainer).attr('tabindex', '-1');
links.each((function(index, item) {
//item=$(item);
//only apply to links with subMenus
if (!$(item).data('childMenu')) {
return;
}
//update childMenu pointer to look at smOW DIVs
$(item).data('childMenu', $('#ul_child_' + index)); //$(item).data('childMenu').parents('div')
$('#ul_child_' + index).data('parentMenu', $(item)); //westcowboy
//add to allSubMenus array
this.allSubMenus.include($(item).data('childMenu'));
//store parentSubMenus
//$(item).data('parentSubMenus',$($(item).data('parentLinks')).data('childMenu'));
var tmp = [];
$(item).data('parentLinks').each(function(index, item2) {
// fix for grouped child menus, the else block actually gets the parent sub menu of the current descdent grouped submenu
if ($(item2).data('childMenu')) tmp.include($(item2).data('childMenu')[0]);
else {
tmp.include($(item2).parentsUntil('li').parentsUntil('div').parent()[0]);
}
});
$(item).data('parentSubMenus', $(tmp));
delete tmp;
//$(item).data('parentSubMenus',$(item).data('parentLinks').data('childMenu'));
//console.log($($(item).data('parentLinks')).data('childMenu'));
//now create the MenuMaticSubMenu class instances
//if($(item).data('parentLinks').length>0) {
var aSubMenu = new MenuMaticSubMenu();
jQuery(item).data('subMenuInstance', aSubMenu);
aSubMenu.initialize(this.options, this, $(item), index);
///}
}).bind(this));
//attach event handlers to non-parent main menu buttons
var nonParentBtns = $('#' + this.options.id + ' li').filter(function(index, item) {
return !$(item).data('childMenu');
}); // silviu removed a
//var nonParentBtns1 = $$('div.moduletable');
//var nonParentBtns = nonParentBtns0.concat(nonParentBtns1);
//console.log(nonParentBtns);
nonParentBtns.each((function(index, item) {
$(item).bind('mouseenter', (function(e) {
e.preventDefault();
this.hideAllSubMenusNow();
if (this.options.mmbClassName && this.options.mmbFocusedClassName) {
if (!$(item).data('btnMorph')) $(item).switchClass(this.options.mmbFocusedClassName, '', this.options.duration / 2, this.options.physics);
else $(item).data('btnMorph');
}
}).bind(this));
$(item).bind('focus', (function(e) {
e.preventDefault();
this.hideAllSubMenusNow();
if (this.options.mmbClassName && this.options.mmbFocusedClassName) {
if (!$(item).data('btnMorph')) $(item).switchClass(this.options.mmbFocusedClassName, '', this.options.duration / 2, this.options.physics);
else $(item).data('btnMorph');
}
}).bind(this));
$(item).bind('mouseleave', (function(e) {
e.preventDefault();
if (this.options.mmbClassName && this.options.mmbFocusedClassName) {
if (!$(item).data('btnMorph')) $(item).switchClass(this.options.mmbClassName, '', this.options.duration / 2, this.options.physics);
else $(item).data('btnMorph');
}
}).bind(this));
$(item).bind('blur', (function(e) {
e.preventDefault();
if (this.options.mmbClassName && this.options.mmbFocusedClassName) {
if (!$(item).data('btnMorph')) $(item).switchClass(this.options.mmbClassName, '', this.options.duration / 2, this.options.physics);
else $(item).data('btnMorph');
}
}).bind(this));
$(item).bind('keydown', (function(e) {
var event = new Event(e);
if (e.key === 'up' || e.key === 'down' || e.key === 'left' || e.key === 'right') {
e.stop();
}
if (e.key === 'left' && this.options.orientation === 'horizontal' || e.key === 'up' && this.options.orientation === 'vertical') {
if ($(item).parents('li').getPrevious('li')) {
$(item).parents('li').getPrevious('li').getFirst('a').focus();
} else {
$(item).parents('li').parent().getLast('li').getFirst('a').focus();
}
} else if (e.key === 'right' && this.options.orientation === 'horizontal' || e.key === 'down' && this.options.orientation === 'vertical') {
if ($(item).parents('li').getNext('li')) {
$(item).parents('li').getNext('li').getFirst('a').focus();
} else {
$(item).parents('li').parent().getFirst('li').getFirst('a').focus();
}
}
}).bind(this));
}).bind(this));
//showMessage(screen.width);
this.onResizeWindow();
Eventx.onResizestart(this.hideAllSubMenusNow.bind(this));
Eventx.onResizend(this.onResizeWindow.bind(this));
}
MenuMatic.prototype.getWidth = function() {
if(this.options.fullWidth && typeof this.options.fullWidth === "function") {
return this.options.fullWidth();
}
return "auto";
}
/**
* For tablet devices with smaller widths,
* just swap the event handlers while window width under or above the WIDTH
*/
MenuMatic.prototype.onResizeWindow = function() {
/*function showMessage(message, title, callback, buttonName){
title = title || "";
buttonName = buttonName || 'OK';
if(navigator.notification){
navigator.notification.alert(
message, // message
callback, // callback
title, // title
buttonName // buttonName
);
}else{
alert(message);
if(callback)
callback();
}
}
showMessage(!!('ontouchstart' in window));*/
var thisp = this;
//console.log(this.options.tabletWidth);
if ($(window).width() >= this.options.tabletWidth) {
var needTablet = window.needTablet = 0;
if (window.s5menuTablet) var needRevert = window.needRevert = 1;
else
var needRevert = window.needRevert = 0;
} else if ($(window).width() < this.options.tabletWidth && !! (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) /* is tablet*/ ) {
var needRevert = window.needRevert = 0;
if (window.s5menuTablet) var needTablet = window.needTablet = 0;
else
var needTablet = window.needTablet = 1;
}
//console.log(needRevert,needTablet);
if (needTablet || needRevert) {
var links = jQuery('.mainMenuParentBtn,.subMenuParentBtn,.mainParentBtn,.subParentBtn');
links.each(function(i, d) {
if (!$(d).data('childMenu')) {
if (needTablet) {
$(d).unbind('mouseenter').bind('mouseenter', function() {
jQuery('.mainParentBtnFocused').removeClass('mainParentBtnFocused');
jQuery(this).addClass('mainParentBtnFocused');
});
$(d).unbind('mouseleave').bind('mouseleave', function() {
jQuery(this).removeClass('mainParentBtnFocused');
});
}
if (needRevert) {
$(d).unbind('mouseenter').bind('mouseenter', thisp.hideAllSubMenusNow.bind(thisp));
}
return;
}
var that = $(d).data('subMenuInstance');
if (needTablet) {
//console.log(needTablet);
window.s5menuTablet = 1;
var mouseEnterH = function(e) {
e.preventDefault();
jQuery(this).css({
background: ''
});
if (that.subMenuType == 'initial') {
//jQuery('.mainMenuParentBtnFocused').removeClass('mainMenuParentBtnFocused');
jQuery(this).addClass('mainMenuParentBtnFocused');
} else {
//jQuery('.subMenuParentBtnFocused').removeClass('subMenuParentBtnFocused');
jQuery(this).addClass('subMenuParentBtn').addClass('subMenuParentBtnFocused');
//console.log('enter');
}
if (that.subMenuType === 'initial' && that.options.mmbClassName && that.options.mmbFocusedClassName) {
if ($(this).data('btnMorph')) $(this).data('btnMorph');
else $(this).switchClass(that.options.mmbFocusedClassName, '', that.options.duration / 2, that.options.physics);
}
};
var mouseLeaveH = function(e) {
if (!$(this).data('menuOpened')) {
if (that.subMenuType == 'initial') jQuery(this).removeClass('mainMenuParentBtnFocused').removeClass('mainMenuParentBtnTablet');
else jQuery(this).removeClass('subMenuParentBtnFocused');
}
return false;
}
var clickH = function(e) {
//console.log(e.target, e.target.hasAttribute('onclick') && e.target.getAttribute('onclick').indexOf('javascript:;'));
if (e.target.nodeName == 'SPAN' && e.target.hasAttribute('onclick') && e.target.getAttribute('onclick').indexOf('javascript:;') == -1) {
e.target.click();
return false;
}
if (that.subMenuType == 'initial') jQuery(this).removeClass('mainMenuParentBtnTablet');
else jQuery(this).find('.S5_submenu_item').removeClass('S5_submenu_itemTablet');
if ($(this).data('menuOpened')) {
that.hideSubMenu(true);
var tmp = $(this).data('childMenu').find('li').filter(function(i, cli) {
return $(cli).data('childMenu') && $(cli).data('menuOpened');
});
tmp.each(function(i, cli) {
$(cli).data('subMenuInstance').hideSubMenu();
var tmp2 = $(cli).data('childMenu').find('li').filter(function(i, cli2) {
return $(cli2).data('childMenu') && $(cli2).data('menuOpened');
});
tmp2.each(function(i, cli3) {
$(cli3).data('subMenuInstance').hideSubMenu();
});
});
$(this).data('menuOpened', false);
if (that.subMenuType == 'initial') {
jQuery(this).removeClass('mainMenuParentBtnFocused').addClass('mainMenuParentBtnTablet');
} else {
jQuery(this).find('.S5_submenu_item'). /*removeClass('S5_submenu_item').*/
addClass('S5_submenu_itemTablet');
}
return false;
}
$(this).data('menuOpened', true);
e.preventDefault();
that.cancellHideAllSubMenus();
that.hideOtherSubMenus();
//if(that.options.opacity == that.btn.parents('ul').getStyle('opacity') || that.btn.parents('ul').getStyle('opacity') == 1){
setTimeout(function() {
that.showSubMenu();
}, 10);
//}
if (that.subMenuType === 'initial' && that.options.mmbClassName && that.options.mmbFocusedClassName) {
if ($(this).data('btnMorph')) $(this).data('btnMorph');
else $(this).switchClass(that.options.mmbFocusedClassName, '', that.options.duration / 2, that.options.physics);
}
};
}
if (needRevert) {
window.s5menuTablet = 0;
var mouseEnterH = $(d).data('mouseenterH');
var mouseLeaveH = $(d).data('mouseleaveH');
var clickH = function(e) {
e.target.click();
}
}
$(d).unbind('mouseenter').bind('mouseenter', mouseEnterH).unbind('mouseleave').bind('mouseleave', mouseLeaveH).unbind('click').bind('click', clickH);
});
jQuery('li[id*=li_child_] ul').each(function(i, d) {
var pmenu = $(d).data('parentMenu');
if (pmenu) {
var that = pmenu.data('subMenuInstance');
if (needTablet || needRevert) {
if (needTablet) {
var mouseEnterH = function() {
if (that.subMenuType == 'initial') pmenu.addClass('mainMenuParentBtnFocused');
else pmenu.addClass('subMenuParentBtnFocused');
};
}
if (needRevert) {
var mouseEnterH = pmenu.data('mouseenterH');
}
$(d).bind('mouseenter', mouseEnterH);
}
}
$(d).children('li').each(function(i, dd) {
//return false;
if ($(dd).data('childMenu')) {
var that = $(dd).data('subMenuInstance');
if (needTablet || needRevert) {
if (needTablet) {
var mouseLeaveH = function() {
if ($(dd).data('menuOpened') == false) {
if (that.subMenuType == 'initial') $(this).removeClass('mainMenuParentBtnFocused');
else $(this).removeClass('subMenuParentBtnFocused');
}
};
var mouseEnterH = function() {
//console.log('enter');
if (that.subMenuType == 'initial') $(this).addClass('mainMenuParentBtnFocused');
else $(this).addClass('subMenuParentBtnFocused').find('.S5_submenu_itemTablet').removeClass('S5_submenu_itemTablet');
};
}
if (needRevert) {
var mouseLeaveH = $(dd).data('mouseleaveH');
var mouseEnterH = $(dd).data('mouseenterH');
//console.log(mouseEnterH);
}
$(dd).unbind('mouseleave').bind('mouseleave', mouseLeaveH).unbind('mouseenter').bind('mouseenter', mouseEnterH);
}
} else {
//if(needTablet)$(dd).unbind('mouseleave').unbind('mouseenter');
//if(needRevert){
var mouseLeaveH = $(dd).data('mouseleaveH');
var mouseEnterH = $(dd).data('mouseenterH');
//console.log(dd);
//console.log(mouseEnterH);
if (needRevert) {
$(dd).unbind('mouseleave').bind('mouseleave', mouseLeaveH).unbind('mouseenter').bind('mouseenter', mouseEnterH);
}
if (needTablet) {
// console.log(mouseEnterH);
$(dd).unbind('mouseleave').unbind('mouseenter').bind('click', mouseEnterH);
}
//}
}
});
});
}
};
MenuMatic.prototype.fixHasLayoutBug = function() {
if ($.browser.msie && this.options.fixHasLayoutBug) {
$('#' + this.options.id).parents().css('zoom', 1);
$('#' + this.options.id).css('zoom', 1);
$('#' + this.options.id).children().css('zoom', 1);
$('#' + this.options.subMenusContainerId).css('zoom', 1);
$('#' + this.options.subMenusContainerId).children().css('zoom', 1);
}
};
MenuMatic.prototype.center = function() {
if (!this.options.center) {
return;
}
$('#' + this.options.id).css({
'left': '50%',
'marginLeft': -($('#' + this.options.id).width() / 2)
});
};
MenuMatic.prototype.stretch = function() {
//stretch main menu btn widths to fit within the width of the parent UL or OL
if (this.options.stretchMainMenu && this.options.orientation === 'horizontal') {
var targetWidth = parseFloat($('#' + this.options.id).width());
var totalBtnWidth = 0;
var mainBtns = $('#' + this.options.id + ' li'); // silviu removed a
mainBtns.css({
'paddingLeft': 0,
'paddingRight': 0
});
mainBtns.each((function(index, item) {
totalBtnWidth += $(item).width();
}).bind(this));
if (targetWidth < totalBtnWidth) {
return;
}
var increment = (targetWidth - totalBtnWidth) / mainBtns.length;
mainBtns.each((function(index, item) {
$(item).css('width', $(item).width() + increment);
}).bind(this));
mainBtns.getLast().css('width', mainBtns.getLast().width() - 1);
}
};
MenuMatic.prototype.killDivider = function() {
if (this.options.killDivider && this.options.killDivider.toLowerCase() === 'first') {
$($('#' + this.options.id + ' li')[0]).css({
'background': 'none'
});
} else if (this.options.killDivider && this.options.killDivider.toLowerCase() === 'last') {
$($('#' + this.options.id + ' li').getLast()).css({
'background': 'none'
});
}
};
MenuMatic.prototype.hideAllSubMenusNow = function() {
//this.options.onHideAllSubMenusNow_begin();
clearTimeout(this.hideAllMenusTimeout);
$(this.allSubMenus).fireEvents('hidex');
//this.options.onHideAllSubMenusNow_complete();
};
var MenuMaticSubMenu = function() {
this.options = {
onSubMenuInit_begin: (function(subMenuClass) {}),
onSubMenuInit_complete: (function(subMenuClass) {}),
onMatchWidth_begin: (function(subMenuClass) {}),
onMatchWidth_complete: (function(subMenuClass) {}),
onHideSubMenu_begin: (function(subMenuClass) {}),
onHideSubMenu_complete: (function(subMenuClass) {}),
onHideOtherSubMenus_begin: (function(subMenuClass) {}),
onHideOtherSubMenus_complete: (function(subMenuClass) {}),
onHideAllSubMenus_begin: (function(subMenuClass) {}),
onHideAllSubMenus_complete: (function(subMenuClass) {}),
onPositionSubMenu_begin: (function(subMenuClass) {}),
onPositionSubMenu_complete: (function(subMenuClass) {}),
onShowSubMenu_begin: (function(subMenuClass) {}),
onShowSubMenu_complete: (function(subMenuClass) {})
};
this.root = null;
this.btn = null;;
this.hidden = true;
this.myEffect = null;
}
MenuMaticSubMenu.prototype.matchWidth = function() {
if (this.widthMatched || !this.options.matchWidthMode || this.subMenuType === 'subsequent') {
return;
}
//this.options.onMatchWidth_begin(this);
if (this.btn.is('li') == false) var bw = this.btn.parentsUntil('li').eq(0).outerWidth();
else
var bw = this.btn.outerWidth();
var parentWidth = bw;
$('li', $(this.childMenu)).each((function(index, item) { // silviu removed a
var borderWidth = parseFloat($(this.childMenu).getFirst().getStyle('borderLeftWidth')) + parseFloat($(this.childMenu).getFirst().getStyle('borderRightWidth'));
var paddingWidth = parseFloat($(item).getStyle('paddingLeft')) + parseFloat($(item).getStyle('paddingRight'));
var offset = borderWidth + paddingWidth;
if (parentWidth > $(item).width()) {
$(item).css('width', parentWidth - offset);
$(item).css('margin-right', -borderWidth);
}
}).bind(this));
this.width = this.childMenu.getFirst().width();
this.widthMatched = true;
//this.options.onMatchWidth_complete(this);
};
MenuMaticSubMenu.prototype.hideSubMenu = function(keepClass) {
if (this.childMenu.data('status') === 'closed') {
return;
}
//this.options.onHideSubMenu_begin(this);
if (keepClass == undefined) {
if (this.subMenuType == 'initial') {
if (this.options.mmbClassName && this.options.mmbFocusedClassName) {
if ($(this.btn).data('btnMorph')) $(this.btn).data('btnMorph');
else this.btn.switchClass(this.options.mmbClassName, '', this.options.duration, this.options.physics, (function() {
$(this.btn).removeClass('mainMenuParentBtnFocused');
$(this.btn).addClass('mainMenuParentBtn');
}).bind(this));
} else {
$(this.btn).removeClass('mainMenuParentBtnFocused');
$(this.btn).addClass('mainMenuParentBtn');
}
} else {
$(this.btn).removeClass('subMenuParentBtnFocused');
$(this.btn).addClass('subMenuParentBtn');
}
}
if (this.options.effect && this.options.effect.toLowerCase() === 'slide') {
if (this.subMenuType == 'initial' && this.options.orientation === 'horizontal' && this.options.direction.y === 'down') {
$(this.childMenu).getFirst().animate({
'marginTop': -this.height
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
} else if (this.subMenuType == 'initial' && this.options.orientation === 'horizontal' && this.options.direction.y === 'up') {
$(this.childMenu).getFirst().animate({
'marginTop': this.height
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
} else if (this.options.direction.x === 'right') {
$(this.childMenu).getFirst().animate({
'marginLeft': -this.width
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
} else if (this.options.direction.x === 'left') {
$(this.childMenu).getFirst().animate({
'marginLeft': this.width
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
}
} else if (this.options.effect == 'fade') {
$(this.childMenu).getFirst().animate({
'opacity': 0
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
} else if (this.options.effect == 'slide & fade') {
//console.log(this.childMenu.css('display'));
if (this.subMenuType == 'initial' && this.options.orientation === 'horizontal' && this.options.direction.y === 'down') {
$(this.childMenu).getFirst().animate({
'marginTop': -this.height,
opacity: 0
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
} else if (this.subMenuType == 'initial' && this.options.orientation === 'horizontal' && this.options.direction.y === 'up') {
$(this.childMenu).getFirst().animate({
'marginTop': this.height,
opacity: 0
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
} else if (this.options.direction.x === 'right') {
$(this.childMenu).getFirst().animate({
'marginLeft': -this.width,
opacity: 0
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
} else if (this.options.direction.x === 'left') {
$(this.childMenu).getFirst().animate({
'marginLeft': this.width,
opacity: 0
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.childMenu.css({
left: 0,
display: 'none',
'zIndex': -100
});
}).bind(this)
}).bind(this);
}
} else {
this.childMenu[0].style.left = "0px";
this.childMenu[0].style.visiblity = "hidden";
this.childMenu.css('zIndex', -100);
}
this.childMenu.data('status', 'closed');
//console.log(this.childMenu.css('display'));
//this.options.onHideSubMenu_complete(this);
};
MenuMaticSubMenu.prototype.hideOtherSubMenus = function() {
//this.options.onHideOtherSubMenus_begin(this);
//set up otherSubMenus element collection
if (!this.btn.data('otherSubMenus')) {
this.btn.data('otherSubMenus', $(this.root.allSubMenus.filter((function(item) {
return this.btn.data('parentSubMenus').index(item) == -1 && item != this.childMenu;
}).bind(this))));
}
this.parentSubMenus.fireEvents('show');
//console.log(this.btn.data('otherSubMenus').size());
this.btn.data('otherSubMenus').fireEvents('hidex');
//console.log(this.btn.data('otherSubMenus'));
this.btn.data('otherSubMenus').each(function(i, d) { // westcowboy
$(d).data('parentMenu').data('menuOpened', false);
});
//this.options.onHideOtherSubMenus_complete(this);
};
MenuMaticSubMenu.prototype.hideAllSubMenus = function() {
//this.options.onHideAllSubMenus_begin(this);
clearTimeout(this.root.hideAllMenusTimeout);
this.root.hideAllMenusTimeout = setTimeout((function() {
clearTimeout(this.root.hideAllMenusTimeout);
$(this.root.allSubMenus).fireEvents('hidex');
}).bind(this), this.options.hideDelay);
//this.options.onHideAllSubMenus_complete(this);
};
MenuMaticSubMenu.prototype.cancellHideAllSubMenus = function() {
//this.childMenu.getFirst().stop();
//$(this.root.allSubMenus).stop();
//console.log($(this.root.allSubMenus.filter((function(item){ return this.btn.data('parentSubMenus').index(item)==-1 && item != this.childMenu;}).bind(this))));
clearTimeout(this.root.hideAllMenusTimeout);
//$(this.root.allSubMenus.filter((function(item){ return this.btn.data('parentSubMenus').index(item)==-1 && item != this.childMenu;}).bind(this))).each(function(i,d){$(d).stop();});
this.options.direction.x = this.options.olddirection.x;
};
MenuMaticSubMenu.prototype.showSubMenu = function() {
//console.log('it is now '+this.options.direction.x);
S5DisplayMenusTimeout = setTimeout((function() {
this.S5showSubMenu();
}).bind(this), this.options.displayDelay);
};
MenuMaticSubMenu.prototype.S5showSubMenu = function(now) {
if (this.childMenu.data('status') === 'open') {
return;
}
//this.options.onShowSubMenu_begin(this);
if (this.subMenuType == 'initial') {
$(this.btn).removeClass('mainMenuParentBtn');
$(this.btn).addClass('mainMenuParentBtnFocused');
} else {
$(this.btn).removeClass('subMenuParentBtn');
$(this.btn).addClass('subMenuParentBtnFocused');
}
this.root.subMenuZindex++;
this.childMenu.css({
'display': 'block',
'visibility': 'hidden',
'zIndex': this.root.subMenuZindex
});
if (!this.height || !this.width) {
//console.log(this.childMenu.getFirst().outerHeight());
//this.height = this.childMenu.getFirst().getCoordinates().height;
//silviu changes to get all the childrens content height
//this.height = 0;
this.height = this.childMenu.getFirst().outerHeight();
//this.width = this.childMenu.getFirst().getCoordinates().width;
this.width = this.childMenu.getFirst().outerWidth();
//this.childMenu.css({'height':this.height,'width':this.width}/*,'border'*/);
if (this.options.effect === 'slide' || this.options.effect === 'slide & fade') {
if (this.subMenuType == 'initial' && this.options.orientation === 'horizontal') {
this.childMenu.getFirst().css('marginTop', '0');
if (this.options.direction.y === 'down') {
$(this.childMenu).getFirst().css({
'marginTop': -this.height
});
} else if (this.options.direction.y === 'up') {
$(this.childMenu).getFirst().css({
'marginTop': this.height
});
}
} else {
if (this.options.direction.x === 'left') {
$(this.childMenu).getFirst().css({
'marginLeft': this.width
});
} else {
$(this.childMenu).getFirst().css({
'marginLeft': -this.width
});
}
}
}
}
this.matchWidth();
this.positionSubMenu();
if (this.options.effect === 'slide') {
this.childMenu.css({
'display': 'block',
'visibility': 'visible'
});
if (this.subMenuType === 'initial' && this.options.orientation === 'horizontal') {
if ($('#' + this.options.id).offset().top != $('#' + this.options.id).position().top /*&& $('#'+this.options.id)[0].offsetTop!=0*/ ) $(this.childMenu).css('top', $(this.btn).offset().top + $(this.btn).outerHeight() - $(window).scrollTop());
/* else
$(this.childMenu).css('top',$(this.btn).offset().top+$(this.btn).outerHeight());*/
if (now) {
$(this.childMenu).getFirst().stop().animate({
'marginTop': 0
}, {
'duration': 0,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
} else {
$(this.childMenu).getFirst().stop().animate({
'marginTop': 0
}, {
'duration': this.options.duration,
'queue': false,
'easing': this.options.physics,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
}
} else {
if (this.subMenuType === 'subsequent') {
if ($('#' + this.options.id).offset().top != $('#' + this.options.id).position().top && $('#' + this.options.id)[0].offsetTop != 0) $(this.childMenu).css('top', $(this.btn).offset().top - $(window).scrollTop());
else
$(this.childMenu).css('top', $(this.btn).offset().top);
}
if (now) {
$(this.childMenu).getFirst().stop().animate({
'marginLeft': 0
}, {
'duration': 0,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
} else {
$(this.childMenu).getFirst().stop().animate({
'marginLeft': 0
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
}
}
} else if (this.options.effect === 'fade') {
this.childMenu.css({
'display': 'block',
'visibility': 'visible'
});
if (now) {
$(this.childMenu).getFirst().stop().animate({
'opacity': this.options.opacity
}, {
'duration': 0,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
} else {
$(this.childMenu).getFirst().stop().animate({
'opacity': this.options.opacity
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
}
} else if (this.options.effect == 'slide & fade') {
this.childMenu.css({
'display': 'block',
'visibility': 'visible'
});
this.childMenu.getFirst().css({
'left': 0
});
if (this.subMenuType === 'initial' && this.options.orientation === 'horizontal') {
if ($('#' + this.options.id).offset().top != $('#' + this.options.id).position().top /*&& $('#'+this.options.id)[0].offsetTop!=0*/ ) $(this.childMenu).css('top', $(this.btn).offset().top + $(this.btn).outerHeight() - $(window).scrollTop());
/*else
$(this.childMenu).css('top',$(this.btn).offset().top+$(this.btn).outerHeight() - $(window).scrollTop());
*/
if (now) {
$(this.childMenu).getFirst().stop().animate({
'marginTop': 0,
'opacity': this.options.opacity
}, {
'duration': 0,
'queue': false,
'easing': this.options.physics,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
} else {
$(this.childMenu).getFirst().stop().animate({
'marginTop': 0,
'opacity': this.options.opacity
}, {
'duration': this.options.duration,
'queue': false,
'easing': this.options.physics,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
}
} else {
if (this.subMenuType === 'subsequent') {
if ($('#' + this.options.id).offset().top != $('#' + this.options.id).position().top /* && $('#'+this.options.id)[0].offsetTop!=0*/ ) $(this.childMenu).css('top', $(this.btn).offset().top - $(window).scrollTop());
/*else
$(this.childMenu).css('top',$(this.btn).offset().top);*/
}
if (now) {
if (this.options.direction.x === 'right') {
$(this.childMenu).getFirst().stop().animate({
'marginLeft': 0,
'opacity': this.options.opacity
}, {
'duration': 0,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
} else if (this.options.direction.x === 'left') {
$(this.childMenu).getFirst().stop().animate({
'marginLeft': 0,
'opacity': this.options.opacity
}, {
'duration': 0,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
}
} else {
if (this.options.direction.x === 'right') {
$(this.childMenu).getFirst().css('marginLeft', -this.width);
$(this.childMenu).getFirst().stop().animate({
'marginLeft': 0,
'opacity': this.options.opacity
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
} else if (this.options.direction.x === 'left') {
$(this.childMenu).getFirst().stop().animate({
'marginLeft': 0,
'opacity': this.options.opacity
}, {
'duration': this.options.duration,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
}
}
}
} else {
this.childMenu.stop().animate({
'display': 'block',
'visibility': 'visible'
}, {
'duration': 0,
'easing': this.options.physics,
'queue': false,
'complete': (function() {
this.showSubMenuComplete();
}).bind(this)
});
}
this.childMenu.data('status', 'open');
};
MenuMaticSubMenu.prototype.showSubMenuComplete = function() {
//this.options.onShowSubMenu_complete(this);
if (this.options.olddirection.x) this.options.direction.x = this.options.olddirection.x;
//S5 - silviu - rearange the submenu if mouse over fast bug
if ((parseInt(this.childMenu[0].style.top) != this.btn.offset().top && this.btn.offset().top != $('#' + this.options.id).offset().top && parseInt(this.btn.css('marginTop')) == 0) && $('#' + this.options.id)[0].offsetTop != 0) {
if (this.btn.data('subMenuType') == 'initial') {
if (this.options.orientation == 'horizontal') {
if (this.btn.is('li') == false) var t = this.btn.parentsUntil('li').eq(0).outerHeight();
else
var t = this.btn.outerHeight();
} else
var t = this.btn.offset().top + this.btn.outerHeight();
t -= this.subtractScrollTop();
$(this.childMenu).animate({
'top': t
}, this.options.duration, this.options.physics);
} else {
var totop = this.btn.offset().top - this.subtractScrollTop();
$(this.childMenu).animate({
'top': totop
}, this.options.duration, this.options.physics);
}
}
};
MenuMaticSubMenu.prototype.positionSubMenu = function() {
//this.options.onPositionSubMenu_begin(this);
this.childMenu.css('width', this.width);
this.childMenu.getFirst().css('width', this.width);
//if parent is ltr className all childrens must be ltr
if (this.btn.parents('div').className == 's5_sub_wrap_rtl' || this.btn.parents('div').className == 's5_sub_wrap_lower_rtl') {
//this.childMenu.className = 's5_sub_wrap_rtl';
this.childMenu.className = 's5_sub_wrap_lower_rtl';
}
//if any parent has bounced off a viewport edge, inherit that new direction
if (this.subMenuType === 'subsequent') {
if (this.parentSubMenu && this.options.direction.x != this.parentSubMenu.options.direction.x) {
if (this.parentSubMenu.options.direction.x === 'left' && this.options.effect && this.options.effect.contains('slide')) {
$(this.childMenu).getFirst().css({
'marginLeft': this.width
});
}
}
this.options.direction.x = this.parentSubMenu.options.direction.x;
this.options.direction.xInverse = this.parentSubMenu.options.direction.xInverse;
this.options.direction.y = this.parentSubMenu.options.direction.y;
this.options.direction.yInverse = this.parentSubMenu.options.direction.yInverse;
}
var top;
var overlap
if (this.subMenuType == 'initial') {
if (this.options.direction.y === 'up') {
if (this.options.orientation === 'vertical') {
if (this.btn.is('li') == false) var t = this.btn.parentsUntil('li').eq(0).outerHeight();
else
var t = this.btn.outerHeight();
top = this.btn.offset().top - this.subtractScrollTop() + t - this.height + this.options.tweakInitial.y;
} else {
top = this.btn.offset().top - this.subtractScrollTop() - this.height + this.options.tweakInitial.y;
}
//console.log(top);
this.childMenu[0].style.top = top + 'px';
} else if (this.options.orientation == 'horizontal') {
if (this.btn.is('li') == false) var t = this.btn.parentsUntil('li').eq(0).outerHeight();
else
var t = this.btn.outerHeight();
this.childMenu[0].style.top = this.btn.offset().top - this.subtractScrollTop() + t + this.options.tweakInitial.y + 'px';
} else if (this.options.orientation == 'vertical') {
top = this.btn.offset().top - this.subtractScrollTop() + this.options.tweakInitial.y;
//console.log(top);
/* commented out at 3/15/2013 ,vertical menu bug
* if((top + this.childMenu.height()) >= $(document.body).scrollTop()){
overlap = (top + this.childMenu.height()) - $(document.body).scrollTop() ;
top = top - overlap - 20;
} */
//console.log(top);
top += this.btn.outerHeight();
this.childMenu[0].style.top = top + 'px';
}
if (this.options.orientation == 'horizontal') {
var child_width = this.childMenu.outerWidth();
var mouse_poz = this.btn.offset().left;
if (this.btn.is('li') == false) var btn_width = this.btn.parentsUntil('li').eq(0).outerWidth();
else
var btn_width = this.btn.outerWidth();
var sceen = $(window).width();
if (this.options.direction.x == 'left') {
if ((mouse_poz - child_width) < 0) {
if (this.btn.offset().left - child_width + btn_width < 0 && this.btn.offset().left + child_width > sceen) { //console.log(this.btn.offset().left + child_width > sceen);
this.childMenu[0].style.width = this.root.getWidth();
this.childMenu[0].style['cssFloat'] = (this.childMenu[0].style.width=='auto')?'left':'none';
this.childMenu.children().each(function(ii, tt) {
$(tt).css({
'float': 'none',
'width': 'auto'
});
$(tt).children().each(function(jj, zz) {
$(zz).children().each(function(kk, zzz) {
$(zzz).css({
'float': 'none'
});
});
});
});
} else {
this.childMenu[0].style.width = this.root.getWidth();
this.childMenu[0].style['cssFloat'] = (this.childMenu[0].style.width=='auto')?'left':'none';
this.childMenu.css({
/*'width': 'auto',
'float': 'left',*/
'clear': 'none'
});
this.childMenu.children().each(function(ii, tt) {
$(tt).css({
'float': 'left',
'width': 'auto',
'clear': 'none'
}).children().each(function(jj, zz) {
$(zz).children().each(function(kk, zzz) {
$(zzz).css({
'float': 'left',
'clear': 'none'
});
});
});
});
}
child_width = $(this.childMenu).outerWidth();
if (this.btn.offset().left - child_width + btn_width < 20 /* changed from 0 to 20*/ ) {
toleft = this.btn.offset().left;
need = 1;
toleft -= 24; // left+right padding of the menu item class
} else {
toleft = this.btn.offset().left - child_width + btn_width;
need = 0;
}
this.childMenu[0].style.left = toleft + 'px';
if (need) this.childMenu.className = 's5_sub_wrap_rtl';
else this.childMenu.className = 's5_sub_wrap';
} else {
this.childMenu[0].style.width = this.root.getWidth();
this.childMenu[0].style['cssFloat'] = (this.childMenu[0].style.width=='auto')?'left':'none';
this.childMenu.css({
/*'width': 'auto',
'float': 'left',*/
'clear': 'none'
});
this.childMenu.children().each(function(ii, tt) {
$(tt).css({
'width': 'auto',
'float': 'left',
'clear': 'none'
}).children().each(function(jj, zz) {
$(zz).children().each(function(kk, zzz) {
$(zzz).css({
'float': 'left',
'clear': 'none'
});
});
});
});
this.childMenu[0].className = 's5_sub_wrap';
this.childMenu[0].style.marginLeft = '5px';
child_width = this.childMenu.outerWidth();
this.childMenu[0].style.left = (this.btn.offset().left - child_width + btn_width) + 'px'; //this.btn.offset().left + this.options.tweakInitial.x + 'px';
}
} else {
if ((child_width + mouse_poz) > sceen) {
if (this.btn.offset().left - child_width + btn_width < 0) {
this.childMenu[0].style.width = this.root.getWidth();
this.childMenu[0].style['cssFloat'] = (this.childMenu[0].style.width=='auto')?'left':'none';
/*this.childMenu.css({
'width': 'auto',
float: 'none'
});*/
this.childMenu.children().each(function(ii, tt) {
$(tt).css({
'width': 'auto',
float: 'none'
}).children().each(function(jj, zz) {
$(zz).children().each(function(kk, zzz) {
$(zzz).css('float', 'none');
});
});
});
this.childMenu.className = 's5_sub_wrap_rtl';
} else {
this.childMenu[0].style.width = this.root.getWidth();
this.childMenu[0].style['cssFloat'] = (this.childMenu[0].style.width=='auto')?'left':'none';
this.childMenu.css({
/*'width': 'auto',
'float': 'left',*/
'clear': 'none'
});
this.childMenu.children().each(function(ii, tt) {
$(tt).css({
'float': 'left',
'width': 'auto',
'clear': 'none'
}).children().each(function(jj, zz) {
$(zz).children().each(function(kk, zzz) {
$(zzz).css({
'float': 'left',
'clear': 'none'
});
});
});
});
}
child_width = this.childMenu.width();
if (child_width + this.btn.offset().left < sceen - 20 /* changed from sceen to sceen - 20*/ ) toleft = this.btn.offset().left;
else {
var toleft = this.btn.offset().left - child_width + btn_width;
if (toleft < 0) toleft = this.btn.offset().left;
}
this.childMenu[0].style.left = toleft + 'px';
if (child_width + this.btn.offset().left < sceen) this.childMenu.className = 's5_sub_wrap';
else this.childMenu.className = 's5_sub_wrap_rtl';
} else {
this.childMenu[0].style.width = this.root.getWidth();
this.childMenu[0].style['cssFloat'] = (this.childMenu[0].style.width=='auto')?'left':'none';
this.childMenu.children().each(function(ii, tt) {
$(tt).css({
'float': 'left',
'width': 'auto',
'clear': 'none'
}).children().each(function(jj, zz) {
$(zz).children().each(function(kk, zzz) {
$(zzz).css({
'float': 'left',
'clear': 'none'
});
});
});
});
this.childMenu.className = 's5_sub_wrap';
//this.childMenu[0].style.background='white';
this.childMenu[0].style.left = this.btn.offset().left + this.options.tweakInitial.x + 'px';
}
}
} else if (this.options.direction.x == 'left') {
this.childMenu[0].style.left = this.btn.offset().left - this.childMenu.width() + this.options.tweakInitial.x + 'px';
} else if (this.options.direction.x == 'right') {
if (this.btn.is('li') == false) var bw = this.btn.parentsUntil('li').eq(0).outerWidth();
else
var bw = this.btn.outerWidth();
this.childMenu[0].style.left = this.btn.offset().left + bw + this.options.tweakInitial.x + 'px';
}
} else if (this.subMenuType == 'subsequent') {
if (this.options.direction.y === 'down') {
if ((this.btn.offset().top + this.options.tweakSubsequent.y + this.childMenu.height()) >= $(document.body).scrollTop()) {
overlap = (this.btn.offset().top - this.subtractScrollTop() + this.options.tweakSubsequent.y + this.childMenu.height());
this.childMenu[0].style.top = (this.btn.offset().top - this.subtractScrollTop() + this.options.tweakSubsequent.y) - overlap - 20 + 'px';
} else {
this.childMenu[0].style.top = this.btn.offset().top - this.subtractScrollTop() + this.options.tweakSubsequent.y + 'px';
}
} else if (this.options.direction.y === 'up') {
if (this.btn.is('li') == false) var t = this.btn.parentsUntil('li').eq(0).outerHeight();
else
var t = this.btn.outerHeight();
if ((this.btn.offset().top + t - this.subtractScrollTop() - this.height + this.options.tweakSubsequent.y) < 1) {
this.options.direction.y = 'down';
this.options.direction.yInverse = 'up';
this.childMenu[0].style.top = this.btn.offset().top - this.subtractScrollTop() + this.options.tweakSubsequent.y + 'px';
} else {
if (this.btn.is('li') == false) var t = this.btn.parentsUntil('li').eq(0).outerHeight();
else
var t = this.btn.outerHeight();
this.childMenu[0].style.top = this.btn.offset().top - this.subtractScrollTop() + t - this.height + this.options.tweakSubsequent.y + 'px';
}
}
if (this.options.direction.x == 'left') {
this.childMenu[0].style.left = this.btn.offset().left - this.childMenu.width() + this.options.tweakSubsequent.x + 'px';
this.childMenu[0].style.top = this.btn.offset().top - this.subtractScrollTop() + this.options.tweakSubsequent.x + 'px';
if (this.childMenu.offset().left < 20) {
//console.log('it was '+this.options.direction.x);
this.options.olddirection.x = this.options.direction.x;
this.options.direction.x = 'right';
//console.log('to right');
this.options.direction.xInverse = 'left';
if (this.btn.is('li') == false) var bw = this.btn.parentsUntil('li').eq(0).outerWidth();
else
var bw = this.btn.outerWidth();
this.childMenu[0].style.left = this.btn.offset().left + bw + this.options.tweakSubsequent.x + 'px';
this.childMenu.className = 's5_sub_wrap_lower_rtl';
if (this.options.effect === 'slide' || this.options.effect === 'slide & fade') {
$(this.childMenu).getFirst().css({
'marginLeft': -this.width,
'opacity': this.options.opacity
});
}
}
} else if (this.options.direction.x == 'right') {
if (this.btn.is('li') == false) var bw = this.btn.parentsUntil('li').eq(0).outerWidth();
else
var bw = this.btn.outerWidth();
this.childMenu[0].style.top = this.btn.offset().top - this.subtractScrollTop() + this.options.tweakSubsequent.x + 'px';
this.childMenu[0].style.left = this.btn.offset().left + bw + this.options.tweakSubsequent.x + 'px';
var smRight = this.childMenu.offset().left + this.childMenu.width();
var viewportRightEdge = $(window).width() + $(window).scrollLeft() - 20;
if (smRight > viewportRightEdge) {
//console.log('it was '+this.options.direction.x);
this.options.olddirection.x = this.options.direction.x;
this.options.direction.x = 'left';
//console.log(' to left');
this.options.direction.xInverse = 'right';
var child_width = this.childMenu.outerWidth();
var mouse_poz = this.btn.offset().left;
var sceen = $(window).width();
if ((child_width + mouse_poz) > sceen) {
this.childMenu[0].style.right = this.btn.offset().left + this.options.tweakSubsequent.x + 'px';
} else {
this.childMenu[0].style.left = this.btn.offset().left - this.childMenu.width() + this.options.tweakSubsequent.x + 'px';
this.childMenu.className = 's5_sub_wrap_lower_rtl';
}
if (this.options.effect === 'slide' || this.options.effect === 'slide & fade') {
$(this.childMenu).getFirst().css({
'marginLeft': this.width,
'opacity': this.options.opacity
});
}
}
}
}
//this.options.onPositionSubMenu_complete(this);
};
MenuMaticSubMenu.prototype.subtractScrollTop = function() {
return $('#' + this.options.id).offset().top != $('#' + this.options.id).position().top ? $(window).scrollTop() : 0;
}
MenuMaticSubMenu.prototype.initialize = function(options, root2, btn2, current_index) {
//var options = this.options = Object.merge.apply(null, [{}, this.options].append(arguments));
this.options = $.extend(options, this.options);
/* if (this.addEvent) for (var option in options){
if (typeOf(options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
this.bind(option, options[option]);
delete options[option];
}
*/
this.root = root2;
this.btn = btn2;
this.childMenu = $(this.btn).data('childMenu');
if (!this.childMenu) return;
this.subMenuType = this.btn.data('subMenuType');
//this.childMenu = this.btn.data('childMenu');
this.parentSubMenus = $(this.btn.data('parentSubMenus'));
this.parentLinks = this.btn.data('parentLinks');
//console.log(this.btn.data('parentLinks'));
//if(this.parentLinks.length==0) return;
if (this.parentSubMenus) this.parentSubMenu = $(this.parentSubMenus[0]);
else this.parentSubMenu = null;
if (this.parentSubMenu) {
this.parentSubMenu = this.parentSubMenu.data('class');
}
this.childMenu.data('class', this);
this.btn.data('class', this);
this.childMenu.data('status', 'closed');
//this.options.onSubMenuInit_begin(this);
//add hide Event
this.childMenu.bind('hidex', (function() {
this.hideSubMenu();
}).bind(this)); // silviu commented
//add show Event
this.childMenu.bind('show', (function() {
this.showSubMenu();
}).bind(this));
if (this.options.effect) {
/*this.myEffect = new Fx.Morph(
$(this.childMenu).getFirst(), { duration: this.options.duration, transition: this.options.physics, link: 'cancel' }
);*/
}
if (this.options.effect === 'slide' || this.options.effect === 'slide & fade') {
if (this.subMenuType == 'initial' && this.options.orientation === 'horizontal') {
this.childMenu.getFirst().css('marginTop', '0');
} else {
this.childMenu.getFirst().css('marginLeft', '0');
}
} else if (this.options.effect === 'fade' || this.options.effect === 'slide & fade') {
this.childMenu.getFirst().css('opacity', 0);
}
if (this.options.effect != 'fade' && this.options.effect != 'slide & fade') {
this.childMenu.getFirst().css('opacity', this.options.opacity);
}
this.childMenu.getFirst().css('float', 'left');
//attach event handlers to non-parent sub menu buttons
//var nonParentBtns = $(this.childMenu).getElements('li').filter(function(item, index){ return !$(item).data('childMenu'); });
var nonParentBtnsP = $("#li_child_" + current_index + ' ul');
nonParentBtnsP.each((function(index, item) {
var nonParentBtns = $('li', $(item)).filter(function(index, item) {
return !$(item).data('childMenu');
});
nonParentBtns.each((function(index, item) {
$(item).addClass('subMenuBtn');
$(item).bind('mouseenter', (function(e) {
this.childMenu.trigger('show');
this.cancellHideAllSubMenus();
this.hideOtherSubMenus();
}).bind(this));
$(item).data('mouseenterH', (function(e) {
this.childMenu.trigger('show');
this.cancellHideAllSubMenus();
this.hideOtherSubMenus();
}).bind(this));
$(item).bind('focus', (function(e) {
this.childMenu.trigger('show');
this.cancellHideAllSubMenus();
this.hideOtherSubMenus();
}).bind(this));
$(item).bind('mouseleave', (function(e) { // return false;
this.cancellHideAllSubMenus();
this.hideAllSubMenus();
}).bind(this));
$(item).data('mouseleaveH', (function(e) { // return false;
this.cancellHideAllSubMenus();
this.hideAllSubMenus();
}).bind(this));
$(item).bind('blur', (function(e) {
this.cancellHideAllSubMenus();
this.hideAllSubMenus();
}).bind(this));
$(item).bind('keydown', (function(e) {
var event = new Event(e);
if (e.key === 'up' || e.key === 'down' || e.key === 'left' || e.key === 'right' || e.key === 'tab') {
e.stop();
}
if (e.key === 'up') {
if ($(item).parents('li').getPrevious('li')) {
//move focus to the next link up if possible
$(item).parents('li').getPrevious('li').getFirst('a').focus();
} else if (this.options.direction.y === 'down') {
//move focus to the parent link
this.btn.focus();
} else if (this.options.direction.y === 'up') {
//move focus to the last link in the subMenu
$(item).parents('li').parent().getLast('li').getFirst('a').focus();
}
} else if (e.key === 'down') {
if ($(item).parents('li').getNext('li')) {
//move focus to the next link down if possible
$(item).parents('li').getNext('li').getFirst('a').focus();
} else if (this.options.direction.y === 'down') {
//move focus to the first link in the submenu
$(item).parents('li').parent().getFirst('li').getFirst('a').focus();
} else if (this.options.direction.y === 'up') {
//move focus to the parent link
this.btn.focus();
}
} else if (e.key === this.options.direction.xInverse) {
this.btn.focus();
}
}).bind(this));
}).bind(this));
}).bind(this));
this.btn.removeClass('subMenuBtn');
if (this.subMenuType == 'initial') {
this.btn.addClass('mainParentBtn');
} else {
this.btn.addClass('subParentBtn');
}
//attach event handlers to parent button
this.btn.bind('mouseenter', (function(e) {
e.preventDefault();
this.cancellHideAllSubMenus();
this.hideOtherSubMenus();
//if(this.options.opacity == this.btn.parents('ul').getStyle('opacity') || this.btn.parents('ul').getStyle('opacity') == 1){
setTimeout((function() {
this.showSubMenu();
}).bind(this), 10);
//}
if (this.subMenuType === 'initial' && this.options.mmbClassName && this.options.mmbFocusedClassName) {
if ($(this.btn).data('btnMorph')) $(this.btn).data('btnMorph');
else this.btn.switchClass(this.options.mmbFocusedClassName, '', this.options.duration / 2, this.options.physics);
}
}).bind(this)).data('mouseenterH', (function(e) {
e.preventDefault();
this.cancellHideAllSubMenus();
this.hideOtherSubMenus();
//if(this.options.opacity == this.btn.parents('ul').getStyle('opacity') || this.btn.parents('ul').getStyle('opacity') == 1){
setTimeout((function() {
this.showSubMenu();
}).bind(this), 10);
//}
if (this.subMenuType === 'initial' && this.options.mmbClassName && this.options.mmbFocusedClassName) {
if ($(this.btn).data('btnMorph')) $(this.btn).data('btnMorph');
else this.btn.switchClass(this.options.mmbFocusedClassName, '', this.options.duration / 2, this.options.physics);
}
}).bind(this));
this.btn.bind('focus', (function(e) {
e.preventDefault();
this.cancellHideAllSubMenus();
this.hideOtherSubMenus();
this.showSubMenu();
if (this.subMenuType === 'initial' && this.options.mmbClassName && this.options.mmbFocusedClassName) {
if ($(this.btn).data('btnMorph')) $(this.btn).data('btnMorph');
else this.btn.switchClass(this.options.mmbFocusedClassName, '', this.options.duration / 2, this.options.physics);
}
}).bind(this));
this.btn.bind('mouseleave', (function(e) { //return false;
e.preventDefault();
this.cancellHideAllSubMenus();
this.hideAllSubMenus();
}).bind(this)).data('mouseleaveHander', (function(e) { //return false;
e.preventDefault();
this.cancellHideAllSubMenus();
this.hideAllSubMenus();
}).bind(this));;
this.btn.bind('blur', (function(e) {
e.preventDefault();
this.cancellHideAllSubMenus();
this.hideAllSubMenus();
}).bind(this));
this.btn.bind('keydown', (function(e) {
e = new Event(e)
if (e.key === 'up' || e.key === 'down' || e.key === 'left' || e.key === 'right') {
e.stop();
}
if (!this.parentSubMenu) {
//main menu parent buttons
if (
this.options.orientation === 'horizontal' && e.key === this.options.direction.y || this.options.orientation === 'vertical' && e.key === this.options.direction.x) {
if (this.options.direction.y === 'down') {
//move focus to the first link in the child menu
this.childMenu.getFirst().getFirst('li').getFirst('a').focus();
} else if (this.options.direction.y === 'up') {
//move focus to the first link in the child menu
this.childMenu.getFirst().getLast('li').getFirst('a').focus();
}
} else if (
this.options.orientation === 'horizontal' && e.key === 'left' || this.options.orientation === 'vertical' && e.key === this.options.direction.yInverse) {
//move focus to the previous link if possible, if not, move focus to the last link in the menu
if (this.btn.parent().getPrevious()) {
this.btn.parent().getPrevious().getFirst().focus();
} else {
this.btn.parent().parent().getLast().getFirst().focus();
}
} else if (
this.options.orientation === 'horizontal' && e.key === 'right' || this.options.orientation === 'vertical' && e.key === this.options.direction.y) {
//move focus to the next link if possible, if not, move focus to the first link in the menu
if (this.btn.parent().getNext()) {
this.btn.parent().getNext().getFirst().focus();
} else {
this.btn.parent().parent().getFirst().getFirst().focus();
}
}
} else {
if (e.key === 'tab') {
e.stop();
}
//submenu parent buttons
if (e.key === 'up') {
if (this.btn.parents('li').getPrevious('li')) {
//move focus to the next link up
this.btn.parents('li').getPrevious('li').getFirst('a').focus();
} else if (this.options.direction.y === 'down') {
//move focus to the parent link
this.parentSubMenu.btn.focus();
} else if (this.options.direction.y === 'up') {
//move focus to the bottom link in this submenu
this.btn.parents('li').parent().getLast('li').getFirst('a').focus();
}
} else if (e.key === 'down') {
if (this.btn.parents('li').getNext('li')) {
//move focus to the next link down
this.btn.parents('li').getNext('li').getFirst('a').focus();
} else if (this.options.direction.y === 'down') {
//move focus to the top link in this submenu
this.btn.parents('li').parent().getFirst('li').getFirst('a').focus();
} else if (this.options.direction.y === 'up') {
//move focus to the parent link
this.parentSubMenu.btn.focus();
}
} else if (e.key === this.options.direction.xInverse) {
this.parentSubMenu.btn.focus();
} else if (e.key === this.options.direction.x) {
if (this.options.direction.y === 'down') {
this.childMenu.getFirst().getFirst('li').getFirst('a').focus();
} else if (this.options.direction.y === 'up') {
// this.childMenu.getFirst().getLast('li').getFirst('a').focus();
}
}
}
}).bind(this));
//this.options.onSubMenuInit_complete(this);
}
})(jQuery);
function s5_create_separator_class() {
if (document.getElementById("subMenusContainer")) {
var s5_create_separator_class = document.getElementById("subMenusContainer").getElementsByTagName("A");
for (var s5_create_separator_class_z = 0; s5_create_separator_class_z < s5_create_separator_class.length; s5_create_separator_class_z++) {
if (s5_create_separator_class[s5_create_separator_class_z].href == "javascript:;") {
if (s5_create_separator_class[s5_create_separator_class_z].parentNode.className == "S5_submenu_item") {
s5_create_separator_class[s5_create_separator_class_z].parentNode.parentNode.className = s5_create_separator_class[s5_create_separator_class_z].parentNode.parentNode.className + " subSepBtn";
}
}
}
}
}
window.onload = s5_create_separator_class;