jQuery.fn.positionObject = function(referrer, settings) { 
	var settings = jQuery.extend({
		posX: 'left', 
		posY: 'bottom',
		offsetX: 0,
		offsetY: 0,
		directionH: 'right',
		directionV: 'down', 
		detectH: true, // do horizontal collision detection  
		detectV: true, // do vertical collision detection
		linkToFront: false
	}, settings);

	var el = $(this);
	var dims = {
		elW: el.width(),
		elH: el.height(),
		refX: referrer.offset().left,
		refY: referrer.offset().top,
		refW: referrer.getTotalWidth(),
		refH: referrer.getTotalHeight()
	};	
	var xVal, yVal;
	
	el.insertPositionHelper(dims);
	
	// X pos
	switch(settings.posX) {
		case 'left': 	xVal = 0; 
			break;				
		case 'center': xVal = dims.refW / 2;
			break;				
		case 'right': xVal = dims.refW;
			break;
	};
	
	// Y pos
	switch(settings.posY) {
		case 'top': 	yVal = 0;
			break;				
		case 'center': yVal = dims.refH / 2;
			break;				
		case 'bottom': yVal = dims.refH;
			break;
	};
	
	// add the offsets (zero by default)
	xVal += settings.offsetX;
	yVal += settings.offsetY;
	
	// position the object vertically
	if (settings.directionV == 'up') {
		el.css({ top: 'auto', bottom: yVal });
		if (settings.detectV && !fitVertical(el)) {
			el.css({ bottom: 'auto', top: yVal });
		}
	} 
	else {
		el.css({ bottom: 'auto', top: yVal });
		if (settings.detectV && !fitVertical(el)) {
			el.css({ top: 'auto', bottom: yVal });
		}
	};
	
	// and horizontally
	if (settings.directionH == 'left') {
		el.css({ left: 'auto', right: xVal });
		if (settings.detectH && !fitHorizontal(el)) {
			el.css({ right: 'auto', left: xVal });
		}
	} 
	else {
		el.css({ right: 'auto', left: xVal });
		if (settings.detectH && !fitHorizontal(el)) {
			el.css({ left: 'auto', right: xVal });
		}
	};
	
	// if specified, clone the referring element and position it so that it appears on top of the menu
	if (settings.linkToFront) {
		referrer.clone().addClass('linkClone').css({
			position: 'absolute', 
			top: 0, 
			right: 'auto', 
			bottom: 'auto', 
			left: 0, 
			width: referrer.width(), 
			height: referrer.height()
		}).insertAfter(el);
	};

	return $(this);
};

jQuery.fn.insertPositionHelper = function(dims) {
	var el = $(this);
	var helper = $('<div class="positionHelper"></div>');
	helper.css({ left: dims.refX, top: dims.refY, width: dims.refW, height: dims.refH });
	el.wrap(helper);
	return $(this);
};
