/*

 *        jQuery dropmenu 1.1.4

 *        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.msie,

                        isIE6        = isIE && $.browser.version <= 7,

                        isIE7        = isIE && $.browser.version == 7,

                        isIE8        = 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

                                });



var temp = $topl.find('> ul').find('li > a, li > span').find('ul')

                        //        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 || isIE8) {

                                $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);
