/*	
 *	jQuery dropmenu 1.1.3
 *	www.frebsite.nl
 *	Copyright (c) 2010 Fred Heusschen
 *	Licensed under the MIT license.
 *	http://www.opensource.org/licenses/mit-license.php
 */
 
 
(function ($) {
    $.fn.dropmenu = function (options) {
        var isIE = $.browser.ie,
			isIE6 = isIE && $.browser.version < 7,
			isIE7 = isIE && $.browser.version < 8;


        return this.each(function () {

            var opts = $.extend({}, $.fn.dropmenu.defaults, options),
				$menu = $(this),
				$topl = $menu.find('> li'),
				menuX = $menu.offset().left;

            if (opts.maxWidth == 0) {
                opts.maxWidth = $('body').width() - menuX;
            }

            //	UL itself and all LI's
            $menu
				.css({
				    display: 'block',
				    listStyle: 'none'
				})
				.find("li")
				.css({
				    display: 'block',
				    listStyle: 'none',
				    position: 'relative',
				    margin: 0,
				    padding: 0
				});


            var css = {
                display: 'block',
                outline: 'none'
            };
            if (opts.nbsp) css['whiteSpace'] = 'nowrap';

            //	all A's and SPANs
            $menu
				.find('li > a, li > span')
				.css(css);


            //	top-level LI's and top level A's and SPANs
            $topl
				.css({
				    float: 'left'
				})
				.find('> a, > span')
				.addClass('toplevel')
				.css({
				    float: 'left'
				});

            //	all sub-ULs
            $menu
				.find('ul')
				.css({
				    display: 'none',
				    position: 'absolute',
				    margin: 0,
				    padding: 0
				});

            //	first sub-UL and second, third, etc. sub-ULs
            $topl
				.find('> ul')
				.css({
				    left: 0,
				    top: $topl.outerHeight()
				})
				.find('li > a, li > span')
				.addClass('sublevel')
				.parent()
				.find('ul')
				.css({
				    top: 0
				}).data('subsub', true);

            $topl



            //	IE fixes
            if (isIE6) {
                $menu.find('ul').css({
                    lineHeight: 0
                });
            }
            if (isIE6 || isIE7) {
                $menu.find('ul a, ul span').css({
                    zoom: 1
                });
            }


            $menu.find('a').click(function () {
                $('ul', $menu).hide();
                $('a, span', $menu).removeClass('hover');
            });

            $menu.find('li').hover(

            //	showing submenu
				function () {
				    var listit = this,
						subnav = $.fn.dropmenu.getSubnav(listit),
						subcss = { zIndex: $.fn.dropmenu.zIndex++ };

				    $(listit).find('> a, > span').addClass('hover');

				    if (!subnav) return;
				    if ($(subnav).is(":animated")) return;

				    if ($.data(subnav, 'subsub')) {
				        var distance = $(listit).outerWidth(),
							itemWidth = $(listit).offset().left + distance - menuX,
							position = (opts.maxWidth < itemWidth) ? "right" : "left";

				        subcss[position] = distance;
				    }
				    $(subnav).css(subcss);
				    $.data(subnav, 'stayOpen', true);

				    switch (opts.effect) {
				        case 'slide':
				            $(subnav).slideDown(opts.speed);
				            break;

				        case 'fade':
				            $(subnav).fadeIn(opts.speed);
				            break;

				        default:
				            $(subnav).show();
				            break;
				    }

				    //	hiding submenu
				}, function () {
				    var listit = this,
						subnav = $.fn.dropmenu.getSubnav(listit);

				    if (!subnav) {
				        $(listit).find('> a, > span').removeClass('hover');
				        return;
				    }

				    $.data(subnav, 'stayOpen', false);
				    setTimeout(function () {
				        if ($.data(subnav, 'stayOpen')) return;
				        $(listit).find('> a, > span').removeClass('hover');

				        $('ul', subnav).hide();
				        switch (opts.effect) {
				            case 'slide':
				                $(subnav).slideUp(opts.speed);
				                break;

				            case 'fade':
				                $(subnav).fadeOut(opts.speed);
				                break;

				            default:
				                $(subnav).hide();
				                break;
				        }

				    }, opts.timeout);
				}
			);
        });
    };

    $.fn.dropmenu.getSubnav = function (ele) {
        if (ele.nodeName.toLowerCase() == 'li') {
            var subnav = $('> ul', ele);
            return subnav.length ? subnav[0] : null;
        } else {
            return ele;
        }
    }

    $.fn.dropmenu.zIndex = 1000;
    $.fn.dropmenu.defaults = {
        effect: 'none', 	//	'slide', 'fade', or 'none'
        speed: 'normal', 	//	'normal', 'fast', 'slow', 100, 1000, etc
        timeout: 250,
        nbsp: false,
        maxWidth: 0
    };
})(jQuery);
