if(jQuery) (function(){
	var ANIMATION_INTERVAL = 30; //ms
	var FIXEDMENU_SCROLL_STEP = 20; //px
	
	jQuery.fn.extend({
		
		floatingBox: function(parent){
			var box_elem = this.filter(':first');
			if(box_elem.length <= 0){
				return false;
			}
			if(box_elem.css('display') != 'block'){
				return false;
			}
			
			if(parent === undefined){
				parent = $(document);
			}

			var fixedmenu_scroll_default = box_elem.offset().top;
			var fixedmenu_scroll_target = fixedmenu_scroll_default;
			var menu_animation = undefined;

			var adjustPos = function(){
				fixedmenu_scroll_target = parent.scrollTop() + fixedmenu_scroll_default;

				if(! menu_animation){
					menu_animation = setInterval(function(){
						var t = 0;
						var fixedmenu_scroll_current = box_elem.offset().top;
						if(Math.abs(fixedmenu_scroll_target - fixedmenu_scroll_current) < FIXEDMENU_SCROLL_STEP){
							t = fixedmenu_scroll_target;
							clearInterval(menu_animation);
							menu_animation = undefined;
						}else{
							var direction = (fixedmenu_scroll_target > fixedmenu_scroll_current)? 1: -1;
							t = fixedmenu_scroll_current + FIXEDMENU_SCROLL_STEP * direction;
						}
						box_elem.css({'top': t + 'px'});
					}, ANIMATION_INTERVAL);
				}
			};
			adjustPos();
			$(window).scroll(adjustPos);

			return true;
		}
	});
})();
