//Written by Ran Zafrir,
//2010-06-01
//
//This file is a wrapper for the JQuery-Tools Tooltip Library

var Tooltip =
{
	/***
	 *
	 * <p>Written by Ran Zafrir.</p>
	 * <p>
	 *	Initializes tooltips for the entire page.<br />
	 * </p>
	 *
	 * <p>This function receives a JSON-object that can contain any of these options:</p>
	 *
	 *
	 * <p><u><strong>List of Options:</strong></u></p>
	 * <br />
	 *
	 * <div style="margin-left: 20px;">
	 *	<ul>
	 *		<li>tipClass</li>
	 *		<li>relative</li>
	 *		<li>position</li>
	 *		<li>offset</li>
	 *		<li>tooltipTriggerClass</li>
	 *		<li>tooltipTriggerOnReadyClass</li>
	 *		<li>wrapInner</li>
	 *		<li>footer</li>
	 *	</ul>
	 * </div>
	 *
	 *
	 *
	 * <p><u><strong>Options Description:</strong></u></p>
	 * <br />
	 *
	 * <div style="margin-left: 20px;">
	 *	<ul>
	 *		<li><strong>tipClass</strong> -<br />
	 *			Optional.<br />
	 *			CSS class name for the generated tooltip element.<br />
	 *			'tooltip' by default.<br />
	 *			<br />
	 *		</li>
	 *
	 *		<li><strong>relative</strong> -<br />
	 *			Optional.<br />
	 *			By default the tooltip position is determined relative to the document (by using the offset() method of jQuery).<br />
	 *			By enabling this property the tooltip position is determined relative to the parent element.<br />
	 *			FALSE by default.<br />
	 *			<br />
	 *		</li>
	 *
	 *		<li><strong>position</strong> -<br />
	 *			Optional.<br />
	 *			Specifies the position of the tooltip. See {@link http://flowplayer.org/tools/tooltip/index.html#positioning} for more information.<br />
	 *			'top center' by default.<br />
	 *			<br />
	 *		</li>
	 *
	 *		<li><strong>offset</strong> -<br />
	 *			Optional.<br />
	 *			Fine tunes the tooltip position specified with the position property. See {@link http://flowplayer.org/tools/tooltip/index.html#positioning} for more information.<br />
	 *			<br />
	 *		</li>
	 *
	 *		<li><strong>tooltipTriggerClass</strong> -<br />
	 *			Optional.<br />
	 *			CSS-Class of elements where the tooltip should be implemented.<br />
	 *			<br />
	 *		</li>
	 *
	 *		<li><strong>tooltipTriggerOnReadyClass</strong> -<br />
	 *			Optional.<br />
	 *			CSS-Class of elements that should have the tooltip displayed on-document-ready.<br />
	 *			<br />
	 *		</li>
	 *
	 *		<li><strong>wrapInner</strong> -<br />
	 *			Optional.<br />
	 *			HTML used as a "container" for the content of the tooltip.<br />
	 *			{@link http://api.jquery.com/wrapInner/}.<br />
	 *			<br />
	 *		</li>
	 *
	 *		<li><strong>footer</strong> -<br />
	 *			Optional.<br />
	 *			Footer of the tooltip<br />
	 *			<br />
	 *		</li>
	 *	</ul>
	 * </div>
	 *
	 *
	 *
	 * @return Void
	 * @requires JQuery
	 *
	 * @author Ran Zafrir
	 *
	 */
	init: function(settings)
	{
		if (
			typeof settings == 'undefined'
			||
			settings == null
			)
		{
			throw 'Must specify settings !';
		}

		var tooltipTriggerClass;
		if (typeof settings.tooltipTriggerClass == 'string')
		{
			tooltipTriggerClass = '.' + settings.tooltipTriggerClass;
		}
		else
		{
			tooltipTriggerClass = '';
		}

		var tooltipSelector;

		if (tooltipTriggerClass == '')
		{
			tooltipSelector =
				$(
					'li[title], ' +
					'a[title]'
				);
		}
		else
		{
			tooltipSelector =
				$(
					'li' + tooltipTriggerClass + ', ' +
					'a' + tooltipTriggerClass
				);
		}

		if (typeof settings.tooltipTriggerOnReadyClass == 'string')
		{
			tooltipSelector =
				tooltipSelector.
				not('.' + settings.tooltipTriggerOnReadyClass)
				;
		}

		var tooltipOptions =
			{
				effect: 'slide',
				opacity: 0.9
			};
		if (typeof settings.tipClass == 'string')
		{
			tooltipOptions.tipClass = settings.tipClass;
		}
		if (typeof settings.relative != 'undefined')
		{
			tooltipOptions.relative = settings.relative;
		}
		if (typeof settings.position == 'string')
		{
			tooltipOptions.position = settings.position;
		}
		if (typeof settings.offset == 'string')
		{
			tooltipOptions.offset = settings.offset;
		}
		if (
			typeof settings.wrapInner != 'undefined'
			&&
			settings.wrapInner != null

			||

			typeof settings.footer != 'undefined'
			&&
			settings.footer != null
			)
		{
			tooltipOptions.onBeforeShow = function()
			{
				var currentTooltip = this.getTip();
				if (
					typeof(currentTooltip.data('tooltipInitialized')) == 'undefined'
					||
					currentTooltip.data('tooltipInitialized') == null
					)
				{
					currentTooltip.data('tooltipInitialized', true);
					if (
						typeof settings.wrapInner != 'undefined'
						&&
						settings.wrapInner != null
						)
					{
						currentTooltip.wrapInner(settings.wrapInner);
					}
					if (
						typeof settings.footer != 'undefined'
						&&
						settings.footer != null
						)
					{
						currentTooltip.append(settings.footer);
					}
				}
			};
			//tooltipOptions.onShow = function()
			//{
			//};
		}

		tooltipSelector.
			tooltip(tooltipOptions).
			dynamic({
				bottom:
				{
					direction: 'down',
					bounce: 'true'
				}
			});

		if (typeof settings.tooltipTriggerOnReadyClass == 'string')
		{
			tooltipOptions =
				{
					effect: 'slide',
					opacity: 0.9,
					events:
					{
						def: '-,-',
						input: '-,-',
						widget: '-,-',
						tooltip: '-,-'
					}
				};
			if (typeof settings.tipClass == 'string')
			{
				tooltipOptions.tipClass = settings.tipClass;
			}
			if (typeof settings.relative != 'undefined')
			{
				tooltipOptions.relative = settings.relative;
			}
			if (typeof settings.position == 'string')
			{
				tooltipOptions.position = settings.position;
			}
			if (typeof settings.offset == 'string')
			{
				tooltipOptions.offset = settings.offset;
			}
			if (
				typeof settings.wrapInner != 'undefined'
				&&
				settings.wrapInner != null

				||

				typeof settings.footer != 'undefined'
				&&
				settings.footer != null
				)
			{
				tooltipOptions.onBeforeShow = function()
				{
					var currentTooltip = this.getTip();
					if (
						typeof(currentTooltip.data('tooltipInitialized')) == 'undefined'
						||
						currentTooltip.data('tooltipInitialized') == null
						)
					{
						currentTooltip.data('tooltipInitialized', true);
						if (
							typeof settings.wrapInner != 'undefined'
							&&
							settings.wrapInner != null
							)
						{
							currentTooltip.wrapInner(settings.wrapInner);
						}
						if (
							typeof settings.footer != 'undefined'
							&&
							settings.footer != null
							)
						{
							currentTooltip.append(settings.footer);
						}
					}
				};
			}

			$('.' + settings.tooltipTriggerOnReadyClass).tooltip(tooltipOptions).
				dynamic({
					bottom:
					{
						direction: 'down',
						bounce: 'true'
					}
				}).
				tooltip().
				show()
				;
		}
	},

	hide: function(selector)
	{
		$(selector).tooltip().hide();
	},

	show: function(selector)
	{
		$(selector).tooltip().show();
	}
};
