jQuery(document).ready(function() {
	jQuery("div.bookmark_me, li.bookmark_me").hover(function() {
		var p = jQuery(this);
		var i = 0;
		
		do {
			if ( p.children("div.bookmark_me_extra").size() ) {
				p.children("div.bookmark_me_extra").each(function() {
					var t = jQuery(this);
					var token = Math.random();
					
					if ( t.css('opacity') != 1 ) {
						return;
					}
					
					t.data('doFadeToken', token);
					t.data('doFadeIn', token);
					if ( t.data('doFadeOut') ) {
						t.data('doFadeOut', token);
					} else {
						t.data('doFadeOut', false);
					}
					
					setTimeout(function() {
						if ( !t.data('doFadeOut') && t.data('doFadeIn') === t.data('doFadeToken') ) {
							var r = p.children("div.bookmark_me_ruler");
							var d = jQuery(document);
							var w = jQuery(window);
							
							t.css('top', '');
							t.css('left', '');
							
							if ( r.offset().top + t.height() + 12 > w.height() + w.scrollTop() ) {
								t.css('top', p.children("div.bookmark_me_services").offset().top - t.height() - 12);
							}
					
							if ( t.width() > r.width() && r.offset().left > d.width() / 2 ) {
								t.css('left', r.offset().left + r.width() - t.width());
							}
							
							t.data('doFadeOut', token);
							
							t.fadeIn('normal');
						}
					}, 150);
				});
				break;
			}
			p = p.children();
		} while ( p.children().size() && i++ < 10 );
	}, function() {
		var p = jQuery(this);
		var i = 0;
		do {
			if ( p.children("div.bookmark_me_extra").size() ) {
				p.children("div.bookmark_me_extra").each(function() {
					var t = jQuery(this);
					
					t.data('doFadeIn', false);
					
					setTimeout(function() {
						if ( !t.data('doFadeIn') && t.data('doFadeOut') === t.data('doFadeToken') ) {
							t.data('doFadeIn', false);
							t.data('doFadeOut', false);
							t.fadeOut('slow');
						}
					}, 450);
				});
				break;
			}
			p = p.children();
		} while ( p.children().size() && i++ < 10 );
	});
});
