$(document).ready(function(){
	$.fn.aero_tooltip = function(options){

		/*
			В качестве тултипа используется либо существующий на странице объект
			(при задании element), либо дочерний элемент данного (при задании childElement),
			либо создается новый автоматически

			Содержимое тултипа либо остается таким как есть (по умолчанию), либо
			устанавливается равным html или text (если они заданы), либо
			грузится с адреса url (если он задан)
		*/

		var default_options = {
			'url': null,                 // Урл, с которого грузится содержимое тултипа
			'loadEveryTime': false,      // грузить ли содержимое каждый раз при показе тултипа, или только один раз
			'element': null,             // jQuery-объект, содержащий сам тултип
			'childElement': null,        // jQuery-селектор, указывающий на тултип, если он является дочерним элементом текущего
			'html': null,                // текст-содержимое тултипа с поддержкой разметки HTML
			'text': null,                // текст-содержимое тултипа без поддержки разметки
			'position': 'center',        // НЕ РЕАЛИЗОВАНО, расположение тултипа относительно текущего элемента
			'_absolute': false,
			'x': 0,                      // смещение тултипа по горизонтали, +/-
			'y': 0,                      // смещение тултипа по вертикали, +/-
			'events': {'show':'mouseenter', 'hide':'mouseleave'},
			afterShow: null,
			afterHide: null,
			beforeShow: null,
			beforeHide: null
			/*
				события, на которые привязано появление/скрытие тултипа. В виде объекта
				{
					show: '',
					hide: '',
					toggle: ''
				}
				все элементы не обязательны
				в кавычках указываются события в терминах jquery, можно несколько через пробел
				mouseenter mouseleave click
			*/
		};

		options = $.extend(default_options, options);

		return this.each(function() {

			var tooltip_element = null;
			if (options.element)
				tooltip_element = options.element;
			else if (options.childElement)
				tooltip_element = $(this).find(options.childElement);
			else if (options._absolute)
				tooltip_element = $('<div style="position:absolute; display: none;"></div>').appendTo(this);
			else
				tooltip_element = $('<div style="position: relative; display: none;"><div style="position:absolute"></div></div>').appendTo(this);

			if (options.url && !options.loadEveryTime)
			{
				tooltip_element.load(options.url);
			}

			if (options.position)
			{
				//TODO: реализовать привязку тултипа к разным краям родительского элемента, типа "top", "bottom right" и т.п.
				/*
				var parent_width = $(this).width();
				var parent_height = $(this).height();

				var child_width = tooltip_element.children('div').width();
				var child_height = tooltip_element.children('div').height();
				*/

				switch (options.position)
				{
					default:
						if(options.x !=0 || options.y != 0)
						{
							tooltip_element.css({
								left: options.x?options.x + 'px':0,
								top: options.y?options.y + 'px':0
							});
						}
				}
			}

			if (options.events.show)
				$(this).bind(options.events.show, function(){
					if (! tooltip_element.is(':visible') ) {
						if (options.beforeShow)
							options.beforeShow();
						if (options.url && options.loadEveryTime)
						{
							tooltip_element.load(options.url, {}, function(){
								tooltip_element.fadeIn();
							});
						}
						else
						{
							var tooltip_text_element = options._absolute?tooltip_element:tooltip_element.children('div');
							if (options.html)
								tooltip_text_element.html(options.html);
							else if (options.text)
								tooltip_text_element.text(options.text);
							tooltip_element.fadeIn();
						}
						if (options.afterShow)
							options.afterShow();
					}

					return false;
				});

			if (options.events.hide)
				$(this).bind(options.events.hide, function(){

					if ( tooltip_element.is(':visible') ) {
						if (options.beforeHide)
							options.beforeHide();
						tooltip_element.hide();
						if (options.afterHide)
							options.afterHide();
					}

					return false;
				});

			if (options.events.toggle)
				$(this).bind(options.events.toggle, function(){

					if ( tooltip_element.is(':visible') ) {
						if (options.beforeHide)
							options.beforeHide();
						tooltip_element.hide();
						if (options.afterHide)
							options.afterHide();
					}
					else
					{
						if (options.beforeShow)
							options.beforeShow();
						if (options.url && options.loadEveryTime)
						{
							tooltip_element.load(options.url, {}, function(){
								tooltip_element.fadeIn();
							});
						}
						else
						{
							var tooltip_text_element = options._absolute?tooltip_element:tooltip_element.children('div');
							if (options.html)
								tooltip_text_element.html(options.html);
							else if (options.text)
								tooltip_text_element.text(options.text);
							tooltip_element.fadeIn();
						}
						if (options.afterShow)
							options.afterShow();
					}

					return false;

				});
		});
	}
});
