function add_help_popup(selector, tip_position, popup_text, event, display, zindex, extrastyle) {
	var elem = $(selector);

	if (zindex == undefined) {
		zindex = 100200000000;
	}

	if (!elem.length) { // the element was not found -- so just return
		return;
	}

	var tooltip		= $('<div>',{
			id			: 'precious_help_tooltip_'+event+'_'+tip_position,
			className 	: 'precious_help_tooltip viewable ' + event + ' ' + tip_position,
			html		: '<p>'+popup_text+'</p><span class="tooltip_arrow"></span>'
	}).css({
//			'display'			: 'none',
//			'background-color'	: 'black',
//			'border'            : '1px solid #333333',
//			'color'				: 'white',
			'z-index'   : zindex,
			'position':	'fixed'
	});


	/*tooltip.mousemove(function(event) {
		tooltip.hide();
		setTimeout(function() {
			tooltip.show();
		}, 1000);
	});*/

	if (event != undefined) {
		jQuery(document).bind(event, function(event, left, top) {
			if (tooltip.css('position') == 'fixed') {
				tooltip.css('left', parseInt(tooltip.css('left')) + left);
				tooltip.css('top', parseInt(tooltip.css('top')) + top);
			} else {
				var position = tooltip.position();
				tooltip.css('left', position.left + left);
				tooltip.css('top', position.top + top);
			}
		});
	}

	////////////////////////////////////////
	//append the tooltip but hide it
	//get some info of the element
	$('BODY').prepend(tooltip);
	var properties = calcToolTipPosition(tip_position, elem, tooltip);
	if (extrastyle == undefined) {
		extrastyle = {};
	}

	//determine whether or not to display the tooltip
	if (display === 'none') {
		tooltip.css(properties).css(extrastyle).hide();
	} else {
		tooltip.css(properties).css(extrastyle).show();
	}
	
}

function calcToolTipPosition(tip_position, elem, tooltip) {
	var e_w				= elem.outerWidth();
	var e_h				= elem.outerHeight();
	var e_l				= elem.offset().left - jQuery(document).scrollLeft();
	var e_t				= elem.offset().top - jQuery(document).scrollTop();


	tooltip.find('span.tooltip_arrow').removeClass('tooltip_arrow_TL tooltip_arrow_TR tooltip_arrow_BL tooltip_arrow_BR tooltip_arrow_LT tooltip_arrow_LB tooltip_arrow_RT tooltip_arrow_RB tooltip_arrow_T tooltip_arrow_R tooltip_arrow_B tooltip_arrow_L');

	var properties		= {};
	switch(tip_position){
			case 'TL'	:
					properties = {
							'left'	: e_l,
							'top'	: e_t + e_h + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_TL');
					break;
			case 'TR'	:
					properties = {
							'left'	: e_l + e_w - 15 - tooltip.width() + 'px',
							'top'	: e_t + e_h + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_TR');
					break;
			case 'BL'	:
					properties = {
							'left'	: e_l + 'px',
							'top'	: e_t - tooltip.height() + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_BL');
					break;
			case 'BR'	:
					properties = {
							'left'	: e_l + e_w - tooltip.width() + 'px',
							'top'	: e_t - tooltip.height() + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_BR');
					break;
			case 'LT'	:
					properties = {
							'left'	: e_l + e_w + 'px',
							'top'	: e_t + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_LT');
					break;
			case 'LB'	:
					properties = {
							'left'	: e_l + e_w + 'px',
							'top'	: e_t + e_h - tooltip.height() + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_LB');
					break;
			case 'LB4'	:
					properties = {
							'left'	: e_l + e_w + 'px',
							'top'	: e_t + (e_h * .75) - tooltip.height() + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_L');
					break;
			case 'RT'	:
					properties = {
							'left'	: e_l - tooltip.width() /*- 25*/ + 'px',
							'top'	: e_t + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_RT');
					break;
			case 'RB'	:
					properties = {
							'left'	: e_l - tooltip.width() + 'px',
							'top'	: e_t + e_h - tooltip.height() + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_RB');
					break;
			case 'RB4'	:
					properties = {
							'left'	: e_l - tooltip.width() + 'px',
							'top'	: e_t + (e_h * .75) - tooltip.height() + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_R');
					break;
			case 'T'	:
					properties = {
							'left'	: e_l + e_w/2 - tooltip.width()/2 + 'px',
							'top'	: e_t + e_h + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_T');
					break;
			case 'R'	:
					properties = {
							'left'	: e_l /*- 10*/ - tooltip.width() + 'px',
							'top'	: e_t + e_h/2 - tooltip.height()/2 + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_R');
					break;
			case 'B'	:
					properties = {
							'left'	: e_l + e_w/2 - tooltip.width()/2 + 'px',
							'top'	: e_t - tooltip.height() + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_B');
					break;
			case 'L'	:
					properties = {
							'left'	: e_l + e_w  + 'px',
							'top'	: e_t + e_h/2 - tooltip.height()/2 + 'px'
					};
					tooltip.find('span.tooltip_arrow').addClass('tooltip_arrow_L');
					break;
	}

	return properties;
}


function setupHoverHelp(selector) {
	jQuery(selector).hover(
		function() {
			jQuery(this).find('.helpMessage').show();
		},
		function() {
			jQuery(this).find('.helpMessage').hide();
		}
	);
}

