(function($)
{
	$.fn.neoHover = function(options)
	{
		var defaults = {
			init: true,
			hoverElement: 'span',
			queue: false,
			duration: 200,
			opacity: true,
			easing: 'linear',
			initWidth: null,
			initHeight: null,
			maxWidth: null,
			maxHeight: null,
			inverted: false
		};

		var options = $.extend(defaults, options);

		return this.each(function()
		{
			var $this = $(this);

			$this.fadeTo(0, 1);

			var elWidth = $this.width();
			var elHeight = $this.height();
			var elBg = $this.css('background-image');
			var elPosBg = '0 ' + (-elHeight) + 'px';
			
			if(options.inverted)
			{
				$this.css('background-position', elPosBg);
				elPosBg = '0 0';
			}
			
			//var nocache = '?nocache=' + Math.random()
			//elBg = elBg.split(')')[0] + nocache + ')';

			if ($(options.hoverElement, $this).html() == null || $(options.hoverElement, $this).html() == undefined || $(options.hoverElement, $this).html() == '')
			{
				$this.html('<' + options.hoverElement + '>' + $this.html() + '</' + options.hoverElement + '>');
			}

			$(options.hoverElement, this)
				.fadeTo(0, 0)
				.height(elHeight)
				.width(elWidth)
				.css({
					'float': 'left',
					'display': 'block',
					'margin': '0',
					'padding': '0',
					'width': options.initWidth ? options.initWidth : elWidth,
					'height': options.initHeight ? options.initHeight : elHeight,
					'background-image': elBg,
					'background-position': elPosBg,
					'cursor': 'pointer'
				});

			if (options.init)
			{
				$(options.hoverElement, this).hover(function()
				{
					$(this).animate({
						opacity: options.opacity ? 1 : 0,
						width: options.maxWidth ? options.maxWidth : elWidth,
						height: options.maxHeight ? options.maxHeight : elHeight
					}, {
						queue: options.queue,
						duration: options.duration,
						easing: options.easing,
						complete: options.complete
					});
				}, function()
				{
					$(this).animate({
						opacity: options.opacity ? 0 : 1,
						width: options.initWidth ? options.initWidth : elWidth,
						height: options.initHeight ? options.initHeight : elHeight
					}, {
						queue: options.queue,
						duration: options.duration,
						easing: options.easing,
						complete: options.complete
					});
				});
			}
		});
	};
})(jQuery); 
