/*
*
* ResponsiNav Plugin
* @author - Kent Safranski - http://www.fluidbyte.net
*
*/
(function ($) {
$.fn.responsinav = function (o) {
var o = jQuery.extend({breakpoint: 480}, o);
// 0 = Full, 1 = Mobile
rn_mode = undefined;
sub_nav_bind = false
/* init */
// Bind to load and resize
$(window).bind('load resize', function () {
// Run mode by width
if ($(window).width() <= o.breakpoint) {
if (rn_mode == 0 || rn_mode == undefined) {
nav.reset();
nav.mobile();
}
} else {
if (rn_mode == 1 || rn_mode == undefined) {
nav.reset();
nav.full();
}
}
});
nav = {
reset: function () {
$('nav>ul li').unbind('mouseenter mouseleave click');
$('nav .sub_nav').unbind('click').remove();
},
full: function () {
// Set mode
curz = "";
rn_mode = 0;
// Ensure nav is visible, hide sub
$('nav>ul').show();
$('nav ul ul').hide();
// Behavior
$("nav>ul li").hover(function () {
var timeout = $(this).data("timeout");
if (timeout) clearTimeout(timeout);
$(this).children("ul").slideDown(300).css({'z-index': curz++});
}, function () {
$(this).data("timeout", setTimeout($.proxy(function () {
$(this).find("ul").slideUp(300);
}, this), 300));
});
},
mobile: function () {
// Set mode
rn_mode = 1;
// Start nav hidden
$('nav>ul').hide();
// Create mobile handle
if ($('nav>a.mobile_handle').length == 0) {
$('Navigation').appendTo('nav');
}
// Mobile handle toggle
$('nav>a.mobile_handle').unbind('click');
$('nav>a.mobile_handle').click(function () {
$('nav>ul').slideToggle(300);
});
// Arrows
if ($('.sub_nav').length == 0) {
$('nav ul li').each(function () {
if ($(this).children('ul').length > 0) {
$('').appendTo(this);
}
});
}
// Sub-Nav
if (sub_nav_bind == false) {
$('nav>ul').delegate('.sub_nav', 'click', function (e) {
$(this).siblings('ul').slideToggle(300);
if ($(this).children('div').hasClass('arrow_down')) {
$(this).children('div').attr('class', 'arrow_up');
} else {
$(this).children('div').attr('class', 'arrow_down');
}
});
sub_nav_bind = true;
}
}
};
};
})(jQuery);