jQuery.fn.initMenu = function() {  
    return this.each(function(){
        var theMenu = $(this).get(0);
        $('.toggle', this).hide();
        $('li.expand > .toggle', this).show();
        $('li.expand > .toggle', this).prev().addClass('active');
        $('li a', this).click(
            function(e) {
                e.stopImmediatePropagation();
                var theElement = $(this).next();
                var parent = this.parentNode.parentNode;
                if($(parent).hasClass('noaccordion')) {
                    if(theElement[0] === undefined) {
                        window.location.href = this.href;
                    }
                    $(theElement).slideToggle('normal', function() {
                        if ($(this).is(':visible')) {
                            $(this).prev().addClass('active');
                        }
                        else {
                            $(this).prev().removeClass('active');
                        }    
                    });
                    return false;
                }
                else {
                    if(theElement.hasClass('toggle') && theElement.is(':visible')) {
                        if($(parent).hasClass('collapsible')) {
                            $('.toggle:visible', parent).first().slideUp('normal', 
                            function() {
                                $(this).prev().removeClass('active');
                            }
                        );
                        return false;  
                    }
                    return false;
                }
                if(theElement.hasClass('toggle') && !theElement.is(':visible')) {         
                    $('.toggle:visible', parent).first().slideUp('normal', function() {
                        $(this).prev().removeClass('active');
                    });
                    theElement.slideDown('normal', function() {
                        $(this).prev().addClass('active');
                    });
                    return false;
                }
            }
        }
    );
});
};

$(document).ready(function() {$('.menu').initMenu();});


/* 
NOTES: 

Each menu MUST have a class 'menu' set. If the menu doesn't have this, the JS won't make it dynamic. 

If you want a panel to be expanded at page load, give the containing LI element the classname 'expand'. Use this to set the right state in your page (generation) code.

Optional extra classnames for the UL element that holds an accordion:
noaccordion : no accordion functionality -- "accordion" means that if one UL is open, and you open another, the first will close. "noaccordion" makes it so you can open all the ULs at once, clicking each again to close it.
collapsible : menu works like an accordion but can be fully collapsed by clicking an open UL.

HTML structure to use:

<ul class="menu [optional class] [optional class]">
<li><a href="#">Sub menu heading</a>
<ul>
<li><a href="http://site.com/">Link</a></li>
<li><a href="http://site.com/">Link</a></li>
<li><a href="http://site.com/">Link</a></li>
...
...
</ul>
// This item is open at page load time
<li class="expand"><a href="#">Sub menu heading</a>
<ul>
<li><a href="http://site.com/">Link</a></li>
<li><a href="http://site.com/">Link</a></li>
<li><a href="http://site.com/">Link</a></li>
...
...
</ul>
...
...
</ul>


Copyright 2007-2010 by Marco van Hylckama Vlieg
web: http://www.i-marco.nl/weblog/
email: marco@i-marco.nl

Free to use any way you like.
*/

/* Modified and styled for UNC GAA by Thomas Duncan May-June 2010 */
