(function($) {
	jQuery.fn.kMenu = function(options) {
		var defaults = {
			bind: 'mouseover',
			revert: false,
			indicatorClass: 'menuIndicator',
			height: '20',
			tolerance: 0,
			speed: 200,
			easing: '',
			callBefore: function() { },
			callAfter: function() { }
		};
		var options = $.extend(defaults, options);
		return $(this).each(function() {
			var selected_position = $(this).children().index($(this).find('.selected'));
			var paddingLeft = parseFloat($(this).find('li.selected a').css('padding-left'));
			var paddingRight = parseFloat($(this).find('li.selected a').css('padding-right'));
			var width = (paddingLeft+paddingRight)+$(this).find('li.selected a').width();
			var start_position = $(this).find('li.selected a').position().left;
			var selectedItem = 'position:absolute;left:'+start_position+'px;width:'+(width+options.tolerance)+'px;height:'+options.height+'px';
			$(this).before('<div class="'+options.indicatorClass+'" style="'+selectedItem+'"></div>');
			options.callBefore.call(this);
			$(this).children('li').each(function() {
				$(this).children('a').css({position: 'relative'}).bind(options.bind, function() {
					var paddingLeft = parseFloat($(this).css('padding-left'));
					var paddingRight = parseFloat($(this).css('padding-right'));
					$(this).parent().addClass('selected').siblings().removeClass('selected');
					$(this).parent().parent().prev('.'+options.indicatorClass).stop().animate({width: ($(this).width()+(paddingLeft+paddingRight)+options.tolerance), left: $(this).position().left+'px'}, options.speed, options.easing, function() {
						// do some action
						options.callAfter.call(this);
					})
				});
			});
			if(options.revert) {
				$(this).bind('mouseleave', function() {
					$('.'+options.indicatorClass).stop().animate({width: (width+options.tolerance)+'px', left: start_position+'px'});
					$(this).children('li:eq('+selected_position+')').addClass('selected').siblings().removeClass('selected');
				});
			}
		});
	};
})(jQuery);
