/* Copyright (c) 2008 Brian Beck (exogen@gmail.com)
 * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.
 *
 * Version: 1.0
 *
 * Requires:
 *   jQuery 1.2+
 *   Dimensions (http://plugins.jquery.com/project/dimensions)
 */

(function($) {
    $.extend({
        ahover: {
            version: 1.0,
            defaults: {
                toggleSpeed: 75,
                toggleEffect: 'both',
                hoverEffect: null,
                moveSpeed: 250,
                easing: 'swing',
                className: 'ahover'
            },
            effects: {
                'width': {width: 0},
                'height': {height: 0},
                'both': {width: 0, height: 0}
            }
        }
    });
    
    $.fn.extend({
        ahover: function(options) {
            var options = $.extend({}, $.ahover.defaults, options);
            var effect = (
                (typeof options.toggleEffect == 'string') ?
                $.ahover.effects[options.toggleEffect] : options.toggleEffect
            );            
            var parent = this.offsetParent();
           
            var overSize = {
                width: 165,
                height: 35
            };
            
            var selected = $('#menu').find('li.selected').filter(':not(.news)');
            var under = null;
            if (selected.length == 1) {
            	under = $('<div>&nbsp;</div>')
                            .addClass(options.className)
                            .appendTo(parent).css(overSize);
              var overOffset = selected.offset();
              var parentOffset = parent.offset();
              var underOffset = {
                  left: overOffset.left - parentOffset.left - 17 -
                      (under.outerWidth() - under.width()) / 2,
                  top: 82
              }
              
              under.css(underOffset).css(effect).animate(overSize, {
                  queue: false,
                  duration: options.toggleSpeed,
                  easing: options.easing
              });
            }
            
            return this.hover(
                function(e) {
                    var over = $(this);
                    
                    var overOffset = over.offset();
                    var parentOffset = parent.offset();

                    var under = $('div.' + options.className, parent).stop();
                    var created = (under.length == 0);
                    if (created) {
                        under = $('<div>&nbsp;</div>')
                            .addClass(options.className)
                            .appendTo(parent).css(overSize);
                    }
                                                            
                    var underOffset = {
                        left: overOffset.left - parentOffset.left - 17 -
                            (under.outerWidth() - under.width()) / 2,
                        top: 82
                    }

                    if (created) {
                        under.css(underOffset).css(effect).animate(overSize, {
                            queue: false,
                            duration: options.toggleSpeed,
                            easing: options.easing
                        });
                    } else {
                        var underCSS = $.extend({}, overSize, underOffset);
                        under.animate(underCSS, {
                            queue: false,
                            duration: options.moveSpeed,
                            easing: options.easing
                        });
                    }
                    if ($.isFunction(options.hoverEffect)) {
                        under.queue(options.hoverEffect);
                    }
                },
                function(e) {
                  if (selected.length == 0) {
                    $('div.' + options.className, parent).animate(effect, {
                        queue: false,
                        duration: options.toggleSpeed,
                        easing: options.easing,
                        complete: function() { $(this).remove(); }
                    });
                  } else {
              	    var underCSS = $.extend({}, overSize, underOffset);
                    under.animate(underCSS, {
                        queue: false,
                        duration: options.moveSpeed,
                        easing: options.easing
                    });
                  }
                }
            );
        }
    });
})(jQuery);