/*
 * =============================================================================
 * 
 * PIXELMENU Plugin Definition - 2011
 * Author: Pixelcloth
 * Version: 1.1
 * 
 * =============================================================================
 * */

(function ($) {

    // config object

    $.fn.pixelMenu = function(config) {


        var defaults = {
            moreText: '',
            animationSpeed: 500,
            animationType: 1,
            delay: 0
        };

        config = $.extend({}, defaults, config);


        $(this).find('ul.sub-menu').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.sub-menu').css('display', 'none');

        var isSelected = false;
        var selItem = null;

        var firstLevelElements = $(this).find('li a').not('ul.sub-menu 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');
                            }
                            
                        }
                    });
                }
                
                var selElem = $(this).find('ul.sub-menu:first');
                /*
                
             */
                switch ( config.animationType ) {
                    case 1 :
                        selElem.css({
                            overflow: 'hidden',
                            height: 'auto',
                            display: 'none',
                            filter: ''
                        }).stop().slideDown(config.animationSpeed, function() {
                            $(this).css('overflow', 'visible')
                        });
                        break;
                    case 2 :
                        selElem.css({
                            overflow: 'hidden',
                            height: 'auto',
                            display: 'none',
                            opacity: 1,
                            filter: ''
                        }).stop().fadeIn(config.animationSpeed, function() {
                            $(this).css('overflow', 'visible')
                        });
                        break;
                    default:
                        break;
                }

            },
            function() {

                if ( $(this).html() == selItem.html() ) {

                    if ( !isSelected ) {
                        selItem.removeClass('selected');
                    }
                    selItem = null;
                    isSelected = false;

                }
                if ( $(this).find('ul.sub-menu:first').html() ) {

                    switch ( config.animationType ) {
                        case 1 :
                            $(this).find('ul.sub-menu:first').stop().slideUp(config.animationSpeed, function() {
                                $(this).css({
                                    overflow: 'hidden',
                                    height: 'auto',
                                    display: 'none',
                                    filter: ''
                                });
                            });
                            break;
                        case 2 :
                            $(this).find('ul.sub-menu:first').stop().fadeOut(config.animationSpeed, function() {
                                $(this).css({
                                    filter: '',
                                    opacity: 1
                                })
                            });
                            break;
                    }
    
                }
            } );
    }
})(jQuery);
