/*
 * PixelMenu Plugin Definition
 */

(function ($) {

    // config object


    $.fn.pixelMenu = function(config) {

        var defaults = {
            moreText: '',
            animationSpeed: 500,
            delay: 0
        };

        config = $.extend({}, defaults, config);



        $(this).find('ul.children').each(function() {
            var html = $(this).parent().find('a:first span').html();

            if ( html == '' || html == null ) {
                html = $(this).parent().find('a:first').html();
                $(this).parent().find('a:first').html(html + config.moreText);
                $(this).parent().find('a:first').addClass('drop');
            } else {
                $(this).parent().find('a:first span').html(html + config.moreText);
                $(this).parent().find('a:first span').addClass('drop');
            }
        });

        $(this).find('ul.children').css('display', 'none');

        var isSelected = false;
        var selItem = null;

        var firstLevelElements = $(this).find('li a').not('ul.children li a');

        $(this).find('li').hover(
            function() {
                var currSel = $(this);

                if ( !selItem ) {
                    firstLevelElements.each(function() {
                        if ( $(this).html() == currSel.find('a').html() ) {
                            selItem = currSel;
                            isSelected = selItem.hasClass('selected');
                            if ( !isSelected ) {
                                selItem.addClass('selected');
                            }
                        }
                    });
                }

                $(this).find('ul.children:first').stop().css({
                    overflow: 'hidden',
                    height: 'auto',
                    display: 'none'
                }).slideDown(config.animationSpeed, function() {
                    $(this).css({
                        overflow: 'visible'
                    })
                });

            },
            function() {
                if ( $(this).html() == selItem.html() ) {
                    if ( !isSelected ) {
                        selItem.removeClass('selected');
                    }
                    selItem = null;
                    isSelected = false;
                }
                if ( $(this).find('ul.children:first').html() ) {
                    $(this).find('ul.children:first').stop().slideUp(150, function() {
                        $(this).css({
                            overflow: 'hidden',
                            height: 'auto',
                            display: 'none'
                        });
                    });
                }
            } );
    }
})(jQuery);
