docs: function(helper) {
  			
  			var target = {},
  				rects = this.__instance._$origin[0].getClientRects();
  			
  			// these lines fix a Chrome bug (issue #491)
  			if (rects.length > 1) {
  				var opacity = this.__instance._$origin.css('opacity');
  				if(opacity == 1) {
  					this.__instance._$origin.css('opacity', 0.99);
  					rects = this.__instance._$origin[0].getClientRects();
  					this.__instance._$origin.css('opacity', 1);
  				}
  			}
  			
  			// by default, the target will be the middle of the origin
  			if (rects.length < 2) {
  				
  				target.top = Math.floor(helper.geo.origin.windowOffset.left + (helper.geo.origin.size.width / 2));
  				target.bottom = target.top;
  				
  				target.left = Math.floor(helper.geo.origin.windowOffset.top + (helper.geo.origin.size.height / 2));
  				target.right = target.left;
  			}
  			// if multiple client rects exist, the element may be text split
  			// up into multiple lines and the middle of the origin may not be
  			// best option anymore. We need to choose the best target client rect
  			else {
  				
  				// top: the first
  				var targetRect = rects[0];
  				target.top = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);
  		
  				// right: the middle line, rounded down in case there is an even
  				// number of lines (looks more centered => check out the
  				// demo with 4 split lines)
  				if (rects.length > 2) {
  					targetRect = rects[Math.ceil(rects.length / 2) - 1];
  				}
  				else {
  					targetRect = rects[0];
  				}
  				target.right = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);
  		
  				// bottom: the last
  				targetRect = rects[rects.length - 1];
  				target.bottom = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);
  		
  				// left: the middle line, rounded up
  				if (rects.length > 2) {
  					targetRect = rects[Math.ceil((rects.length + 1) / 2) - 1];
  				}
  				else {
  					targetRect = rects[rects.length - 1];
  				}
  				
  				target.left = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);
  			}
  			
  			return target;
  		}