if (xhr_enabled()) {

	// function to find the x, y position of an element (from http://www.quirksmode.org/js/findpos.html)
	jQuery.fn.findPos = function(){
		var obj = this.get(0);
		var curleft = curtop = 0;
		if (obj && obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft, curtop];
	}

	var preload = new Image();
	preload.src = '/_assets/img/namebubble.png';
	var preload2 = new Image();
	preload2.src = '/_assets/img/namebubble.gif';
	var preload3 = new Image();
	preload3.src = '/_assets/img/gender_M.gif';
	var preload4 = new Image();
	preload4.src = '/_assets/img/gender_F.gif';
	var preload5 = new Image();
	preload5.src = '/_assets/img/gender_E.gif';
	
	jQuery.wait_for('div.footer', function(){
		var data_cache = {};
		var linkTimeout;
		
		function remove_balloon(){
			clearTimeout(linkTimeout);
			jQuery('#name-balloon').remove();
		}

		function add_balloon(){
		
			/* previous method improved to allow whole name searches
			 var link = jQuery(this);
			 var name = link.text();
			 id = link.attr('id').split('_')[1];
			 }*/

			var name = $(this).text();
			var id = name;
			
			var idattr = new String($(this).attr('id'));
			
			re = /name_(\d+)/;
			if (idm = idattr.match(re)) {
				if (idm[1] > 0) {
					id = idm[1];
				}
			}
			
			if (jQuery('#name-balloon').attr('_name_id') == id) 
				return;
			
			remove_balloon();
			
			var link_pos = $(this).findPos();
			var link_width = $(this).width();
			
			var balloon = jQuery('<div></div>').appendTo('body')
							.attr('id', 'name-balloon')
							.attr('_name_id', id)
							.css({
									left: (link_pos[0] + link_width) + 'px',
									top: (link_pos[1] - 47) + 'px'
								})
							.mouseover(function(){clearTimeout(linkTimeout)})
							.mousemove(function(){clearTimeout(linkTimeout)})
							.mouseout(function() {linkTimeout = setTimeout(function() {remove_balloon()},500)});
			
			jQuery('<div></div>').addClass('name-balloon-bg').appendTo(balloon);
			
			jQuery('<h1></h1>').text(name).appendTo(balloon);
			
			jQuery('<p></p>').text('Loading...').appendTo(balloon);
			jQuery('<p></p>').html('&nbsp;').appendTo(balloon);
			
			var links = jQuery('<p></p>').addClass('name-balloon-links');
			
			jQuery('<a></a>').attr('href', '/name/' + name).text('more info').appendTo(links);
			
			jQuery('<a></a>').addClass('add-to-faves').text('add to faves').click(function(){
				addNameList(id);
				return false;
			}).appendTo(links);
			
			jQuery('<a></a>').text('close').attr('href', '#').click(function(){
				remove_balloon();
				return false;
			}).appendTo(links);
			function callback(data){
				jQuery('p:first', balloon).text(data.meaning);
				jQuery('p:eq(1)', balloon).text('Origin: ' + data.origin);
				jQuery(links).appendTo(balloon);
				jQuery('<img>').attr('src', '/_assets/img/gender_' + data.gender + '.gif').appendTo(balloon);
			}

			if (data_cache[id]) {
				callback(data_cache[id]);
			}
			else {
				jQuery.ajax({
					dataType: 'json',
					cache: false,
					type: 'GET',
					contentType: "application/json",
					url: '/_assets/inc/namelist_ajax.php', 
					data: { method: 'getNameInfo', id: id }, 
					success: function(data){
						data_cache[id] = data;
						callback(data);
					}
				});
			}
		}

		jQuery('a.name-balloon-holder').mouseover(add_balloon).mouseout(function() {linkTimeout = setTimeout(function() {remove_balloon()},500)});
		jQuery('span.namepop').mouseover(add_balloon).mouseout(function() {linkTimeout = setTimeout(function() {remove_balloon()},500)});

	}); // footer ready

} // xhr_enabled
