/*
paul sowden <paul@idontsmoke.co.uk> | http://idontsmoke.co.uk
*/

var tooltip = {	
	/* НАЧАЛО НАСТРОЕК */
	options: {
		name_attribute: "tooltip", // наименование создаваемого tooltip'ого атрибута
		link_blank: "(откроется в новом окне)", // текст для ссылок с target="_blank"
		mark_newline: "  ", // укажите пустую строку (""), если не хотите использовать в tooltip'ах многострочность;
		// если хотите, то укажите тот символ или символы, которые будут заменяться на перевод строки

		max_width: 500, // максимальная ширина tooltip'а в пикселах; обнулите это значение, если ширина должна быть нелимитирована
		delay: 300, // задержка при показе tooltip'а в миллисекундах

		tags: ["acronym"] // теги, у которых обрабатываем атрибут title
	},
	/* КОНЕЦ НАСТРОЕК */

	createEl: document.createElement("DIV"), // создаем "DIV"
	varTimeout: null,
	varPosition: false,
	canvas: document.getElementsByTagName(document.compatMode && document.compatMode == "CSS1Compat" ? "HTML" : "BODY")[0],

	varMouseMove: function (position)
	{
		if (tooltip.varPosition) // если varPosition существует..
		{
			var x = window.event ? event.clientX + tooltip.canvas.scrollLeft : position.pageX; // ..определяем положение всплывающего элемента по оси X
			var y = window.event ? event.clientY + tooltip.canvas.scrollTop : position.pageY; // ..определяем положение всплывающего элемента по оси Y
			tooltip.targeting(x, y); // передаем координаты функции targeting
		}
	},

	addDivCont: function()
	{
		// Добавляем атрибуты к созданнму div-у
		tooltip.createEl.setAttribute("id", "tooltip");
		
		// Поднимаем Div над другими объектами
		tooltip.createEl.style.zIndex =  "3";

		// Добавляем новый нод в тело
		document.body.appendChild(tooltip.createEl);

		var a = document.all && !window.opera ? document.all : document.getElementsByTagName("*");

		var l = a.length;

		for (var i = 0; i < l; i++)
		{
			//if (a[i] && tooltip.options.tags.in_array(a[i].tagName.toLowerCase()))
			if (a[i] && in_array(tooltip.options.tags, a[i].tagName.toLowerCase()))
			{
				var tooltip_title = a[i].getAttribute("title");
				if (tooltip_title && typeof tooltip_title != "string")
				{
					tooltip_title = "";
				}

				var tooltip_alt = a[i].getAttribute("alt");
				var tooltip_blank = a[i].getAttribute("target") && a[i].getAttribute("target") == "_blank" && tooltip.options.link_blank;

				if (tooltip_title || tooltip_blank)
				{
					a[i].setAttribute(tooltip.options.name_attribute, tooltip_blank ? (tooltip_title ? tooltip_title + " " + tooltip.options.link_blank : tooltip.options.link_blank) : tooltip_title);
					if (a[i].getAttribute(tooltip.options.name_attribute)){
						a[i].removeAttribute("title");
						if (tooltip_alt && a[i].complete) a[i].removeAttribute("alt");
						tooltip.l(a[i], "mouseover", tooltip.elementHandler);
						tooltip.l(a[i], "mouseout", tooltip.hidden);
					}
				}
				else if (tooltip_alt && a[i].complete)
				{
					a[i].setAttribute(tooltip.options.name_attribute, tooltip_alt);
					if (a[i].getAttribute(tooltip.options.name_attribute)){
						a[i].removeAttribute("alt");
						tooltip.l(a[i], "mouseover", tooltip.elementHandler);
						tooltip.l(a[i], "mouseout", tooltip.hidden);
					}
				}
			}
		}
		document.onmousemove = tooltip.varMouseMove;  //  запускаем сценарий обработки наведения мыши ны элемент
		window.onscroll = tooltip.hidden;
		tooltip.targeting(-99, -99);
	},

	textHandler: function(s){
		s = s.replace(/\&/g,"&amp;"); //
		s = s.replace(/\</g,"&lt;");
		s = s.replace(/\>/g,"&gt;");
		return s;
	},

	elementHandler: function(nameEl)
	{
		var d = window.event ? window.event.srcElement : nameEl.target;
		
		if (!d.getAttribute(tooltip.options.name_attribute))
		{
			return;
		}

		var s = d.getAttribute(tooltip.options.name_attribute);
		if (tooltip.options.mark_newline){
			var s = tooltip.textHandler(s);
			s = s.replace(eval("/" + tooltip.textHandler(tooltip.options.mark_newline) + "/g"), "<br />");
			tooltip.createEl.innerHTML = s + "<img style='position: absolute; top: 100%; left: 10px;' src='/admin/images/hvost.gif'>";
		}else{
			if (tooltip.createEl.firstChild) tooltip.createEl.removeChild(tooltip.createEl.firstChild);
			tooltip.createEl.appendChild(document.createTextNode(s));
		}
		tooltip.varTimeout = setTimeout("tooltip.createEl.style.visibility = 'visible'", tooltip.options.delay); // делаем элемент видимым по таймауту равному delay
		tooltip.varPosition = true;
	},

	hidden: function()
	{
		tooltip.createEl.style.visibility = "hidden";

		if (!tooltip.options.mark_newline && tooltip.createEl.firstChild)
		{
			tooltip.createEl.removeChild(tooltip.createEl.firstChild);
		}
		clearTimeout(tooltip.varTimeout); // убираем таймаут
		tooltip.varPosition = false;
		tooltip.targeting(-99, -99);
	},

	divStatusControl: function(key)
	{
		if(key.which == 13)
		{
			tooltip.createEl.style.visibility = "hidden";
			tooltip.addDivCont;
		}
	},

	l: function(o, e, a){
		if (o.addEventListener) o.addEventListener(e, a, false);
		else if (o.attachEvent) o.attachEvent("on" + e, a);
		else return null;
	},

	targeting: function(x, y){

		var w_width = tooltip.canvas.clientWidth ? tooltip.canvas.clientWidth + tooltip.canvas.scrollLeft : window.innerWidth + window.pageXOffset;
		var w_height = window.innerHeight ? window.innerHeight + window.pageYOffset : tooltip.canvas.clientHeight + tooltip.canvas.scrollTop;

		widthElement = tooltip.createEl.offsetWidth;
		heightElement = tooltip.createEl.offsetHeight;

		// если ширина блока подсказки больше минимального значени, ограничиваем по ширине
		tooltip.createEl.style.width = tooltip.options.max_width && widthElement > tooltip.options.max_width ? tooltip.options.max_width + "px" : "auto";

		tooltip.createEl.style.left = x -5 + "px"; // относительная позиция по оси X
		tooltip.createEl.style.top = y -(13 + heightElement) + "px"; // относительная позиция по оси Y
		
		// позиционируем созданный элемент
		if (x + widthElement > w_width) tooltip.createEl.style.left = w_width - widthElement + "px";
		if (y + heightElement > w_height) tooltip.createEl.style.top = w_height - heightElement + "px";
	}
}

in_array = function(array, value)
{
	var l = array.length;
	for (var i = 0; i < l; i++)
	{
		if (array[i] === value)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
};

var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;

if (root)
{
	if (root.addEventListener)
	{
		root.addEventListener("load", tooltip.addDivCont, false);
	}
	else if (root.attachEvent)
	{
		root.attachEvent("onload", tooltip.addDivCont);
	}

	root.onkeypress = tooltip.divStatusControl;
}