/**
 * LavaLamp - A menu plugin for jQuery with cool hover effects.
 * @requires jQuery v1.1.3.1 or above
 *
 * http://gmarwaha.com/blog/?p=7
 *
 * Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Version: 0.2.0
 * Requires Jquery 1.2.1 from version 0.2.0 onwards. 
 * For jquery 1.1.x, use version 0.1.0 of lavalamp
 *
 *
 * @xxx 09.03.06 alexei
 * - hacked the code a bit
 *   > we don't need to activate the first item if there aren't any selected elements
 *   > $back should be hidden when there's no item selected
 *   > we need two nodes for those "sliding doors"
 * @xxx 09.05.11 alexei
 * - replaced .selected with .active
 * - the active class should not be on the list item but rather on the anchor
 * @xxx 09.05.18 alexei
 * - added a min width so images don't overlap
 */

( function( $ ) {
	$.fn.lavaLamp = function( o ) {
		o = $.extend( { fx: 'linear', speed: 500, click: function() {} }, o || {} );
		
		return this.each( function() {
			var me = $( this ), noop = function() {},
			$back = $( '<li class="back" style="width: 35px; display: none;"><b class="l"><b class="r"></b></b></li>' ).appendTo( me ),
			$li = $( 'li', this ), curr = $('li:has(a.active)', this)[0] || null;
			$li.not( '.back' ).hover( function() { move( this ); }, noop );
			$( this ).hover( noop, function() { if ( curr ) { move( curr ); } else { $back.stop().hide(); } } );
			$li.click( function( e ) { setCurr( this ); return o.click.apply( this, [e, this] ); } );
			if ( curr ) { setCurr( curr ); }
			function setCurr( el ) { $back.css( { 'display': 'block', 'left': el.offsetLeft +'px', 'width': el.offsetWidth } ); curr = el; };
			function move( el ) { $back.each( function() { $( this ).dequeue(); } ).animate( { width: el.offsetWidth, left: el.offsetLeft }, o.speed, o.fx); };
		} );
	};
} )( jQuery );
